这是《程序员但愿提高自身技术》系列的第二部分。 Part 1 带咱们完成了最基础的阶段,在那部分咱们着手寻找最有效的方法去完成一个合格开发者从无到有所须要的东西。今天,咱们将进行更深刻的讲解。javascript
这篇文章是写给全部已经有几年企业工做经验并但愿提高本身能力的开发人员,程序员,码农的(或者那些但愿找到一 个正确学习路线的新人)。这篇文章也是写给那些怀有一个简单但愿的人: 想成为一个高级开发人员并在所属领域有所成就。 读完这篇文章后,你将找到提高本身的合适路线和最好资源,进而成为高级开发人员。下面让咱们开始吧。java
免责声明:就像生活中的全部事情,你总能按照本身的方式去作。尽管这并不意味着它是惟一的方法,但它是我在本身的职业生涯中,经过多年与一些社区高级和德高望重的开发者对话和交谈总结出来的一套方法。这篇文章是我收集的全部具备共通性的东西。更进一步讲,这不只仅是一篇教你怎样变成一个更好的开发者的文章,它更是教你怎样用高效合适的工具去优化你的时间,使你可以享受生活的文章。这种学习方式将使你终生受益。程序员
咱们都力图在工做上作得更好。具体作什么不一样的人有不一样的见解。然而,大部分人应该会赞成以下基本内容:算法
咱们不但愿一辈子都被视为“不称职者”编程
咱们但愿获得同事的尊重数据结构
咱们但愿能感觉到智慧和成就架构
咱们但愿获得赞扬框架
为了达到上述目的,咱们不能停留在过去的荣誉上,并期待好事情主动来找咱们。特别是在编程的世界里,技术老是在变化,巨大的信息量把咱们淹没,咱们应该把注意力集中在成长和学习上,而不该浪费掉。随着愈来愈多的开发都从高校和和训练营中走出,咱们须要让咱们的技能更好,并在学习方式上要作到灵活和高效。说的够多了,让咱们开始吧。咱们会尝试采起最好的办法。机器学习
一个通晓多种语言的代码,能够用10种不一样的编程语言创建本身的 Jarvis (马克·扎克伯格的 Jarvis——他的人工智能助理)不会使你成为一个高级开发人员(尽管你颇有才华)。这是由于高级的开发者是能带来增量效益的人,他能带领团队一同成长,并努力实现产品的商业价值。若是你的编程能力卓越,但缺少良好的沟通能力,或不能向顾客传递产品的实际价值,你就算不上高级开发者。这是重要的一点:你带给你的公司/新创办的小公司/生意以价值?若是你是公司里少数几个能给公司创造重要价值的开发者之一,你就算得上的高级开发者。高级开发者不仅是另外一个头衔,而是用你的经验提供真实利益给利益相关者的能力。编程语言
这部分可能就是你一直所期待的。让咱们深刻的思考,是否咱们能作成全部事。咱们一块儿学习一下面的主题。若是你积极的实践下面的技能,那么你将会甩其余人几千米外。我称它为开发者福音: 在某个领域,总会有人比你更有经验,可是你能够追求精益求精。积累各类各样的技能,你提高的效果将立竿见影。这不只让你成为更好的开发者,也会增长你总体的幸福感,由于你在为人们奉献真正的价值。
关于学习,你须要彻底集中注意力在一件事上。然而,这不是生活中的样子。只有一项技能很难生存下去。尤为,在像技术这样突飞猛进的领域(谁知道5年后机器学习工程师会成什么样子呢?),你须要多种多样的技能,这些技能让你有更强的适应能力。
成为一个高级开发人员,你须要学习 6个核心技能。
这是大多数人首先想到的技能,但这只是众多技能的一部分。技能很重要,容不得半点含糊。高级开发人员须要花时间去了解一门技术的前因后果。为何这个问题会出现?为何这个框架会存在?这个库正在解决什么问题?做为一名开发人员,你须要有对全部能受益于开发生命周期的工具和想法有好的理解力,并且能选择对项目有最大积极做用的工具。而不是去专一于每个新版本的超级华丽测试框架的特性,相反地,当他们试图为公司解决一个实际问题时,他们会更专一于每一个测试框架的优势和缺点。他们会问些相似于“为了提供一个更好的产品,在咱们持续交付的过程当中哪些工做能够被优化呢?“的问题。
他们也知道事情是如何链接在一块儿的。要开始这样的考,就要创建本身的思惟图。你能够用它将学习提高到更高的层次(给 Javascript 开发者思惟图)。思惟图将帮助你的大脑链接不一样的想法和技术。
示例: 若是我是 Javascript 开发者,以 Cory House 的课程为例,你将会了解到在 JavaScript 环境链接点。在一个行业中,一旦你掌握了相应的工具和技术,你就须要建立思惟图,解决产品规模扩大时所面临的问题。在头脑中有上述的链接关系,经过更普遍的视角,你会把公司的主要资源集中在关系重大的事情上。
若是你仅经过实战课程学习编程,或者没有计算机科学的学位,那么你须要学习数据结构、算法以及其余计算机科学的主题。虽然架构和技术在变,通用的基本准则是不变的。 经过学习高级的主题,会再次意识到:虽然时间在变,语言在变,但大多数软件问题以及好的实践不变。这两本书连接 (Rob Conery) 、 连接 (Gayle Laakmann McDowell) )是提高你技能的最好工具。虽然它们只是概览,但能为你未来的学习打下坚实的基础。
收听像 Jeff Meyerson 的 软件工程师日报 的播客节目,你能时常关注当下的问题,而且用将来的视角看待这个行业。
最后,这里有篇很不错的文章 ,它以纯技术的视角介绍了部分技能。
这是一个常常被忽视的技能。你如何与团队成员合做?你是否在审查 PR(pull request)时傲慢并自觉得是,并促成了一个有毒的文化产生?仍是说你体贴、合做以及会鼓励你的团队成员?高级开发者从不自吹自擂。他们知道本身很优秀,不须要向别人证实本身。他们编写干净简单的代码,而不是写团队成员读不懂的代码来炫耀他们的技能。他们乐意帮助别人,也会在本身不知道的时候提问。
这就是情商的用武之地。社会心理学是提升这种技能的重要工具,没有什么比著名的 人性的弱点 更值得一读。请记住:如何能让你周围的人变得更好?若是你的团队中有 5 我的,1 + 1 + 1 + 1 + 1 应该大于 5,由于你应让你周围的人变得更好(别纠结纯粹的数学理论了……让我继续)
若是你在一个项目里,或者你参加了一个团队,并能与团队很好地协同工做,你已经比大部分人都领先了。你也使管理者、主管、敏捷专家和 CTO 的生活更轻松。这些人会获得晋升,更重要的是,他们为公司带来了价值。
在与客户交谈的过程当中,你可否清楚地了解他们的需求?当他们向你求助时,你可否明白他们正面临的问题?高级开发者能与客户单独沟通,是一个伟大的倾听者,会在了解全部状况后,向客户提供推动的建议。他们擅于创建关系,且具备很好的说服力,但这种说服不是强迫。他们明白客户与开发者的交易是一场互利互惠的游戏,详情了解。
最后,你须要可以向非技术人员解释复杂的编程概念。可经过观看教练如何分解复杂的主题开始培养这种技能。这是我最喜欢的教练,以及个人第二喜欢的教练。虽然他们教授的内容很难,但他们都有一个共同点,而这也是他们的厉害之处。
高级程序员老是都会学习新的东西。但并非花 14 个小时坐在电脑前阅读文章,而是采用更高效的方法,他们会与其余开发者一块儿交流,互相询问问题和解答问题。他们不会只专一于一项技巧。在某一领域你的能力多是最强的,可是,若是你对于你要解决的问题没有一个全面的了解,就会在某个环节败下阵来。
他们持有成长的观念(相信智力是可塑的),并进行有目的的练习。他们明白学习全部的事情是不可能的,因此他们选择将时间花在他们喜欢的和最重要的事情上。
他们不会只是抱怨:“我讨厌这个类库!”不少时候,说出这类抱怨的人都是由于他们对这项事物不够了解。例如,有人会很自负地说:“我讨厌 jQuery,只有低水平的开发者才使用它。”但在高级开发者眼里:“jQuery 是 Web 开发的重要工具,是很是流行的 JavaScript 框架。”他们喜欢并尝试着新鲜事物,在说出“讨厌”某一事物以前,会先去学习和了解它。
高级开发人员能得到资深职位,由于他们擅于与上级领导沟通。他们能很快把握雇主或商业需求,并表现出能很好知足这些需求的形象。高级开发者自信却不自傲,他们有足够的信心完成指定任务,并能在高压下执行。并且他们也有充分的可是挑战更高层的职位。销售和谈判看似与技术无关,倒是工做中并不可少的能力。Ramit Sethi 的一篇文章有相关的介绍。
高级开发者贡献于开发者社区,无论是技术会谈,主持会议,贡献源码,仍是发表文章。他们须要与整个社区的工做者进行沟通交流,拓宽他们的视野,所以他们在整个产业中充当的是分享信息资源的角色。这就比如是一次旅行:在与他人交谈的过程当中了解的文化越多,你对人类之间的差别的理解就越深刻,就越能以欣赏的眼光看待他人。
若是你能在工做中主动运用这些技能,很快就能看到自身的改变。这篇文章最重要的主题就是:热爱你的工做。若是你并不喜欢天天学习计算机科学和软件开发技术的过程,你永远不会成为一个高级开发人员,由于你缺少进步的动力。 激情不是三分钟热度,真正的激情产生在你掌握一个技能以后。若是你已经努力成为了某个领域的专家和领导者,已经掌握了这些技能,那么如今,尊重与帮助他人能让你得到持续的进步。 这就是你如何培养你对工做的热爱的方式。
若是你已经学会了代码而且正在寻找你职业生涯的下一步,你须要以不一样的方式思考。你怎么能脱颖而出?你怎么能成长?你如何帮助人们解决实际问题并提供价值?你要成为一个高级开发人员就不能只作简单的事情。你作的事情推进并挑战你的思想和温馨程度。你天天不断的学习和调整,就像你第一次写代码。每一步都很小,但在一辈子的时间里,一小步就会变成一英里。永远不要中止阅读和学习,但也要知道,你所花的时间哪些是有价值的,哪些是没有的。