为什么高级 Android 程序员永远不必担心自己的技术过时?
代码审查礼节;
如何优雅地遏制范围蔓延;
如何向其他部门直观的方式解释高科技问题;
如何在生产任务爆满和日以继夜的比赛中保持镇定自若等。
我的这一回答获得了很高的热度,论坛中也有一些读者请求我将其中的内容整理成可永久保存的版本以便于打印出来阅读,因此我决定将该回答总结成文章发到 Medium 上。
**/r/cscareerquestions ** 论坛上的原问题:
我喜欢编程,甚至在业余时间都喜欢学习,但是我仍然觉得自己要学的东西太多了,就像在跑步机上一样,永远在被迫追赶,永远学不完。
我脑海里有个唠唠叨叨的声音告诉我,在这样一个瞬息万变的行业中呆着是很糟糕的。因为等我年纪大了,自己使用的工具就旧了、过时了,年轻时候学到的经验就没价值了。而且我还有其他业务上的事要忙活,学习新技术就更困难了。
回到一个老生常谈的问题上:公司有什么理由为我在旧技术方面的经验付钱?他们完全可以聘请更有活力的孩子。年轻人熟悉最新的技术,薪水却只用付我的 1/3(并且他们愿意工作到很晚)。
我觉得我可能应该尝试转型当个业务需求分析师、产品经理或者某种商业领域的人,因为这些类型的角色通常不会像程序员那么吃青春饭。
虽然我并不想这样,因为我喜欢写代码,但我觉得自己好像别无选择。毕竟我也只是一个普通的程序员,不是什么天才大牛。
作为一名程序员 ,编码硬实力固然很重要。而题主如果想不明白公司为何在花点小钱就能打发刚入行的新人的情况下,仍然乐于向我们这些“老年人”支付大笔工资,可以拿下面的问题问问自己:
你的代码的可维护性如何?是否有其他工程师不停地轻敲你的肩膀,让你解释你代码的每一行都是如何工作的?你的变量名具有描述性吗?你的方法是直观、易理解的吗?当你发现自己在复制粘贴很多行代码时,你是否能将这些代码的功能写入可重用的服务中?
别人能够从你在拉取请求中留下的评论中受益吗?你的反馈意见是有建设性,还是太过粗糙?当你发现别人的知识存在缺口时,你只是告诉他们“把这条线从 ABC 更改为 XYZ”,还是有能力引导他们认识到自己的方法可能不是最佳方法,让他们成长为更优秀的开发者?毕竟,同样是学习新东西,授人以鱼不如授之以渔。
如果今天有 100,000 个用户创建帐户,你的代码是否会开始引发大量超时和 500 个错误?你能保证公关能把这事儿兜住吗?你知道如何基准化你的更改并进行证明吗?
你如何将非常技术的问题分解为公司其他部门可以理解的简单语言?向市场解释为什么一个功能实际上不可行时,你是否会让大量的工程术语从嘴里流出来?
你对面向对象的编程有深刻的了解吗?你提出的系统架构是不是“顶多算说得通”?
你的写作能力如何?在回复电子邮件时,你是能把自己的意思表达清楚,还是发完邮件后同事仍然需要走到你的办公桌旁,来询问你更多的背景信息?
你是否会主动提出想法,使你的团队效率更高?当需要改动现有进程时,你是否能够向所有参与方说明收益?你能使所有人都对这一变化感到兴奋吗?你是否可以持续跟进,并确保新流程确实有效?
你尊重别人的时间吗?当你要求别人帮助你解决问题时,你能否准确描述你遇到问题的代码库的确切定位(如抛出异常的行号、你在问别人之前已经尝试过的 debug 方法,免得别人再浪费时间重复你已经做过的工作)?别人是否必须反复问你,才能从你嘴里撬出这些信息?在别人走到你办公桌前,你已经整理好要问的问题并在 MacBook 上打开了吗?
在与其他部门一起确定大型项目的范围时,你对要开发的新功能的问题了解得有多深入?在开始编码之前,你是否能够考虑到每个边缘情况?你是否能够及早识别范围蔓延并尽早制止,从而使团队免于周六加班?
你的多任务处理能力如何?你的大脑会超负荷吗?同样,在处理大型功能时,比如涉及 50 个文件的功能……你可以一次将它们全部保存在脑海中吗?你有养成扎实的记笔记习惯吗?你打算如何计划跟踪今天下班前弹出的 500 万件事?
当你编写的一段代码导致帐单页面出错,搞得团队首席工程师不得不取消他们的晚餐计划、熬夜帮你解决问题时,你会如何应对?你会情绪激动吗?你还能理性思考吗?你是否能够摆脱这种情绪,并提醒自己,地球上的每个开发人员每两天就会发布错误代码?
你了解业务运作方式吗?你了解为什么即使失业人数达到两位数,软件工程师也可以要求如此疯狂的薪水吗?为什么编程是如此宝贵的技能?为什么客户愿意为某些超级基本的 Web 表单向你的公司每年支付 50,000 美元?你是否觉得他们被骗了?
领导可以放心地让你去负责面试候选人吗?你是否擅长通过有限的信息来对人员进行分类,并可视化他们和团队的适合程度?你能识别出在什么情况下,在工程方面优秀的候选人却不能很好地融入公司文化吗?这种候选人你会建议录取吗?同样,即使你和候选人在 Zoom 里聊了 5 分钟就知道他不可能被录取,你是否还可以确保他仍然可以从你们的聊天中学到东西?毕竟,语言在网络上的传播速度是很快的。
假如今天是 12 月 28 日,你被困在办公室。你今年有点疯狂,在 9 月中旬就把今年所有的带薪休假糟蹋完了。此时此刻,同事们都休假出去 high 了。你还能按时上班吗?领导不在身边惩罚你,你是否打算半途而废?这种情形下,是否需要领导强迫你你才能尽全力工作?
机会成本是一件必须考虑的事。你在平衡技术债务和推动业务发展方面做得如何?你是否会重构发现的每个微小的编码样式问题?毕竟大家都很难承认“这段代码很烦人,但它确实有效,需要花费四个小时的清理时间,这段时间可以花在构建其他功能上,而这是很多客户都在请求的”。
你知道如何向你的下属反馈他们的绩效吗?你和他们有良好的工作关系吗?你是否将他们视为敌人?你是否正在积极尝试减轻他们的压力,使他们的生活更轻松?你是否曾经说过“你们那边有什么烦人的任务我可以帮忙削减吗”?公司雇人都是有原因的,你的下属可能比你想象的更有经验和资格。
你有能力扑灭生产大火吗?你是否会在遇到大麻烦时惊慌、不知所措(比如 AWS 中断使网站瘫痪、不小心搞丢了 customer_invoices 表单、某些错误导致了不同用户帐户之间的数据泄漏等)?你是会在压力之下崩溃,还是会在解决问题的同时保持镇静,并与其他部门进行有效的沟通?
虽然我说的话不能代表所有的初级工程师,但我确实知道自己八年前开始在该领域工作时,在情绪方面的处理是非常糟糕的。
那时的我极度自信,与人沟通很糟糕,不能毫不犹豫地处理建设性批评,为无关的小事与我的老板激烈争论,浪费无数宝贵时间来解决根本不重要的问题,总是觉得自己应该得到大幅度的加薪(却不付出额外的努力来赚钱)并为之苦恼和抱怨,天天花 45 分钟打乒乓球、玩游戏(在慢悠悠吃了一个小时午餐后)……
我为我的老板带来价值了吗?
是有的。
你能把当时的我放心地关 30 分钟,让我在此期间独立工作、不出幺蛾子、不拿头撞墙吗?
绝对不可能。
而高级开发者,就会在工作中解决问题,而非制造问题。
他们减少压力。他们按时完成任务。他们知道如何编写经得起时间考验、可维护的代码。他们值得更高的工资。他们对项目的方
向可以有准确的把控。他们可以发现当前流程中的缺陷,并使每个人都接受他们的想法以进行改进。他们可以指导应届毕业生。他们处事冷静,不会在周二与你的最大客户的电话会议上情绪崩溃、破口大骂。
很多人想踏实当个技术人员,并不想一直向上升去当领导当主管,我认为这种想法没什么问题。编程是目前最令人鼓舞的职业之一,许多企业愿意给经验丰富的“老兵”开很多很多工资,来保证业务进行顺利。
话虽这么说,总会有少数工程师最终决定有一天挂断 IDE,并开始过渡到管理层。
挺恶心的。
太长不看版:反正现在就我来说,转管理层这条路是可选的,但绝对不是适合所有人的。
如果你具有扎实的沟通技巧,并且确实愿意开会开一整天(这样你可以消除干扰、帮助队友争取更多时间来高效完成工作),那么你进入管理层就是非常有意义的。
评论