最近一段时间,我一直在问自己,对于一个程序员而言,到底什么才是最重要的,如何才能写出让客户、让领导、让同事、让自己等都满意的代码?作为一个非计算机专业的IT从事人员,为了让自己牢记初心,我决定把我的思想法纪律下来,让以后的自己不要忘记该朝着怎样的方向努力。
程序员毕竟是一个技术性工种,如果一个程序员不具备一定的技术能力,那他肯定写不出好的代码,这一点毋庸置疑。但我不认为一个技术越好的程序员,他写出的程序就是越好的。其实在我看来,写代码就和写文章、写书一样,具有很强的主观性,这是其它大部分技术性工种所不具备的。打个比方,如果一个人识字不多,文字水平有限,那他肯定无法写出一本好书。但是一个人就算他识得所有的文字,他也未必能写出一本好的书。
因此在面试的时候,我通常把技术能力放在最后,只要你达到了最基本的要求,至少在我这里,你的技术能力就是达标的。但往往现在的很多公司,他们只看技术,却忽略了很多其它的品质。可能是因为大多数面试官无法通过短暂的沟通去了解求职者的其它能力,只能把技术当作唯一的衡量标准。我以前面试过一家企业,他们为了考验求职者的技术能力,居然要求职者用笔手写几种排序算法,事实上,当他提出这种要求的时候,这家公司就已经被我pass掉了。一家企业如果都不能制定一份很好的策略去招聘到自己想要的人,那我很难相信他们能做出优秀的产品。
当然,对于某些公司和某些岗位来讲,他们对技术的要求门槛会更高,比如一些大公司的算法岗,程序优化0.1秒可能对于他们都是至关重要的,所涉及的也许是数亿的市场份额。如果你考虑做这样的工作,那你应该做到专而精。对于大部分的中小型企业,应该根据自己的实际情况制定合理的招聘流程和要求,尽量避免面试造火箭,工作拧螺丝的情况出现,否则你招聘到的人很可能适得其反。
总之,技术是必要的,但不一定是最重要的,更不是唯一的。
互联网最近十多年的快速发展,让很多人都趋之若鹜的想要进入到这个行业中来。有的人是因为热爱,有的人是因为将就。我身边也有一些程序员,他们只打算在这个行业干几年,挣点钱,付首付——买车——结婚——转行。还有的人,因为自身能力和所学专业的限制,没有办法找到一份合适的工作,就花钱参加IT培训,甚至伪造简历镀金,然后顺利进入某家企业工作。
一个不热爱文字的人,他可能会写出一两篇优秀的文章甚至一两本优秀的书籍,但他的大部分作品一定是糟粕,平平无奇。作为程序员,你一定要多问问自己,是否真的热爱这个行业,你是否真的热爱你作品,希望它是健康的、无缺陷的。如果只是因为种种原因而被迫进入到这个行业,那么尽快脱离,并找到自己感兴趣的事,对于你是十分重要的。
IT本身是一个技术迭代非常快速的行业,只有兴趣才能让你在岁月的长河中不知疲倦的前行。因为兴趣,你才会不断地去优化自己程序,才会去琢磨、去钻研。也许国内的环境无法让我们一生都从事程序员的工作,但是起码我们在选择这个行业的时候,应该是是抱着将一生都献于此的态度。
作家的作品就是写的书,但程序员的作品可能只是书中的某一页而已。因此作品的销量体现在某一位程序员身上是微不足道的。也正是因为这个原因,程序员往往需要主动去挖掘责任感和自豪感。一个具体的功能,实现它的方法总是有无数种,也许我们写不出最好的方法,但我们应该在自己的能力范围内做到最好。你有没有过在开发一个功能的时候,已经做了一大半,但是做着做着突然想到了更好的实现方案,这个时候你会改写你的代码吗?
一般而言,企业是很难判定某段程序从实现上是好或者坏的,大多数情况都只看最终的结果是否正常以及代码的规范是否符合标准。毕竟没有人会花很长的时间去完全了解别人所开发程序的内在逻辑,甚至于有的人即使发现了缺陷也不会主动参与修改,这大概就是职场的潜在规则吧。坦白讲,一个程序员如果在代码质量上想要有所糊弄是轻而易举的。可能这也是国内程序员35岁成为分水岭的一个原因吧,毕竟35岁之后大家的重心都放在家庭上,放在代码上面的责任意识也就变的越来越模糊。但其实,一个人的家庭责任感越强,大概率他的工作责任感也越强,因此企业不应该有所歧视。
综上而言,一个人要有较强的责任感和自豪感,才会写出比较完美的程序。较真有时候体现在工作上是一种非常好的品质,不管从事何种工作,我们都需要保持这样的精神,对自己、对身边的人,对公司,对社会负责,并为自己的产出而感到骄傲。
学会思考是一个对个人非常有用的习惯,我们不谈思考对于人生的意义,仅仅对于编程而言,为什么我会觉得思考非常重要呢?如果你只是一个听从上级安排,完成相关功能设计的程序员,那么你有可能是一个非常优秀的初、中级程序员,但你永远也不会达到一个高级程序员的水准。在编写代码时,我们也需要尽可能地多问自己为什么。为什么接口需要这么设计?为什么公司的代码规范是这样而不是那样?为什么需要做这样的功能和应用?为什么采用B方案而不采用A方案?
事实上,很多时候,我们需要了解清楚最终的目的,才能够写好达到这个目标的过程程序。比如有一次,我们公司前场提了一个需求,希望我们的产品有这样一个功能,当用户把图片移动到这个目录中的时候,这个图片就自动变为系统的壁纸。如果要实现这个功能出来非常简单,换公司内的任何程序员都可以轻而易举的完成,但是当我接到这个需求的时候,我首先感觉出这是个非常不合理的需求和功能,这和用户的实际使用习惯并不一致,整个操作流程略显鸡肋。进一步了解之后,发现用户想要的只是通过某个客户端,统一发送一张图片到系统某个目录下,并且配置为系统壁纸而已。这样只需要在客户端执行我们提供的命令就可以,不用进行任何开发。在实际的开发过程中,类似的问题在每个公司都会出现。尤其是在很多中小型企业,因为中小型企业的流程并不完善,程序员所接收到的信息可能是只简单的来自于领导、前场、产品,而他们中的一些人可能并不具备软件思维,甚至有的人也无法准确描述出自己想要的究竟是什么,这是十分常见的。所以我常常建议每位程序员,在开发功能的过程中,都要考虑该功能的合理性以及使用场景,这样才能让自己做出来的的软件是健壮的。
当然,如果你提出疑问受到反驳,也无需气馁,毕竟提出疑问的同时我们也会收获成长,而且我们程序员的视角也是有限的。