On Being A Senior Engineer
https://www.kitchensoap.com/2012/10/25/on-being-a-senior-engineer/
senior engineer不仅在技术能力上要强,在工程实践以及团队协作上也要表现出成熟。这种成熟主要体现在自我管理和团队管理上。
成熟工程师的必须具备的一些特点:
- Mature engineers seek out constructive criticism of their designs. 对他们的设计寻找批评性意见
- Mature engineers understand the non-technical areas of how they are perceived. 理解在非技术领域其他人对他们的看法
- the degree to which other people want to work with you is a direct indication on how successful you’ll be in your career as an engineer. Be the engineer that everyone wants to work with. 愿意和你合作的人越多,那么你就越成功
- Now this isn’t to say that you should shy away from giving (or getting) constructive criticism on the work produced by engineering (as opposed to the engineer personally), for fear of pissing someone off. There’s a difference between calling someone a moron and pointing out faults in their code or product. 不要担心会惹怒对方而不敢于说出问题
- Mature engineers do not shy away from making estimates, and are always trying to get better at it. 这里作者的意思是,因为某些不确定性而犯下错误。不要害怕这类错误,让自己更会控制这种不确定性。
- Mature engineers have an innate sense of anticipation, even if they don’t know they do. 时刻考虑到预期:请求增长,压力变化,资源开销等,所有会影响到工程方面的因素都有预期,并且做好预案。
- Mature engineers understand that not all of their projects are filled with rockstar-on-stage work. 不是所有的项目都是具有挑战性的工作。不过即便是在短时间内完成无聊的工作,也是需要很强的技巧的。
- 这个让我想起了费曼的一句话:以新的视角来看待事物是非常有趣的事情。一件事物即便被反复研究透彻了,但是依然可能有新的视角去观察,获得新的洞见;无聊的工作,即便其他人看起来无聊,但是以不同的视角和方式去完成它,也依然能提升自己的能力和理解。比如不同机器之间文件同步,如果只是简单地看待它,会觉得是无聊的工作,可以有人深入去研究这个问题就可以做出Dropbox产品
- “Sometimes the saving grace of a tedious task is their simplicity and maturity manifests in finishing them quickly and moving on. Sometimes tasks are tedious because they require extreme discipline and malleable attention span. It’s an odd phenomena that the most tedious tasks, only to be carried out by the most senior engineers, can also be the most terrifying.”
- Mature engineers lift the skills and expertise of those around them. 利用好周围人的技术和专长
- Mature engineers make their trade-offs explicit when making judgements and decisions. 在做决策时懂得取舍
- Mature engineers don’t practice CYAE (“Cover Your Ass Engineering”) An example of CYAE is “It’s not my fault. They broke it, they used it wrong. I built it to spec, I can’t be held responsible for their mistakes or improper specification.”
- Mature engineers are empathetic. 同理心
- They don’t make empty complaints. 避免没有用的抱怨
- Mature engineers are aware of cognitive biases 意识到自己会存在认识偏差
The Ten Commandments of Egoless Programming 编程中避免过于自我的十条戒律(侧重自我管理)
- Understand and accept that you will make mistakes. 你肯定会犯错(参考之前“不要做CYAE”)
- You are not your code. Remember that the entire point of a review is to find problems, and problems will be found. Don’t take it personally when one is uncovered. (你和你的代码不是一回事,这样当别人批评你的代码时,你才不会认为他是针对你)
- No matter how much “karate” you know, someone else will always know more. 术业有专攻
- Don’t rewrite code without consultation. There’s a fine line between “fixing code” and “rewriting code.” Know the difference, and pursue stylistic changes within the framework of a code review, not as a lone enforcer. (fix code 和 rewrite code是有差别的,如果是rewrite code的话,那么最好向别人咨询和讨论下,这样才不会成为个独行侠)
- Treat people who know less than you with respect, deference, and patience.
- The only constant in the world is change. Be open to it and accept it with a smile. 与时俱进
- The only true authority stems from knowledge, not from position. 权威来源于知识而非地位
- Fight for what you believe, but gracefully accept defeat. Understand that sometimes your ideas will be overruled. Even if you are right, don’t take revenge or say “I told you so.” Never make your dearly departed idea a martyr or rallying cry. 为自己的理念争辩,但是接受被否决。(这让我想起Dalio的原则里面说到,每个人都要表达自己的看法,但是决定最终是通过完全透明的加权式决策确定的。一旦决定做出,每个人都要放下自己的之前的看法接收决定)
- Don’t be “the coder in the corner.” Don’t be the person in the dark office emerging only for soda. The coder in the corner is out of sight, out of touch, and out of control. This person has no voice in an open, collaborative environment. Get involved in conversations, and be a participant in your office community. 别自己窝在角落里写代码
- Critique code instead of people – be kind to the coder, not to the code. As much as possible, make all of your comments positive and oriented to improving the code. Relate comments to local standards, program specs, increased performance, etc.
Dirty secret: mature engineers know the importance of (sometimes irrational) feelings people have. (gasp!) 成熟的工程师可以可以感受人们的情绪,并且理解这些情绪的重要性。
How people feel about technologies, technical decisions, and technical directions is just as important (if not more) than the facts about the details. Mature engineers know this, and adjust accordingly. Again, being empathetic can help you understand how another person on your team feels about a technical decision, even if they themselves don’t have an easy time articulating why they feel that way.
Mature engineers understand this phenomenon when making a case to use technology that carries baggage, even if it’s irrational. Convincing a group to use tools and patterns that they aren’t comfortable with isn’t a straightforward task. The “right tool for the job” maxim also has (sometimes unquantifiable) comfortability as a parameter.
For an illustration of how people’s emotions drive technical decisions and opinions, read any flame war about anything, ever.
“It is amazing what you can accomplish if you do not care who gets credit.”
This quote is commonly attributed to Harry S. Truman, but it looks like it might have first been said by a Jesuit priest in a different form. In any case, this is another indication you’re working with a mature engineer: they hold the success of the project much higher than the potential praise they may get personally for working on it. The attribution of praise or credit can be the source of such dysfunction in an engineering-driven organization, and I believe it’s because it’s largely invisible. (功劳分配机制会导致组织的功能失调)