我有件事要坦白。
我一直都在整个编程生涯里复制粘贴的。
说实话,这就是我这些年作为开发者混日子的方法。
在我工作过的每个团队中,我都会观察那些资深开发者在做什么。
我从一些很棒的公司学到很多,并且与我认为可能是天才的开发人员一起工作。
- 有一个人开始了一家价值数百万美元的公司。
- 另一个人编写了一个你可能听说过的一个流行的单元测试框架。
- 最后一个人直接指出我在胡说。
我从这些开发者身上偷取了一些东西来加快了自己的职业发展。
我一直都很走运。
我住在硅谷所在的旧金山湾区,这可以说是科技世界的中心。每个怀揣梦想的程序员最终都会以某种方式来到这里。
你也不一定需要运气好。
我想分享从这些角色中学到的经验,这些经验帮助我远离平庸,也可能对你有用。
没尝过好的,就认不清什么是坏的。在我遇到这些超级开发者之前,我的职业目标定得太低了。30岁开始学编程时,我只感到很幸运有人愿意雇用我。我的主要目标就是保住工作。
我希望自己能做个普通人。
我还是没做到。
这里有一些你常会从不太厉害的开发者那里听到的话。
“在我的机器上能用”
“我不知道它是怎么工作的,但它就是能。别碰它。”
“我只是写代码,对业务那边的事不太了解”
“我觉得挺好的!”
原来,我说的都是这些。
那最后一句话差点让我丢了工作,不过很快我们就会谈到这件事。
也不必像我这样在十年内频繁跳槽六次,最终才能成为略高于平均水平的程序员。
这里是我遇到过的最聪明的技术宅那里学到的三点体会。
沙拉爱好者我们就叫他唐好了。
首先,这小子真是个天才。
我能看出来,因为在我们第一天和CEO、CTO一起吃饭时——这人用手抓沙拉。
他问是否可以早点回去,因为他累了。
他在大白天躺在辦公室的沙發上睡覺。
只有天才敢这么干才不会立刻被炒鱿鱼。
他四十岁那年从医生转行做软件开发,我认识他时他已经五十几岁了。
我是作为开发者度过了第三年,觉得自己已经是中级水平了。
不对。
我和Don在上班后的前两周一起编程,很快就意识到自己是多么的菜鸟。
Don 使用他为我们使用的框架编写的库,为我们创建的功能编写了这些功能的测试。
我这辈子从来没写过试卷。
唐用快捷键飞快地在终端和代码编辑器之间切换。
我没有时间去做那件事。
我只是希望事情能顺其自然。
Don 不接受我这种拼命让它工作的风格。他坚决不与我合作,直到我掌握了 VS Code 的键盘快捷键,以使合作更加愉快。
如果我没给一个功能特性写测试,他肯定不通过。
当我求助时,他却不直接告诉我答案,而是告诉我可能找到问题所在的地方。
我们只一起工作了9个月,但这段时间是我职业生涯中最具影响力的时期之一。我掌握了测试的技巧,理解了工具学习的重要性,以及如何在快速完成任务和确保正确完成任务之间找到平衡。
据我所知,他和别人一起创办了一家价值几百万美元的软件公司。我敢打赌他还是用手抓沙拉。
地狱使者您好,您还没有提供要翻译的具体英文文本,所以我还不能给出中文翻译。请提供具体的文本内容,这样我就可以帮您翻译了。(注:请直接提供您需要翻译的英文文本,以便我能给您准确的翻译。)请提供您需要翻译的具体英文文本,谢谢!… 或许是天堂来的评论者我以前在他审代码的时候很紧张。
总是有一二十或多条评论。
有时他会提出一个全新的点子,每次都巧妙地另辟蹊径。
“我为什么没想到?”
我听说他对每个人的代码都很挑剔。
当我审阅时,只收到了几条小小的批评,我感到很自豪。
现在轮到我了——我就像邮局里的员工一样在机械地处理代码审阅。
“挺不错!”
看起来不错。
这个团队全是高级别的开发人员。我信任他们已经审查了自己的工作。这种审查不就是走过场吗?
对吧?
一个下午,我收到了“Parker”发来的一条让人摸不着头脑的Slack(一款即时通讯软件)消息。
“嘿,哥们——你现在有空聊会儿天吗?”
我心跳加速了。
他通过视频聊天问我为什么接受了一次最近的代码审查,然后一一指出了那些显而易见的错误。
“你怎么没注意到这事儿?”
这是一次让我感到尴尬的艰难对话。
他是对的。
我甚至没有做到最基本的要求,我们差点发布了可能让用户不爽并导致应用挂掉的代码。
我道歉了,接着我决心成为团队里第二好的代码审查者之一。
“帕克,你是怎么做的代码审查呢?”
他展示了他是怎么做的,
- 在查看代码之前,先本地运行代码并测试其功能。如果运行不成功,就不用再审查了。
- 逐行检查新代码,弄清楚新增了什么。
- 提出问题来澄清不明白的地方。
- 针对大型审查,找个时间让开发者解释一下代码。
- 每天早上开始工作前先审查,避免任务间的切换。
哇哦!
那比我之前做的事情复杂得多,真是复杂多了。
我决定继续这样做,避免再闹得不可开交。
年终总结时,好几个队友夸我写的代码检查,经理也夸我这么仔细。
我觉得自己像个乖小孩。
流行语达人在之前的一家公司,我和“杰姆斯”一起带了一个小的开发团队,最近。
作为我们团队的工程经理,我负责制定我们团队这个季度的技术规划。
我从来没有过这种能力。
最后,我们可以使用我一直渴望使用的技术,比如 NextJS 和 TypeScript。我们可以重写我多年前写的那个库。我敢说,我们甚至可以找到方法将 Kubernetes 集成进来。
这肯定会很棒。
我给他看了。
这些事情做了有什么用?他问。
我抛出了一些技术行话(我正在扮演新经理的角色,)。
“嗯,呃,静态站点生成可以加快加载时间,提升我们的SEO效果,而且我们的HTTP客户端使用的是一个过时版本的NodeJS,我们还可以用CLI工具来提升开发体验。”
尴尬得他都快受不了了。
“老实说,我真的不清楚你在讲什么。这怎么对这个季度的业务目标有帮助呢?”
…
说实话,其实没想过。
“布莱恩,”他说,“我们是给组织赚钱的。如果这些东西是必要的,或者它们支持某种业务,那当然没问题。否则,那只是些花里胡哨的东西。”
我回到了绘图板,和我们的产品团队聊了聊,了解公司真正需要什么,以满足下一季度的实际需求。
这并没有提到将网站加载时间减少200毫秒。
里面有一些有趣的挑战,我很乐意接受。
我本意是好的,只是走错了方向。
你将会成为谁?每个好故事都离不开一个英雄角色。
这些人在我职业生涯的各个阶段都是我所需要的英雄。我借鉴了许多他们的习惯,并将他们的流程和思维方式融入我的日常。总的来说,这些做法对我的职业生涯帮助很大。
不过我吃沙拉还是用叉子。
你知道一个好的故事还差点啥吗?
坏蛋
可惜的是,我可能在这些开发者心中扮演了反派的角色呢。
我那时候写的代码很粗糙,而且那个功能我花了很久才搞定,感觉像是个拖累。
我觉得那也行。
据说,如果你是房间里最聪明的人,那你可能就找错地方了。
说起来简单,做起来难。
如果从这些班达科特身上能学到一点东西,除了你应该写测试、关注业务背景以及认真审代码以外,那就是:
除了你应该写测试、关注业务背景以及认真审代码以外,那就是:
不想找舒服,找不舒服的感觉
和比你懂得多的人在一起,并观察他们,是成为在任何领域略高于平均水平者的最有效途径。
希望这能帮到你。