手艺人
在开源中国搜索“前端自学路线之”,无意中发现这篇博文,文章很长,但很实在,作者那种踏实和内敛的精神,感动了我。
工作十年,我其实是一个披着程序员外衣的网络编辑+项目协调,对未来,我亦有深深的恐惧。这篇文章,是一面清晰透视我的骨骼的镜子,感谢!
原文:橡皮鸭子——我在OSChina的新家
作者:我的上铺叫路遥
Linus 定律,即足够多的眼睛,就可让所有问题浮现。
如果有人问我给酷壳投稿是什么感觉,我会说好比你在 iOS 上开发一个应用,结果给苹果官方 AppStore 审核通过的那种感觉。
多学一种工具就多一分机会。
我更喜欢看源代码。
Linus 说 git 代码的成功之处在于无论版本和功能如何变迁,底层的数据结构总是不变的;好的程序员关注数据结构和它们之间的逻辑关系,坏的程序员看代码。
现在我在写模块代码的时候,一开始会在草稿上写好模块可能会用到的数据,然后思考如何将它们串起来,整个模块就是围绕着这些数据进行消息传递,数据以何种形式存储,管理是动态还是静态等等,具体表现就是数据结构和算法了。
代码的可维护性而不是某些特性才是设计的根本目标。
Linus 非常注重代码的可维护性,这跟 Alan Cox 的路线不一样,后者更倾向于工程的稳定性。
语言之争持续了数十年时间了,但这么多年来不管什么语言社区,大部分程序员一生的职业生涯中都在为偿还程序代码设计不当导致的代码难以维护的技术债而循环性地苦逼着,维护了三年代码经验的我对此略有体会,如果一门最神奇的语言不能够挽救一个摇摇欲坠的项目于水火之中,那么波及语言的争论又有什么意义?
很多人不是不懂技术,但很少有人理解 Linus,因为他们缺乏一个具有全球化规模应用的,代码不断膨胀和变更的项目管理经验。
我觉得一个 program manager 要比一个全栈工程师来得实用,因为他即管项目又管人,工程师就不需要操心别的琐事。
Linus 曾说过一个明星程序员有三种品质。最重要的第一点是,能够持之以恒地做某件事,即所谓的专注。第二点是审美观,拥有良好的直觉和品位,面对一个新问题时,即使没有完整地解决问题也能够凭直觉提出正确的解决思路和方向。第三点是沟通能力,就是能够将自己的目标明确传达给他人的人。
计算机科学家陈怀临在曾如此描述自己的技术风格:我比网络的人多懂OS,比OS的多懂CPU,比做CPU的人多懂网络。我认为这就是拔尖的嵌入式工程师需要长期锻炼的“铁人三项”。
项目中的实践是对将来设计的直觉和把握的培养,而实践又反过来颠覆着设计之初的直觉。
有一次看到一位前辈的简介里写着“手艺人”三个字,忽然觉得这个词来形容程序员再也恰当不过了。“手艺人”这个身份可以有很多解读,有人认为贫贱,也有人觉得尊贵,就看你怎么认同工程师文化了。我觉得从社会角度看,程序员同其它职业的存在意义和创造价值没啥不同的,除了敲代码的姿势比较奇怪而已。个人角度看只要尽忠职守,乐在其中就好。