這是一篇感想文,最近看完了一篇文章叫做 Forget Clean Code, let’s embrace Compassionate Code,還有一篇相關的文章 Thoughts-on-Compassionate-Code,這裡寫的是對第一篇文章的感想,然後在第二篇的文章中找到了一些相同的感觸。
從 Johannes 寫的 embrace compassionate code 中,談到他對於 clean code 的一些衝突,他原先是 clean code 的信徒,在他早期的職涯生活中,常常加班幫同事修正那些有 bad smell 的 code,但最後發現有時候這樣做,在沒有取得 psychology safety 的情況下,反而讓工作的氣氛變得更糟,而提出了 compassionate code ,把注意力拉回到人的本身,有些人不是不想寫 clean code ,而是每個人的生活有不同的 priority,有可能是趕 project deadline 或是修改一些 legacy code 讓系統可以動,而不想花太多時間改動程式碼,然後目的也許是早點下班為了家人小孩或是其他的興趣。
其實文章裡面有些部分,感覺是 Johannes 對於 Uncle Bob 有一些不滿,因為 Uncle Bob 對於不遵守教條的人,似乎是用不近人情的方式批評,而 Johannes 也被冠上是 against clean code 的人,這也使得這篇文章變得有點攻擊性,但文章的核心其實很簡單,Software development 應該要回歸到人的本身,而不要為了程式碼而導致很多團隊摩擦。
我最近也在省思,怎麼樣的工作環境和文化才會讓人有 psychology safety,回歸到人後,讓每個人都可以講出心裡話,而不是在背後抱怨或是 murmur ,也許才能使得團隊變成 self-organized, 因為每個人加入團隊的原因不同,還有對於工作和品質要求也不一樣,單純讓 programmer 遵守一堆 rules,而不是透過溝通了解 為什麼,有時候真的會造成不少的摩擦 ,這些摩擦其實也變成團隊的阻力,儘管 code 變漂亮了,但是人心卻散了,讓大家不想自動自發地提出建議和改善,這才是真正的傷害了效能。
第二篇文章中寫道,Being Non-Judgemental & Discerning 也是給我當頭棒喝,有時候我也在想維持皇城內的和諧 (psychology safety) 雖然很重要,但是否就是無法提出建言了呢,然後無法去提出讓事情變好的方法,文中提到其實提出意見,可以使用更好的方式,也就是不要只是從一個 dimension 做出評論,而是用比較的方式講出不同 dimension 的差別,像是評論兩個歌手的時候,不要只用某歌手唱歌不好聽來做評論,而是從他們的唱腔,會不會作詞作曲,或是一些表演的小細節來做比較,回歸到寫程式做架構這件事情上,其實也就是需要了解對方為什麼或這樣做,也許是不熟悉或是沒經驗,也有可能是為了趕時間的 workaround,之後再去給予建言比較,覺得這樣寫可以避免什麼問題,或是幫忙開張票紀錄以後可以重構這段 code,都是比起直接批評要好上不少。
我的想法其實也簡單,很多事情都是有價值的,好的流程,好的程式碼,好的文件,有向心力的組織,好的工作環境,不應該為了其中一項而忘了其他東西,在團隊中互相支持,互相給予回饋,建立好的溝通管道,其實跟寫好程式碼是差不多重要的事情。