目录
「技术专家」是什么
最近公司开始整理职级通道。
大部分人上班其实就为两个东西在拼:职级和绩效。前面这个说明你的段位,决定了你的基本薪资(base 部分),后门这个说明你的表现,决定了你的浮动薪资(年终奖或者绩效等等)。
虽然结果的衡量主要看收入1,但它们显然不仅仅是钱的问题。
国内大部分企业的职级是乱套的,相对来说,外企做得早一点,所以一般会规整一点2。各个公司的职级发展到今天,已经逐渐标准化并且有了换算公式,你可以在levels.fyi上随时比较它们的要求和收入。
在国内离这样的标准和公开还有差距,只有一些坊间流传的匹配方式,并且大厂的职级这两年也在做一些优化。但靠着一线二线大公司牵头,产品研发运营等等岗位好像也是有了一个基本标准化的职级了。
本文所说的「技术专家」,主要是指软件工程师(包含开发、测试、运维等,但主要偏开发):
- 在专业领域,对自己所从事的职业具备一定的前瞻的了解,在某个方面有独到见解,对公司关于此方面的技术或管理产生影响;
- 对于复杂问题的解决有自己的套路,对于问题的识别、优先级分配见解尤其有影响力,善于寻求资源解决问题;也常常因为对于工作的熟练而有创新的办法,表现出解决问题的能力;
- 可以带小团队,可以独立领导跨部门的项目;能够培训和教导新进员工;
- 在圈子里有点名气。
对于国内公司,大概对标阿里的 P7 或者腾讯的 T3.1-3.2,如果在外企,则对标 Senior 以上(Staff 或者 Principle)。
没有菜谱只是品味
没有一个可以被所有人复制的成为技术专家的「菜谱」:你只需要打点计时,添油加醋,事情就成了。
你可能需要一些好的规划和好的习惯,但更多还是来自于大量地练习。
练习通常是从模仿开始的。我希望你的心态是让自己成为一个顶级的诗人,而我要干的主要是做个《唐诗三百首》的集子,作为你鉴赏和模仿的起点:好的品味是成功的一半。
另外,鉴于国内分享交流的意愿和系统思考的习惯等等原因,我列出的大部分都是英文的内容。紫荆吴彦祖说除开唐诗宋词其他的书都不要看中文的,我大体上是同意的,特别是在我们讨论的这个领域。
你的圈子
软件开发在技术层面外,主要是一个社会工程(Social Engineering),不是大英雄们躲在车库改变世界的工作。你获取再多的行业信息,读再多的书或者博客,参加再多的会议买再多的极客时间(霍老板不要打我),都没有你和谁一起工作,被什么样的人指导和影响重要。
如果你每周只有一个小时可以用来在职业发展的层面提高自己,滚出房间,约那些比你优秀的人聊聊。
基本功
有一些更基本的东西,包括计算机的体系结构、数据库等等,就不在这里罗列了,默认你从入行干到现在这些都已经掌握了。
经典论文
很多人从学校毕业之后就不看论文了,有些工程师会在工作需要的时候,看一些特别经典的论文。我自己的感受是如果时间有限,读一篇高质量的论文,比读完某本书的一些段落要有意义得多。我是 ACM 的付费用户就因为它有类似于 ACM SIGOPS Hall of Fame Award list 这样的精选集,Papers We Love也是一个找论文翻翻的好地方, Adrian Colyer 的 the morning paper也值得订阅。
下面这些是我觉得在这个分布式的时代从事软件行业一定要读的论文3:
- The Google File System
- CAP Twelve Years Later: How the Rules Have Changed
- MapReduce: Simplified Data Processing on Large Clusters
- Dapper, a Large-Scale Distributed Systems Tracing Infrastructure
- Kafka: a Distributed Messaging System for Log Processing
- Bigtable: A Distributed Storage System for Structured Data
- Large-scale cluster management at Google with Borg
- Dynamo: Amazon’s Highly Available Key-value Store
- On Designing and Deploying Internet-Scale Services
- No Silver Bullet - Essence and Accident in Software Engineering
- Out of the Tar Pit
- The Chubby lock service for loosely-coupled distributed systems
- Raft: In Search of an Understandable Consensus Algorithm
- Paxos Made Simple
- SWIM: Scalable Weakly-consistent Infection-style Process Group Membership Protocol
- Hints for Computer System Design
- Big Ball of Mud
- Harvest, Yield, and Scalable Tolerant Systems
- Mesos: A Platform for Fine-Grained Resource Sharing in the Data Center
书籍
论文、博客、讲座等等往往面向某个具体问题的解决。涉及到方法论或者体系化的知识,一般还得看书。下面这些是我觉得特别有用的,但是如果你还觉得不够,你在网上应该可以找到很多别的书单:
- A Philosophy of Software Design - John Ousterhout
- Thinking in Systems: A Primer - Donella Meadows
- Don’t Think of An Elephant! Know Your Values and Frame the Debate - George Lakoff
- The Goal: A Process of Ongoing Improvement - Eliyahu Goldratt
- Peopleware: Productive Projects and Teams - DeMarco & Lister
- The Innovator’s Dilemma: When New Technologies Cause Great Firms to Fail - Clayton Christensen
- Accelerate: Building and Scaling High Performing Technology Organizations - Forsgren, Humble & Kim.
- Becoming a Technical Leader: An Organic Problem-Solving Approach - Gerald Weinberg
- Good Strategy Bad Strategy: The Difference and Why it Matters
- Building Evolutionary Architectures - Ford, Parsons & Kua
- Escaping the Build Trap: How Effective Product Management Creates Real Value - Melissa Perri
- High Output Management eBook: Andrew S. Grove
- The Manager’s Path: A Guide for Tech Leaders Navigating Growth and Change - Camille Fournier
- The Mythical Man-Month - Fred Brooks
- The Phoenix Project - Kim, Behr & Spafford.
- The Passionate Programmer - Chad Fowler
- The Pragmatic Programmer - Andrew Hunt, David Thomas
- Resilient Management - Lara Hogan
- Software Design X-Rays: Fix Technical Debt with Behavioral Code Analysis - Adam Tornhill
认知
技术专家做什么
知道这个角色究竟是干什么工作的,是很有帮助的,有个专门的网站请一些优秀的工程师进行分享,此外下面的这些也不错:
- On Being A Principal Engineer - Silvia Botros
- What a Senior Staff Software Engineer Actually Does, Part 1: The Role and My Tasks and Part 2: The Mindset and Focus of the Role - Joy Ebertz
- What does Staff level mean at GitLab?
- On Being a Senior Engineer - John Allspaw
- Thriving on the Technical Leadership Path - Keavy McMinn
- What’s a senior engineer’s job? - Julia Evans
如果成为技术专家
看看别人是怎么规划和发展的:
- Becoming a Staff Engineer – Interview with Kristina Fox, Staff iOS Engineer at Intuit - Kaya Thomas
- On becoming a senior technical leader - Jesse Pollak
- On Mid-Career and Managers - Ryn Daniels
- The Engineer/Manager Pendulum - Charity Majors
实操
当你有了技术专家的基本功和认知,在实际工作中怎么干:
- Being Glue - Tanya Reilly
- Computers can be understood - Nelson Elhage
- Effective Mental Models for Code and Systems - Cindy Sridharan
- 「I Wouldn’t Start From Here」. How to Make a Big Technical Change - Tanya Reilly
- Migrations: the sole scalable fix to tech-debt
- On Mid-Career and Team Dynamics - Ryn Daniels
- Reclaim unreasonable software - Will Larson
- Surviving the Organisational Side Quest - Tanya Reilly
- Systems that defy detailed understanding - Nelson Elhage
- Team Objectives - Marty Cagan
- Technical Decision Making - Cindy Sridharan
- Technical Research and Preparation - Keavy McMinn
- The Behind-the-scenes Work of Tech Leadership - Jean Hsu
- Understanding Project Management Will Improve Your Developer Job - Daniel Na
- Where to Start - Keavy McMinn
这里有这么多内容,看起来有一些吓人。但是相信我,如果你带着问题去读这些东西,它们比大部分的材料都要有趣。