微信号:infoqchina

介绍:有内容的技术社区媒体

启蒙老师马士兵:编程语言哪家强?丨大咖说直播回顾

2017-04-23 09:00 马士兵
作者|马士兵

编辑|小智


戳阅读原文,获得短信提醒,不错过下次InfoQ大咖说直播!

回复:语言 ,获取视频下载。

写在前面

老师姓马,叫马士兵。中国象棋上那三个子,我们家老爷子喜欢下象棋,所以就起了这么一名,原名叫马兵帅,太大了,罩不住,所以后来改三小子,马士兵。马家门这个大家应该认识不少了,马化腾、马云,然后马明哲,将来应该还会去见我们的老祖宗,马克思。肯定会去见的。

我现在是在推网络的教学,看看能不能把这种面对面的高质量的教学放到网上去,让更多人能够听到吧。面对面的教学,相对来说,质量可能会高一些,因为老师会追着你学。网络的教学,在做一个探索,看看能不能做到更高的质量。当然,网络教学要比面对面的教学便宜很多。另外呢,只要有互联网,你就能学习,所以互联网教学也有它的好处,就是方便,我正在做这样一件事情。

谈谈热门编程语言

Tiobe2017年4月编程语言排行榜

本人搜索一些招聘网站整理出的编程语言需求排行

第一张图是老外的一个编程语言排行榜,时间节点是2017年4月。在老外这个排行榜里面,Java语言排第一,C排第二,C++排第三,C#第四。当我看到这个表的时候,我就非常奇怪。我觉得在这排名在中国不是这样的。所以我花了点时间搜出来一份数据,供大家参考。国内的语言需求排名,跟国外的还是有不同。

这个排名,我从下往上跟大家慢慢聊一聊。聊聊每种语言都是做什么的。可能有很多人只掌握了一门语言,还有一些是学生,不知道未来发展方向。所以在这里跟大家聊聊这些语言都是针对哪些开发方向。

先从占有率比较低的来说。现在呢,有不少同学问我一些比较小众化的语言,说老师我到底值不值得去学习它,我要花多大的精力去学习。小众语言现在非常多,都有一些在特别场合的用处。我在这里罗列了几种常见的小众化语言。F#是微软推出来的一种脚本的语言,运行在.Net上的,R语言主要是用在数据分析上的,Go应该说有个好爹,Google推出的,一门很不错的语言,现在推了五年了,一直也没有推的特别好,最多是运用在游戏的脚本语言上。Scala最著名的就是它开发了Spark,但是大家用Spark做开发的时候,Python用的反而比Spark多,Lua这个语言多数情况是用在游戏脚本开发上,Ruby是用在脚本和Web上。

这些语言的市场占有率实际上非常低。如果你以前没有接触过开发语言,用这些语言做入门,不太合适。因为只靠这些语言,你是拿不到offer的。

汇编语言占有率高一些,用于直接控制硬件的开发,就是平时所说的单片机方向。每种芯片想要效率最高,就只有编写汇编程序,所以,如果你不愿跟人打交道,只是跟机器打交道,这门语言可以考虑。

Objective-C是在苹果平台上的开发语言。Swift是苹果新推出的语言,类似于C#和Java,将来是主要在苹果平台上开发语言用,它的岗位是537个。但是我觉得这个数据不太对。所以我又重新搜了一下iOS的岗位,它是11000,这个可能还算是比较正常的一个数据。iOS这几年大家也清楚,市场占有率持续不断的下降,岗位饱和。将来被Android的冲击,有可能会越来越大。

Android最近,就我掌握的数据来说,在北京一抓一大把。想找一份特别好的工作的话,第一,你的基础得非常的过硬。如果再指望象前几年那样,稍微会一点就走进这个行业,不太现实。并不是所有的企业都需要一个移动端,但是所有的企业都需要后台,所以它这个好多企业都需要网页、前端,需要数据库,需要这些东西,但是并不是所有的企业都需要有这样一个移动端的客户端,这个需求量慢慢的有点饱和。

还有一个,移动游戏开发这个行业,我也特别感兴趣。这个行业比较特殊,特别适合程序员创业。程序员毕生的事业,就是找一个美工做老婆。找到美工做老婆,有程序,再加上优秀的美工,就可以直接做一款小游戏了。游戏这个行业有个特点就是,比较适合年轻人。超过四十岁,还在做游戏开发的,还真是很少,甚至三十五岁以上还在做游戏开发的不是特别多。假如你个性比较稳定,我还是建议你找一份比较稳当的职业。然后以游戏、游戏开发作为你的业余爱好。

说不定哪一天你就弄出一个糖果传奇或者是保卫萝卜这一类的小游戏,你就创业成功了。糖果传奇一年的营业额大概在几个亿人民币左右。对,就那么一个简单的小游戏。很多小公司,都是从游戏公司起来的,比如昆仑万维。它跟国内的游戏走了一条不同的道路:它竞争不过国内的一些大公司,像王者荣耀这样的游戏,然后它选择了走周边,日韩、东南亚,它的市场在那边。现在它做的很好,也已经上市了,有几百个亿,非常厉害。

Python也是一个大神级语言,感觉现在没有它做不了的事情。最近很多人问的特别多,说老师Python值不值的学?要花多大的精力?这么说,从老外的这个调查来看,Python在国外占有率跟去年相比,反而稍有下降。Python它有这么几个用处:第一种是作为非专业人士的首选编程语言。

Python还有一种,就是它现在跟大数据结合的特别紧密,很多大数据类的框架,不管它是用什么语言开发的,提供的接口用Python的也非常多。Python还有一点,就是在运维这个方向,自动化的运维,Linux写自动化运维的脚本语言。国内来讲,它的招聘量也不小。这几个城市加起来一万多岗位。大家不要认为是一万多个人呀,是一万多个岗位,每个岗位可能有好几十号,或者至少是几个人。

再就是C#语言。实际上C#能做的事情很多,它能开发桌面程序,也可以开发Web端后台。它能干的事情跟Java也差不多,但是它为什么不如java工作机会多呢?原因就是它大多数情况下只能运行在微软平台。不过现在微软也在Linux上发力,微软在Linux上做了一个能够让C#跑起来的运行环境,将来能推成什么样,个人并不是很看好。

所以C#呢,中小型网站,以Windows作为服务器的,这是它的方向。还有就是Windows桌面方向,要求运行效率不是特别高的,也可以做。除此之外,还有一个方向,对C#的助力也很大,就是最近比较热的VR/AR虚拟现实,虚拟现实方面有一个特别流行的引擎,叫Unity3D。在Unity3D这个平台上,它用的脚本语言就是C#,所以这个对它的助力也很大。

JavaScript是排第五的,它在Tiobe的排名,是排在第七。JavaScript也是神级语言,从某种角度上来讲,JavaScript真的不好学,如果你初学者刚接触编程,要学JavaScript的话,你会发现语法很乱,很繁琐,也不一致,它学起来并不好学。但是就是这么一门语言,这些年发展的速度非常快。大家都知道,现在有一个著名的岗位叫前端工程师,前端工程师只要会三门语言就够了。第一,HTML,第二CSS,第三就是JavaScript。

只有这三种语言,如果前端的整个难度是一百的话,那么HTML加上CSS这个难度也超不过5,剩下的难度都在javascript这个语言,由于Web最近发展比较猛。这个语言出来后,很多的这个Web端也可以直接放在移动端。所以,你会前端H5加上CSS,再加上JavaScript,你除了可以开发网页之外,你还可以开发移动端,还可以开发微信。

说起全栈来呢,以前,要是想会CSS加上JavaScript,想做全栈的话,还得会一门后台语言,比如说PHP或者C#,或者是Java。但是,现在某一位大神开发出了Node.js,语言就是JavaScript,所以现在做全栈工程师,是前后台通吃,你只要会JavaScript就够了。它现在抢了很多属于PHP的工作。因为PHP主要是做中小型网站的后台。

现在JavaScript可以做了。会JavaScript的又特别多,所以这一部分人现在发现自己可以做全栈了。这就比较好玩了。Node.js本身是C++开发的。网易就有专门做网页游戏的一个引擎,就是用Node.js做开发的,而且性能是相当的不错。这是JavaScript,我是持续的看好它,但是它要是想跑到前三名去也不容易。

你觉得最好的,并不是适合所有人。同样的,语言也一样。在某种特定的问题之下,咱们得说解决什么问题。你解决驱动的问题,你只能是会汇编和C语言,你解决后台的问题用汇编肯定就不合适了。相当于拿一个小剃刀盖一栋大楼房。不合适。所以没有最好的语言,只有最合适的语言。

拿PHP来说,它最合适是做什么呢?它最合适是建中小型网站的后台。PHP本身有好多现成的库,如果你对它熟悉的话,你要想搭建一个自己的个人网站,或者搭建一个中小型的网站,那你根本连代码都不用敲,直接拿来装好,就可以用了。除此之外呢,如果你PHP控制的特别好,你也可以做一些稍微大些的网站。因为学PHP的人也在学架构师,架构师这个你把架构给搭好了,PHP也可以撑起来很大一个流量。不过,如果你要大量、超大量的数据做分析,这个PHP就可能胜任不了了。所以多数情况下,它主要是用在中小型网站上。

前三名是C、C++、Java。老外的排名是C语言排第二的。我给大家搜出来的C和C++,岗位是差不多的。C++呢,也就是比C多七百个左右的岗位,毛毛雨。C语言是经久不衰的语言,这么多年了,大家都一直在用,而且一直稳定的排在前三。它和硬件离得特别近,但是又不像汇编那样只能依附在某个芯片上不能移植。C语言,如果你在不同的平台上编译,你是可以移植的。C语言的执行效率非常高,Linux下大多数的系统程序都是它来开发,Linux的内核本身也是用C来做开发。所以呢,它经久不衰,它和硬件结合比较紧密,要求比较高的时候,是必须需要C语言的。

再往上就是C++语言,C++要求效率比较高,而且是面向对象,往往是开发别的语言的那种平台,比如我们刚才所说的Node.js。Linux底下的很多应用程序,也是C++开发的。C++工作岗位也不少,薪水待遇也还不错。这个东西前景还是不错。C++还可以用于游戏编程,大家千万不要认为你C++上去之后,是写小人该往哪个方向移动什么的。它可能是在做背后的算法上的一些支撑,做碰撞的检测,做一些图形的引擎,它主要是做这个的。那些朝哪些方面动啊,说哪些话啊,是脚本语言,像Go、Lua啊。

Java语言经历过一次低谷。在SUN运营的时候,有一年是降到第二位,大概是百分之八,。后来,Sun被Oracle收购,Java随之起来。再后来,Android助力Java,Android手机特别多;还有就是大数据的流行,现在有很多类库、平台都是Java做的开发。Java在后来也在不断的进行更新。Java又从Python里借鉴了很多新特性,Lambda表达式、函数,都是从Python里面抄的。在不断进步,Java9里面增加了模块化,是从osgi里面抄过来的。

另外,这门语言有一个特点,它不是特别难,没有像C++语法那样繁琐。也不是说特别容易,不像某些语言那样不知道原理就可以用,比如说Python。所以大学里面开始拿Java做入门语言了,推助了它的增长。还有,Java现成的类库越来越多。最高的时候能达到20%的占有率,基本上相当于排名第二的两倍。从现在来看,我个人预测,Java语言十年之内,不太会过时。虽然语法上Go、Python可能比它更优雅,不过现成的类库一定是没有这么多的。

语言没有最好的,只有最合适的。所以你遇到问题的时候不要去想哪种语言更完美,而应该去想哪种语言更合适。在很多时候,你开发的平台和系统,可能是需要几种语言来完成,你要找到最合适的语言。

大家也不要养成互相鄙视的习惯,学Java的就鄙视学Javascript的,说不就是个脚本语言嘛,不要这样,写C++就看不起写批处理的,请大家记住,找到最合适的语言,开发适合市场的产品,那个才是高手,跟你用什么语言,关系不大。

怎么样学好编程?简单说,就是“敲打”和“调教”。理论不应该讲那么多,很多理论的东西你“敲着敲着”就敲明白了。好多时候,编程的某个理论不理解,把代码一敲,敲着敲着就理解了,少想多动作,使劲敲代码。大量的“敲打”,把代码敲出来,大量的“调校”,调试和校正,程序就学会了,除此之外,没有捷径。学武术,你不练拳,能学会吗?学烹调,你不下厨,能学会吗?同样的,学编程,你不写代码,怎么可能学的会。

说说软件开发岗位的情况

软件开发岗位非常多,不过,在中国来讲,很多中小型公司都是把很多岗位合二为一的。每年都会有很多很多的程序员涌进这个里头来,计算机专业的本身就很多,再加上非计算机转过来的就很多。

很多人都会遇到职业发展瓶颈,作为一名程序员,做到一定年龄之后,该怎么发展。虽然有这么多人进来,但是我认识的很多人都找到了不错的岗位。大家想过没有,老的程序员长到一定年龄后,居然也能有出路。这是为什么呢?因为行业还处于缺口。程序员这个行业,在各行各业都已经离不开了。原来不养程序员的公司,现在也有那么一两个程序员在那里维护着自己的一些小小的系统。这个行业在全球来讲,还在不断膨胀。所以,趁着行业的膨胀期,这个时候入行还是比较好的。

有同学问,我以后是走管理岗位,还是走技术岗位。大家要记得,我们现在掌握的技术叫工程技术,这技术不是你发明的,不是你研究的,如果说你哪天特别牛,自己去研究和发明新的算法,那你可以不用管任何事情,专心搞你的研究。但是我们的工程技术,你会,别人也会,你的发展请不要一条腿走路,越往后越应该注意管理和沟通这方面。

最近技术热点有哪些?

目前非常热的热点就是大数据。大数据也就跟前几年的那种前端的泡沫期,还有移动端的泡沫期一样,现在正处在大数据的泡沫期,你赶上这一段时间上车,很可能会拿到 一份很不错的工作,拿到一份很不错的薪水。但是大数据的门槛呢并不低。现在大数据,分三种工作岗位。第一种叫大数据的开发工程师。如果说简单说他的技术架构,就是hdfs,map/reduce,再加上Spark,其实已经足以应付了。很多人把大数据想的特别复杂,真的没有那么复杂。

大数据在很多情况下,它比那个JavaEE,反而显得简单一些,因为它的编程接口比较简单,JavaEE非常的繁琐,需要你掌握特别多,所以你学完JavaSE,已经可以搞大数据了,大家千万不要认为,一定要学完JavaWeb、JavaEE,学了架构师你才能搞大数据,这是很多人的一个误导。

这个岗位要求并不高,但是目前的薪水还真不低。所以你可以趁着这个泡沫期进到这个行业的,去拿一份不错的薪水。但是你记着,某种东西如果它非常简单的情况下,是不可能维持一个长期的高薪水的。大数据的开发工程师真的不是特别难的一个工作,你要想进的话,抓紧时间进。

第二个,大数据的还有一个叫做数据分析师,数据分析师这一块,跟编程或者是软件开发这方面,联系并不是特别深。它更多的联系,是跟你的业务逻辑,还有你要有一定的统计学的知识来做这方面的工作。举个最简单的例子,比如说像艺龙、携程,有一大堆的数据,那么可以从这对数据里面分析,分析什么东西出来呢。分析出来什么地方的人,在什么时间,更喜欢外出,然后可以针对专门针对他们推广告。

这种东西是和业务在一起的,你得有这方面的数据,然后熟悉这方面的业务,在里面挖掘出东西来,提供给管理层做决策支撑。在这个数据分析师里面,他需要掌握统计学的知识,这是第一个,第二个你可以掌握一些简单的编程语言,你比如说Python,或者说R语言,就足以了,当然这个薪水也不会是说非常的高,但是现在泡沫期也还是可以的。

第三个最高的也就是目前最热的热点,那就是人工智能。人工智能这块,一定是未来几十年的热点,薪水也是非常的高,但是,这块基础的要求是非常的高,所以这么说人工智能这个行业来说它更多的要求不是编程技能,而是数学技能。所以对归根结底是学会数理化,最后什么才不怕。人工智能这块对数学要求相当高,你的高等数学要好,比如微积分、数理统计、线性代数、机器学习的各种算法等等。

面试技巧和培训班的事儿

在面试上,很多人面着面着成面霸,很多人也是面着面着成面瓜。

以前有同学问我是进小公司还是进大公司,大家记住了,如果有机会,一定是大公司。哪怕你在大公司做一个螺丝钉,做不下去的时候,你可以考虑跳出来的到小公司。大公司给你做背书你的身价会涨很多。

当然进大公司的机会也不是特别的多。一般有两个机会:第一个是校招的时候,校招的时候,想进大公司,如BAT、华为。这个时候你需要把算法搞的特别透彻,加强算法的研究。所以在学校的同学请你加强算法研究。另外一个机会,是大概在你工作三年的时候,有一个社招。如果在这个时候你要是进不了大公司,那恐怕你这辈子再难有其他的机会,除非你正好赶上泡沫期。因为本身大公司进去的人,培养起来已经够用了。

有一个现象,比如说有一个人,说我有十年的工作经验了,但从技术上,他其实就停留在了三到五年的水平,你可以自己回顾一下,你现在的技术水平和你五年的时候工作水平,其实真的差不多。后面积累的技能,多是沟通的管理的这方面的软技能,所有说多少经验值多少钱,这件事真的很难说,你得看你这些经验是干嘛的。

很多同学问到另一个方向,就是说进外包的。一句话:走投无路进外包,能有路走就尽量的不进外包。原因是什么,外包,没有一个连续性。比如这一次外包你的是一个金融行业,下一个又是其他行业。无论你的人脉,业务、技能等都没有一个连续性。所以,哪怕钱少一点,能不进外包的尽量不进。当然很多的情况,你刚开始刚毕业想找一份工作搞IT,没有其他机会,那么该进还是要进去, 没有什么东西是绝对的。

我以前有个同事,就是开个玩笑了,靠颜值进去的。会的真不多,只会一门叫做SPSS的语言,但是一个月就逼她,你不会你就走人,但是一个月后她就会C++了,是很难的一门语言,C++很难,Windows的C++,VC++更难。人在逆境之下迸发出来的那个力量,十分不可想象。你有50,但是你奔100去,哪怕最后得到结果是八十,你也赚到了。很多时候,很多人是不敢做这件事,不敢迈出这一步。这时你就错失很多机会找工作的心态上很重要。其他的还有很多,感兴趣的话你可以找工作多练。

我个人搞培训有一些想说的。我一直在想,培训有没有可能是,高质量的培训,能不能做到免费。但是说实话,不交钱的东西人就不会好好去珍惜。他不珍惜,给他再好的东西,他都不会去珍惜,天下没有免费的午餐。现在我们在网络上的课程肯定要比面对面的培训要便宜的多,人呢,是认真做事,钱就来了啊。我个人觉得,很多人的工作状态是不太对的。工作态度上,当你不计回报的时候,回报就来了。

今日荐文

点击下方图片即可阅读

技术转管理可能遇到的 3 大挑战及解决方案



 
InfoQ 更多文章 崔宝秋:让自己写的代码跑在每个人的电脑上 | 二叉树短视频 技术转管理可能遇到的 3 大挑战及解决方案 去哪儿网机票搜索系统的高并发架构设计 Q新闻丨百度宣布将开源自动驾驶技术;Java EE 8最终发布时间确定;F8大会:AR、VR、AI一个不落 怎样靠一篇文章同时了解技术趋势、职业成长和实践细节?
猜您喜欢 ReactNative For Android 项目实战总结 1024 程序员不寂寞,你想要的我们都懂… Redis内部数据结构详解(1)——dict [杂谈] 为什么卖产品的比做产品的挣得多 2016 上海 GOPS 大会 SRE 图书签售