作者:Glow 技术团队  , 责任编辑:帝都羊

http://tech.glowing.com/cn/advices-to-junior-developers/

0 题记

一转眼工作已有8年,前两天公司一位初入职场的同事希望我给一些建议与经验。我觉得这个话题很有价值,这里以个人的想法与经历写成此文,希望给年轻的开发者们一些启发。

我工作过的公司有4家,NVIDIA, Google, Slide和Glow。其中两家是知名的大公司,Slide我是D轮过后加入的,那时约150人。Glow则是从它第一天创立,一直走到现在。个人的工作也从Developer,Tech Lead,Engineering Manager到CTO。这些经历使我对程序员的个人发展之路有比较全面的看法。

如果你问一个年轻的前端开发人员,你在今后的3年内如何提升自己的能力?他可能会说“我现在对Web前端比较熟悉,但我想深入了解AngularJS,另外React现在发展的很快我也想看一下。之后,我会花时间去学习iOS和Android开发。”看上去不错,但缺乏系统性的目标。或者说,他制定了学什么,但对为什么要学这些并没有仔细的思考。

在技术领域,有太多的东西会迅速的过时,如何利用有限时间,最大化你的长期收益?这里我可以给出几条建议。

1 打造你的工具箱

工欲善其事,必先利其器。每个开发者都应该有一把自己的瑞士军刀,在将来漫长的职业生涯中,这些工具可以为你省下宝贵的时间,并帮助你更好的组织个人知识库。举两个例子:

一套高效的开发环境

一个信息采集器和一本笔记本

  

高效的开发环境

我们可以从编缉器谈起,这里有IDE vs Text Editor,有Vim vs Emacs,有Sublime vs Atom,那该如何选择呢?在做选择之前,我们先想想自己的目标。我们希望这是一个长期的投资,这款编缉器能被长期使用,在这个过程不断的打磨,使其能完全适合自己的习惯,最大化编缉效率。如果程序员是侠客,编缉器则是他手中的剑。

虽然我是Vim的重度用户,但我觉得当年选择Vim时有欠考虑。如果让我重选一次,我的第一选择会是Emacs,第二选择会是Atom。Emacs已存在30年,社区仍然活跃,其可扩展性在编缉器中无人能出其右。Emacs的脚本语言elisp又是lisp的一种dialect,我觉得对lisp的学习可以提升程序员对编程核心思想的理解。另一个加分点是Emacs由于其本身的高门槛及lisp特质,吸引了大批高质素的程序员,其社区可谓藏龙卧虎,更诞生了像Org-mode这样神级的插件。反观Vim,Vim的精髓在于Mode editing,这是值得学习的,可以极大提高文本编缉的效率。

但当你熟悉了这一理念后,我觉得可以转投其他编缉器,因为Vim的架构与Vimscript限制了其扩展性。Emacs通过Evil插件非常完整的支持了Mode editing,其他主流的编辑器也有类似插件,所以你一旦掌握了这个理念,在别的编辑器中也可以发挥作用。可能有人会说没有一个Vim emulator能做到Vim 100%的功能,但重点不在于某条指令是否被移植,而是mode editing思想的精髓能否被移植,我觉得答案是肯定的。

再看Atom vs Sublime,Atom的可扩展性非常好,它的大部分核心功能也是以插件的方式实现,这点与Emacs有异曲同工之妙。并且其开源的特性,使我相信它有比Sublime更持久的生命力。

关于IDE,我的看法是,我不排斥IDE,但每个IDE都是为了某个特定的任务或是编程语言服务的。做为一个有追求的程序员,可以用IDE,但依然需要精通一个强大的通用编缉器。

类似编缉器,高效的开发环境还包括Shell,Launcher,窗口管理器,文档阅读器等等。其中有一部分只需要你化很少的时间就可以完成配置,它们的投资回报率是非常高。

信息采集器和笔记本

前者是用来收集别人产生的信息,后者则是收集自己产生的信息。前者一个简单的例子就是浏览器的Bookmark。你需要能随时将一组有用的信息归档,并在未来的某个时刻快速找到它。后者最直观的例子则是Mac OS或是iOS自带的笔记本,这里的目的是能随时随地记录你自己的想法。从本质上讲,就是你需要有一套好用的工具来做你的知识库管理(Knowledge management),也可以说是你知识和思想的外部备份。我个人现在是用Evernote同时来做信息采集与笔记的。如果有一个好的流程,你也完全可以用两个工具来分别把这两件事做好。但我建议你花足够多的时间来思考如何组织你的个人知识库。

以上只是两个典型的例子,你需要做的是发现那些你要长期从事的任务(往往不随技术而改变,也不随公司而改变),将完成这些任务所需的工具调整至最优。再举一个例子,我会留意身边的程序员所用的键盘。只有少部分的程序员会买高端的静电容键盘,比如HHKB。而在我看来,这明显是一笔很划得来的投资,程序员在工作的大部分时间里都需要和键盘打交道,一个舒适的打字体验是非常有收益的,更何况这类高品质的键盘都非常的耐用。

2 开阔你的视野,构建你的技术体系

首先你要给自己设定一个目标,就如同一个公司会设定它的Vision。

目标要够大,这样你才能看到更多的风景。

目标应该设定在解决哪一类问题,而不是精通哪一类技术。技术只是手段,不是目的。


例如,“我要成为iOS developer中的达人”这个目标,就远不如“我要成为前端应用开发的专家”来得有意义。前者学到深处你可能会去钻研iOS framework里各种奇技淫巧,而后者你会开始关注视觉与交互设计,研究各平台间的差异与共同趋势。显然,后者更有助于你的个人发展。

不过即便有了明确的目标,选择哪一类技术学习,如何学习,在信息过载的今天依然是一个难题。常有的观点是应该学习最新的技术,因为老的已经过时,而反对的观点则是新技术还不成熟。我个人的观点是,当初入一个领域时,选择主流技术框架;当你有一定经验后,选择技术时更应该关注背后的推动者,我相信优秀的人和团队总能打造优秀的产品,无论是商业公司还是开源社区。不必太在意技术的新旧,因为可能很快都会成为过去时。你真正要学习的是技术背后的思想。

有不少语言与开源项目会写它的Coding philosophy,这是很意思的,你可以从它们的源代码中去验证这些编程理念。以Python为例,如果你执行import this就会看到它的理念,再如Python中一个著名的开源库Celery,在它的文档有专门一节讲述它的编程理念。它们对你的影响会比这些技术本身来得更深远,这是我给初学者们的一个忠告。同理,我非常推荐读一些优秀开源库或是语言的源代码,例如Python的标准库绝大部分都是用Python实现的,而且可读性非常好。如果学习一门技术仅仅停留在用的层面上,你就还没有完全吸取其中的精华,而且学习的收益会随着技术的过时而消失。

我的另一个学习原则是,在选择学习一门新技术时,最大化它与你现有知识库的差异性。读起来可能有拗口,例如你会Django,接下去你应该去学习Ruby on Rails还是NodeJS? 依据这个原则,你应该学NodeJS,因为它的异步IO模型在理念上与Django的同步模型差异很大,而RoR则与Django更多相似之处。但更好的选择是不要去学另一个Web framework,去学习ZeroMQ或是Redis,这两者对于Web development也非常有帮助,这样就做到了最大化差异。从构建一个程序员的技术理念角度,我会推荐每一个程序至少去了解Lisp或是一门Functional programming language,不管你是否会在可见的未来用到,它们能让你从一个不同的角度看待编程。

最后我建议每个程序员都应该经营一款自己的产品,它可以是一款app,一个网站或是一个开源软件。除非你是一个创业公司的早期员工,不然你可能没有机会将所有学到的技术或是理念都付之实践,有很多人想成为全栈工程师,最快的捷径就是打造一款自己的产品。任何一个设计师都会精心打造自己的Portfolio,但大部分程序员却不会。

当评估一个程序员的Coding能力时,我会去看他的Github上是否有出彩的项目,可惜国内绝大部分程序员的Github空空如也,或者只有一些非常简单的程序。我建议大家好好经营自己Github上的项目,这不但可以提高你的声誉,对你将来的求职也非常有帮助。当你报怨求职面试时又被问到各种无厘头的程序题时,有没有想过面试官也很无奈,因为他没有任何其他方法得知你的Coding能力究竟如何。如果每一个程序员都有自己的作品,我想程序员的面试会简单许多。

3 重视沟通能力的培养

当被问到“你学得Junior Developer和Senior Developer最大的差别是什么”时,我最自然的反应是沟通与文档。沟通包括程序员团队内部的沟通,与其他团队的沟通,与Manager的沟通等等。我不认为自己有能力把这些问题非常概括地说清楚,不过我可以给一条建议,那就是先学会和你的Manager沟通,让他来教你其余的部分。

许多公司都会设置Manager与组员的1:1,一个有效率的1:1应该大部分时间有组员来主导。这需要你在1:1之前花足够多的时间来考虑要问的问题,并且最好提前1天发给Manager,让他有机会思考答案。许多人对此不太重视,或者只问非常具体的问题而不是一些开放性问题,这样你很难在你的Manager身上学到东西。如果你渐渐懂得如何利用1:1的时间,它很会成为你在工作中单位时间投资回报率最高的活动。

4 累积你的人脉

每个人都明白人脉的重要性,但实际做起来却不容易。参加一些线下的会议或是活动,可能是最直接的扩展人脉的方式之一。可惜大部分人似乎只是去听了一场技术讲座就回家了。当然,这和不少活动的时间安排也有关系,讲座时间排得太满,茶歇时间短,加上有时嘉宾迟到或是没控制好时间,干脆就把茶歇取消了。

而实际上,结识一两个同道中人远比听技术讲座有价值。下次去参加这类会议,不妨给你自己设个目标,比如至少加两个同行的微信。之后维系你的人脉可能需要花更多的时间,下了班或是周末找你的朋友们喝个咖啡吧!

另外我觉得每个人都需要一个职场导师,他可以是你第一份工作的导师或是Manager,也可以是你认识的其他前辈。你们需要维系一个非常长期的关系,不止于一家公司,最好贯穿你的整个职业生涯。每当你遇到疑惑时,都可以询求他的建议,我觉得这将是你最宝贵的一笔人脉财富。

5 寻找发挥你才华的平台

最后也是最重要的一步,找到适合你的公司。做为求职者评估一家公司可以看三个方面:

公司的发展前景(大公司的话,看所在部门的发展前景)

你将要加入的团队

薪资福利

所以在面试一家公司的时候,你要意识到面试是双向的,公司在面试你的同时,你也在面试这家公司。面试前你应该对这家公司做足功课,准备好一些有质量的问题,比如指出产品中的问题,询问开发流程或是如何做绩效评估。到时你也可以检验一下你的面试官是否合格。

每次选择公司对以上三个方面都应兼顾,但在职业生涯的不同阶段,侧重点不同。比如,在刚刚工作时,加入一个优秀的团队最为重要,他们可以教会你很多东西,提升你的能力。工作5年之后,你需要一个平台施展你的才华,体现个人价值,公司发展前景的重要性迅速提升。当你做出一番成绩,证明了自己的价值之后,逐渐进入收获期,就有了与公司要价的资格。另一方面,团队实力对公司的前景也有很大的影响。

对一个刚毕业,初入职场的同学,一个近几年被问了无数次的问题“我的第一份工作是去创业公司还是大公司?”我的回答仍旧是“加入一个优秀的团队最为重要”。一些知名的大公司,团队的素质是有一定保证,但创业公司则不然,团队素质参差不齐,所以如我前面所说你需要面试这个团队,做出自己的判断。不过除了团队因素之外,我想提一下毕业生去创业公司的几个好处。

首先,在刚毕业的一段时间内,经济压力小,是最自由最能承受风险的时期,而这段时间往往不长,所以应把握好这个去创业公司的黄金时段。其次,所有的学生进入大公司后,都会担任初级职位,某种程度上来讲是学校学习的延续,规范有条理,但缺乏独立性和创新性,而这正是中国大部分学生所欠缺的。这方面的能力在一家创业公司可以得到快速锻炼,而在大公司可能要等升到中级职位后才有这方面的机会。个人观点,仅供参考。

6 小结

我觉得步入职场的前3年对今后的发展尤其重要,希望此文能对年轻的程序员们有所帮助。

陛下...看完奏折,点个赞再走吧!

如何提升你的能力?给年轻程序员的几条建议相关推荐

  1. [转]如何提升你的能力?给年轻程序员的几条建议

    转自 http://tech.glowing.com/cn/advices-to-junior-developers/ 一转眼工作已有8年,前两天公司一位初入职场的同事希望我给一些建议与经验.我觉得这 ...

  2. 如何提升你的编程能力?年轻程序员听好了,我给你的这几条建议一定会对你有所帮助

    一转眼工作已有8年,前两天公司一位初入职场的同事希望我给一些建议与经验.我觉得这个话题很有价值,这里以个人的想法与经历写成此文,希望给年轻的开发者们一些启发. 我工作过的公司有4家,NVIDIA, G ...

  3. 给新程序员的10条建议

    (注:本文曾发表于<程序员>201509A期) 我最开始不是做软件开发的,是一个售后技术支持工程师,你懂的,就是公司卖出的设备坏了,我就到现场去鼓捣两下,换个零件,重启下系统什么的.后来我 ...

  4. 给程序员的几条建议,精彩配图!

    点击上方"视学算法",选择"设为星标" 来源:http://t.cn/RYytjpZ 1. 想清楚,再动手写代码 2. 不交流,就会头破血流 3. 文档没人看, ...

  5. 写给新入行程序员的10条建议

    1. 想清楚,再动手写代码 刚入行的新手,为了展示自己的能力,拿到需求迫不及待地就开始上手写代码,大忌! 2. 不交流,就会头破血流 不爱说话和沟通,需求都理解错误了,最后做出来才发现,只能加班返工. ...

  6. 10年老兵给程序员的10条建议!

    2019独角兽企业重金招聘Python工程师标准>>> 程序员虽然薪资待遇好,但是也得付出努力,技术好才行.特别是对于刚刚进入编程工作的新手程序员和正在学习编程的同学来说,一写代码就 ...

  7. 10年老兵给程序员的10条建议! 1

    程序员虽然薪资待遇好,但是也得付出努力,技术好才行.特别是对于刚刚进入编程工作的新手程序员和正在学习编程的同学来说,一写代码就报错,出bug.作为一个工作了10年+的老兵,总结了下面10条建议送给程序 ...

  8. 给程序员的10条建议,句句经典

    web前端教程 用大白话,来讲编程 查看全文 http://www.taodudu.cc/news/show-1159917.html 相关文章: 都说程序员是吃青春饭! 世界上最好用的浏览器Chro ...

  9. 给年轻程序员的33条忠告

    代码是一种交流方式,Keras 之父 François Chollet 在本文中为我们总结了在开发过程中.API 设计中及软件职业生涯中应该关注哪些要点.原则是形式化的直觉,比原始模式识别适用于更广泛 ...

最新文章

  1. 概率图论PGM的D-Separation(D分离)
  2. 每日程序C语言27-矩阵对角线求和
  3. 音视频技术开发周刊 | 192
  4. OSI七层网络模型与TCP/IP五层网络模型
  5. 混凝土泵送机械大数据挖掘与应用
  6. 为自己的p2psearcher理想而努力地奋斗
  7. input type=file与cursor:pointer的兼容性问题
  8. linux在路径下创建文件,从可以在Linux中打开的文件路径创建文件
  9. mysql登录出现1045错误
  10. 【2019年中总结】五种途径对接天猫精灵音响控制您的智能设备,打破传统产业,让语音AI控制无处不在!
  11. 建筑工程师的转行学计算机科学与技术的抉择
  12. 苹果应用商店AppStore审核规则指南
  13. 旷视科技一面 2022.0804
  14. RFID正为零售防损带来新变化
  15. Cadence OrCAD Capture 自底而上的设计流程
  16. 计算机优质书籍搜集(持续更新)
  17. 关于Docker,你要知道的都在这了
  18. 有什么APP可以记录运动轨迹的?酷炫的运动轨迹App这里有
  19. java IO编程详解
  20. DVB机顶盒的概念与分类

热门文章

  1. lsa五类_OSPF外部路由4类5类LSA
  2. jsp教学网站百度文库_基于JSP的精品课程网站设计与实现
  3. java 继承 注解_在java中实现组合注解原理分析(注解继承)
  4. python使用opencv查找轮廓_(八)OpenCV-Python学习—轮廓查找,绘制和拟合
  5. pyqt qdialog 默认按钮_python – QDialog无法从主窗口打开(pyQt)
  6. c语言程序做四则运算还要余数,大整数四则运算 高质量C语言程序.doc
  7. Loadrunner中的IP欺骗的设置以及误区
  8. leetcode1017
  9. php 处理ftp常用操作与方法
  10. iOS 最新版 CocoaPods 的安装流程