Blog

Blog

PHODAL

写代码的核心

最近,经历了一系列代码吐槽事件之后,结合公司大佬的观点之后,大体上对于程序员的编码 level 有一个更好的认识。所以,我决定写一篇文章,以此来划分不同的程序员。我知道为别人打标签是不对的,政治上是不正确的,但是我不会明着对你说的。每个人在自己心里都有的一杆秤。

注意:这篇文章所针对的并不是程序员相关的编程技能,而只是单纯指码代码本身。算法好的人,不一定写出好代码;架构好的人,不一定能写出可读的代码……。

职业规划

我都是从新手程序员过来的,所以,倒也不是想说明什么。只是呢,如果还是精进的话,我们还可以一起多加练习。也借此,输出一份我所知道的程序员的分界线。它也不是一份“标准”,只是我所以为的以为。

倘若打击到你,也不必忧伤。除了成为专业 的程序员之外,你还有其它的诸多选择,成为一个技术管理者、项目经理等,成为一个多面手。又或者是去送送外卖、滴滴司机,过着普通的生活,也不错。生活为你打开一扇门时,也会为你关上一扇门。

况且,到了这某一把年纪,你也还不好写代码,也挺不容易的。也是时候重新做做职业规则了。

如果你还是想和我一样继续写代码,那么这篇文章的剩下部分,倒是颇为适合你的。

Level

起先,我是打算写一个相关的维度,后来想了想,这样一来有些复杂,就算了。于是乎,我就写一个简单的 Level 表吧。

level.-1 可工作的代码

书单:《30 天入门 xxx》

任何一个傻瓜都可以写出计算机可以理解的代码,唯有写出人类容易理解的代码,才是优秀的程序员。 ——Martin Fowler 《重构》

  • 懂得一门编程语言。
  • 能写出可工作的代码。

性能好不好不重要,人能不能读不重要,可以赚钱就行了。

level.0 会用工具

使用工具是智力的标志,会用工具是聪明的标志。

书单:《鸟哥的 Linux 私房菜》、《提问的智慧》

从物种进行的角度来说,会使用工具是一种智力标志。而选择和使用合适的工具,则是智慧的表现——前提是你有合适的工具。

  • 类 Unix 系统。毕竟这年头,是个程序员都得会点 GNU/Linux。
  • 使用搜索引擎的技巧。广泛的搜索引擎,既要会使用 Google、StackOverflow,还会使用 GitHub issues。
  • 可以用命令行。
  • 懂得如何提问。

但是,你不会使用高效的工具,也不会意味着,你就不会高效地写代码。

level.1 能写代码

一个 60 分的程序员,应该能按时写出能符合需求的代码。

这里的按时的是指在合理估算的情况下,如果本身估算不合理的话,那怎么都不能按时。

书单:《七周七语言》(名字好而已)

  • 能考虑错误处理
  • 进行防御性编程
  • 懂得多门语言,能快速上手。
  • 合适的锤子(🔨)。工具箱里不只有一个工具。

也总有人不进行错误处理,不考虑正常的编程的异常条件——极端条件除外,毕竟大部分的开发人员都不是专业的测试。也只有经历过一些 bug 的风风雨雨,才会尽可能地、考虑尽可能多地极端条件。

level.2 可以代码

可以代码,即能放心地把活交给一个人,在代码质量上又不会出现问题。

书单:《Head First设计模式》、《编写可读代码的艺术》、《代码整洁之道》、《重构: 改善既有代码的设计》

  • 会写单元测试。
  • 懂得设计模式。
  • 良好的代码组织方式。是的,从某种意义上体现了架构的能力。
  • 使用工具替换重复性工作,比如正则。
  • 合理的估算编码时间。这一条件本来不是在里面的,可是呢,真的有好多人不会估算。

我觉得吧,大部分程序员都在 Level 1 和 level 2 间徘徊。主要是韭菜一批又一批的,代码写得好的就升官发财了,写得不好的还在继续写。能一心写好代码的人,真心不多。

关于设计模式,我并不是设计模式的偏执狂,只是呢,模式是一种通用语言,用来快速来与别人交流。毕竟,模式与原则是专门给智商不够的人类设计的。

level.3 会写代码

作为一条新的分界线,这里的你应该是懂得什么是好的代码,还能在日常的工作中写出好的代码。与此同时,你具备把不算太烂的代码,重构到易于阅读的代码。

书单:《测试驱动开发》、《重构与模式》

  • 会写各种类型的测试
  • 掌握高级重构技能
  • 合理的使用设计模式
  • 能重构代码到合理的设计模式

在这个项目里,我们在定义什叫会写代码,为了不打击到大家。我还是把这个层级放低一点,所以当我们说会写代码的时候,说的是:能写好代码。

level.4 懂得代码

书单:《领域特定语言》、《Ruby 元编程》、《编程语言实现模式》、《编译原理》、《计算机程序的构造和解释》

  • 制造工具,替换自己
  • 设计抽象 DSL,完成重复性的工作
  • 写一个编程语言,能用在日常的开发中
  • ……

嗯,大概就是这样。

level.999 写 PPT

我本来想说架构是其中的一部分,可是后来发现吧,有些事情,它能水到渠成。

可惜,我还不会。

结论

对了,你还具备好的手速,才能实现好的代码。

关于我

Github: @phodal     微博:@phodal     知乎:@phodal    

微信公众号(Phodal)

围观我的Github Idea墙, 也许,你会遇到心仪的项目

QQ技术交流群: 321689806
comment

Feeds

RSS / Atom

最近文章

关于作者

Phodal Huang

Engineer, Consultant, Writer, Designer

ThoughtWorks 技术专家

工程师 / 咨询师 / 作家 / 设计学徒

开源深度爱好者

出版有《前端架构:从入门到微前端》、《自己动手设计物联网》、《全栈应用开发:精益实践》

联系我: h@phodal.com

微信公众号: 最新技术分享

标签