6.1 职业阶梯
程序员本身也会根据其资质进行划分。以前有“码农”、“程序员”和“黑客”这样的称谓,但现在都用美国IT的称呼。
对于开发者来说,有6个主要级别:
- Intern Software Engineer
- Junior Software Engineer
- Middle Software Engineer
- Senior Software Engineer
- Tech Lead
- Principal Software Engineer
各个国家的某些参数可能有所不同,但大体意思如下:
Intern Software Engineer — 这是实习生。他们处于学习编程的过程中,没有商业经验或参与大型项目的经验。通常在经验丰富的同事的监督下工作。 他们在工作中的主要任务是学习代码库和软件开发基础,执行简单的编码任务并参与测试。
Junior Software Engineer — 这已经是程序员了,但没有严肃的商业经验或经验不足一年。 在更有经验的开发人员指导下工作,实现项目部分并参与代码审查周期。 这个职业阶段专注于技术技能的深化和理解项目任务。
Middle Software Engineer(或简称Software Engineer):在技术决策上有更多自主权,负责项目的重要部分,开始指导较不经验的同事并更积极地参加架构讨论。通常有2-5年的实际经验。
Senior Software Engineer:负责设计和实现复杂系统,提供团队内部的指导和领导,参与项目的战略规划并通常代表团队与客户和其他利益相关者沟通。通常有5-10年的经验。
TechLead:作为技术负责人,对项目的最终技术结果负责,指导开发,解决最复杂的任务,确保遵循技术标准并协调开发人员的活动。
Principal Software Engineer:在最高技术水平上工作,常常参与形成公司的技术战略,开发创新解决方案并确立技术标准,是技术领导者的主要导师并在复杂的技术问题上是关键专家。
大公司可能有额外的角色和子角色。例如,在Google有这样的角色:
- Staff Software Engineer (L6):对其部门的技术政策有重大影响。
- Senior Staff Software Engineer (L7):从事大规模和复杂的项目,确定公司的技术发展战略方向。
6.2 Lego-产品
很久以前(1975年),Pascal语言的创造者Niklaus Wirth写了一本书《Algorithms + Data Structures = Programs》。自那时以来,许多事情已经发生了变化。
现代软件产品与10年前以及20年前的产品完全不同。 1975年更不用说:从那时起已经过去50年了。
现代程序员不再手动编写程序。他更像是从现成的部分(库)中组装它,并编写代码来帮助这些部分交互。
现代软件产品可能由数十和数百个程序组成,其中一些在用户的计算机、移动设备上运行,而大部分在数据中心的服务器上运行。
许多这样的程序,如web服务器或数据库,已经编写好了。只需要正确配置它们即可正常工作。虽然随着时间的推移,配置过程可能变得如此复杂,以至于实际上变成了开发。🤦♂️
程序员不断与自己斗争。与其在不同程序中重复编写相似的代码,他们更愿意编写库,可以根据自己的需求进行配置(调整),并仅在必要的地方进行连接。
在过去的20年里,程序员编写了很多库、框架和开源存储库。 它们真的有几百万个。现在,从头开始编写整个代码被认为是不好的做法。相反,需要从优质和经过验证的解决方案中组装程序——库、框架、包和模块。
但这样的做法也已过时。过去10年的趋势是迁移到云——提供给你程序所需的一切的大型数据中心。想要数据库?我们这里有数百个供你选择。想要少见的 独特web服务器——我有。只要你有钱,任何愿望都可以实现。
6.3 “我是工程师” (c) Elon Musk
不再需要编写复杂而乏味的东西。现在,如果你需要某些很酷的复杂功能,总是有库。你只需:a)知道它存在,b)找到合适的(可能有几十个不同质量的替代品),c)了解如何将其集成到你的项目中。
这种方法使得工作变得更加有趣。现在你可以快10倍地为产品添加新功能。30年前,如果你需要一个web服务器,你需要自己编写。20年前——购买、安装和配置。现在——只需进入“云”的管理面板并开启它。
这也是Frontend流行的原因之一。复杂的后端现在可以用JavaScript和Node.js编写,或者只需在云数据中心中“启用”各种服务。Frontend不再严重依赖于后端的限制,彻底展开了它的威力。从它的受欢迎程度来看,它显然很好地履行了它的角色。
还有就是Frontend开发者的职业已经转变为Frontend Fullstack Software Engineer。 现代Frontend开发人员必须了解数据库的工作原理,以便合理地与其协作。 理解HTML & JavaScript, NginX以配置前端和后端的协作。Docker也是必须的——已经是行业标准。
现代开发与20年前的情况几乎不一样。现代程序员编写代码不超过50%的时间。其余的时间他在阅读文档,学习新技术和参加会议(会议)。独行的程序员早已成为过去。
GO TO FULL VERSION