开发者福音:如何成为一名高级开发人员_如何可以开发到高端人士-程序员宅基地

技术标签: 社区交流  销售面谈  高级开发  技巧  成长技能  


这是《程序员希望提升自身技术》系列的第二部分。 Part 1 带我们完成了最基础的阶段,在那部分我们着手寻找最有效的方法去完成一个合格开发者从无到有所需要的东西。今天,我们将进行更深入的讲解。


这篇文章是写给所有已经有几年企业工作经验并希望提升自己能力的开发人员,程序员,码农的(或者那些希望找到一 个正确学习路线的新人)。这篇文章也是写给那些怀有一个简单希望的人: 想成为一个高级开发人员并在所属领域有所成就。 读完这篇文章后,你将找到提升自己的合适路线和最好资源,进而成为高级开发人员。下面让我们开始吧。

免责声明:就像生活中的所有事情,你总能按照自己的方式去做。尽管这并不意味着它是唯一的方法,但它是我在自己的职业生涯中,通过多年与一些社区高级和德高望重的开发者对话和交谈总结出来的一套方法。这篇文章是我收集的所有具有共通性的东西。更进一步讲,这不仅仅是一篇教你怎样变成一个更好的开发者的文章,它更是教你怎样用高效合适的工具去优化你的时间,使你能够享受生活的文章。这种学习方式将使你终生受益。

我们要的是什么?

我们都力图在工作上做得更好。具体做什么不同的人有不同的看法。然而,大部分人应该会同意如下基本内容:

  • 我们不希望一生都被视为“不称职者”

  • 我们希望得到同事的尊重

  • 我们希望能感受到智慧和成就

  • 我们希望得到赞赏

为了达到上述目的,我们不能停留在过去的荣誉上,并期待好事情主动来找我们。特别是在编程的世界里,技术总是在变化,巨大的信息量把我们淹没,我们应该把注意力集中在成长和学习上,而不应浪费掉。随着越来越多的开发都从高校和和训练营中走出,我们需要让我们的技能更好,并在学习方式上要做到灵活和高效。说的够多了,让我们开始吧。我们会尝试采取最好的办法。

什么是高级开发人员?


一个通晓多种语言的代码,可以用10种不同的编程语言建立自己的 Jarvis (马克·扎克伯格的 Jarvis——他的人工智能助理)不会使你成为一个高级开发人员(尽管你很有才华)。这是因为高级的开发者是能带来增量效益的人,他能带领团队一同成长,并努力实现产品的商业价值。如果你的编程能力卓越,但缺乏良好的沟通能力,或不能向顾客传递产品的实际价值,你就算不上高级开发者。这是重要的一点:你带给你的公司/新创办的小公司/生意以价值?如果你是公司里少数几个能给公司创造重要价值的开发者之一,你就算得上的高级开发者。高级开发者不只是另一个头衔,而是用你的经验提供真实利益给利益相关者的能力。

我怎么做才能成为高级开发呢?

这部分可能就是你一直所期待的。让我们深入的思考,是否我们能做成所有事。我们一起学习一下面的主题。如果你积极的实践下面的技能,那么你将会甩其他人几公里外。我称它为开发者福音: 在某个领域,总会有人比你更有经验,但是你可以追求精益求精。积累各种各样的技能,你提升的效果将立竿见影。这不仅让你成为更好的开发者,也会增加你整体的幸福感,因为你在为人们奉献真正的价值。

关于学习,你需要完全集中注意力在一件事上。然而,这不是生活中的样子。只有一项技能很难生存下去。尤其,在像技术这样日新月异的领域(谁知道5年后机器学习工程师会成什么样子呢?),你需要多种多样的技能,这些技能让你有更强的适应能力。

成为一个高级开发人员,你需要学习 6个核心技能。

1. 技术技能

这是大多数人首先想到的技能,但这只是众多技能的一部分。技能很重要,容不得半点含糊。高级开发人员需要花时间去了解一门技术的来龙去脉。为什么这个问题会出现?为什么这个框架会存在?这个库正在解决什么问题?作为一名开发人员,你需要有对所有能受益于开发生命周期的工具和想法有好的理解力,而且能选择对项目有最大积极作用的工具。而不是去专注于每一个新版本的超级华丽测试框架的特性,相反地,当他们试图为公司解决一个实际问题时,他们会更专注于每个测试框架的优点和缺点。他们会问些类似于“为了提供一个更好的产品,在我们持续交付的过程中哪些工作可以被优化呢?“的问题。


他们也知道事情是如何连接在一起的。要开始这样的考,就要建立自己的思维图。你可以用它将学习提升到更高的层次(给 Javascript 开发者思维图)。思维图将帮助你的大脑连接不同的想法和技术。
示例: 如果我是 Javascript 开发者,以 Cory House 的课程为例,你将会了解到在 JavaScript 环境连接点。在一个行业中,一旦你掌握了相应的工具和技术,你就需要创建思维图,解决产品规模扩大时所面临的问题。在头脑中有上述的连接关系,通过更广泛的视角,你会把公司的主要资源集中在关系重大的事情上。

如果你仅通过实战课程学习编程,或者没有计算机科学的学位,那么你需要学习数据结构、算法以及其他计算机科学的主题。虽然架构和技术在变,通用的基本准则是不变的。 通过学习高级的主题,会再次意识到:虽然时间在变,语言在变,但大多数软件问题以及好的实践不变。这两本书链接 (Rob Conery) 、 链接 (Gayle Laakmann McDowell) )是提升你技能的最好工具。虽然它们只是概览,但能为你将来的学习打下坚实的基础。

收听像 Jeff Meyerson 的 软件工程师日报 的播客节目,你能时常关注当下的问题,并且用未来的视角看待这个行业。

2. 团队技能
这是一个经常被忽视的技能。你如何与团队成员合作?你是否在审查 PR(pull request)时傲慢并自以为是,并促成了一个有毒的文化产生?还是说你体贴、合作以及会鼓励你的团队成员?高级开发者从不自吹自擂。他们知道自己很优秀,不需要向别人证明自己。他们编写干净简单的代码,而不是写团队成员读不懂的代码来炫耀他们的技能。他们乐意帮助别人,也会在自己不知道的时候提问。

这就是情商的用武之地。社会心理学是提高这种技能的重要工具,没有什么比著名的 人性的弱点 更值得一读。请记住:如何能让你周围的人变得更好?如果你的团队中有 5 个人,1 + 1 + 1 + 1 + 1 应该大于 5,因为你应让你周围的人变得更好(别纠结纯粹的数学理论了……让我继续)

如果你在一个项目里,或者你参加了一个团队,并能与团队很好地协同工作,你已经比大部分人都领先了。你也使管理者、主管、敏捷专家和 CTO 的生活更轻松。这些人会得到晋升,更重要的是,他们为公司带来了价值。

3. 客户/用户技巧
在与客户交谈的过程中,你能否清楚地了解他们的需求?当他们向你求助时,你能否明白他们正面临的问题?高级开发者能与客户单独沟通,是一个伟大的倾听者,会在了解所有情况后,向客户提供推进的建议。他们擅于建立关系,且具有很好的说服力,但这种说服不是强迫。他们明白客户与开发者的交易是一场互利互惠的游戏,详情了解。

最后,你需要能够向非技术人员解释复杂的编程概念。可通过观看教练如何分解复杂的主题开始培养这种技能。这是我最喜欢的教练,以及我的第二喜欢的教练。虽然他们教授的内容很难,但他们都有一个共同点,而这也是他们的厉害之处。

4. 成长的技能

高级程序员总是都会学习新的东西。但并不是花 14 个小时坐在电脑前阅读文章,而是采用更高效的方法,他们会与其他开发者一起交流,互相询问问题和解答问题。他们不会只专注于一项技巧。在某一领域你的能力可能是最强的,但是,如果你对于你要解决的问题没有一个全面的了解,就会在某个环节败下阵来。

他们持有成长的观念(相信智力是可塑的),并进行有目的的练习。他们明白学习所有的事情是不可能的,所以他们选择将时间花在他们喜欢的和最重要的事情上。

他们不会只是抱怨:“我讨厌这个类库!”很多时候,说出这类抱怨的人都是因为他们对这项事物不够了解。例如,有人会很自负地说:“我讨厌 jQuery,只有低水平的开发者才使用它。”但在高级开发者眼里:“jQuery 是 Web 开发的重要工具,是非常流行的 JavaScript 框架。”他们喜欢并尝试着新鲜事物,在说出“讨厌”某一事物之前,会先去学习和了解它。

5. 销售/面谈技巧
高级开发人员能获得资深职位,因为他们擅于与上级领导沟通。他们能很快把握雇主或商业需求,并表现出能很好满足这些需求的形象。高级开发者自信却不自傲,他们有足够的信心完成指定任务,并能在高压下执行。而且他们也有充分的但是挑战更高层的职位。销售和谈判看似与技术无关,却是工作中并不可少的能力。

6. 社区技能
高级开发者贡献于开发者社区,不管是技术会谈,主持会议,贡献源码,还是发表文章。他们需要与整个社区的工作者进行沟通交流,拓宽他们的视野,因此他们在整个产业中充当的是分享信息资源的角色。这就好比是一次旅行:在与他人交谈的过程中了解的文化越多,你对人类之间的差异的理解就越深入,就越能以欣赏的眼光看待他人。

写在最后

如果你能在工作中主动运用这些技能,很快就能看到自身的改变。这篇文章最重要的主题就是:热爱你的工作。如果你并不喜欢每天学习计算机科学和软件开发技术的过程,你永远不会成为一个高级开发人员,因为你缺乏进步的动力。 激情不是三分钟热度,真正的激情产生在你掌握一个技能之后。如果你已经努力成为了某个领域的专家和领导者,已经掌握了这些技能,那么现在,尊重与帮助他人能让你获得持续的进步。 这就是你如何培养你对工作的热爱的方式。

结论

如果你已经学会了代码并且正在寻找你职业生涯的下一步,你需要以不同的方式思考。你怎么能脱颖而出?你怎么能成长?你如何帮助人们解决实际问题并提供价值?你要成为一个高级开发人员就不能只做简单的事情。你做的事情推动并挑战你的思想和舒适程度。你每天不断的学习和调整,就像你第一次写代码。每一步都很小,但在一生的时间里,一小步就会变成一英里。永远不要停止阅读和学习,但也要知道,你所花的时间哪些是有价值的,哪些是没有的。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hj7jay/article/details/68059674

智能推荐

linux配置网卡脚本,自动生成linux网卡配置脚本分享-程序员宅基地

文章浏览阅读642次。补充:这是对于第一次添加的网卡有效,如果需要重复添加和删除后自动配置,需要更改脚本,改为根据ip a命令的信息来修改。复制代码 代码如下:#!/bin/bash#update:2013-02-25#author:ihuotui#version 0.1cdate=$(date '+%Y%m%d')num=$(ifconfig -a | grep eth | wc -l)echo "ethX=" $n..._脚本 添加网卡配置文件

冈萨雷斯 《数字图像处理 Matlab》版图像素材和源代码_冈萨雷斯数字图像处理matlab版图片-程序员宅基地

文章浏览阅读7.2k次,点赞17次,收藏58次。源代码:http://fourier.eng.hmc.edu/e161/dipum/图像:http://imageprocessingplace.com/DIP-3E/dip3e_book_images_downloads.htm_冈萨雷斯数字图像处理matlab版图片

和plc哪个简单点_三菱FX PLC入门之这磨人的PLC语法(下)-程序员宅基地

文章浏览阅读178次。戳上方蓝字"技成电工课堂”关注我们哦!终于写到了第三章的最终话:这磨人但又该死甜美的梯形图。梯形图是目前使用最多的PLC编程语言,也是所有漂流在PLC学海的历险者必须要掌握的语言,包括我这只被海浪拍死在沙滩的小白。现在就让小白我以PLC初学者的身份来说一下梯形图的一些内容吧。一、梯形图与继电控制图梯形图是源自继电控制系统电气原理图的形式,所以两者很相似。电气原理图中的一些继电器、接触..._plc哪个简单易学好用

LaTex的使用(一):图片的插入及排版方法_latex图片排版-程序员宅基地

文章浏览阅读10w+次,点赞741次,收藏3.1k次。在 LaTeX 中插图,首先要生成 格式的图片,有三种方法:NOTE:如果 visio 画图保存为 pdf 出现失真,解决办法是先保存为 图片,选择打印机,然后再用 shell 将 jpg 转换为 eps(第三种方法)在导言区添加宏包:将 图片和自己的 文件放在同一目录下,向 LaTeX 插入代码:解释一下每一句的功能:图片位置控制参数: 表示当前位置(here),也就是说图片将放在你设置的当前位置,但是如果这一页的空间不足以放下这个图片,此时图片会转到下一页; 顶端(top),此时优先_latex图片排版

freeswitch 权威指南 --- 基础篇-程序员宅基地

文章浏览阅读1.8k次。freeswitch 权威指南 --- 基础篇_freeswitch

ae表达式修复_AE脚本-AE模板表达式错误修复脚本WINMAC-程序员宅基地

文章浏览阅读2.3k次。2020/06/121.新增语法匹配规则2.新增CC2019以上版本语法3.2020/04/261.新增语法错误修复2.优化脚本扫描速度3.修复图形bug2020/04/121.更改语法匹配规则2.去除模板丢失、错误等提示3.自动修复模板合成、图层丢失等问题4.修复图层5000以上崩溃问题2019/12/101.修复win7 AE2018以下BUG2019/12/31.新增语法规则2.新增模板错误..._表达式修复脚本

随便推点

STM32F103VET6+keil5+STM32CubeMX 按键控制灯_keil5按键控制stm32led-程序员宅基地

文章浏览阅读3.1k次,点赞4次,收藏23次。本文是通过按键来控制LED的亮灭:(1)按下Key1,LED1状态反转(2)按下Key2等待松开后,LED2状态反转(3)按下WAUP,LED1和LED2熄灭1.选择自己的芯片的型号2.将时钟设置为外部时钟(如果对时间的精准度没有多大的,也可以使用内部时钟)3.设置外部时钟,选择自己合适的倍频4.根据按键原理图,设置对应的引脚,将Key1和Key2设置为GPIO_Input,输入上拉,WKUP设置为GPIO_Input,输入下拉,将LED1和LED2设置为GPI..._keil5按键控制stm32led

list 与 numpy.ndarray互转_list转np.array-程序员宅基地

文章浏览阅读3.3w次,点赞16次,收藏46次。一. python中 list 与数组的互相转换(1)list转arraynp.array(a)(2)array 转lista.tolist()二.区别python中的二维数组,主要有 list(列表) 和 numpy.ndarray(多维数组) 两种, 两种的区别主要体现在numpy.ndarray 支持更多的索引方式,下面通过代码来看一下两种数据类型..._list转np.array

WiFi基本知识总结 --- 通信框架及基础概念说明-程序员宅基地

文章浏览阅读1.1w次,点赞22次,收藏183次。IEEE 802.11协议族定义了无线局网的MAC和PHY层标准,下面总结常见的IEEE 802.11类协议。IEEE802.11系列常见协议•11a: for5GHz•11b: for2.4GHz•11g: for2.4GHz•11n: for5GHzand2.4GHz将上面提到的协议,整理如下:802.11MAC层相关标准:只要是无线网络里面的一些功能的规范,或是具体协议的体现,如QOS、MESH、错误检测、数据帧校验、无线安全标准;_通信框架

Linux安装deb软件包_linux 安装deb-程序员宅基地

文章浏览阅读1.9w次,点赞7次,收藏75次。Linux安装deb软件包1、判断系统版本(centos和ubuntu版本判断)2、ubuntu系列安装deb包:3、centos系列安装deb包1、判断系统版本(centos和ubuntu版本判断)centos:ll /etc/ |grep yumubuntu:deb属于ubuntu系统的安装包2、ubuntu系列安装deb包:dpkg -i 包名.deb# 出现依赖问题apt-get -f install# 重新安装包dpkg -i 包名.deb3、centos系列安装_linux 安装deb

Leaflet从入门到放弃(一)——地图初始化_leaflet中文文档-程序员宅基地

文章浏览阅读2.3k次,点赞2次,收藏8次。leaflet学习第一章,简单讲述了leaflet框架的概念及实现了地图初始化的功能。希望这对正在学习的你会有帮助。_leaflet中文文档

opencv 字符图象 开运算 闭运算_OpenCV图像处理-平滑处理、形态学操作-程序员宅基地

文章浏览阅读192次。图像平滑️ 模糊/平滑图片来消除图片噪声️ OpenCV函数:cv2.blur(), cv2.GaussianBlur(), cv2.medianBlur(), cv2.bilateralFilter() 2D 卷积️ OpenCV中用cv2.filter2D()实现卷积操作,比如我们的核是下面这样(3×3区域像素的和除以10): img = cv2.imread('lena.jpg')#..._字符进行开闭运算

推荐文章

热门文章

相关标签