管理学的经典中常说,基层主管要经常培训和指导新人,告诉他们,应该如何工作,坚持什么,鼓励什么,认可什么,怎样才能获得好的绩效,所以,经过几天的思考和总结,给大家分享“做一个合格的程序员”的主题,欢迎大家拍砖讨论。
知乎上给合格程序员的定义,是指能够根据客户的需求或者上级的要求,选择恰当的技术方案(或者按照上级的指示)完成工作,在合理的时间内完成开发任务并达到质量要求的人,就是真正合格的程序员。
管理学的经典中常说,基层主管要经常培训和指导新人,告诉他们,应该如何工作,坚持什么,鼓励什么,认可什么,怎样才能获得好的绩效,所以,经过几天的思考和总结,给大家分享“做一个合格的程序员”的主题,欢迎大家拍砖讨论。
一、职业技能,手里要有几把刷子
至少精通一门语言、一个类库和一套IDE工具的使用,比如UML工具、IDE调试工具、单元测试工具、内存检测、代码扫描工具,以满足项目过程中对需求分析,编码实施和问题解决的能力需求;
代码提交的互相覆盖,静态检查不通过,或者编译有问题,或者该写注释的地方看不到注释,都是影响团队作战热情的低层次错误,由此在处理这些问题上消耗时间,产生的都是无效投入,谁都不愿意多认可你,更何谈说你是一个合格的程序员;
通过不断的练习,把那些低层次的问题都解决了,变成不用经过大脑的自动操作,然后才有时间和脑力来解决较高层次的问题。
二、逻辑严谨,工作要有工作的态度
细心谨慎,事情做到专业的前提是关注到细节;注意细节,养成良好的编码习惯,比方一致的代码书写风格;比方C 程序中,写完NEW,就想到要在什么地方DELETE;一个循环,马上想到循环退出条件是什么;碰到数组,字符串,就需要你小心翼翼防止越界;提到线程,就考虑到线程安全等等;
发挥程序员逻辑思维强的特长,比方一个温控程序,业务需求描述低于0度怎么处理,0度到26度怎么处理,但就是没有描述26度之上怎么处理,我们则需要给产品经理提出来,让逻辑保持完整性,并适当的考虑逻辑的合并和边界覆盖;
在代码层面,要求做到每一行代码都能逻辑覆盖,做个负责任的程序员;比方登陆超时功能,但超时逻辑没有覆盖到,真正到线上,用户碰到超时后,却出现怎么也不能登录的情况,假使碰到一次这种不可恢复的场景,谁愿意使用第二次这样的软件。
三、学会与团队工作,否则你永远无法达成目标
善于沟通,知道产品经理讲的什么,客户的需求是什么,领导需要达到什么目标;同时,善于表达自己的想法,知道怎么表述能传递有效的信息;通过对需求的理解,能识别产品需求和开发需求之间的差异,能找出相关联模块之间的层次关系,搞清楚输入输出,识别出隐藏需求,找到合适的技术方案;
合理计划,重承诺,完成领导安排的任务,不拖团队后腿;一定需要勤奋,你可以不聪明,但一定不能不勤奋;比方给关联模块提供接口时,如何能设计一个刚刚好又不过度设计的接口,考虑到可读性,可用性,可扩展性等多种指标要求,对于初级别的程序员来说,付出时间上的投入,想要达到如此程度的要求,是很有挑战性的;
主动承担,开始时,领导分配什么任务,就完成什么任务,并尽快熟悉工作内容,适应工作环境;逐渐上手后,要投入时间和精力思考手头的项目,不满足于总做一个接收指令工作的“新人”,主动发现问题,提出想法,寻找解决方案;
低缺陷带来高产出,才能带来高回报;代码Review,DT用例,单元测试,内存泄漏扫描,功耗测试,都是实现零BUG的工具,来不得半点偷懒;网上说“真正的程序员,和职位,薪资,年纪,成就都无关;真正的程序员,是一种信仰,一种生活方式,一种方法论,一种精气神,用更虚一点的话,一种风骨;无论你是什么语言出身,最终这个世界在你眼里,都符合高内聚,低耦合,控制流,数据流分离,多线程处理,输入输出封装”。
四、多学习,多读书,做个有梦想的程序员
培根说“历史使人明智;诗词使人灵秀;数学使人周密;自然哲学使人深刻;伦理使人庄重;逻辑修辞学使人善辩;”;程序的目的是解决问题,从能解决简单问题到解决复杂问题是需要一个经验积累的过程,在这个过程中,你会不自觉地会去学习软件思想,编码规范,算法,操作系统,除非你一直想做一个永远只会解决简单问题的低层次程序员;软件行业日新月异,硬件摩尔定律一直没有被打破,作为软件工作者的我们,如何保持一颗学习的心态,紧随时代的号角,在C、C 、SWIFT、OBJC、JAVA、GO、PYTHON、nodejs等语言间游刃有余切换,在人工智能、区块链、物联网等新新物种和知识间遨游,立于不败之地,确实值得我们思考;
注重培养自己的主观能动性。不要只是满足于完成了领导交代的任务,还需要不断“复盘”,注重总结,举一反三,查漏补缺。不再需要别人告诉你这个东西该怎么做。不仅能自己发现问题、解决问题,还能给其他人分配任务,通过合作在最短时间找到最优解,培养自己的领导力;
不满足于实现一个小功能,或是写了多少行代码。在一个很大的项目中,你做的事情只是很小的一部分。要培养自己的大局观,不仅对自己做的部分有深层次理解,还要主动去了解别人做的部分,了解别人和自己做的东西在一个系统下的关系;
多和Senior级别的程序员交流,尝试从更high level的角度看问题。这样子你才知道自己欠缺什么,应该在哪些方面提升。如果我变成像我的领导一样,或者我领导的领导一样,我还缺什么东西。很多时候,我们知道的越多,越能意识到自己的无知,才能进一步激励自己进步。人生是这样,程序员的升级之路也是这样。