课程咨询 :13623629309

太原PHP培训 > 达内新闻 > 太原php培训班:程序员在加班时间写的代码不靠谱(1)
  • 太原php培训班:程序员在加班时间写的代码不靠谱(1)

    发布:太原PHP培训      来源:达内新闻      时间:2016-08-30

  • 作为一个最底层的程序员,我先记录一些只有底层程序员才会知道的事情。如果多年后,我违背自己进入这个行业的初心,走上管理岗位,也能回想起一些禁忌,避免一些错误。

    其中最重要的就是这条:不要相信一个程序员在加班时间写出来的代码

    (软件工程的学说表明,连正常时间好好写的代码,也不要太相信。不过这不是本文的重点,略过不提。)

    (不懂代码的人,看到本文中的Java代码可以略过,不影响理解。)

    创造力的时限

    写代码,与写文章、绘画、思考复杂问题,并没有本质上的区别,都是创造性的活动。

    每个人的创造力,都会随着身体状态而波动。广为人知的是,一个人年老体衰后,相比年富力强时,创造力会急剧下降。其实,人每天的状态起伏,也同样会剧烈影响这一点。

    如果是拧螺丝,那么在精疲力尽、拧不动以前,身体状态对结果不会产生太大影响。因为拧螺丝的指标非常简单——拧紧,要做的事也非常机械化——拧,直到它紧,换下一个。

    但如果是写代码,有些事,是不能在状态不好的时候完成的。

    比如,在Java里,遍历一个外部的List,做一些处理。如果状态不佳、做事前想的东西少了点,那么很可能直接这么做:

    public void handleAList(List<Integer> aList) { for (int i = 0; i < aList.size(); ++i) { // Do sth with List#get(int) }
    }

    这样做是从C/C++带来的一种很直观的做法。有什么问题吗?

    假如外面传入的aList是一个ArrayList,那么List.get(int)的时间复杂度是O(1),算上外面那重循环则是O(n);而假如aList是一个LinkedList,那么List.get(int)的时间复杂度是O(n),算上外面那重循环则是O(n2)!

    (为不懂算法时间复杂度评估的人解释下:在这个场景下,O(n)代表最优、最快,而O(n2)代表不可接受地慢。)

    如果时间充分,那么可以去查看handleAList()的调用位置,看看它传递的是哪种List;而如果思考得够充分,考虑到这两种情况都有可能,那么代码就会做兼容处理,改成这样:

    public void handleAList(List<Integer> aList) { for (int i : aList) { // Do sth with i }
    }

    这使用了for-each语法,实际上是用Iterator来做遍历,无论对哪种List都是总共是O(n)的开销。

    注意,这通常不被看做一个bug,普通的黑盒与白盒测试都是无法发现的。只是你的App会比较卡,或者后台会比较慢。当需要解决这种性能问题时,可能需要非常经验丰富的程序员,在海量代码里找数周时间——而这一切,在开发之初,只要那个程序员状态好一点,就可以避免。

    一个人,每天的创造力是有时限的。在时限外,他不再是一个优秀的创造者,而是一个笨蛋。

    (为了便于理解,这个例子非常简单,以至于不够贴切。对Java来说,优先使用for-each或Iterator来遍历,已经是一个共识,是技术素养的一部分。)

    失误率的飙升

    程序员在写代码的过程中,每天做得最多的应该就是等价变换。

    if (isSthTrue()) { // Take some actions. }

    变换成

    if (!isSthTrue()) return; // Take some actions.

    这只是最简单的一种逻辑反转,实际上还有更多、更复杂的形式。通过这类变化,对代码做出调整后,程序员可以把代码变得更好,或者做到以前不能做的事。

    而在加班时间、大脑不那么清醒的情况下,很可能会写成这样:

    if (isSthTrue()) return; // Take some actions.

    区别仅仅只是少了一个符号,而意义则完全走样。

    这个例子比较简单,出错后也很容易在调试过程中发现、纠正。但是,请不要怀疑,的确会有程序员为了这么个简单的问题,调试整整一个晚上!

    (!i,(字体未配置好时)本就难以区分,眼睛疲劳昏花时,在数百个字符里扫来扫去,难以分辨(!i中是否少了个符号,也并不奇怪。而如果换成第二天早晨,很可能只需要瞥一眼。

    大多数管理者,往往会对熬夜的程序员给出一些肯定,并且允许第二天可以休息一天(有些甚至只给一早上)。但如果他们知道内情,会发现自己其实亏了一天。如果程序员正常下班,第二天花一小时解决这个问题,剩下的七个小时可以继续开发。

    还有很多比这复杂得多的变换,或其它类型的代码改动,即使在大脑清醒的情况下也需要花费一些时间,认真思考、小心调试。而如果来了一个问题,你说“必须要今天下班前搞定”,那么程序员会很烦躁,并且越来越烦躁。

    达内时代科技集团致力于培养面向电信和金融领域JavaC++C#/.Net3G/Android3G/IOSPHP、嵌入式、软件测试、UID、网络营销、网络工程、会计、UEDwebUnity3D、大数据、童程童美等17大方向中高端软件人才课程与少儿教育课程。选择太原php培训,不再孤军奋战,轻轻松松做IT高薪白领。太原达内培训带领有明确目标的学子迈向成功之路!想找工作的求职者可以加QQ3373924515(太原达内就业服务部)咨询了解。

上一篇:创业IT公司的 CTO 应当做什么?

下一篇:太原php培训班:程序员在加班时间写的代码不靠谱(2)

最新开班日期  |  更多

php高级开发名企定制班(剩2个名额)

php高级开发名企定制班(剩2个名额)

开班日期:12-30

php高级开发周末班(剩5个名额)

php高级开发周末班(剩5个名额)

开班日期:12-30

php高级开发免费试听(剩5个名额)

php高级开发免费试听(剩5个名额)

开班日期:12-30

更多高级开发工程师精品班

更多高级开发工程师精品班

开班日期:12-30

  • 地址:山西省太原市小店区学府街长治路高新国际A座24层
  • 课程培训电话:13623629309     全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56

    在线客服系统