《编程人生:15位软件先驱访谈录》是一本访 谈笔录,记录了当今最具个人魅力的15位软件先驱的编程生涯。作为软件领域的小菜,在闲暇的时候会拿来读读,感受一下大师们的编程风范,给自己懒散的大脑 洗个澡。目前只读了一部分,也做了一些笔记摘要和我的简单体会,与大家分享,后期若有机会会继续补充,引领大师编程智慧。
1. 一个用C++写的库,Python程序员可以用SWIG封装它,而Java程序员可以用JNI封装,但是这很让Java程序员感到不爽,因为若JVM崩溃了,我们根本不会知道是为什么。
体会:随着编程语言的发展,越来越多的语言之间可以相互嵌入,出现了很多混合编程,比如Java与C++、C#与C++等,Java平台上的多语言混合编程正 成为主流,在实际应用中,每种语言都可以针对自己擅长的方面更好的解决问题,这是好的发展方向,但随之带来的也有很多麻烦与恼人之处,比如Java中混合 了C++,当JVM崩溃了,还真不知道是Java出了问题还是嵌入的C++出现了问题,所以不能一味追潮流,而应具体情况适当选择。
2. 为什么要学习多门语言?
因为只懂一门语言如Java的话,他们解决问题的思路被局限在他们的知识范围内,他们不会全面地思考问题。
体会:毋庸置疑,现在优秀的程序员不可能只会一门编程语言,程序员多元化或最近流行的“全栈工程师”(来自知乎上很热的话题“怎样成为全栈工程师(Full Stack Developer)?”)才是社会未来的发展趋势,所以为了能赶上社会潮流,不被淘汰,我们不能局限在一门编程语言里,学的语言多了,你的思维也会更加广阔,也许能给你的棘手问题带来灵感。
3. 如何阅读别人的代码?阅读代码是为了全面了解它是如何工作的,还是自己想要对代码做些修改?
如果你崇拜某个程序员,也可以去读读他的代码,也许你会意识到他们也是凡人,不该成为你崇拜的对象。你也可能会从他们的代码中学到一些东西。
如果阅读代码是为了想要修改一些东西:第一步,找个原始的tar文件或者从SVN检出代码,试着把工程构建起来。你一定要跨过那道坎,那对多数人来 说是最大的障碍——构建系统时的依赖或者开发者假定你已经安装了这个库。我希望这些大项目都能自带一个虚拟机,也就是它的构建环境。一旦你有了一个干净 的、可工作的构建版本,干掉它,做一个修改,比如把标题栏改成“”。改变一些东西,即使没什么实际意义,只要动手开始去改变就好。然后把你的补丁发出去, 我发现这是最好的开始对话的方法。
如果只是想简单了解:大致地看一下,试着去了解目录结构。然后如果有东西吸引你的注意,或者我对什么东西不太理解,就随便选个文件,边构建边读代码,这是可以并行的,读代码会发现新的模式,也许会对你有帮助。
体会:我也是最近几个月才开始阅读别人的源码的,我第一个阅读的是Google工程师写的代码,虽然没有完全看懂,但的确学到了很多东西,比如他们代码的构建模式、编程风格(比如Google Java编程风格指南中文版)、采用的测试方案(从Google开源RE2库学习到的C++测试方案)等, 非常规范,这是Google所有工程师都有的风格。虽然每个公司都有自己的一套编程规范,但从他们的风格里还是能学到很多你没有注意到的东西。当然,如果 你只是为了学习,那么不用完全一个个文件的细看每个函数,只需要大致了解它们的整体模式即可;如果你是为了修改,那么就需要按需细看某些文件,在此基础上 实现自己的需求。
4. 怎么强迫自己不去逛那些浪费时间的网站?
可以用iptables重定向这些网站到你自己的web服务器,上面写着“你正在工作,不是吗?”
体会:这貌似是geek们的做法。如果你觉得该方法有效,那么可以施行。对于吾等普通程序员,我的做法是将一天中最重要的事情列个清单,工作的时候把清单放在键盘上,强迫自己先把这些事情做完了,有剩余时间才有机会去放松一下。我最近在使用一款时间收集工具“RescueTime”,可以详细的记录到你在电脑上使用任何一个应用所花费的时间,如果是浏览网站可以详细的记录到你在某一个网站上停留时间,然后做个报告呈现给你。很多人推荐,我也不知道怎么样,正在试用期。
5. 对程序员来说什么才是最重要的技能?
像科学家那样思考,一次改变一样东西。
有耐心,试着去了解问题的本质。尤其是在调试或者设计不太正常的东西时更应该这样。我看到过年轻程序员在那里抱怨:哦,见鬼,这个东西运行不了。然后就把它彻底重写了。其实应该停下看看究竟发生了什么。
要学会增量地开发,这样每一步你都能进行验证。
体会:“耐心”真的是很重要也是很难的技能,随着社会快节奏的发展,人们越来越不淡定,非常心浮气躁,我们程序员这行亦是如此。遇到个难解决的bug就气愤的想要砸掉键盘,维护上届员工写的老代码,恨不得重写也不想在他们基础上做修订,因为没耐心。我自己也是的,看书看到不懂的地方就合上书本看不下去,也没想借助网络慢慢搞懂它,不能认清问题的本质。我只能说,没有耐心,这是社会的通病,得治。
6. 你为什么极力反对C++?
使用C++,一切变得臃肿不堪,另外还引入了大量兼容性问题,因为用C++编程时,没人能断定C++哪部分是可以安全使用的。有个家伙说他要用模板,结果你会发现,没有哪两个编译器实现模板的机制是一样的。最后,C++不能跨平台。
体会:这种说法当然很片面。每种语言都有其极度拥护者和极度反对者,我们不能偏向任何一方,而应该全面看待,在这里我们可以学习到C++的缺点:安全问题、兼容性问题、跨平台问题等。但C++的优点也是不少的:面向对象、更多封装的库、类型更加安全等。前段时间看了个视频“C++之父 Bjarne
Stroustrup 9月4日在 GoingNative 2013 大会上长达1个半小时的主题演讲《The Essence of C++: With Examples in C++84, C++98, C++11, and C++14》”还是挺不错的,我个人才疏学浅,不能对它们做很好的评价。
7. 软件领域也有很多工程方面的问题。有这么一个笑话:如果用造软件的方法来盖摩天大楼,那第一只啄木鸟就能毁掉文明世界。
体会:第一句毋庸置疑,软件工程师不就是用来解决工程问题的吗?当然也有非工程问题,否则学数据结构、学算法是干嘛用的。后面这个笑话很具有讽刺意味,寓意我们软件工程师对工程方面的问题解决的一直不令人满意。