回顾毕业以来,当程序猿快四年了,其实早在学校未毕业的时候就兼职开始商业软件开发。相比大牛们,目前技术水平一般、深度不够,主要源于过去这几年人太浮躁,走过太多的弯路。我觉得,只要肯静下心来花费大量时间去学习钻研技术,思考能力别太差,每个人都可以成为所谓技术大牛或者成为某个细分领域里的大牛。
为什么说这几年来我太浮躁,在于这几年我学东西大都浅尝辄止,抓的太多什么都想去碰一下,但每项都没有花时间深入钻研下去。毕业后,这几年的业余时间也不是在游手好闲,除了读了一些热门看完鸡血满满的书籍之外,也老想着做点什么东西出来,于是去弄了微信公众号后台PHP开发、学了Android等等,但结果是想做的东西没有坚持做下去,最后技术没有深入,其它方面也没有令人满意。
接下来表达的观点不一定正确,希望各位看官独立思考,取其精华去其糟粕。如果耐着性子读完了,希望能够作为前车之鉴对你有点参考。
技术上的深与广
技术是程序员的立足之本,但对于程序员来说,学好技术不仅仅只是学会写代码或者去做单纯体力劳动——复制粘贴代码,应有更多更深入的学习,不要接触的太宽泛,样样懂一点但样样都不精,而更应该值得花精力把一门技术学得更加深入。有观点说,如果将来选择创业,那应该重视广度,但我现在的观点是,不管以后是创业还是继续在职场中晋升,都应先追求深度,在深度上达到一定程度后,再考虑扩展技术视野,最终成为T字型人才。为什么先追求深度再求广度呢?因为技术思维在不同领域和平台是相通的,如果你在一门技术上学得深入了,再去扩展其它方面,那就变成一脉相承的事,有举一反三的快感;并且,就在深入某门技术时,你已逐渐提炼掌握了一套学习和解决问题的方法,而这个才是最重要的,有了某个方面的深厚经验再进入一个新的领域或碰到新的难题时就不至于像没头苍蝇一样到处乱撞。
我以前很在乎“多”,至今都难以改变。比如在iOS上并没有深入学习的情况下,便去学习Android开发,在Android上能写应用时又想去掌握前端开发,同时还规划去学习后台。这样蜻蜓点水似的学习,对什么都只是一知半解,看似技术知识渊博,实则技术上并没有得到质的提升,在实际项目中也只能解决一些较浅层次的问题,碰到深层次的问题便不知所解了。这种在乎“多”的人其实不少,面试过程中有碰到,身边同事朋友间也有,说到底这其实是一种浮躁。在如今分工很细的时代,在某个领域深扎、专业主义更值得大家推从。当然,并不是去否定掌握领域间的广度,而是在没有对某个领域有深度之前,就不要把更多时间同时花在其它领域上。或者,至少要有一个时间上的偏重,比如百分之八十的时间放在某个领域深度上,留百分之二十放在其它技术领域上。
就如李小龙所说:“我不怕练一万招的人,只怕把一招练一万遍的人!”,其实,不管在什么领域,只有专注了才能有所成绩。当然,偶尔也要抬头看路,关注下技术新动向,不断去更新自己的技术栈,比如iOS开发中出现的函数式编程、新开发语言Swift等等。
多实践多总结
程序员要避免眼高手低。接触到某个技术点,如果脑子里第一反应总是“这个太容易了”,而并没有去实践一下就以为已经掌握了,而到真正运用时便什么也想不起来,尤其不幸被面试官问到时就只能支支吾吾不知所云。因此,学习某个技术点,要要求自己落到实处。
多做总结,只有在总结时才能认清自己到底掌握了多少,才能把看到的学到的真正变成自己的。曾经我以为自己学到了很多,但当我开始去总结回顾时,才发现自己掌握的都很空洞或者极其浅显。总结最好以文字的方式记录下来,形成文档(博客),这样不仅能理清思路,同时可掌握的更深刻。再说,人的记忆总是有限的,对某项技术有深刻理解或者一些难题解决的方法步骤或者一些好的工作方法,只有把它们写成文档才能永久保存,形成知识体系。总结之后就去敢于分享,分享出来在一定程度上更能监督自己对某个技术点掌握的准确度。当分享给别人时,便不能只是凑合一下了,多少要有点用,至少要保证不乱说,如果理解上有误也能得到同行的反馈,这些都有利于自我成长。以前觉得写文档很费时烧脑,要写清一个东西十分困难,现在觉得这些精力是必须去花的。这些也是我才开始做的事情。
产品思维
程序员要乐于去和产品经理“撕逼”。以前我以为程序员做好本分事写好代码做好功能就行,再好一点,追求下产品性能和稳定。但对于产品功能需求却很少思考,产品经理说怎么做就怎么做,产品经理说改个啥也没有二话就去改了。然而,当产品经理策划出来的功能之后经常又被自己否定而撤掉或者修改时,这说明产品经理在做某项功能时也不一定是经过很多的思考,很多都是拍脑袋拍出来的。因此,程序员在做一项功能的时候也必须去思考,这项功能(一般是一个大方向下的细节功能点)为什么要做,做了是否很大可能会达到预料中的结果,它的产品逻辑是否合理,如果有疑虑时,则必须去和产品交流一下,说不定在碰撞过程中,产品也想清楚了是否有必要做。程序员要有产品思维,不仅仅是为了减少返工,为了之后避免有去砍产品的想法,同时对自我也是提升,有产品思维的程序员才更能对产品理解到位,更能做好产品各项功能。
用户体验
程序员一定要懂得用户体验,追求好的用户体验,更能促进自己去写出好代码,写某个模块某个函数某行代码时才会思考这么写会不会影响产品性能。也只有追求好的用户体验,才会有意识去在功能上去做优化,即便不是产品需求上规定的,也会自主去优化一些细节,去思考某个交互逻辑是否合理,去思考某个动画怎样可以更流畅更完美一点,而这些都是促进一个程序员变得更优秀。
自测
程序员一定要养成自测的习惯,不是做完了就了事了。就这点我司就有位同事,因为没有自测的意识不在乎细节、粗心大意,造成了两次严重事故,而这两次都是因为代码上的低级错误导致,这也看出这位同事做完后连功能主路径都没有去测过。可能有人会认为这是测试同事的工作,存在问题没被测试出来就是测试同事的失职。测试同事应承担责任不假,但如果程序员抱有这样的心态去做开发,那肯定也成为不了优秀的程序员,甚至离淘汰的日子也不远了。我司那位同事被指出过多次都不曾引起重视,最后就被劝退了。其实有很多异常路径是测试同学想不到的,但程序员如果有很好的自测意识有对产品有责任心,对于一个复杂逻辑性较强的功能便会有意识去检查验证代码上是否有漏洞,最后发布在最大程度上避免留下死角、造成严重的线上问题。
@湘籍程序员,公众号ID: hncoder
简介:湘籍,iOS开发者,略知Android、前端开发。
网友评论