《高效能程序员的修炼》写的是给程序员的一些建议。书中并没有涉及到代码,而是编码之外的一些提高程序员技能的技巧,而这些技巧往往是程序员所缺乏的。作者Jeff Atwood
也是一个大牛,如果你没有听说过他,那么你肯定听说过他创立的一个网站:https://stackoverflow.com。
程序员的八种境界:
境界 | 具体描述 | 典型程序员 |
---|---|---|
不朽程序员 | 人已经离开了这个世界,但是他的代码却依然活着 | Dijkstra,Knuth |
成功程序员 | 不仅拥有广泛的知名度,同事还运营者一家不错的公司,甚至控制着整个产业链 | 比尔盖茨,Carmack |
知名程序员 | 其他程序员或多或少听说过你,并且对所在领域有积极影响 | 阮一峰,张鑫旭 |
胜任程序员 | 你的能力使得你在工作中游刃有余,公司因你的加盟而得到了提升 | 你的某个领导! |
普通程序员 | 基本上能够应对一般的编程能力,并且不认为自己能够成为杰出的程序员 | 你们公司那种不错的程序员! |
业余程序员 | 有创意、热衷于编码,往往是一些有前途的学生或实习生 | 就比如我! |
低调程序员 | 服务于某家公司,没有什么成就,写代码仅仅是一份工作 | 你们公司最多的那种程序员 |
烂程序员 | 技能匮乏,所做的东西给同事带来痛苦 | 你们公司因为技术不行被开除的程序员 |
成为一名杰出的程序员其实跟写代码没有太大的关系,做程序员确实需要一些技能,还要有坚韧不拔的精神。除此之外,最重要的还要有良好的沟通技巧。这里说的沟通不仅仅是人与人的沟通还包括纸面沟通,比如写博客等。 写作的过程真的就是一次探索之旅,而且它会贯穿人的一生。
每一天,你一定要一起床就热情澎湃。否则,你就只是在打工。 金钱对社区是有毒的。 传统的“胡萝卜加大棒”(使驴子前进就在他前面放一个胡萝卜或者用大棒驱赶他)的激励方式仅仅对于那些重复的、机械的任务有效。(言外之意对软件开发是没有效果的,软件开发需要的是内在的激励,要让程序员主动地去投入自己的事业中。正因为如此,作者在创立Stack Overflow的时候并不在乎员工什么时候来上班,或者如何安排工作时间,也不会事无巨细的样样过问,正如你所见的Stack Overflow是成功的)。 如果你想造一艘船,就不要催着工人们去收集木材,分派工作,发号施令。你应该教会他们的是对无边无际大海的渴望。 如果想在某方面有所提高,最好的办法就是勤加练习。但是,如果你只顾着埋头写代码,连讨论、反思或者学习的时间都没有,你将得不到真正的进步。你必须在磨练工艺与思考如何提高工艺之间找到一个适当的平衡点。 沿着那条路下去,一定要快。如果有什么东西挡住了你的去路请绕开它(快速迭代)。 尽量避免多任务做事。
永远都是自己的错:程序员最基本的意识就是你写的代码在任何时候出现了问题,那一定是你的错(而往往不是电脑的问题)。 大道至简:如果你热爱编码,而且爱的情真意切,那你就应该惜墨如金。 避免写注释:最好的注释就是代码。 学会阅读源码:不管文档上面怎么说,源代码才是最终的事实,是你所能找到的最好的,最确定的,最新的文档。 向伙伴或互联网求助:即使没有得到你想要的答案,强迫自己去完整地解释自己的问题,常常也会引领你进入新的视野或者为你带来新的发现。 创新以人为本:在软件开发领域,执行意味着专注于构成你的应用程序的微小细节。 你的团队能通过电梯测试吗:60秒之内,清晰地解释他们在做什么,以及为什么人们会在意他们正在做的事情。 性能致胜:网站载入和显示的速度越慢,使用他的人就会越少(要么很快,要么已经死去)。
怎样招聘程序员:
面试官应尽最大努力去避免的2大错误:
软件开发者最擅长的就是学习。 工作经验年数与编程技能之间是没有必要联系的。
团队的问题往往都是人的问题。 如果你想提高团队的工程水平,你需要一个领导,而不是靠一个训导员去强制执行。 最有效的一种技术领导就是以身作则。 要有结对编程或者代码评审。 我们应该以怀疑的态度去看待会议,把它当成是一种降低工作效率的风险。 如何开好会议:
如何对待“换苹果”(一个坏苹果放在一筐好苹果中,那么很快这框苹果都会坏掉):
远程开发需要遵循的原则:
可以提高效率的基础设施:
对于公司来说这几个基本权利很容易做到,这些要求并不过分。一个公司愿意付给一个开发人员6W~10W美元的薪水(在美国),却用糟糕的工作条件以及破烂的硬件设施摧残他,这令我难以置信(作者说的,不是我说的,虽然我也很认同,哈哈)。
购买一张优质的桌子和一把优质的椅子会是你作为一名软件开发者所能做的最好的投资之一了。
程序员标准坐姿:
拥有更多的显示空间确实会让你的工作更有效率。
购买优质座椅的必要性:
理想情况下你的显示屏不应该比灯光下的书本更亮。
令人赏心悦目的产品和让人勉强容忍的产品之间的差别,就在于他们的细节有没有被做好(细节决定成败)。 用户界面就代表了你的软件(前端的重要性)。 用户界面须优先设计。 在你草拟用户界面的时候,你必须置身于技术开发环境之外(不要被技术所束缚)。 你应该努力不扯上下分页这玩意儿,因为你应该让用户在几个条目中就能找到他们所需要的东西,这高于一切。 用户只会读取屏幕上足以让他们完成任务的、最少量的文字。 你的团队对用户反馈的响应速度会为你的软件定下基调。 即使第一版做的很差劲,也要坚持把它发布出去。
尽量使用HTTPS协议,因为:
限制每个用户的登录尝试次数是安全领域的101(101空降师是美国陆军的一只空中突击部队,在诺曼底登陆战役中闻名)。 安全的哈希算法应该能防止篡改,同时应该运行缓慢(减速暴力逆向破解的速度)。
软件开发人员应该与客户患难与共。 同级之间的代码评审是你为提高代码质量所能做的最大的贡献。 如果不找来真正的用户做可用性测试的话,你是无法知道你的程序能否正常工作的。
社区反馈的经验与教训:
游戏化的好处:
常见的9中营销伎俩:
游戏表面上看是免费的,但实际上他们要靠一小撮玩家通过花钱购买额外的东西来支撑(免费增值模式)。因此,玩家群体必须非常大,才足以维持这种游戏的业务模式。也因此,游戏的运营商通过会在互联网的广告空间里推广他们的游戏。(某迅游戏把这种营销方式发挥到淋漓精致) 低价是一种营销推动力,它可以成倍的补偿价格降低的部分。
幸福的方法:
来也匆匆,去也匆匆(不是冲冲),到头来两手空空。
最后用文章最后抛出的一个问题,结束本章的内容:
对于程序员来说,最难的是要搞明白你夜以继日地拼命工作到底是为了什么?