程序员平常加班严重,如何有效率的提升自己

内容摘自CSDN小七整理

每天加班到10点多,程序员如何安排时间提升自己,比如学习英语,或参加MBA课程,广泛社交等?

回顾我的提升之路,我觉得有几点可以跟大家分享的:

是「兴趣」。这也是我认为最重要的一点,一件事情做10年甚至做一辈子,如果没有兴趣的话,我觉得是很痛苦的。兴趣是本能的驱动力,有了兴趣,遇到问题会一直想着怎样去解决,而不是觉得「很难做」;有了兴趣,碰到一个新的东东会觉得很兴奋,而不会觉得是一种负担;有了兴趣,接触到一个东西后就像更加深入的去了解,而不是用过了就不管了。所以我认为如果想在一个行业(不限于软件行业)长期发展并有所提升的话,一定要问问自己是否有足够的兴趣。

第二是「坚持」。《异类》一书中提到一个小时理论,我觉得非常有道理,意思就是说如果你想成为 人才的话,一定要积累小时以上的训练和经验。特别是在软件开发这个领域,技术又多,技术更新又快,如果没有坚持去积累和提升的话,是很难达到一定高度的。操作系统、数据库、网络、编程语言、设计方法等都要掌握,每个技术点又有很多更细的分类。以编程语言来说,C、C++、Java、PHP、Python等主流的都有10来种,每个语言继续深入的话又有很多内容,例如Java可以列出来的有JVM、IO、NIO、网络编程、反射。。。。。。等等。所以这么多的东东,短时间内快速入门还可以,但如果说21天就精通XXX,那是不可能的,必须经过长时间的积累。其实我现在都不敢说我精通什么,只能说相对周围其他人会精通一些。

第三就是「方法」。掌握正确的方法,能够让我们事半功倍,更快的提升,一些常见的方法我就不啰嗦了,这里特别分享 秘方:

一个秘方是“写博客”,注意这里不是“看博客”,也不是“转载博客”而是“亲自写博客”。哪样东西你觉得你比较懂了,那么你就写成博客。当你真正去写的时候,你会发现,其实还有很多不懂或者不清楚的地方,这样就会促使你又去学习研究;当你的博客发表后,其他人除了能够从你的博客中学到东西外,也能够帮你发现一些问题或者错误,这样你就更进一步的掌握了;

另外一个秘方就是“链式学习”。形象点说,就是你抓住了一个链条的一个链,然后慢慢慢慢把所有的链都拉出来。举一个很简单的例子:socktsvr编程。很多人在编程的时候,都是去搜索引擎搜索一下“socktsrvr样例”,然后对照样例很快就写完功能了。然后呢。。。。。。很多人没有然后了,完成任务就不管了。其实这样做就错过了一次提升自己的好机会。

“链式学习”则不一样,它是这样做的:我通过搜索引擎搜索到样例完成工作后,我会问自己很多问题:样例中的api每个参数都是什么含义,有哪些注意事项,还有其它API么?为了解决这些问题,我就可能去找本书看,某个编程语言的sockt编程;看完以后我知道sockt编程的全貌和一些注意事项,而这些是通过搜索引擎搜索的样例中没有的;知道sockt编程的全貌后,我又会问自己:操作系统是怎么做的呢?那我又会去看《UNIX网络编程》,看完后我就对操作系统层面的又掌握更多了;看完《UNIX网络编程》后,我又知道sockt是和tcp/ip相关的,那我又会去看《TCP/IP协议详解》。。。。。。

这样去做就是一条学习链:socktsrvr编程-sockt编程-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实现反而很蹩脚。

一个 的程序员应该具备哪些技能和修养?

首先是“快速学习能力”。这里不是说一定要去快速去学习各种各样的新技术,而是说当有需要时,能够快速的学习。很多人开始学新的技术和技能时,一开始就一头扎进去写样例、写Dmo、看源码,我认为这不是好的方法,而且比较耗费时间,收效也不明显。

我给大家分享我的4W2H快速学习方法。我在学习新的技术的时候,都是按照这样的步骤去了解的:

1)这个技术能解决什么问题(why)

2)比较适合在哪些场景应用(whr+whn)

3)这个技术跟我已经掌握的哪个知识或技能类似,有什么差别、有什么特点、有什么优点和缺点(what)

4)了解前面的问题后,我才会开始去尝试写写Dmo,或者更进一步去应用(Howtous)

5)觉得有兴趣或者其实现很牛逼的情况下,我就去研究一下原理机制,看看源码等(Howitimplmnts)

其次是“良好的理解能力”。程序员需要将产品人员或者用户用自然语言表述的需求翻译成程序语言。自然语言有一个特点就是通俗但不严谨,而程序语言必须是非常严谨的。如果对产品人员或者用户提出的需求没有很好的理解,即使程序语言写的再漂亮,技巧再高, 做出来也是一个不符合要求的产品。

记得有一个关于“美女”的笑话:人听到“美女”后的反应是想到“天使面孔魔*身材童颜巨乳”,而猪听到“美女”后的反应是“乌克兰大白猪”,猫听到“美女”后的反应是“有着金色光滑皮毛的波斯猫”。如果程序员给了猫一个“天使面孔魔*身材童颜巨乳”的美女,猫一定会觉得很难看。

第三是“持续不断的学习”。软件开发领域设计的知识和技能太多了。从广度上来说,有操作系统、数据库、编程语言、网络、设计等,编程语言又有几十种;从深度上来说,操作系统、数据库、编程语言等都是可以不断深入去学习的。无论你是从事对技能广度要求更高的业务开发,还是从事对技能深度要求更高开发专项系统,都需要不断的学习,这样才能不断的提升自己的能力。

第四是“乐于分享”。如果单纯从个人完成工作的能力来看,可能确实也有很多程序员不爱分享但确实很厉害。但我认为真正 的程序员一定是除了自己 外,还能让其他人也变得 ,或者能够贡献 的开源项目以降低别人的重复工作。分享的途径有很多种,可以给公司人员做培训,可以写博客,可以贡献开源项目等。

程序员如何“挤”出时间来提升自己或在技术上提升自己?

关键就在于一个“挤”字,其实就是“利用时间碎片”,10分钟就可以了,以我最近为例谈谈我现在怎么挤时间的,大家可能就明白了。

7:40~8:00:送完小孩后到出门去地铁中间有20分钟,看《失控》一章

08:20~09:00:地铁上带一本书,大约可以看完一章,容易看的书可以看两章

09:30~09:50:看技术类的PDF,比如说最近看JQury,大约可以看一章,不用担心,每天20分钟完全不会影响工作

20:20~21:00:和早上地铁一样

睡觉前15分钟:看15分钟书,前段时间这样花了大约2个月看完《三国演义》

这样累积下来,我一天大约可以看2个小时书,今年上半年看了大约23本书。

给年轻程序员的几条建议

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

一套高效的开发环境

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

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

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

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

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

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

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

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

例如,「我要成为iOSdvlopr中的达人」这个目标,就远不如「我要成为前端应用开发的专家」来得有意义。前者学到深处你可能会去钻研iOSframwork里各种奇技淫巧,而后者你会开始







































破译白癜风
北京白癜风价格



转载请注明:http://www.xxcyfilter.com/zytd/8437.html