Files
CategoryResourceRepost/极客时间专栏/geek/左耳听风/程序员练级攻略/72 | 程序员练级攻略:程序员修养.md
louzefeng bf99793fd0 del
2024-07-09 18:38:56 +00:00

26 KiB
Raw Blame History

在完成上述的入门知识学习之后,我们要向专业的计算机软件开发进军了。但是在学习那些专业的知识前,我们先要抽一部分的篇幅来说一下程序员的修养。这是程序员的工程师文化,也就是程序员的价值观,因为我觉得如果你的技术修养不够的话,你学再多的知识也是没有用的。

要了解程序员的修养你可以先从Quora上的这个贴子开始 “What are some of the most basic things every programmer should know?”,我摘录一些在这里供你参考。

  • Bad architecture causes more problems than bad code.
  • You will spend more time thinking than coding.
  • The best programmers are always building things.
  • Theres always a better way.
  • Code reviews by your peers will make all of you better.
  • Fewer features for better code is always the right answer in the end.
  • If its not tested, it doesnt work.
  • Dont reinvent the wheel, library code is there to help.
  • Code thats hard to understand is hard to maintain.
  • Code thats hard to maintain is next to useless.
  • Always know how your business makes money, that determines who gets paid what.
  • If you want to feel important as a software developer, work at a tech company.

然后是 《97 Things Every Programmer Should Know其中有97个非常不错的编程方面的建议。这篇文章是比较经典的别被“97”这个数字吓住你可以快速浏览一下会让你有不同的感觉的。另外在工作一段时间后再来读你会更有感觉。

英文能力

必须指出再往下走有一个技能非常重要那就是英文。如果对这个技能发怵的话那么你可能无缘成为一个程序员高手了。因为我们所有的计算机技术全部来自于西方国家所以如果你要想成为一个高手的话那么必须到信息的源头去。英文的世界真是有价值的信息的集散地。你可以在那里到官网上直接阅读手册到StackOverflow上问问题到YouTube上看很多演讲和教学到GitHub上参与社区用Google查询相关的知识到国际名校上参加公开课……

如果你的英文能力有问题的话,那么基本上来说,你无法成为一个高手。因此,学好英文是非常有必要的,我说的不只是读写,还有听和说。相信你在学校里学过英文,有一定的基础。所以,我给你下面的这些建议。

  • 坚持Google英文关键词而不是在Google里搜中文。
  • 在GitHub上只用英文。用英文写代码注释写Code Commit信息用英文写Issue和Pull Request以及用英文写Wiki。
  • 坚持到YouTube上每天看5分钟的视频。YouTube上有相关的机器字幕实在不行就打开字幕。
  • 坚持用英文词典而不是中文的。比如:[剑桥英语词典](https://dictionary.cambridge.org/) 或是 [Dictionary.com](http://www.dictionary.com/) 。你可以安装一个Chrome插件 [Google Dictionary](https://chrome.google.com/webstore/detail/google-dictionary-by-goog/mgijmajocgfcbeboacabfgobmjgjcoja)。
  • 坚持用英文的教材而不是中文的。比如:[BBC 的 Learning English](http://www.bbc.co.uk/learningenglish/) 或是到一些ESL网站上看看如 [ESL: English as a Second Language](https://www.rong-chang.com/) 上有一些课程。
  • 花钱参加一些线上的英文课程,用视频和老外练习。
  • 问问题的能力

    提问的智慧(How To Ask Questions The Smart Way一文最早是由Eric Steven Raymond所撰写的详细描述了发问者事前应该做好什么而什么又是不该做的。作者认为这样能让问题容易令人理解而且发问者自己也能学到较多东西。

    此文一经发出,就广受好评,被广泛转载并奉为经典。该文也有 简体中文翻译版 被流传着所以在华人界也是篇很有名的文章。有两个著名的缩写STFWSearch the fxxking web以及RTFMRead the fxxking manual就是出自本文。

    另外,还有一个经典的问题叫 X-Y Problem。对我来说这是一个很容易犯的错误所以你也要小心避免我曾经在我的Coolshell上写过这个事《X-Y问题》)。

    然后你可以到StackOverflow上看看如何问问题的一些提示-- “FAQ for StackExchange Site”。

    作为一个程序员,不做伸手党,你必须要读一读这几篇文章,并努力践行。

    写代码的修养

    除了《代码大全》外,你还需要补充一些如何写好代码的知识,有以下几本书推荐。

  • 《[重构:改善既有代码的设计](https://book.douban.com/subject/4262627/)》这本书是Martin Fowler的经典之作。这本书的意义不仅仅在于"改善既有代码的设计",也指导了我们如何从零开始构建代码的时候避免不良的代码风格。这是一本程序员必读的书。
  • 《[修改代码的艺术](https://book.douban.com/subject/2248759/)》,这本书是继《重构》之后探讨修改代码技术的又一里程碑式的著作,而且从涵盖面和深度上都超过了前两部经典(《代码大全》和《重构》)。作者将理解、测试和修改代码的原理、技术和最新工具(自动化重构工具、单元测试框架、仿对象、集成测试框架等),与解依赖技术和大量开发和设计优秀代码的原则、最佳实践相结合,许多内容非常深入。这本书不仅可以帮你掌握最顶尖的修改代码技术,还可以大大提高你对代码和软件开发的领悟力。
  • 《[代码整洁之道](https://book.douban.com/subject/4199741/)》,这本书提出一种观念:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护和升级奠定了良好基础。本书作者给出了一系列行之有效的整洁代码操作实践。这些实践在本书中体现为一条条规则,并辅以来自现实项目正反两面的范例。
  • 《[程序员的职业素养](https://book.douban.com/subject/11614538/)》这本书是编程大师Bob大叔40余年编程生涯的心得体会讲解成为真正专业的程序员需要什么样的态度、原则需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例意在为后来人引路助其职业生涯迈上更高台阶。
  • 另外作为一个程序员Code Review是非常重要的程序员修养。 Code Review对我的成长非常有帮助我认为没有Code Review的公司都没有必要呆因为不做Code Review的公司一定是不尊重技术的。下面有几篇我觉得还不错的Code Review的文章供你参考。

    除了Code Review之外Unit Test也是程序员的一个很重要的修养。写Unit Test的框架一般来说都是从JUnit衍生出来的比如CppUnit之类的。学习JUnit使用的最好方式就是到其官网上看 JUnit User Guide中文版。然后有几篇文章你可以看看也可以自行Google

    安全防范

    在代码中没有最基本的安全漏洞问题也是我们程序员必须要保证的重要大事尤其是对外暴露Web服务的软件其安全性就更为重要了。对于在Web上经常出现的安全问题有必要介绍一下 OWASP - Open Web Application Security Project

    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 中文版》。

    下面是安全编程方面的一些Guideline。

    此外有一篇和HTTP相关的安全文章也是每个程序员必须要读的——《Hardening Your HTTP Security Headers》。

    最后想说的是"防御性编程",英文叫Defensive Programming,它是为了保证对程序的不可预见的使用,不会造成程序功能上的损坏。它可以被看作是为了减少或消除墨菲定律效力的想法。防御式编程主要用于可能被滥用,恶作剧或无意地造成灾难性影响的程序上。下面是一些文章。

    软件工程和上线

    系统上线是一件比较严肃的事,这表明你写的软件不是跑在自己的机器上的玩具,或是实验室里的实验品,而是交付给用户使用的,甚至是用户付费的软件。对于这样的软件或系统,我们需要遵守一些上线规范,比如,需要认真测试,并做上线前检查,以及上线后监控。下面是几个简单的规范,供你参考。

  • 关于测试,推荐两本书。