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

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

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

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

打造你的工具箱
工欲善其事,必先利其器。每个开发者都应该有一把自己的瑞士军刀,在将来漫长的职业生涯中,这些工具可以为你省下宝贵的时间,并帮助你更好的组织个人知识库。举两个例子
  • 一套高效的开发环境
  • 一个信息采集器和一本笔记本

高效的开发环境
我们可以从编缉器谈起,这里有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。而在我看来,这明显是一笔很划得来的投资,程序员在工作的大部分时间里都需要和键盘打交道,一个舒适的打字体验是非常有收益的,更何况这类高品质的键盘都非常的耐用。

开阔你的视野,构建你的技术体系
首先你要给自己设定一个目标,就如同一个公司会设定它的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能力究竟如何。如果每一个程序员都有自己的作品,我想程序员的面试会简单许多。

重视沟通能力的培养
当被问到“你学得Junior Developer和Senior Developer最大的差别是什么”时,我最自然的反应是沟通与文档。沟通包括程序员团队内部的沟通,与其他团队的沟通,与Manager的沟通等等。我不认为自己有能力把这些问题非常概括地说清楚,不过我可以给一条建议,那就是先学会和你的Manager沟通,让他来教你其余的部分。许多公司都会设置Manager与组员的1:1,一个有效率的1:1应该大部分时间有组员来主导。这需要你在1:1之前花足够多的时间来考虑要问的问题,并且最好提前1天发给Manager,让他有机会思考答案。许多人对此不太重视,或者只问非常具体的问题而不是一些开放性问题,这样你很难在你的Manager身上学到东西。如果你渐渐懂得如何利用1:1的时间,它很会成为你在工作中单位时间投资回报率最高的活动。

累积你的人脉
每个人都明白人脉的重要性,但实际做起来却不容易。参加一些线下的会议或是活动,可能是最直接的扩展人脉的方式之一。可惜大部分人似乎只是去听了一场技术讲座就回家了。当然,这和不少活动的时间安排也有关系,讲座时间排得太满,茶歇时间短,加上有时嘉宾迟到或是没控制好时间,干脆就把茶歇取消了。而实际上,结识一两个同道中人远比听技术讲座有价值。下次去参加这类会议,不妨给你自己设个目标,比如至少加两个同行的微信。之后维系你的人脉可能需要花更多的时间,下了班或是周末找你的朋友们喝个咖啡吧!

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

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

公司的发展前景(大公司的话,看所在部门的发展前景)
你将要加入的团队
薪资福利
所以在面试一家公司的时候,你要意识到面试是双向的,公司在面试你的同时,你也在面试这家公司。面试前你应该对这家公司做足功课,准备好一些有质量的问题,比如指出产品中的问题,询问开发流程或是如何做绩效评估。到时你也可以检验一下你的面试官是否合格。

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

对一个刚毕业,初入职场的同学,一个近几年被问了无数次的问题“我的第一份工作是去创业公司还是大公司?”我的回答仍旧是“加入一个优秀的团队最为重要”。一些知名的大公司,团队的素质是有一定保证,但创业公司则不然,团队素质参差不齐,所以如我前面所说你需要面试这个团队,做出自己的判断。不过除了团队因素之外,我想提一下毕业生去创业公司的几个好处。首先,在刚毕业的一段时间内,经济压力小,是最自由最能承受风险的时期,而这段时间往往不长,所以应把握好这个去创业公司的黄金时段。其次,所有的学生进入大公司后,都会担任初级职位,某种程度上来讲是学校学习的延续,规范有条理,但缺乏独立性和创新性,而这正是中国大部分学生所欠缺的。这方面的能力在一家创业公司可以得到快速锻炼,而在大公司可能要等升到中级职位后才有这方面的机会。个人观点,仅供参考。

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

来自:叶剑烨的博客
15
0
评论 共 9 条 请登录后发表评论
9 楼 oqqo1193624498 2015-06-11 16:59
在首页地时候点进来看,当时只看了一半就感觉是好文章然后mark了,今天看完了,看了之后感触很深,要本着用技术去解决问题的态度来学习技术;优秀的团队确实太重要了,自己是刚工作一年多,没能加入优秀的团队,加入过的团队素质参差不齐,没有杰出的人,虽然也学到了一些东西,但是远远不够……希望自己业余时间能多学些东西,未来能加入一个优秀的团队,优秀团队的要求也是优秀的人才能加入啊!
8 楼 oqqo1193624498 2015-06-11 16:59
在首页地时候点进来看,当时只看了一半就感觉是好文章然后mark了,今天看完了,看了之后感触很深,要本着用技术去解决问题的态度来学习技术;优秀的团队确实太重要了,自己是刚工作一年多,没能加入优秀的团队,加入过的团队素质参差不齐,没有杰出的人,虽然也学到了一些东西,但是远远不够……希望自己业余时间能多学些东西,未来能加入一个优秀的团队,优秀团队的要求也是优秀的人才能加入啊!
7 楼 h576497619m 2015-06-11 11:05
tiange 写道
低调点,别动不动建议建议,你以为你弄清楚了?来这儿装

这叫分享,不叫装,如果每个人都藏着掖着,新人还能从哪里得到方向呢,说不说是他的事,听不听是你的事,每个人都有自己的判断
6 楼 tiange 2015-06-08 13:21
低调点,别动不动建议建议,你以为你弄清楚了?来这儿装
5 楼 小刘不牛 2015-06-08 10:42
很感谢博主的分享,最近正在想用什么把平时的一些有用的代码,笔记,心得,记录下来,下次再遇到类似问题就可以参考。
4 楼 luo4433279 2015-06-07 10:43
谢谢指点~~~~~
3 楼 18862611051 2015-06-06 23:55
给即将大四的我指出一条明鉴
2 楼 wowlinda80 2015-06-06 11:49
这个必须顶,给新人的指路明灯
1 楼 remoteJavaSky 2015-06-05 12:45
笔者,文说我心

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 2023,程序员的出路在哪里?

    可是似乎从30岁开始这工资就没涨过,前面跳槽几次涨的薪水在30岁以后跳槽已经不管用了、定格了,这几年由于市场环境不景气,程序员竞争越来越激烈,36岁跟30拿的工资一模一样,不仅工资拿的一样,反而事情还越来越多...

  • 如何提升你的能力?给年轻程序员的几条建议

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

  • 程序员到底要不要读研,过来人给你几点建议!

    一直想写一篇关于读研方面的文章(之前写过一篇考研回忆,主要在讲复习方法),奈何最近脑袋不太灵光给耽搁了,恰逢今日艳阳高照,刚好离今年的考研也就一个月左右的时间了,那么今天就来聊聊读研这件事吧。...

  • 面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

    在这里推荐csdn,因为,不时会有一些大佬给你评论,提出自己的一些观点,这样形成一个技术的交流,对技术会有提升。在学习的过程中,遇到一些问题,社长会添加一些具体某个知识点的技术群 社长最近在做一个实景视频...

  • 程序员是做什么的?怎么成为程序员?

    我是一个程序员,我知道程序员是做什么的,但是我身边有很多亲朋好友并不知道。 他们经常认为程序员就是对电脑很懂得人,包括电脑的软硬件问题,包括电脑装系统。 实际上,可能不只是我的这些亲朋好友,绝大多数不做...

  • 你为什么成为一名程序员?

    我先来说道说道自己在程序员这条路上的点点滴滴,也许能够给颓丧或者迷茫中的你一些启发和感悟。在人生的不同阶段里,我们都需要和过去的自己认真地说一声“拜拜”,然后才能思索出未来前进的方向。 01、...

  • 面试官:你接受免费加班吗?程序员这样怼回去,网友:老铁没毛病

    面试时总是会遇见几个奇葩的面试官,问一些你根本不用回答,就想直接怼回去的问题!跟着小编一起看看这些程序员遇见这样的面试官,都是怎么回答问题的! 面试开始…… 情景一: 面试官:一开始工资不会给你太高,你...

  • 初级Java程序员如何快速提升自己的能力?

    对于刚刚进入工作岗位的初级程序员来说,不论是进入外包公司,还是互联网公司,都需要一个适应的过程,不少刚走上工作岗位的程序员,就是因为迟迟不能进入工作状态而选择离开,这也是比较常见的事情。 导致不能进入...

  • 漫谈程序员系列:程序员零门槛?

    王江民开启了一个程序员也可以发达的时代,给千千万万程序员树立了一面梦想的旗帜。王江民是当时中关村最受人景仰的软件英雄,他延续了创业者们对单枪匹马挑战江湖成就人生奇迹的诸多想象,鲜衣怒马,仗剑天涯…… ...

  • 有哪些事是你当了程序员之后才知道的?

    比如程序员真的不好找女朋友

  • 老婆:“给我讲讲你们程序员好笑的事情呗?”我扔给她这篇文章,她狂笑不止!

    我老婆有个习惯,就是不开心的时候去看搞笑视频,昨天她又不开心了,要我给她讲讲程序员的搞笑事情,于是我就把我这篇文章的草稿给她看,结果她笑到自己肚子疼,直言“我终于懂你们程序员的痛苦了”… 今天分享给...

  • 程序员垃圾简历长什么样?

    这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并...

  • 程序员表白技巧:程序员木讷? 我反手就是一串代码

    微信公众号:javafirst不知从何时开始,被黑了十几年的「理工男」得到了释放,人们开始把视线聚焦在了一个群体上,那就是「程序员」!比如,之前热播的电视大剧《欢乐颂2》里,「直男处女情结」引起了整个互联网热议...

  • 有没有不用加班的程序员?如何衡量程序员的工作量?

    作者 | 伍杏玲头图 | 下载于视觉中国出品 | CSDN云计算(ID:CSDNcloud)在知乎上,有个近四百万浏览的程序员热帖:有没有不用加班的程序员?程序员为什么需要加班大概可总结为...

  • 一名合格的程序员应该是什么样子

    不管怎么说,我是热爱“程序员”这个职业的,假如妹妹也有做程序员的意愿,那我这个做哥哥的就要给出 3 条真诚的建议了——这也是义不容辞的事情。 01、能够解决问题 我认为,作为一名合格的程序员,首先要具备...

  • 给年轻程序员的建议

    偶尔的,我会被人问道:如何成为一名优秀的程序员,更或者,如何成为一名程序员。每次人们问起,我都力图给出不同的答案。因此,我的答案是各种各样的。 下面就是我认为的成为一名优秀的程序员需要做的一些事情...

  • @程序员,这四个学习建议值得收藏

    在我看来,学习能力应该是一个人最重要的能力之一。因为我们赖以生存的所有技能,无一例外都是通过学习获得的。那些优秀的人,也不过是学习能力或者学习效率比一般人强而已。 这样的观点被很多人论证过,商业理论家...

  • 为什么程序员会秃头?盘点程序员糟心的几大因素

    解析:正所谓不关注客户需求的产品经理不是好产品经理,左右横跳反复拉扯使他们的杀手锏,让无数程序员以头抢地的不仅仅是根本不可能实现的需求,更是老板的信任还有道德上不考虑诉求只关注技术的无声的控告。...

  • 【java毕业设计】智慧社区教育服务门户.zip

    有java环境就可以运行起来 ,zip里包含源码+论文+PPT, 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上

  • 基于selenium的携程机票爬虫资料齐全+详细文档+高分项目+源码.zip

    【资源说明】 基于selenium的携程机票爬虫资料齐全+详细文档+高分项目+源码.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

Global site tag (gtag.js) - Google Analytics