我应该从哪一门编程语言上车?

XHZLawerenc 8年前
   <p style="text-align: center;"><img src="https://simg.open-open.com/show/253e1720d532eff09cf431228e97c11d.jpg"></p>    <p>很多人的代码之路可能从某个Google搜索开始,譬如 如何学习xxx ,不过又该决定从哪个语言开始这一段旅程呢?如果你问身边朋友的建议,可能会听到这些建议:</p>    <ul>     <li> <p>硅谷里的小伙伴经常调笑Java,我觉得我可以先学这个。</p> </li>     <li> <p>Haskell,现在这么热,肯定要学这个。</p> </li>     <li> <p>Go语言的Logo好可爱。</p> </li>    </ul>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/5b94d1cff02c2587e9ff5c2aae180696.png"></p>    <p>不过还有很多人估计会选择直接搜索,我应该学习啥语言呢?我们的思考过程可以总结在下面这张图中:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/0716e041ab29b3a78d40bd70831cba2c.png"></p>    <p>这个过程真的是纠结而又快乐,估计如果是强迫症的处女座会更痛苦。从我的角度来看,我们考虑学哪一门语言应该从以下几个方面进行考虑:</p>    <ul>     <li> <p>这门语言的市场需求量如何</p> </li>     <li> <p>这门语言的未来前景如何</p> </li>     <li> <p>这门语言是否容易上手</p> </li>     <li> <p>你计划用这门语言构建如何的项目</p> </li>    </ul>    <p>编程语言的这片红海也是英雄辈出,每年都会有新的编程语言出现,我们先来看一幅漫画:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/1b085e08224709dfce6df133c1189692.png"></p>    <p>当我们现在考虑应该选择哪一门入门语言时,我们也要来看看这些年里别人的选择,下图是12年里各个语言的搜索量排行:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/007591d0d57cb958b16d5fd0d83c1e93.png"></p>    <p>Java本身有其优势与劣势,而Python正在逐步成长为最受欢迎的选择之一。不过这两年随着Web技术的迅猛发展,JavaScript正成为日益受欢迎的选择之一。在正式阐述之前,我首先澄清一下:</p>    <ul>     <li> <p>我并不想引起圣战,并没有强调哪一门语言就比其他的好</p> </li>     <li> <p>我认为每个人不应该拘泥于某一门语言</p> </li>     <li> <p>我推荐才入门的同学可以从JavaScript开始</p> </li>    </ul>    <p>现在我们来看看学校里是怎么教编程语言的。</p>    <h2><strong>Computer Science 101</strong></h2>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/9f7219c908428f365dd41d467f8a4f49.png"></p>    <p>大学里经常在计算机科学与技术的系列课程中开设某一门编程课,并且常常看做数学或者电子课程的扩展。估计你也经常会听到如下的论述:计算机科学与技术的课程并不能让你成为编程大拿,就像刷墙的并不能成为美术大师一样。而在2016年里,还是有很多大学像教数学一样教授计算机科学与技术。在这种背景下,很多编程入门级的课程都关注与C这样的底层抽象语言,或者专注于数学的类似于MATLAB这样的语言。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/72b8b8a497c6ee36b1b6e48600d19b2e.png"></p>    <p>上图就是TIOBE对于编程流行度的排行榜,而在2014年里Python逐步代替Java成为最广泛的美国计算机科学与技术语言:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/9f04863f5d86e7671fbd1728073d9c7a.png"></p>    <p>而如果我们专注于工程应用领域的语言流行度,则有些不同:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/70f544cfdbc8b20817586461b85a19a0.png"></p>    <p>超过一半的开发者在使用JavaScript,JavaScript的浪潮从前端开始逐步席卷到后端,并且逐步发展到游戏开发与物联网等领域。而对于JavaScript开发者需求量也仅次于Java:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/12571a697bddcb43dae65683f4901ce4.png"></p>    <p>在过去的两年中,超过5000名开发者在Free Code Camp的帮助下寻找到了合适的开发工作。我并不是因为我本身负责教授JavaScript就去推广它,而是因为JavaScript是最易于找到第一份工作的语言所以我选择去教授他。</p>    <h2><strong>Factor #1:The Job Market</strong></h2>    <p>如果你是完全处于个人的兴趣爱好而学习编程,那么你可以跳过本节。不过 <a href="/misc/goto?guid=4959723913410137429" rel="nofollow,noindex">绝大部分</a> 学习编程的人都希望能够获得一份不错的工作。就像我早前提及的,Java是目前看来最受雇主欢迎的语言,而JavaScript紧随其后。不过这其中有个很大的因素就是Java已经流行了20多年,很大一部分岗位来源于对于旧系统的维护需求。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/9c41ce733e6863bbbc060fb4fa7c44f4.png"></p>    <p>从上图可以看出现在大概2.7个Java开发者竞争一个岗位,而PHP与iOS差不多是两个人竞争一个岗位。</p>    <h2><strong>Factor #2:The long term prospects</strong></h2>    <p>差不多现在开源项目中,每个JavaScript项目的Pull Request请求数是Java、Python、Ruby平均数的两倍,从这一点看来,JavaScript比其他任何的流行语言都要发展迅速。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/0daf904311d29fb09c87d28fed998190.png"></p>    <p>而JavaScript生态圈也不断受益于来自Google、Microsoft、非死book以及Netflix等公司的投资,譬如JavaScript生态圈中的著名的静态扩展TypeScript有超过100位的开源贡献者,其中很多都是来自于Microsoft或者Google的雇员。目前收购了Sun的Oracle也在寻求利用这种社区参与度扩大Java的影响力。</p>    <h2><strong>Factor #3:Difficulty To Learn</strong></h2>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/6d871c760e990a060af1a49d75f5689a.png"></p>    <p>估计大部分开发者都同意相对高层的脚本式语言相对易于学习,JavaScript、Python以及Ruby就是属于这个范畴。虽然不少学校在教Java或者C++,不过它们是真的不容易学啊。</p>    <h2><strong>Factor #4:Projects you can build with it</strong></h2>    <p>这一点正是JavaScript耀眼之处,JavaScript可以运行在任何支持浏览器的设备上,你可以用JavaScript构建任何应用,然后随处分享。正如Stack Overflow的合伙人Jeff Atwood所说:所有能够用JavaScript实现的应用最终都会转到JavaScript中。Java曾经也是主打一次编译,到处运行,估计你还记得 Java Applets ,近两年才被Oracle去掉这一特性。而Python也面临同样的问题,这里我们列举几个好玩的用JavaScript构建的游戏:</p>    <p><a href="/misc/goto?guid=4959723913498257495" rel="nofollow,noindex">1970s style Simon game</a></p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/75108a34fc78a4f19cdf3618c74e35d2.png"></p>    <ul>     <li style="text-align: center;"> <p style="text-align: left;"><a href="/misc/goto?guid=4959723913585607096" rel="nofollow,noindex">Conway’s Game of Life</a></p> <img src="https://simg.open-open.com/show/a7781cc96faed948a582653451ed9bfd.png"></li>     <li style="text-align: center;"> <p style="text-align: left;"><a href="/misc/goto?guid=4959723913680924213" rel="nofollow,noindex">Star Wars-themed Wikipedia Search</a></p> <img src="https://simg.open-open.com/show/3a4c20345679ca1675c53695994a724e.png"></li>     <li style="text-align: center;"> <p style="text-align: left;"><a href="/misc/goto?guid=4959723913765219854" rel="nofollow,noindex">A roguelike dungeon crawler game</a></p> <img src="https://simg.open-open.com/show/31078e32ffd07cf139d2e7335ae1564d.png"></li>    </ul>    <h2><strong>Objection #1:JavaScript不是运行的很慢吗?</strong></h2>    <p>JavaScript其实是一个非常高效的语言,NodeJS本身是比Python、Ruby以及PHP要快的,它也近似于C++、Java以及Go这些编译语言。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/539a5fe718a24a64df286c97b5660fac.png"></p>    <h2><strong>Objection #2:But JavaScript isn't statically typed</strong></h2>    <p>类似于Python或者Ruby,JavaScript同样是一门动态类型语言,很方便,不过很容易引起动态类型转化与验证的问题。譬如我以为我操作的是一个数组:</p>    <pre>  exampleArray = [1, 2]  -> [1, 2]  exampleArray.length  -> 2</pre>    <p>然后如果一不小心转化为了字符串,那就糟了:</p>    <pre>  exampleArray = “text”  -> “text”  exampleArray.length  -> 4</pre>    <h2><strong>Objection #3:我打算写个移动应用来着</strong></h2>    <p>Angular Cordova 与 React Native 都是不错的选择。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/8ec8f8dc89d39aa6a7aeb384a5a53a99.jpg"></p>    <p> </p>    <p>来自:https://segmentfault.com/a/1190000007398287</p>    <p> </p>