程序员练级攻略
程序员练级攻略
本篇为耗子叔的专栏中的一篇,为了偏于查找摘抄出来,觉得有用的可以去买他的专栏(非广)
英文能力
-
坚持 Google 英文关键词,而不是在 Google 里搜中文。
-
在 GitHub 上只用英文。用英文写代码注释,写 Code Commit 信息,用英文写 Issue 和 Pull Request,以及用英文写 Wiki。
-
坚持到 YouTube 上每天看 5 分钟的视频。YouTube 上有相关的机器字幕,实在不行就打开字幕。
-
坚持用英文词典而不是中文的。比如:剑桥英语词典 或是 Dictionary.com 1。你可以安装一个 Chrome 插件 Google Dictionary2。
-
坚持用英文的教材而不是中文的。比如:BBC 的 Learning English3 ,或是到一些 ESL 网站上看看,如 ESL: English as a Second Language 上有一些课程。
-
花钱参加一些线上的英文课程,用视频和老外练习。
问问题的能力
- 提问的智慧(How To Ask Questions The Smart Way)4一文最早是由 Eric Steven Raymond 所撰写的,详细描述了发问者事前应该做好什么,而什么又是不该做的。作者认为这样能让问题容易令人理解,而且发问者自己也能学到较多东西。此文一经发出,就广受好评,被广泛转载并奉为经典。该文也有 简体中文翻译版 被流传着,所以在华人界也是篇很有名的文章。有两个著名的缩写 STFW(Search the fxxking web)以及 RTFM(Read the fxxking manual)就是出自本文。
- 另外,还有一个经典的问题叫 X-Y Problem5。对我来说,这是一个很容易犯的错误,所以,你也要小心避免(我曾经在我的 Coolshell 上写过这个事《X-Y 问题》6)。然后,你可以到 StackOverflow 上看看如何问问题的一些提示 — “FAQ for StackExchange Site”7。作为一个程序员,不做伸手党,你必须要读一读这几篇文章,并努力践行。
写代码的修养
- 《重构:改善既有代码的设计》,这本书是 Martin Fowler 的经典之作。这本书的意义不仅仅在于 ” 改善既有代码的设计 “,也指导了我们如何从零开始构建代码的时候避免不良的代码风格。这是一本程序员必读的书。
- 《修改代码的艺术》,这本书是继《重构》之后探讨修改代码技术的又一里程碑式的著作,而且从涵盖面和深度上都超过了前两部经典(《代码大全》和《重构》)。作者将理解、测试和修改代码的原理、技术和最新工具(自动化重构工具、单元测试框架、仿对象、集成测试框架等),与解依赖技术和大量开发和设计优秀代码的原则、最佳实践相结合,许多内容非常深入。这本书不仅可以帮你掌握最顶尖的修改代码技术,还可以大大提高你对代码和软件开发的领悟力。
- 《代码整洁之道》,这本书提出一种观念:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护和升级奠定了良好基础。本书作者给出了一系列行之有效的整洁代码操作实践。这些实践在本书中体现为一条条规则,并辅以来自现实项目正反两面的范例。
- 《程序员的职业素养》,这本书是编程大师 Bob 大叔 40 余年编程生涯的心得体会,讲解成为真正专业的程序员需要什么样的态度、原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来人引路,助其职业生涯迈上更高台阶。
- 另外,作为一个程序员,Code Review 是非常重要的程序员修养。 Code Review 对我的成长非常有帮助,我认为没有 Code Review 的公司都没有必要呆(因为不做 Code Review 的公司一定是不尊重技术的)。
- 下面有几篇我觉得还不错的 Code Review 的文章,供你参考。Code Review Best Practices8 How Google Does Code Review9 LinkedIn’s Tips for Highly Effective Code Review10
- 除了 Code Review 之外,Unit Test 也是程序员的一个很重要的修养。写 Unit Test 的框架一般来说都是从 JUnit 衍生出来的,比如 CppUnit 之类的。学习 JUnit 使用的最好方式就是到其官网上看 JUnit User Guide(中文版)。然后,有几篇文章You Still Don’t Know How to Do Unit Testing11 Unit Testing Best Practices: JUnit Reference Guide12 JUnit Best Practices13
安全防范
- 在代码中没有最基本的安全漏洞问题,也是我们程序员必须要保证的重要大事,尤其是对外暴露 Web 服务的软件,其安全性就更为重要了。对于在 Web 上经常出现的安全问题,有必要介绍一下 OWASP – Open Web Application Security Project14。
- OWASP 是一个开源的、非盈利的全球性安全组织,致力于应用软件的安全研究。其被视为 Web 应用安全领域的权威参考。2009 年,国际信用卡数据安全技术 PCI 标准将其列为必要组件,美国国防信息系统局、欧洲网络与信息安全局、美国国家安全局等政府机构所发布的美国国家和国际立法、标准、准则和行业实务守则参考引用了 OWASP。
- 美国联邦贸易委员会(FTC)强烈建议所有企业需遵循 OWASP 十大 Web 弱点防护守则。所以,对于[OWASP Top 10 项目](https://www.owasp.org/index.php/Category:OWASP_T op_Ten_Project) 是程序员非常需要关注的最基本的也是最严重的安全问题,现在其已经成了一种标准,这里是其中文版《OWASP Top 10 2017 PDF 中文版》15。
- 下面是安全编程方面的一些 Guideline。伯克立大学的 Secure Coding Practice Guidelines。卡内基梅隆大学的 SEI CERT Coding Standards。
- 此外,有一篇和 HTTP 相关的安全文章也是每个程序员必须要读的——《Hardening Your HTTP Security Headers》18。
- 最后想说的是 ” 防御性编程 “,英文叫Defensive Programming19,它是为了保证对程序的不可预见的使用,不会造成程序功能上的损坏。它可以被看作是为了减少或消除墨菲定律效力的想法。防御式编程主要用于可能被滥用,恶作剧或无意地造成灾难性影响的程序上。
- 下面是一些文章。The Art of Defensive Programming20。
- 当然,也别太过渡了,这篇文章可以看看,Overly defensive programming21。
软件工程和上线
-
系统上线是一件比较严肃的事,这表明你写的软件不是跑在自己的机器上的玩具,或是实验室里的实验品,而是交付给用户使用的,甚至是用户付费的软件。对于这样的软件或系统,我们需要遵守一些上线规范,比如,需要认真测试,并做上线前检查,以及上线后监控。下面是几个简单的规范,供你参考。
-
《完美软件:对软件测试的各种幻想》,这本书重点讨论了与软件测试有关的各种心理问题及其表现与应对方法。作者首先阐述软件测试之所以如此困难的原因–人的思维不是完美的,而软件测试的最终目的就是发现对改善软件产品和软件开发过程有益的信息,故软件测试是一个信息获取的过程。
-
《Google 软件测试之道》,描述了测试解决方案,揭示了测试架构是如何设计、实现和运行的,介绍了软件测试工程师的角色;讲解了技术测试人员应该具有的技术技能;阐述了测试工程师在产品生命周期中的职责;讲述了测试管理,并对在 Google 的测试历史上或者主要产品上发挥了重要作用的工程师的访谈,这令那些试图建立类似 Google 的测试流程或团队的人受益很大。
-
当你的系统要上线时,你是不是已经做好上线的准备了?这里有两个 Checklist 供你做上线前的一些检查。
-
《Monitoring 101》24这是一篇运维方面的入门文章,告诉你最基本的监控线上运行软件的方法和实践。