高效能程序员的七个习惯

标签: 效能 程序员 习惯 | 发表时间:2014-03-05 10:14 | 作者:
出处:http://www.iteye.com
本文转载自 Tyr Chen的博客在文中作者总结了他认为高效能程序员应该具备的七个习惯,原文内容如下。

昨天收到一个读者留言,问作为程序员,有什么学习和工作上的好习惯可以借鉴?想了想,干脆附庸风雅一下,总结个『高效能程序员的七个习惯』吧。Disclaimer:一家之言,可不信,但不可全信。

1.  拥抱unix哲学

每个程序员入门的第一堂和第二堂课应该是和unix哲学相关的内容,简言之就是:做一件事,做好它。具体点:

  • 小即是美。
  • 让程序只做好一件事。
  • 尽可能早地创建原型。
  • 可移植性比效率更重要。
  • 数据应该保存为文本文件。
  • 尽可能地榨取软件的全部价值。
  • 使用shell脚本来提高效率和可移植性。
  • 避免使用可定制性低下的用户界面。
  • 所有程序都是数据的过滤器。
再具体一些(TL;DR):

引用
In [1]: import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!


2.  选一个样板,follow之

每个NBA新秀都有自己的样板,我们也总习惯称某足球新星为『小罗』,『小小罗』。样板为你提供了可模仿可追赶的对象,同时也让你审视自己究竟想成为什么样的程序员。我的样板是Greg Pass和Werner Vogels,虽然我这辈子可能也达不到他们的高度,可这并不妨碍向着我心目中的明星一步步靠近。

3.  写代码,而不是调代码

写软件最糟糕的体验恐怕是边写边调,写一点,运行一下,再写一点。是很多程序员都会这么干。原因有二:1. 不熟悉相关的代码(类库),需要边写边运行保证代码的正确。2. 现代编程语言的REPL(Read-Evaluate-Print-Loop,就是语言的shell)能力助长了这一行为。

写系统软件的人很少这么做。他们手头糟糕的工具让边写边调的行为成为效率杀手 —— 如果稍稍改动,编译就要花去几分钟,甚至更长的时间,你还会这么干么?所以他们往往是写完一个模块,再编译调试。(由此看来,高效的工具有时候是把双刃剑啊)

我觉得写代码就跟写文章一样,构思好,有了大纲,就应该行云流水一样写下去,一气呵成,然后回过头来再调整语句,修改错别字。如果写完一段,就要回溯检查之前写的内容,效率很低,思维也会被打散。

靠边写边调做出来的代码还往往质量不高。虽然局部经过了雕琢,但整体上不那么协调,看着总是别扭。这就好比雕刻,拿着一块石头,你先是精修了鼻子,然后再一点一点刻画面部。等修到耳朵的时候,鼻子可能过大或过小,即便再精美,它也得不到赞赏。

4.  聪明地调试

软件总会出问题。遇到问题,很多程序员就会用IDE在各种可能的地方加断点调试,如果没有IDE,那么各种print/log手段一齐抛出,有枣没枣打一杆子再说。

优秀的程序员会在撰写代码的时候就考虑到调试问题,在系统关键的节点上注入各种等级的调试信息,然后在需要的时候打开相应的调试级别,顺藤摸瓜,避免了不靠谱的臆测。这是调试之『道』。

很多问题打开调试开关后就原形毕露,但有时候靠调试信息找到了初步原因,进一步定位问题还需要具体的工具,也就是调试之『术』,如上文所述之断点调试。有些时候,遇到靠类似gdb(如python的pdb)的工具无法解决的问题时(如性能问题),你还需要更多的调试工具做runtime profiling,如systemtap。

5.  使用标记语言来写文档,而非word/power point

不要使用只能使用特定软件才能打开的工具写文档,如word/page或者power point/keynote。要使用『放之四海而皆可用』的工具。

java的市场口号是:『一次编写,到处运行』,对于文档,你也需要这样的工具。Markdown(md) / Restructured Text(rst)(以及任何编辑语言,甚至是jade)就是这样的工具。通过使用一种特定的文本格式,你的文档可以被编译成几乎任意格式(html,rtf,latex,pdf,epub,...),真正达到了『一次编写,到处运行』。最重要的是,由于逻辑层(文章本身)和表现层(各种格式,字体,行距等)分离,同样的文档,换个模板,就有完全不一样的形象。

除非必须,我现在所有的文档都是md或者rst格式。

6.  一切皆项目

程序员的所有产出应该项目制。软件自不必说,文档和各种碎片思想也要根据相关性组织成项目。举一些我自己的例子:

  • 我的博客是一个名叫jobs的github项目
  • 我的微信文章全部放在craftsman这个项目中
  • 我学习某种知识的过程(比如说golang)会放在一个或若干个项目中
  • 我工作上每个项目的各种产出(包括会议纪要)会按照项目对应生成git repo

项目制的好处是具备可回溯性。每个项目我可以用git来管理,这样,几乎在任何一台设备上我都可以看到我之前的工作。想想你三年前写的某个文档,你还能找到它么?你还能找回你的修改历史么?

项目制的另一大好处是可以在其之上使能工具。比如说你看到的这些微信文章,我随时可以“make publish YEAR=2014”来生成包含了2014年我所写文章的pdf。

7.  心态开放,勇于尝试

在程序员社区里,语言之争,系统之争,软件思想之争几乎是常态。python vs ruby,go vs java vs erlang vs rust,scala vs cljure,OOP vs FP,iOS vs Android。其实不管黑猫白猫,抓到老鼠的就是好猫,facebook还用php呢。程序员应该用开放的心态去包容新的技术,新的思想,勇于尝试,而不是立即否定。这个世界最悲哀的是,手里有把锤子,看什么都是钉子(或者说,眼里就只能看见钉子)。

我接触mac时间不过三年。可这三年时间,我从对mac不屑,到深深热爱,最终成为mac的一个重度用户。很多东西用过才知道,不尝试不接触我可能永远活在自己下意识构筑的无形之墙的另一边。

最近的两年里我学习了erlang,golang,scala,还看了一点点clojure和rust。目前我热衷于golang开发,但并不妨碍我继续拥抱python和nodejs。每个程序员要在不同的层级上有一门主力语言,比如说我:

  • 系统级(realtime):C (可能以后会是rust)
  • 系统应用级(realtime):erlang(养成中)
  • 系统应用级(非realtime):golang(养成中)
  • 应用级:python
  • Web后端:python,nodejs,golang
  • Web前端:javascript
  • 设备端:Android Java(暂无计划)
这个列表你不必参考,我只是想用此来说明心态越开放,你看到的世界就越大。

原文链接: http://tchen.me/posts/2014-03-05-highly-effective-programmer.html

感谢 WnouM 投递这篇资讯

资讯来源: Tyr Chen的博客

已有 1 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [效能 程序员 习惯] 推荐:

高效能程序员的七个习惯

- - ITeye资讯频道
本文转载自 Tyr Chen的博客, 在文中作者总结了他认为高效能程序员应该具备的七个习惯,原文内容如下. 昨天收到一个读者留言,问作为程序员,有什么学习和工作上的好习惯可以借鉴. 想了想,干脆附庸风雅一下,总结个『高效能程序员的七个习惯』吧. Disclaimer:一家之言,可不信,但不可全信. 1.  拥抱unix哲学.

优秀程序员的十个习惯

- 腾 - 博客园-首页原创精华区
阅读: 2887 评论: 30 作者: 吴秦 发表于 2010-06-02 23:38 原文链接. 在这个世界上,有数百万的人热衷于软件开发,他们有很多名字,如:软件工程师(Software Engineer),程序员(Programmer),编码人(Coder),开发人员(Developer). 经过一段时间后,这些人也许能够成为一个优秀的编码人员,他们会非常熟悉如何用计算机语言来完成自己的工作.

9条编程带给程序员的坏习惯;

- Shan - 考据癖
*  具备一定编程基础或计算机基础知识的人群才能会心一笑. *  请各位视自身情况筛选阅读.. 如果你是一个程序员, 或者你就读计算机相关专业, 那么你应该能理解下面这些诡异的小习惯是怎么养成的, 或者你本身就有着其中的某些习惯:. 例: 程序员吵架的时候会说: “我数三下, 你再不闭嘴我就不客气了.

分享成为高效程序员的7个重要习惯

- - 互联网分析
作为软件工程师,你希望从工作中获得的是:稳定的薪水、参与好项目的机会、好工作的跳板或只是和其他程序师成为好基友. 这里的“高效”,我指的是按 时完符合要求的项目的能力. 经历过不少软件编写工作后,我相信以下实践会帮助你学会“高效”,同时提高专业声望、拉长职业寿命,和获得个人满足. 成为高效程序员的第一步是,保证时间的合理分配.

程序员:编程给你现实生活带来了哪些坏习惯

- 赵星云 - cnBeta.COM
似乎任何职业都会给从业人员带来这样那样的习惯. 国外某网站上有位朋友(应该也是程序员)想了解其他程序员在投身堆码事业后有什么样的坏习惯. 结果一呼百应,很多程序员纷纷自爆自己的坏习惯和糗人糗事. 编程无国界,相信国内堆码界的朋友,也会有同感.

谷歌高效能经理人的8个习惯

- Brian - 译言-每日精品译文推荐
来源8 Habits Of Highly Effective Google Managers. Google's "people operations" team (HR) has applied the Google Way (data analytics) to management analysis and developed a manifesto entitled Eight Habits Of Highly Effective Google Managers.

【自我提升】低效能人士的七个典型习惯

- - 译言-生活点滴
许多人认为功成名就后才会有幸福感,其实不是,是快乐让你感受到了成功. << 《价值百万美金的写博攻略》之作者介绍、致谢及本书目录. 杂货店店主不会告诉你的13件事 >>. 低效能人士的七个典型习惯 . 正如发现对你而言是非常有用的行为习惯是很重要的那样,发现那些阻扰你进步的习惯也是相当重要的. 几乎这所有的七个习惯会在你毫无察觉(或不知道它们是如何影响你的生活)的情况下变成你日常生活的一部分.

高效能人士的七个习惯读书笔记

- - ITeye博客
别人的观点虽然有异,但也是清楚客观的.立场决定观点. 思维定势就是根基,抓住根本才能让生活出现实质性的进展. 诚信和正直的原则是人类互相信任的基础. 承认自己的无知往往是求知的第一步. 一旦孩子体会到了真正拥有的感觉,自然会乐于与他人分享. 效能在与平衡,唯有再金蛋(产出)与鹅的健康与幸福(产能)之间取得平衡,才能实现真正的效能.

新读图时代:低效能经理人的七个坏习惯

- sting - 译言-每日精品译文推荐
来源7 Habits of a Highly Ineffective ManagerMindflash | Mindflash.   压力管理:找到你的压力源#压力控制【Mayo健康指南】.   会叫的孩子有奶吃 讨人厌的员工年薪多挣6、7万.   80/20法则给我们的更多启示(二八定律).

普通程序员、文艺程序员、2B程序员

- 可可 - 宇宙的心弦
希望能引起广大苦逼的正在学或者已经学过c++人的共鸣和会心一笑吧. 如何辨别自己在现实还是虚拟世界.