Joel的随想录,也就是他Blog上的文章的摘选;整本书看下来轻松,其中有不少文字在为他公司打广告、为自己摇旗呐喊;比如在选择程序员方面,他所认为的一些重要的因素,比如提供独立的办公室、更自由的空间、更多及更大的屏幕,都是他公司所能提供的;
但是大家不要忘了,他的公司员工的人数是个位数(从书中的得出),书中所提出的各种因素,在扩大到一定规模后,不具有普遍的适用性和可行性;
在过滤掉这些元素后,我整理了以下观点;
1 Unix与Windows文化之争
从程序开发的起点,Unix和Windows就有完全不同的目标;Unix是以命令行程序做为基本,也就是首要目标;程序的所有功能通过命令行方式都是可以完成的;这样带来的好处就是,可以结合Unix的内置工具来任意组合,比如批处理,比如后续的自动化处理,从而让开发出来的程序适应更多、更丰富的应用场景;
至于图形化终端,等我有空了再来开发吧,或者,互联网的朋友,谁有空,你们都可以来做这个;业务逻辑,在后台调用命令行工具即可;
Windows的目标就是一个漂亮的GUI程序。业务逻辑和GUI是融合在一块的;会有不错的用户交互体验;当然,想批处理,想自动化处理,抱歉,不支持。一步步按照我们的游戏规则来吧;
当然,我们需要认识,两者面向的终端用户并不完全相同;Windows占据着桌面领域,GUI交互体验为重中之重;而Unix系列则面向服务器领域,命令行支持为其根本;
2 大学教学 阳春白雪 VS 下里巴人
在公开场合,Joel批评java的次数不在少数;在大学教学方面,更是多次警告只学java的危害;语言只教java,这会整体降低这门学科的难度,并将大学教学演变为职业教育;而C语言才是正道;C语言看上去有些过时,但其中却包含大学教学中不可或缺的的利器:指针和递归;指针和递归能锻炼程序员的思维,培养逻辑能力,对智力提出更多的挑战;这有点类似拉丁语在大学中的地位;即使社会上不再应用,在大学教学中,仍然重要;
计算机科学的组成:证明(递归)、算法(递归)、操作系统(指针)、编译器和语言;如果不懂指针,对于Linux内核,将一筹末展;
最后,说说大学教学的两面:
阳春白雪:教学C语言、Unix、函数式编程和状态机;
下里巴人:教学JAVA和VC编程;甚至21天精通SQL SERVER.
3 为“匈牙利命名法”正名
我们更多人熟悉的是系统型匈牙利命名法,即在变量的命名前加上该变量的类型;比如整型的命名加上n、字符的命名加上sz:
int nSize;
char szStr[10];
这种命名方式引来大量程序员的不满,过于麻烦和迂腐,带来的好处微弱;而微软最终也不再推荐这种命名法;
这种应用场景却非发明者的本意。作者的真实使用方式,我们称之为,应用型匈牙利命名法;
其应用的场景根据变量的种类,而不是类型来加前缀;比如都是字符串、已编码的可以直接在html上展示的字符串,我们加上se前缀;而为编码,直接在html上展示将可能导致乱码的字符串,我们加上unse前缀;
这样,在程序编写及review的过程中,很多潜在的错误就能一目了然:
seHtm = unseStr;
看到这样语句,显然就有问题;至少我们应该有个转换函数:
seHtm = Encode(unseStr);
ok,发现这种命名法的真正优势所在了么?
4 软件质量之争: 技术派 VS 务实派
软件质量改进是我们这个行业永久的话题;
技术派希望将质量问题用软件自动处理;这样,他们发明了单元测试、测试驱动开发、自动化测试动态逻辑;目的就是为证明程序没有错误;
而务实派并不关心软件的质量有没有问题;他们认为软件的质量能够达到一定的水准就可以,只要有人愿意为之买单即可;务实派认识到:消灭Bug是一件边际报酬递减的事情;将软件bug率从10%降到5%比50%降到20%可能要付出的更多的代价;
在当今的商业主导环境中,务实派显然更占优势;
5 选好大方向: 内部程序员 VS 专业程序员
内部程序员为公司内部开发软件,软件不面向外部,这样的内部开发工作会有以下问题:
1.技术难度低;内部使用的软件,决定了规模不会很大,这样,在性能方面的要求就低。随便写,只要功能实现,性能方面的影响基本不用你去考虑,当然,公司也没有时间让你来考虑这些;这样导致的结果就是你的技术无法得到提升,写了20年的代码,水平还是在原地踏步;
2.内部使用的软件,这样的开发工作与公司的主营业务偏离;这样,你得到晋升的希望渺茫;
3.无法选用自己想用的语言;现代化的语言,需要招来更有水平的小伙子来后续维护;传统的VB能轻松搞定的事,为什么还要多花钱来给自己找麻烦?
4.够用则以;这是内部项目的最大问题所在;项目功能够用了,ok,你可以开始下一个项目;不用在完善、不用考虑可能出现的5%的bug率;没事,内部可以接受;用上面务实派的观点,与外部软件相比,内部软件的质量水准在一个相当低的层次上;
好了,不用再列举了,在工作方向的选择上,你应该知道该怎么办了吧?
6 写程序,更要表达思想: 普通程序员 VS 领袖
写作,是行业的基本功。写代码之余,多锻炼写出优秀、清秀的技术文章,清晰的表达你的思想;说服他人,你的力量就得到放大;当有足够的程序员认可你的文章,认可你的思想,你就成为了这个行业的领袖;
例如,SourceForge上有不少优美、有用的代码,但都被埋葬、沉没,就因为没有清晰、易于理解操作的说明文档;
最后的最后,Joel建议除了专业知识外,其它学科的学习也相当有必要:比如微观经济学;
思维导图:
Posted by: 大CC | 14OCT,2013
微博:新浪微博