和年轻程序员聊成长

1. 序言  

随着科技的不断发展,数字电子设备数量迅猛增长,这些设备里面一般都运行着程序员们写的代码,因此,代码正在改变这个世界。还记得七牛云存储CEO许式伟在极客时间的视频里说过一句话,大意是:20年后如果你不会编程,那你可能和今天的文盲无异。20年后的实际情况我们无法预见,不过据调查统计,越来越多的年轻人加入程序员大军却是不争的事实。

掐指一算,我从写第一行代码到今天,已经十几个年头了,虽然没有做出什么惊动天地的成绩,但每每俯首沉思,感概良多。因为是正规科班出身,我自己的程序员之路不能说坎坷,但是也多多少少走了一些弯路,而另一方面,我也做了一些正确的事情或选择,忆苦思甜,喜忧参半。在这年终将至之际,我想和年轻程序员们聊聊成长,希望对刚上路的你们有所启发。

2. 善用工具

刚开始进入软件行业时,如果你只是学习一些原理不动手实践,可能没有直观上的认识,觉得还是云里雾里,可能渐渐失去学习的乐趣。这时候可能需要一些能快速让你看到学习成果的工具,因此,对于入门的程序员,有时候进行一些GUI编程还是不错的,这让你对自己的学习成果有更直观的认识,激起更强的学习欲望。这里说的偏向于学习方法,即懂得在学习中使用相应的工具来帮助自己理解和进步。

下面要说的真正是善用工具的例子。我曾经看到过一些开发人员,领导给一大堆Excel表,要求将里面的数据导入到MySQL数据库,他就打开数据库表,拷贝Excel表里的数据一行一行的插入到数据库表中。如果数据量不大,这样做没什么问题,数据量很大的情况下,可能需要一个月才能完成。如果是你接到这个任务,评估手动工作量之后,你应该马上想到要采用自动化来实现数据插入了。可以将Excel表数据转换成CSV格式,然后写个脚本,结合awk、sed这些Linux下的工具进行文本分割替换,然后调用MySQL相关命令执行SQL语句将数据插入到数据库。这个脚本估计数小时就调试好了,然后脚本自动将数据导入数据库,你可以边喝咖啡边查看数据导入情况了。一个月手工能完成的工作,你把它自动化,不到一天时间就搞定,大大提高工作效率,老板不赏识你都难。因此,工作中我们应该牢记:善用工具,解放劳动力!

3. 深究原理

计算机科学发展至今这么多年,很多原理性的东西其实一直没有太多变化,本质上的突破其实不是那么多。CPU架构、操作系统原理,这些东西虽然也一直在演化和进步,但如果你曾经深入理解过它们的原理,即使很多年没有继续进行这方面的学习,你所理解的这些底层原理对你来说也是够用的,当然,我指的主要是进行应用层开发的程序员,如果你是内核开发人员,那会有些不一样。而更上层的东西,比如编程框架、程序类库,这些东西的变化相对快很多,今天还没学会这个,明天那个又出来了,搞得我们程序员迷茫在疲于奔命中。

作为程序员,我们会使用一些新技术来完成工作任务固然重要,但技术的选择多种多样,形式也是变化多端,而这些技术的底层原理往往是相同的。好比如你使用不同的JavaScript库,它们的使用方法有些不一样,但都是由浏览器的JavaScript引擎解释执行。如果你深入掌握了JavaScript编程语言,理解浏览器的DOM概念及渲染原理,那你使用那个JavaScript库都会心里舒坦,出现错误时能更快速定位问题的根源。还是那句话:万变不离其宗,作为程序员,我们应该力求掌握其“宗”,以不变应万变。而且如果你掌握了基础原理,对你学习新技术时在理解上也是有很大帮助的。举个例子吧,比如散打和泰拳里面都有最基础的步伐训练,而散打里面还有个重要的技能是摔法,泰拳则侧重膝肘攻击,如果你把散打里面的步伐练好了,再去学泰拳,因为有步伐基础,你会学得快很多。在这里,步伐就对应我们说的底层技术原理。

4. 开阔视野

当你技术水平达到一个比较高的水准后,可能会有不知道如何提高的感觉,日复一日撸业务代码堆积功能的重复工作让你迷茫。其实呢,你还有很大的提升空间,这时候需要开阔你的技术视野和行业视野,一旦视野开阔了,只会觉得学无止境,你所知道的不过冰山一角。

首先我们来聊一下技术视野。假设你是做Java后端开发的,经过几年的实践成长后,你最起码应该知道Java语言的一些发展历程,是借鉴了其它哪些语言发展起来的,摒弃了其它语言中哪些不好的特性,它的优势和劣势分别有哪些,Java方面有哪些著名的书籍,比如《Thinking in Java》等等,Java领域有哪些牛人,他们的技术博客你也可以去看看,了解他们都在做什么,时间久了,你的技术视野就开阔了,你甚至对一些技术的发展趋势有了自己的判断。不苛求你的判断是准确的,但是已经有了自己的观点。

其次是行业视野,即对自己所处行业有一个整体局势上的了解。比如你们公司是搞云平台的,我相信你不会不知道阿里云,但我觉得你应该了解更多的同行,比如青云、UCloud这些公司,他们的客户对象主要是哪些,他们在技术上有哪些亮点值得学习,甚至他们有哪些地方做得不够好,然后在打磨自己的产品时,你就会多注意吸取人家好的方面,人家不够好的地方,你争取做得更好,这样才能有竞争优势。如果你的云平台是基于OpenStack,那你在深入OpenStack技术本身时还应该一直关注OpenStack社区的发展方向,如何跟发展迅速的Docker容器技术进行结合等。除了这些,你还应该经常去看看同行的云产品,从产品文档有时候就可以看出或大致猜到他们底下使用了哪些技术,甚至可能的话还关心他们的用户数据,以及这些用户是如何使用他们产品的。这样久而久之,你对所处的行业从整体局势上有一个比较全面的认知,你越来越广阔的行业视野逐步成为你在这个行业中竞争优势的一部分,你,可能不会那么迷茫了……

欢迎微信扫码,进入【技术人成长】社群逛逛。