版权声明:本文为北京尚学堂原创文章,未经容许不得转载。html
今天的这个话题颇有价值,这里以我的的想法与见闻写成此文,但愿给年轻的开发者们一些启发。咱们从:Developer,Tech Lead,Engineering Manager到CTO,这些经历使我对程序员的我的发展之路有比较全面的见解。前端
有的人说“我如今对Web前端比较熟悉,但我想深刻了解JS。以后,我会花时间去学习iOS和Android开发。”看上去不错,但缺少系统性的目标。或者说,他制定了学什么,但对为何要学这些并无仔细的思考?程序员
在技术领域,有太多的东西会迅速的过期,如何利用有限时间,最大化你的长期收益?这里我能够给出几条建议。更多精彩内容关注微信公众号:北京尚学堂。面试
打造你的工具箱编程
工欲善其事,必先利其器。每一个开发者都应该有一把本身的瑞士军刀,在未来漫长的职业生涯中,这些工具能够为你省下宝贵的时间,并帮助你更好的组织我的知识库。举两个例子浏览器
一套高效的开发环境微信
一个信息采集器和一本笔记本架构
高效的开发环境app
咱们能够从编缉器谈起,这里有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年对从此的发展尤为重要,但愿此文能对新手的程序员们有所帮助。