程序员怎样结合平时工作中的项目修炼自己的技能?
近期面试思科失败,受打击之余回想面试官提出的问题,反思后觉得自己平时对知识的积累还是不够,
虽然平时工作项目中的问题都可以解决,但是真的去面试发现有很多原理自己说不出,这是不是大部分人的共同感受,求大神指点,怎样将自己练级为一个实战和理论兼具的牛逼的程序员
回答:
根据我的个人经验,在工作里面是很难学习到什么特别有用的技巧的。在微软,或者谷歌这样的公司,你用的东西都是内部造好的轮子,所有的经验在离职了之后都是没法用的。
但是编程技巧啊、设计模式算法这样的东西,你是无法直接在工作中学会的。公司给你一个任务,并不会说你写出来的算法跟CTO脑子里想的不一样,就不给你钱。所以没有任何方法可以强迫你学会需要的知识,你也只有自己去学。
所以最好的选择就是自己在家里牺牲娱乐的时间来做自己的项目。自己的项目没有deadline,你做多久都可以。最重要的就是要难。难到什么程度呢,就是只要更难一点点你就做不出来了。只有刚刚好到这个临界点,做项目的效果才会最大化。不过你如何找到这样的项目呢?只能靠你多给自己出题,出多了你就对自己掌握的比较准确了,就有经验了。
如果你是那种要人家用枪指着你你才看得进书的人的话,那的确没办法。
回答:
之前的回答 https://segmentfault.com/q/1010000000461429
我的建议有三条,我都各自用过这些方法来冲出舒适区,仅供参考
NightJob
不知道你有没读过《黑客与画家》,这里说的NightJob就是你在工作之余,下班,周末来作的项目。无需考虑盈利,只需要做你最想做的事情,你自己是产品经理负责规划,自己是老板负责挤出工作之余的时间,自己是开发负责找最cool的技术来实现。
我个人的NightJob有很多很多,绝大多数最后都是0用户,自己写不下去了,但每一次从发现灵感,尝试去做,最后做了个半成品,渐渐遇到困难,克服了一些困难的过程都对自己的成长有很大帮助。每次反思“啊那个项目怎么最后就做不下去了”也都很有收获。
OverJob
顺势给第二条建议起了个这么个名字,就是工作之余,想想有啥可以额外做的小工具,mini项目,做出来可以略微提高一点工作效率的。比如我做的事情是
我司内部有一个MySQL缓存中间件,负责在web机器和DB之间做cache,一直没有图形界面的,我花了一些时间(嗯,包括一次周五额外加班通宵),日了一个网页版的图形界面出来,开发的时候不需要搞那些命令,直接开网页,就像PMA那样就可以控制里面的内容了
这样的事情和老板说,他肯定不会批时间给你做,但实际上做出来以后确实是对开发效率有一定提升的。和NightJob一样,因为是你主动自发做的,所以你可以尽情发挥,用擦上边的各种你想熟悉的技术。比起NightJob来说虽然可能选题范围稍微窄一些,事情本身的有趣程度也略逊,但好在做出来以后可以shock到你的老板,可以让你的同事对你刮目相看。
成为水泥
最后,这条建议就是完全关于正经工作的。既然你现在感觉有余力,可以比较好的完成你的份内工作,可以把你的眼光投向四周:你的同事有什么工作是摆不平的,或者做的不够好的?如果这件事你能做的很好,那么找机会花时间去教他,提高他的水平。如果这件事你也不那么擅长,那就去学,变得擅长,可以考虑和他聊聊然后和你的老板聊聊,告诉他们:这事儿我比较能干,把这份事情搞过来自己做,把自己做惯的“简单”一些的任务丢掉一部分(以夯实你学习的成果)
水泥的意思就是首先能填充到缝隙之中,还能慢慢变硬,让大楼让整个团队坚硬无比,也让自己能适应任何需求。
后者对自己的提升比较明显:你丢掉了一些做惯的不有趣的事儿,拿到了新的有挑战的事儿,学到了新的技能,但其实我更喜欢前者,也就是提高同事的水平的机会。这不仅能收获他的好感度,老板的好感度,还能让你自己的基础更扎实(别人学习过程中提出的问题很多时候能正中自己的软肋),一石二鸟,一般人我不告诉他的。
回答:
就一条:要有好奇心。
我的做事准则是:当项目中引入一个新的依赖时,我一般会通读他的源代码,确保他的实现大致符合我的预期判断。在这个过程中吸收对方的亮点,同时也尽量避免自己踩坑或踩坑之后能及时跳出。
以上是 程序员怎样结合平时工作中的项目修炼自己的技能? 的全部内容, 来源链接: utcz.com/qa/257079.html