首页 编程 软件学院 查看内容

程序员工作十年总结了:学习新技术的8个建议

2017-2-22 00:57 |来自: 互联网 3270 0

摘要: 第一种工程师给一段复杂的程序,比如有7个局部变量,5层循环和if嵌套,他能赤手空拳上阵,迅速领会程序意图、找到bug,不用借助任何工具甚至纸笔。给一个复杂的问题,能在一个函数之内一气呵成,立马给出正确实现, ...

第一种工程师

  • 给一段复杂的程序,比如有7个局部变量,5层循环和if嵌套,他能赤手空拳上阵,迅速领会程序意图、找到bug,不用借助任何工具甚至纸笔。

  • 给一个复杂的问题,能在一个函数之内一气呵成,立马给出正确实现,这个函数可能有七个变量,5层循环和if嵌套。没有废话,删无可删,但是单一函数复杂度高,一般人要费老鼻子劲方能看懂。

第二种工程师

  • 给一段复杂的程序,比如有7个局部变量,5层循环和if嵌套,他无法马上看出程序的意图,但是他通常会借助纸笔写写画画,最终搞定。

  • 给一个复杂的问题,要磨叽磨叽好半天,一般用几个函数组合起来实现,这些函数职责单一明确,身段苗条,通常一两个变量,循环和if不超过2层嵌套。单一函数复杂度低,一般人都能轻轻松松看懂。

第一种软件工程师是天生的聪明人,他们处理复杂事物的能力是天生的,可以流利的心算三位数加三位数带进位的加法。根据认知负载理论,这类人的working memory容量超越常人,他们可以将多种因素同时纳入大脑进行思考而不会出现大脑过载。他们写出来的复杂程序,一般的看法是没有掌握分而治之的正确编程风格,其实际是他们脑筋太好使,普通人为了克服认知过载而发明的编程方法对他们而言纯粹就是多此一举。当遇到更为复杂的问题时,他们自然会分而治之。缺点是不经刻意训练,他们按照自己的认知能力写出来的程序普通人维护起来有困难。

第二种工程师是天资正常的普通人,working memeory的容量大概就是可以心算两位数加两位数带进位的加法。但是他们掌握了解决认知负载的方法。阅读复杂代码的时候,他们借助纸笔,把对其中的小片段的分析结论先写下来,避免大脑缓存太多东西,然后就这些数量变少的中间结果再进行分析,始终保持放入大脑的东西不要太多。

1. 克服惯性

万事开头难,克服惯性是学习新技术的第一步。举个日常生活中惯性存在的简单栗子,当我们看电视的时候会因为遥控器不在身边而懒得换台。幸运的是有很多的小技巧可以调动我们的积极性,帮助我们克服惯性。对于我来说,微习惯是一个很好用的小技巧。与其被手头的任务吓到,不如将任务细分为一个个具体的微任务,然后挑选其中的一个开始做起。

2. 关注大牛

学习新技能的第一步是明确要学什么。它可以是任何你有激情去学,并且想深入学习的一些东西。这种原始的学习欲望非常重要,这种欲望可以在你的学习低潮期给你提供动力。你想学的或许是一门新的编程语言、应用框架或者是新的工具,一旦你确定了想要的是什么,就立刻去收集相应的优秀群体所做的一些优质的工作成果。这些可以从YouTube、Vimeo、HackerNews、各种博客,甚至是你的微博好友那里获取。关注别人做了些什么可以给你强大的信心,让你觉得 “You can do it, too!”

3. 建立知识网

当你对自己要学习的东西建立了信心之后,接下来要做的就是做一块海绵,然后开始疯狂地吸收知识。从Google搜索关键词“beginner tutorials”开始吧,搜索一些跟你要学习的知识相关的入门教程。如你所知,Nettuts+上面有成千上百的各种教程供你选择,StackOverflow上面也有很多学习资源。

4. 多听多看

随着你对技术的深入挖掘,你可能会想利用更多其他形式的学习资料,比如podcasts,screencasts等等。我的建议是多用 iTunesU,这上面有很多很专业的知识可以让你对于特定的领域进行深入的探索。

目前,有很多的网站都有提供在线教育服务。王婆卖瓜,这里要首推我们自己的Tuts+ Premium。想要学习PHP或者JavaScript?这里有你最需要的资料。另外,你也可以在下面几个网站上找到自己需要的教程:

  • Udemy

  • CodeCademy

  • CodeSchool

此外,你也可以看一些免费的会议视频材料,比如YouTube上面的Google IO,以及Confreaks!

5. 行动起来

现在你已经看了一波又一波的教程以及视频资料,并且对于想学的技术已经有了一个相当深入的了解,接下来做些什么呢?没错,是时候理论联系实际了,实践是检验真理的唯一标准。

用你所掌握的技术做一个个人的小项目,设计一些简单的功能并且实现他们。毫无疑问,你会遇到很多的绊脚石,当遇到它们的时候,在StackOverflow或者Google上面搜索之,解决之。你已经踏上一条成为某一领域专家的旅程,遇到的困难挫折越多,你会变得越睿智。有句老话说得好,“专家是犯错最多的人”,这意味着他们尝试了很多疯狂的事情来探索这门技术的极限,最后,对于这门技术是如何运作的就可以知根知底。拥有这种洞察力之后,他们便可以随心所欲的运用这项技术去按照自己的意愿完成想做的事情(当然,是做好的事情)。

6.一技之长

新技术层出不穷,而内核的精髓的东西却变化不大,就像.NET,从VS2003到VS2012,已经有10个年头,VS的版本不断更新,而.NET内核的最新版本也才4.0,所以,作为程序员,我们要多掌握内核的东西,精髓的东西。

我们的学习积累毛病在于:贪多、贪全、而不够深入。对于很多技术,我们都很有兴趣,对于刚兴起的技术,也紧紧跟随。但是,几乎都是蜻蜓点水、一知半解。回头想想,我们似乎什么都会一点,什么类型的项目都可以做,B/S的、C/S的、数据库的、分布式的,等等,但是,却不敢说,在某某方面,我的水平已经超越了圈中同类型的80%的人。只是我能做的,大家都会做,而且,我也没有把握比别人做得更好。

必须要让自己有价值,而自己的价值在于不可替代性或是难以替代性。如果,随便找个程序员就能把你replace掉,你的价值就很低廉了。如果在你负责的某个方面,只有20%的人超越你,那你的价值、你的重要性就凸显出来了,你与雇主的关系就从被动转向了主动,你就有了谈判的筹码。

7.打造自己的精品

当你在某个小领域钻研了3、5年后,你一定会有很多心得,积累了很多经验,其中有些经验是异常宝贵的,为什么了?因为在钻研这个领域一段时间后,会陆续碰到很多问题,而那些80%的人,在碰到某个问题时就停止向前了,在这个小领域的水平就到此为止了,而你却不断地解决这些问题,不断地超越那80%的人。

而且,很可能的一个情况是,作为几年钻研的一个副产品,你积累了一套类库或框架,而基于该类库或框架来开发该领域的项目,不仅开发速度更快,效率更高,而且项目的质量更有保证。然后,你可以把积累的这套类库/框架打造成一个精品,不断的打磨,直到某一天,可以让更多的人来用它。

当你在某一领域有了丰富的经验,或者有了自己的精品类库/框架之后,你便可以面向更广阔的市场。

8.更广阔的市场

在公司做个小白领,你的生死荣禄几乎就完全掌握在你的上司手中,你不得不关注他,被他的情绪所左右,很可能因为他的一句批评,你就整夜难眠。你觉得自己做得很好,可是他不认可。但是现在,你不需要再过分的关注他,你可以将眼光转向更广阔的市场。

本文出处: http://www.toutiao.com/a6389532858226163970/
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除
1

路过

雷人

握手

鲜花

鸡蛋

刚表态过的朋友 (1 人)

最新评论

返回顶部