仅仅追求能够工作的代码是有害的

作为一个老程序员,我也曾经询问抑或被问,“好的代码是个什么样子的?”

回想刚刚参加工作的时候,受限于个人的经验与天赋,绞尽脑汁的写出只是可以正确工作的代码已然是一件不易的事情,虽然如此,每当完成任务后,内心仍然一直念念地要去把它写的更好,即使那时候还没有明白重构究竟是怎么一回事,就是凭着一股子热情一遍遍的重写,从变量名,从语句顺序,从结构安排,从括号与每一行代码的缩进,精益求精,每当看到差的代码,总想去把它写的更好。

随着经验与教训的增多,自己写的第一版代码的质量也逐渐提高,对于各种细节的考虑也愈加周到。然而,不知道从什么时候开始,却心安理得地接受了这样一种观点,

能够工作的代码就是好代码

再也不会费尽心思的对能够工作的代码进行重构,同时,有无数的前辈和同事以及自己找了各种理由来赞成这种观点,从软件工程理论,从开发进度限制,从人员水平高低,不一而足。慢慢地大家看到低质量的代码,第一反应是去为这段烂代码找各种借口,我们容忍越来越多的低质量代码,更可怕的是我们正在容忍它逐渐侵蚀什么是好代码的判断力。

这是有害的,至少程序员来说。写代码就是我们的手艺,这不过是我们在手艺慢慢成熟的同时,内心正在失去热爱,失去追求卓越的动力所找的借口。这一现象在各行各业是相当普遍的,从中等水平到优秀,从优秀到卓越,每一步都要比刚开始的时候付出多的多的努力,然而效果却并不来的那么明显,至少从行外人的视角看来。因为艰苦,所以每个人都容易原谅自己在这条路上的徘徊止步,何况对于程序员的行业来说,这是个相当不错的理由——毕竟代码在正常的工作,不是吗?然而对于其他专业行业来说——医生,律师,会计师,飞行员……——分毫的差距,便是生存与淘汰。

回想当初入行时,当别人问“程序员的工作有什么好的时候?”,我们自豪的回答,“与机器对话要简单的多……我喜欢这种掌控的感觉……代码从不说谎”。写代码,我们是专业的。我们看到优秀的代码,两眼放光,我们为自己写出的优秀代码鼓掌,我们赞赏自己的技艺。然而,日复一日,年复一年,如今我们如何成为了许多人口中的熟练工,我们为何不再精益求精地打磨自己的技艺,不再追求优秀。突然间,许多同仁们恐慌,焦虑,到处充斥着“程序员到了35岁该何去何从?”,“程序员到了40岁还继续写代码是不是一种悲哀?”,“35岁老程序员被裁该何去何从?”的话题——可怕吗?在我们心智应该在人生顶峰的时候,我们甚至失去了凭着这手本事安身立命的信心,这在许多其他专业行业是罕见的现象,你可能想象不到这也许是从多年以前我们接受那个看似无害的观点——能够工作的代码就是好代码——开始的。

我想到Linus在Ted访谈时,提到好的代码的时候那种热情与兴奋,这段代码是最普通的一段C代码,完成最普通的功能,甚至我们每一个人都写过很多遍——移除链表的一个节点。版本一是合格的,但希望对于版本二你能闻到卓越代码的味道,那么我们至少还能分辨在这个行当里,什么是优秀,我们距离优秀还有多远。知道了不足,我们便可以奋起追赶,去重拾攀登卓越的信心。

版本一

    void remove_list_entry(entry)
    {
        prev = NULL;
        walk = head;
        while (walk != entry){
            prev = walk;
            walk = walk->next;
        }
        if(!prev)
            head = entry->next;
        else
            prev->next = entry->next;
    }

版本二

    void remove_list_entry(entry)
    {
        indirect = &head;
        
        while ((*indirect) != entry)
            indirect = &(*indirect)->next;
        
        *indirect = entry->next
    }

Leave a Reply

Your email address will not be published. Required fields are marked *