热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发者涨薪指南:提升软、硬实力

推动开发者职业通道不断上升的自身因素主要有两方

作者 | 田玮靖

出品 |《新程序员》编辑部​​​​​​​​​​​​​​

“成长”是一个永恒的话题,伴随着生命的始终。而在生命中占据很长一段时间的职业生涯,是提及成长最多的时期。作为开发者,在职业生涯的不同时期会遇到不同的挑战。初入职场时,容易遇到技术瓶颈问题如某项技术怎么实现、代码质量如何提升等。在职场摸爬滚打几年后,开始管理技术团队,此时如何与人沟通,说服大家为了共同的目标努力,以及怎么提升团队的研发效能等管理问题扑面而来。如果后续担任企业CTO或选择技术创业,还将思考技术如何更好地赋能业务发展、如何排兵布阵和断事用人、如何布局未来及制定战略方向等问题。

不难发现,推动开发者职业通道不断上升的自身因素主要有两方面:硬实力、软实力。前者主要表现为技术开发维度,而后者涵盖了洞察力、判别力、决断力、沟通力、管理力、领导力等多个维度。如何提升软、硬实力?或许我们可以从已经获得成功的前人身上汲取经验。

《新程序员》001期-004期

在《新程序员:我们的技术时代,我们的程序人生》一书中,多位知名“技术大神”和正在奋斗的开发者分享了他们的成长经验。其中,C++之父Bjarne Stroustrup、MySQL之父Michael “Monty” Widenius、SUSE CTO Brent Schroeder;阿里巴巴CTO程立(鲁肃)、技术创业者和投资人戴志康、游戏开发者云风提到了技术能力与管理能力的提升,希望能给渴望提升实力的开发者带来启发。

1、硬实力提升

初级开发者:训练逻辑,打好基础

作为与数据打交道的初级开发者,严密的逻辑思维是不可或缺的,也是写好代码的基础,而能够让逻辑思维升级的重要手段便是学习数学。

被称为“C++之父”的Bjarne Stroustrup(以下简称Bjarne)曾这样建议:“程序员在数学上付出的努力永远不会白费。学习数学是训练我们大脑的最佳方法之一。”Bjarne用其四十余年的编程经历告诉开发者,虽然在很多应用程序的开发中不会用到数学,但在构建基础设施或大规模部署应用程序时,容量和成本问题忽视不得,为了获得更大容量的同时使用更小的成本,算法就会起到关键作用,而如果不具备深厚的数学知识,或许得不到最优解,甚至会带来危害。

另外,对于大多数开发者来说,学习数学的用途主要体现在概率和统计方面,用来判断代码速度是否够快、某个功能是否有足够的扩展性、某个故障的发生概率有多大及其影响范围有多广,等等。

《新程序员》资深开发者:追根溯源、融会贯通

从普通开发者成长为资深开发者,再从资深开发者升级为“大神”开发者,最重要的能力不是代码写得多巧妙,而是追根溯源、融会贯通的能力。

知名技术创业者、天使投资人戴志康在接触无数技术创业者并阅览他们的创业经历后,总结出优秀开发者和普通开发者的区别:优秀的技术人就是能够从更高的角度看问题,‘知其然知其所以然’,而普通的技术人,通常是将别人抽象、总结的东西拿过来,不善于或不习惯亲自探究‘所以然’,这时总会碰到‘这个能做,那个做不了’的问题。为什么优秀的技术人很少遇到这种情况?因为他的思考框架已经涵盖技术周边(即横向如前端、后端、运维、产品等)和技术纵深(即纵向如架构、算法、数据库、操作系统等)两个方向。此外,他还可能触类旁通发现许多事物的类似规律。

可见,开发者变“强”的关键在于突破横、纵两个方向的认知维度。而对于突破认知维度的方法,戴志康以自身实践的经验举例:“二十年前我用PHP语言开发软件,PHP的上游是什么?是操作系统、数据库等基础软件。而在数据库中,有SQL语句、执行计划、存储结构、存取机制等,逐一钻研。因为只有清楚SQL语句的上游需求,这条SQL语句才能写好,只有了解操作系统执行逻辑,才能写好PHP。”正是通过不断地追根溯源,戴志康发现他的技术开发能力提升了一大截。

正所谓“实践出真知”,在计算机的世界中,很多问题通过假设、验证、分析的方式都能找到答案,如怎样的代码会让程序运行速度加快,再如不同的文件尺寸和变量会对解释型语言的执行有什么影响。通过钻研和总结每次实践的结果,了解程序的运行逻辑。当一个开发者清楚自己写下的每一行代码会以何种逻辑、何种速度执行,以及带来何种结果时,他就突破了纵向的认知维度。而突破横向的认知维度,简单来讲是跳出岗位本身的限制,从全局思考上下游链路的需求、原理、方法等,并将技术逻辑运用到其他领域分析问题,做到融会贯通。

《新程序员》“大神”开发者:看透本质,将复杂的问题简单化

与追根溯源、融会贯通相辅相成的能力是看透本质,将复杂的问题简单化。

如果开发者可以用足够简单的方法解决根源问题,抛开中间的一些枝节干扰,那他就具备了所谓“10x程序员”的能力。就技术开发而言,很多年轻程序员都喜欢炫技,拥有近四十年的码龄的“大神”开发者云风年轻时也一样,但如今他认为炫技不能解决问题的本质。这与把事情做简单有什么关系?以前云风认为写出复杂的程序并且不出错是一种出色的能力,可随着时间的推移,代码需要被别人维护,可能还要和其他人合作,这时会遇到一个问题:怎么让代码更容易被理解?因此,开发者必需让代码足够简单,让别人一看就明白。好代码是开发者的一张名片,什么样的代码是好代码?云风的编程经历告诉他,“并不是看上去好像没有问题的代码,而是看上去所有东西都清清楚楚,断定它肯定不会出问题的代码。

那么,如何写出足够简单的代码?除了上文提到的对程序运行逻辑的掌握,云风提到一项重要能力——评估事物和自身的能力。一方面要了解一件事情的来龙去脉,以及需要多长时间完成、需要什么条件完成,这是靠开发者经年累月的经验堆出来的,没有捷径;另一方面,要对自身有清晰的认知,这样才能规划好做事流程和用时,减少返工。

MySQL之父Michael “Monty” Widenius也发表过类似的观点:“写代码时要尽量将代码一次性写成,而不是写完后再没完没了的修改。”这也是他长久以来所遵循的编程法则。对于一个开发项目而言,普通开发者和“大神”开发者都可以做,但区别体现在哪?体现在“大神”开发者一周就能完成的任务,普通开发者需要一个月才能完成。因为当一个程序员经验不足时,他评估一件事可以用两天搞定,但他又花费更多时间来解决他做事过程中发现的问题,不停地改错和返工导致任务完成时间和预期出入很大,这就是评估能力的差异,因此,具备评估能力就是写出简单代码的开始。

《新程序员》004

2、软实力提升

技术层面的硬实力固然重要,但在开发者的职业通道中,不是只有技术专家这一个选择,还可以选择做管理者、创业者或大型企业的CTO等,这时,软实力就显得更为重要。有很多硬实力很强的资深开发者,因为无法突破软实力的限制,只能停留在技术开发领域。

技术管理者:人际交往能力比技术实力更重要

对于选择技术管理通道的开发者而言,SUSE CTO Brent Schroeder指出:与人交往的能力往往比技术实力更重要。在带领团队的过程中,思考的不仅是个人成长,更重要的是让团队成员如何更好地迎接挑战并实现成长、如何通过激励机制或发挥带头作用使整个团队得到提升。另外,对于表现欠佳的团队成员,管理者也需要加以引导甚至进行针对性的培训来鼓励他们,改善他们的表现。除了团队内部的管理外,团队外部的协作,如说服他们为共同的目标努力,也非常考验人际交往能力。但不幸的是,这种能力很难从课本上获取,只能通过不断地自我实践来培养。

不过可以肯定的是,人际交往的第一步是建立信任。在团队协作中,信任共事的人,接受他们做得不好的方面,以把整件事情做好为主。根据云风的经验,“每个模块都按照你的想法做,通常是行不通的。你可以找准你真正想要的那件事,围绕那件事情,把它做好,其他事情放心交给你的伙伴。接纳其他人的不同想法,求同存异,把整件事做好就可以了。”

CTO六部曲:跟随公司业务发展不断进化

随着技术管理者能力的不断升级,或许会成为大型企业或创业公司的CTO,此时,“核心不是看方向,而是怎么做好技术”,阿里巴巴CTO程立(鲁肃)根据其自身经历分享道。看方向是CEO的职责所在,而CTO需要通过技术让业务增长更加高速地增长,并保障业务不被技术拖慢增速。

通常,企业遵循着波浪式的发展过程:一开始要先找到一个方向,进入一个业务的轨道;如果这个方向判断准了,企业就会进入快速增长阶段;发展到一定阶段,就必须要脱离现有的惯性,再去找新的发展方向……在此过程中,CTO主要承担两份职责,一份是技术保障,重工程能力,另一份是组织能力,重领导能力。对于两份职责所涉及的不同事项,从个人层面而言,或许不能将每件事都做到极致,但“核心思考是,技术创业者需要跟着公司业务发展不断进化。”

程立根据其从蚂蚁技术到阿里巴巴经历的六个阶段,总结了CTO的六步曲:

  • 跟团队一起定义好目标,一起做成一些事情。

  • 多了解团队和业务,知道未来要去哪里,与团队共创一个愿景,点燃大家的热情。

  • 避免自己成为团队的天花板,把自己当成团队的地板,用人做事而非做事用人。

  • 别忘了“晴天去修屋顶”,永远居安思危。一旦危机出现,乐观地看待,每个危机背后都有机会,转危为机。

  • 不只看当下,也要布局未来,为公司建立技术纵深。在业务发展早期,技术的纵深就是一个点。当发展到像阿里巴巴现如今的规模时,技术纵深就是一个多面体,必须有充分的、多面的布局,才能支撑公司的发展。决定布局投入多少,要和CEO充分对焦。

  • 薪火相传,人才是公司未来发展的关键。阿里云曾经有一位技术负责人分享什么是一家公司技术能力的最高境界,就是谁来当CTO都能当好。

当然,无论是管理团队还是领导团队,二者的软实力是相通的,并不矛盾,可针对自己的不足之处进行逐一提升。只是成长没有捷径可言,需要投入足够多的时间,进行足够多的自我实践,在过程中讲究方法,时常回顾自己怎么才能把这件事学好、做好,发现偏差时及时修正。

3、《新程序员》48个程序人生故事的启发

做更好的自己

除Bjarne Stroustrup、Michael “Monty” Widenius、Brent Schroeder、程立、云风、戴志康的人生经验外,《新程序员:我们的技术时代,我们的程序人生》还邀请到了C#与TypeScript之父Anders Hejlsberg;PostgreSQL全球开发组联合创始人Bruce Momjian、Vue创始人尤雨溪、百度CTO王海峰、Caffe作者及阿里巴巴副总裁贾扬清、指令集创始人兼CEO潘爱民、OceanBase创始人阳振坤、LVS创始人章文嵩、科技作者吴军等各技术领域的先行者及代表人物,分享他们的程序人生经验及感悟。从技术开发领头人,到新生代程序员,他们的故事伴随着技术发展历程横跨了六十余年。

以技术名人堂、技术领导力、技术先锋、技术创业者、技术管理者、我是程序员、女性力量、技术向善、斜杠程序员这九个模块划分,通过48个程序人生故事,让你了解技术发展、汲取成功经验、获得成长方法、升级自我认知、认清未来方向。

《新程序员004》

「纸质书+电子书」同步预售

由CSDN策划出品,中国水利水电出版社出版,《新程序员:我们的技术时代,我们的程序人生》纸质书、电子书同步开启预售(2022年5月底正式发货),数量有限,先到先得!

现在,扫描下方二维码即可预定。

『纸质书+电子书』限时预售价:55 

​​​​​​​


推荐阅读
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • 如何利用 Myflash 解析 binlog ?
    本文主要介绍了对Myflash的测试,从准备测试环境到利用Myflash解析binl ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
author-avatar
思恋相依相惜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有