回顾我的提升之路,我以为有几点可以跟大家分享的:
第一是「兴趣」。这也是我认为最主要的一点,一件事情做 10 年乃至做一辈子,如果没有兴趣的话,我以为是很痛楚的。兴趣是本能的驱动力,有了兴趣,碰着问题会一贯想着若何去办理,而不是以为「很难做」;有了兴趣,碰到一个新的东东会以为很愉快,而不会以为是一种包袱;有了兴趣,打仗到一个东西后就像更加深入的去理解,而不是用过了就不管了。以是我认为如果想在一个行业(不限于软件行业)长期发展并有所提升的话,一定要问问自己是否有足够的兴趣。
第二是「坚持」。《异类》一书中提到一个 10000 小时理论,我以为非常有道理,意思便是说如果你想成为顶尖人才的话,一定要积累 10000 小时以上的演习和履历。特殊是在软件开拓这个领域,技能又多,技能更新又快,如果没有坚持去积累和提升的话,是很难达到一定高度的。操作系统、数据库、网络、编程措辞、设计方法等都要节制,每个技能点又有很多更细的分类。以编程措辞来说,C、C++、Java、PHP、Python 等主流的都有 10 来种,每个措辞连续深入的话又有很多内容,例如 Java 可以列出来的有 JVM、IO、NIO、网络编程、反射。。。。。。等等。以是这么多的东东,短韶光内快速入门还可以,但如果说 21 天就精通 XXX,那是不可能的,必须经由永劫光的积累。实在我现在都不敢说我精通什么,只能说相对周围其他人会精通一些。

第三便是「方法」。节制精确的方法,能够让我们事半功倍,更快的提升,一些常见的方法我就不啰嗦了,这里特殊分享独家秘方:
一个秘方是“写博客”,把稳这里不是“看博客”,也不是“转载博客”而是“亲自写博客”。哪样东西你以为你比较懂了,那么你就写成博客。当你真正去写的时候,你会创造,实在还有很多不懂或者不清楚的地方,这样就会匆匆使你又去学习研究;当你的博客揭橥后,其他人除了能够从你的博客中学到东西外,也能够帮你创造一些问题或者缺点,这样你就更进一步的节制了;
其余一个秘方便是“链式学习”。形象点说,便是你捉住了一个链条的一个链,然后逐步逐步把所有的链都拉出来。举一个很大略的例子:socket sever编程。很多人在编程的时候,都是去搜索引擎搜索一下“socket server样例”,然后对照样例很快就写完功能了。然后呢。。。。。。很多人没有然后了,完成任务就不管了。实在这样做就错过了一次提升自己的好机会。
“链式学习”则不一样,它是这样做的:我通过搜索引擎搜索到样例完成事情后,我会问自己很多问题:样例中的api每个参数都是什么含义,有哪些把稳事变,还有其它API么?为理解决这些问题,我就可能去找本书看,某个编程措辞的socket编程;看完往后我知道socket编程的全貌和一些把稳事变,而这些是通过搜索引擎搜索的样例中没有的;知道socket编程的全貌后,我又会问自己:操作系统是怎么做的呢? 那我又会去看《UNIX网络编程》,看完后我就对操作系统层面的又节制更多了;看完《UNIX网络编程》后,我又知道socket是和tcp/ip干系的,那我又会去看《TCP/IP协议详解》。。。。。。
这样去做便是一条学习链: socket server编程 -> socket 编程 -> UNIX网络编程 -> TCP/IP协议,后面还可以连续不断拓展下去。如此不断的拓展和深入,一个很小的契机就能初始你学到很多东西,而这些东西在往后的事情中某些时候就派上用场了。
我之前在华为是在Windosw平台上用MFC开拓,后来到了UC转为Linux平台开拓,用这种方法,大约用了2年就闇练节制了Linux平台干系的开拓技能,包括Linux、MySQL、C++、Java、PHP等
第三个秘方便是“闭环学习”。“链式学习”适宜于一组干系联的知识或者技能的学习,而“闭环学习”更适宜业务、相互合营的知识和技能的学习。由于软件开拓是须要多个团队分工互助的,以是绝大部分人都只卖力全体系统或者全流程中的一环,这样导致很多人以为只须要将自己卖力部分精通就可以了。实在这样不利于个人的发展,一个缘故原由是自己卖力的一样平常都比较窄,可学习和提升的空间可能不多,其余一个缘故原由是很难设计整体上精良的方案。
而“闭环学习”则不一样,它是这样做的:理解全体功能或者业务的全流程实现,涉及了哪些模块和系统,每个模块和系统紧张卖力什么功能,涉及到什么技能,性能若何,有什么把稳点。举一个我做个的HTTP的业务样例:从用户点击一个url开始,经由了 浏览器 -> 网络 -> CDN -> Nginx -> PHP -> MySQL -> PHP -> Nginx -> 网络 -> 浏览器,末了呈现在用户面前。我开拓的时候只是用PHP开拓,但并不但局限于PHP本身,闭环学习就哀求全流程中的每个环节都要去理解和熟习,这样你就可以学到了“浏览器、Nginx、CDN、MySQL”等很多知识。
有的朋友可能会问:这样做有什么用呢?其实用处非常大,一个是当涌现问题的时候,有了闭环学习节制的知识和技能,你就知道哪些地方可能有问题,该当如何处理;其余一个用途是,当你考虑设计方案的时候,就不局限于PHP本身了,大概某个功能Nginx或者CDN或者前端能做的更好,用PHP实现反而很蹩脚。
一个精良的程序员该当具备哪些技能和教化?
首先是“快速学习能力”。这里不是说一定要去快速去学习各种各样的新技能,而是说当有须要时,能够快速的学习。很多人开始学新的技能和技能时,一开始就一头扎进去写样例、写Demo、看源码,我认为这不是好的方法,而且比较耗费韶光,奏效也不明显。
我给大家分享我的4W2H快速学习方法。我在学习新的技能的时候,都是按照这样的步骤去理解的:
1)这个技能能办理什么问题(why)
2)比较适宜在哪些场景运用(where + when)
3)这个技能跟我已经节制的哪个知识或技能类似,有什么差别、有什么特点、 有什么优点和缺陷(what)
4)理解前面的问题后,我才会开始去考试测验写写Demo,或者更进一步去运用(How to use)
5)以为有兴趣或者实在现很牛逼的情形下,我就去研究一下事理机制,看看源码等 (How it implements)
其次是“良好的理解能力”。程序员须要将产品职员或者用户用自然措辞表述的需求翻译成程序措辞。自然措辞有一个特点便是普通但不严谨,而程序措辞必须是非常严谨的。如果对产品职员或者用户提出的需求没有很好的理解,纵然程序措辞写的再俊秀,技巧再高,末了做出来也是一个不符合哀求的产品。
记得有一个关于“美女”的笑话:人听到“美女”后的反应是想到“天使面孔妖怪身材童颜巨乳”,而猪听到“美女”后的反应是“乌克兰大白猪”,猫听到“美女”后的反应是“有着金色光滑皮毛的波斯猫”。如果程序员给了猫一个“天使面孔妖怪身材童颜巨乳”的美女,猫一定会以为很丢脸。
第三是“持续不断的学习”。软件开拓领域设计的知识和技能太多了。从广度上来说,有操作系统、数据库、编程措辞、网络、设计等,编程措辞又有几十种;从深度上来说,操作系统、数据库、编程措辞等都是可以不断深入去学习的。无论你是从事对技能广度哀求更高的业务开拓,还是从事对技能深度哀求更高开拓专项系统,都须要不断的学习,这样才能不断的提升自己的能力。
第四是“乐于分享”。如果纯挚从个人完成事情的能力来看,可能确实也有很多程序员不爱分享但确实很厉害。但我认为真正精良的程序员一定是除了自己精良外,还能让其他人也变得精良,或者能够贡献精良的开源项目以降落别人的重复事情。分享的路子有很多种,可以给公司职员做培训,可以写博客,可以贡献开源项目等。
程序员如何“挤”出韶光来提升自己或在技能上提升自己?
关键就在于一个“挤”字,实在便是“利用韶光碎片”,10分钟就可以了,以我最近为例谈谈我现在怎么挤韶光的,大家可能就明白了。
7:40 ~ 8:00:送完小孩后到出门去地铁中间有20分钟,看《失落控》一章
08:20 ~ 09:00:地铁上带一本书,大约可以看完一章,随意马虎看的书可以看两章
09:30 ~09:50:看技能类的PDF,比如说最近看JQuery,大约可以看一章,不用担心,每天20分钟完备不会影响事情
20:20 ~ 21:00:和早上地铁一样
睡觉前15分钟:看15分钟书,前段韶光这样花了大约2个月看完《三国演义》
这样累积下来,我一天算夜约可以看2个小时书,今年上半年看了大约23本书。
给年轻程序员的几条建议
打造你的工具箱。工欲善其事,必先利其器。每个开拓者都该当有一把自己的瑞士军刀,在将来漫长的职业生涯中,这些工具可以为你省下宝贵的韶光,并帮助你更好的组织个人知识库。举两个例子
一套高效的开拓环境
一个信息采集器和一本条记本
高效的开拓环境。我们可以从主笔器谈起,这里有 IDE vs Text Editor,有 Vim vs Emacs,有 Sublime vs Atom,那该如何选择呢?在做选择之前,我们先想想自己的目标。我们希望这是一个长期的投资,这款主笔器能被长期利用,在这个过程不断的打磨,使其能完 全适宜自己的习气,最大化主笔效率。如果程序员是侠客,主笔器则是他手中的剑。
信息采集器和条记本。前者是用来网络别人产生的信息,后者则是网络自己产生的信息。前者一个大略的例子便是浏览器的 Bookmark。你须要能随时将一组有用的信息归档,并在未来的某个时候快速找到它。后者最直不雅观的例子则是 Mac OS 或是 iOS 自带的条记本,这里的目的是能随时随地记录你自己的想法。从实质上讲,便是你须要有一套好用的工具来做你的知识库管理(Knowledge management),也可以说是你知识和思想的外部备份。我个人现在是用 Evernote 同时来做信息采集与条记的。如果有一个好的流程,你也完备可以用两个工具来分别把这两件事做好。但我建议你花足够多的韶光来思考如何组织你的个人知识库。
以上只是两个范例的例子,你须要做的是创造那些你要长期从事的任务(每每不随技能而改变,也不随公司而改变),将完成这些任务所需的工具调度至 最优。再举一个例子,我会留神身边的程序员所用的键盘。只有少部分的程序员会买高真个静电容键盘,比如 HHKB。而在我看来,这明显是一笔很划得来的投资,程序员在事情的大部分韶光里都须要和键盘打交道,一个舒适的打字体验是非常有收益的,更何况这类高品 质的键盘都非常的耐用。
开阔你的视野,构建你的技能体系
首先你要给自己设定一个目标,就如同一个公司会设定它的 Vision。
目标要够大,这样你才能看到更多的风景。
目标该当设定在办理哪一类问题,而不是精通哪一类技能。技能只是手段,不是目的。
例如,「我要成为 iOS developer 中的达人」这个目标,就远不如「我要成为前端运用开拓的专家」来得故意义。前者学到深处你可能会去研讨 iOS framework 里各种奇技淫巧,而后者你会开始关注视觉与交互设计,研究各平台间的差异与共同趋势。显然,后者更有助于你的个人发展。
末了我建议每个程序员都该当经营一款自己的产品,它可以是一款 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 年对今后的发展尤其主要,希望此文能对年轻的程序员们有所帮助
java开拓职员可以看过来。
对付参加事情1年到2年的同学。这部分韶光段的同学,已经对Java有了一个更加深入的理解。
对付参加事情2年到3年的同学有的同学在这个时候以为自己已经很牛逼了,于是忍不住开始逐步松懈。
参加事情3年到4年的同学这个阶段的同学,提升已经是很难了,而且这个阶段的学习每每会比较多样化。
参加事情4年到5年的同学经由前面一年的历练,相信你在自己所研讨的领域已经有了自己一定的见地,这个时候,技能上你该当已经碰着瓶颈了。
可以加学习群号:521479582 JAVA高等开拓 一起互换学习吧、 帮你提升自己,图片瓶颈,跟上时期的脚步。