大数据

新手如何选择开发语言?

开发语言

开发语言很重要!!!

在我还是小白的时候,经常听公司里老鸟们叨叨各种开发语言,最后几个老鸟总会把话题落在 “讨论这个没意义,开发语言不重要,最重要的是逻辑”,然而10年的开发经历让我觉得,开发语言对于一个程序员来说非常重要,甚至可能会左右一个程序员的职业规划。

“开发语言不重要”这句话,也许应该换个方式理解为“每种语言都各有特点,各得其所”。因此,不同的语言确实不太适合在某一个特点上进行比较。

比如动态语言Javascript,PHP、Python 用来与语言Java、C++、Golang进行比较性能、开发效率都是不公平的。

关于静态语言与动态语言

动态语言被发明出来本来就是为了提高开发效率,降低学习门槛,让更多的人能够最快的掌握并使用它们;为了降低难度,动态语言通常都使用解释器执行动态语言,牺牲了性能。

我认识的支持动态语言的人中绝大部分都深信计算机的发展会让语言对性能的影响变得微乎其微,而开发效率和难易程度直接影响产品投入市场的时机以及团队成员相互配合的深度,开发语言设计出来本就是为了提高开发效率、降低开发门槛,如果一味注重性能何不直接使用汇编语言?

支持静态语言的人则认为,静态语言不仅效率高,而且结构非常规范,便于调试,类型安全更有利于保障运行时的稳定性;目前大部分静态语言的语法已经非常简单易用,搭配合适的IDE开发效率并不比动态语言差;静态语言运行效率更高,更高的效率能够提高软件工作瓶颈,在互联网软件高频、高并行的需求下,任何性能的优势都能带来极大的好处。

相信我,很多关于语言的争论在程序员中间非常激烈,甚至有一些社区里关于开发语言的争论已经接近狂热的宗教偏见,本文只是以动态语言和静态语言举例,现实中很多关于语言的争论是间于某一种语言与其他语言的,所以实际情况复杂很多,如果你是一名新手,并且很不幸的看到了这些争论,可能会让你陷入迷茫。

新手如何选择第一门开发语言

首先,从我自己的经验以及身边认识的程序员的真实情况来看,从事软件开发只掌握一门开发语言是不可能的;绝大多数程序员至少学过3种开发语言,不过肯定有1种比其他的掌握得更深入更精通。

在有经验的程序员眼里,不同的语言就如同木匠手中不同的工具,在项目中的不同部分使用最适合的工具。

对于新手而言,可能这有一些困难,不可能在短时期内掌握太多语言,并且也不推荐新手这样做。更好的方法是先学习一门自己最容易学习的语言。

找到“最容易学习”语言最常见的方法是看看身边的程序员(可能是你的朋友、同事、前辈、学长)他在用什么语言。

对于新手而言,语言的学习是一个辛苦的过程,从一无所知到成为高手需要长时间的练习,如果身边有一个有经验的前辈,他可能会让你学习起来少走很多弯路,并且你可以从他身上很清楚的看到你学习这门语言后能够做什么,即便在你还什么都写不出来的阶段。

有一种情况是你身边有足够多的选择,这时,对于新手最好可以先从一门动态语言开始你的程序员人生。

前面说过,动态语言的好处就是入门门槛低,学习速度快。很多人还在学习阶段可能就打退堂鼓了,选择动态语言可以花尽量少的时间体会到开发的乐趣,更快的知道用计算机语言编写程序是什么滋味,或者让你更快的胜任一个工作岗位。

所以:

  1. 看看身边的朋友、同事、前辈在用什么语言,跟他学
  2. 如果他们使用的语言中有动态语言(例如JavaScript、Python、Lisp、PHP),那么试试先从这些语言学起。

看到这里,也许你会觉得我要说的是新手选择语言“从身边人着手、从动态语言着手”,主要与个人际遇相关,语言本身根本不重要。

别误会,我的观点依然是“语言很重要”

想当寿司师傅,至少得先吃几顿日本料理吧;想当赛车手至少得先开过几次车吧;在开始你的程序生涯前,至少能写点代码运行起来吧。(大多数程序员心中埋下的那颗种子都是从一句简单的脚本开始的,或则一个指令,甚至是游戏里的指令,比如 show me the money, black sheep wall

开发语言如何影响程序员的?

说说我的个人经历。

在我学会第一门语言:ASP(当时挺流行),并开始用它做一些有兴趣的事情后,它渐渐的不再满足我的需要,当时的我想学会一门能够开发桌面应用的语言(ASP是专门用来开发动态网页的脚本语言),于是学习了C#,之后微软推出.Net框架,C#可以同时开发ASP.net这样的Web应用,又可以开发Windows环境下的桌面应用和服务端控制台程序,这让我非常满足,当时的我沉浸在C#给我带来的好处。大概5年之后,由于工作的原因,我手上负责的项目客户要求在Linux服务器上运行。当时我并不愿意,Windows服务器虽然饱受诟病,但是我能够熟练的配置和使用,可以节省很多时间,而且我很讨厌面对Linux服务器黑黑的终端界面,不过如果项目能够运行在Linux服务器上不仅可以大大提高中标机率,客户还愿意为之付出更多的报酬。

我不得不学习Java,并用它完成了那个项目,逐渐的我发现,Java也非常不错,虽然没有C#那么多微软预设好的解决方案,需要依赖很多第三方的包;刚开始花费不少时间去掌握这些第三方的包并学会搭配它们,但是也正是因为Java生态环境,让我逐渐的喜欢上了它。然而之后的事情改变了我之前接近7年对软件开发的理解。

我不再迷信于某一种开发语言,慢慢的我有意识的去学习在不同领域表现优秀的语言,C++、JavaScript、PHP、Lua、Python、Lisp、Golang、Rust、Swift,有的深入,有的浅尝,每一种语言的存在都是有道理的。

语言的适用性并不是说哪些语言擅长哪类项目,当今开发语言的发展来看,很多开发语言的功能是交叉的,例如原先只用来做Web前端脚本的JavaScript现在可以通过Node.JS开发服务端软件、桌面软件,也可以通过Hybrid或React Native开发手机应用;Python随着版本的不断更新,开发大型服务端程序案例也越来越多;C#将能够运行在Linux操作系统上(6年前如果能的话,如今可能我不会写这篇文章)、Swift同样也可以开发服务端软件而不只是IOS软件;各种开发语言都不甘落后,进化自己使其可以做更多的事情。

那么,开发语言的选择在今天已经不仅是根据你要开发什么项目,而可能需要考虑更多的因素。

  • 团队成员擅长什么?
  • 你所在的城市哪种开发人员更好找?
  • 你的团队希望吸收的精英擅长什么语言?
  • 你想购买的云服务支持哪些语言
  • 你所从事的领域的最著名的开源项目使用的哪种语言?

包括但不限于以上因素都可能是如今你考虑学习、使用第二门开发语言的因素,不再是仅仅讨论哪门语言擅长做什么这么简单了。

选择多不等于不重要

是的,现在新手也成为一名程序员可以选择的开发语言比过去多多了,而且每一门开发语言都很优秀,正因为如此,开发语言的选择比过去更加重要,需要考虑更多因素。