做为一个八年的程序员,说说我的一些感受。要想在程序员这条路上走的更远,我认为有两种能力至关重要:分析、解决问题的能力,和自我学习的能力,为什么这么说呢?
先谈谈分析解决问题的能力,本质上来说,老板请你来都是来解决问题的,你能解决问题,才能体现你的价值,才有加薪的筹码。一个项目、一个任务,或者一个bug,都可以看做是一个问题,你是否能够快速的分析情况,脱离表象找到问题的根源,或者把一个大问题分解成若干可以处理的小问题,并在规定的时间内解决它,可以说是考量你技术水准的重要唯一标准。这个能力如何培养呢?两种途径:1.丰富的行业经验,你经历的多了,自然就会知道该怎么处理了,俗话说没吃过猪肉还没见过猪跑嘛,大概就是这个意思。2.有意识的学习一些方法论,锻炼自己的结构化思维,不仅仅是对工作,对生活的方方面面,都挺有用的。推荐关注一下刘未鹏的《暗时间》,是专为程序员写的方法论,他本身也是一名程序员。我见过一些厉害的PM,基本上不摸代码了,但是听手下人说一下情况,还是能快速的找到根结,离不开他们的从业经验和系统的思维方法。
然后说一下自我学习的能力,总所周知,程序员是一个很苦逼的职业,技术更新日新月异,产品换代更是以月为单位计,不学习如何能长久?这里的学习又分为两大块,一块为技术知识的学习,包括编程技能,基本原理,算法结构以及与工作环境密切相关的知识,另外值得特别一提的是经典开源代码的学习,这是成为高手的必经之路;另一块为产品知识、行业动态的学习,国内一般情况是写代码比较好或者比较久的人,就开始带团队,如果没有这方面的积累,就会比较困难,另外就算一门心思做技术,多了解一些也有利于加深对需求、功能的理解,不是什么坏事。
这两种能力都是在平时工作中慢慢锻炼起来的,需要长期的坚持和打磨。做为一个刚入行的程序员,要想把事情做好,获得更多的机会,也有几个方面的技能需要注意:
1.编程能力,这个毋庸置疑,做为一名程序员,能写代码、写高质量的代码,可以说是基本功,离开了这个,就像无根之木,无源之水,谈再多也没用。这个可以和公司内的高手学,私下利用业余时间丰富理论知识,多看一些开源代码,从模仿到动手尝试、再创新。
2.沟通能力,听说读写都很重要,对新手来说听和说尤其值得注意。听是说一个任务下来,要听清楚问题是什么,需求是什么,有什么条件,听清楚了再动手。说是要表达有条理,说的清楚来龙去脉,说的清楚解决问题的思路。我见过很多程序员,包括工作过好几年的也有,连一个复杂点的问题是怎么回事,都说不清楚,东一下西一下,一点逻辑结构都没有,很明显他的思路就是混乱的。
这里还要补充提两点,一个是问,不清楚的一定要问,不要装,其实你进公司做三天事,你大概是个什么水平,什么样的思维模式,你的领导就一清二楚了,装也没用。另一个是反馈,一件事领导交待给你,你要在关键结点给他反馈,告诉他做的怎么样了,有什么困难,下一步准备怎么做,需要什么支持等等。不要等到领导来问,才告诉他你有什么问题搞不定,我不知道别人怎么样,反正我对这种情况是深恶痛绝的,这样搞两次以后,我基本上就不会把很关键的任务交给这个人了。
3.良好的工作态度,不同的公司有不同的文化氛围,有比较看重的价值观,就不一一列举了。窃以为对于程序员来说,最重要的一个态度,就是不能凑合。一般的程序员在发现问题以后,东试试西试试,能解决问题就行了,但是优秀的程序员觉得不会妥协,一定会试图去分析产生问题的原因,根本的解决方法,甚至要去看Linux内核代码也毫不妥协。
4.通用工作技能的掌握,包括时间管理、项目管理及个人管理等,介绍这方面的书籍比较多,就不再详叙了,有兴趣可以找到很多信息。