如何成为一个程序员

花火田丁 花火田丁 2018-11-25 15:49:40 +0000


题图来自于豆瓣音乐地图,挺有意思

昨天看到GitHub1的一个库 How to be a programmer(如何成为一个程序员),原文是英文,有小伙伴很走心地翻译了中文版。

程序员的主要工作是「编程」,这点众所周知,也就是「写代码」,那么,「如何成为一个程序员」这个标题,从字面上理解,大概就是「如何写好代码」吧。

我相信很多人,无论是「还不是」或「已经是」程序员的人,包括我自己,第一反应,大概都会认为这是一个技术帖,掐指一算,估计会讲技术图谱,要学点什么,要学多久,哪种语言比较好……百度的关键词广告,很好地说明了这些问题。

图片来自网络截图

不过,要让大家失望了,打开Readme,第一段的序言就表明了作者写这篇指南的用意:

做一个好的程序员,困难而高尚。

将一个软件工程集体愿景变为现实,最困难的地方在于与你的同事和顾客相处。

编程很重要,这需要强大的智力和技能。

但在好的程序员看来,相比构建一个让客户和各种各样的同事都满意的软件系统,(纯粹的)编程真的只是小孩子的玩意。

在这篇文章里,我尝试尽可能简洁地总结那些当我21岁时,希望别人告诉我的事。

有关学习编程的建议,我们通过课程学习、看书学习、动手实践,有很多方法去尝试,而且投入和产出基本上成正比,只要你愿意付出时间和精力,那么编程能力一定可以得到提升。

作为一个初入职场的程序员,「希望别人告诉我的事」究竟是什么?

回想一下,作为程序员,初入职场时你碰到的问题大概就知道了。

就像开头所说,大多数旁观者,包括程序员本人,都会认为「只要纯粹地编程就可以了」,也不排除部分同胞们至今也没意识到这其实是一个问题。

「纯粹地编程」,对于程序员来说,尤其是高阶的程序员,真正敲代码的时间并不是Ta工作时间的大头,甚至是很小的比例,时间花在哪儿了?

根据作者的章节名大致概括了下:理解问题、评估问题、解决问题、与客户沟通、与团队相处。

这些工作,至少从字面上来看,似乎都跟「编程」没有太大关系。但其中任何一点处理不好,就无法真正静下来安心编程。如果说这是一场战争,编程更像是最后一击,而在此之前,清理战场、粮草先行、排兵布阵,所有一切准备妥当之后,编程只是最终落地的一个操作。

很多程序员同胞们大概会不服气,程序员就应该单纯地敲代码,安安静静地敲代码,与客户沟通、预估问题,那是业务分析或者项目经理的事儿,程序员不掺合具体业务,只需要知道系统逻辑就好了,至于这个功能具体是为什么业务服务,那不是程序员应该关心的事儿。所谓「分工明确」。

分工明确当然需要,但更多地应该是「不要在不了解背景的情况下越界越权」,比如,程序员不能为了实现起来简单就强行要求去更改设计,设计也不能为了炫酷但无实际用途的效果去逼着程序员耗费巨大精力去实现。

但对于程序员而言,「埋头纯粹编程」的时代已经过去了。

为什么要把按钮放到右上角而不是左上角

为什么节点A到节点C中间必须经过节点B

为什么用这种数据格式而不是另外一种

为什么要控制前端频繁刷新的次数

这些乍一看是技术问题,但根本原因与设计、业务密不可分,如果现在作为程序员的你不需要去考虑或者从未碰到过类似的疑问,那么一定有一个人充当了桥梁的作用,把这些业务和设计的问题直接转换成了技术方案给到你,你只需根据这个方案去编程,勿需考虑这其中的缘由。那么,从不可替代的角度来考虑,你和Ta谁更容易被替代?

最早的理论是要专要精,把自己熟悉的领域吃透就行,所以我们有「前端开发」「界面设计」「产品设计」「数据库」「后端开发」这些不同的角色。而当「全栈工程师」这个概念出来的时候,不同的声音也出来了,「全栈工程师」实际上是为了降低沟通成本而生的,让前端工程师和后端工程师去沟通,估计得费很大劲,结果还是鸡同鸭讲,全栈工程师就像是一瓶万金油,可以独挡多面。

所以,发展到今天,对于一个优秀的程序员而言,不仅要精,还要泛(全),有一项专业技能,除此之外,周边涉及的技能,不说熟悉,但至少要了解。这样不仅可以极大地降低沟通成本,同时也能做到心中有数,遇到问题不至于乱了阵脚。

这点对于其他职业也是如此,有时候我们需要适时适当地「跨界」,充分掌握需要时间、精力和勇气,但至少你要知道「界」在哪里,包括哪些,这样视野才能越来越开阔,提出的方案不至于被自己的专业所限。比如,有些功能配合硬件实现更有效,但如果你对硬件完全不了解,大概就只能去考虑纯软件的模式。

当然了,就像作者所说

这可能很主观的,所以,这篇文章注定不适用于所有人,并且有的内容有点武断。我尽量写一些程序员在ta的工作中,非常可能会遇到的事情。大部分这些问题以及它们的解决方案在人们的环境中如此普遍,以至于我(说的)可能有点唠叨。尽管如此,我还是希望这篇文章是有用的。

还说回到作者写这篇指南的初衷

当我21岁时,希望别人告诉我的事

料想作者应该已经过了21岁这个年纪,而且估计过了好些年了,所以回过头来去看这些年的经历,才码了这么多字,希望能给后来者带来帮助。但这种感受,也只有回头时才能领悟,当下或许无法感同身受,但没有关系,就当一部前辈的辛酸血泪史看看也是有益的,至少当你碰到类似问题的时候,会想起有这样一个人写过这么一段文字。

作者写的这篇指南,有很大一部分内容是在写「如何提升自我并做好工作」,这部分内容对所有人都适用,不仅仅针对程序员。有兴趣的可以回复 How to be a programmer 查看。

  1. 程序员必逛的同性交友网站😏,其实是一个开源的代码托管平台,前不久被微软收了 ↩︎


撒欢吧
谈理想
聊人生
讲故事
相对论
花火田丁
微信号:huahuoding
花火田丁
不折腾不人生