五個編程謬論
我是一名黑客。在我還就膝蓋那么高的時候就開始用一臺古老的 Commodore 64 寫代碼了。直到今天,也沒有什么比戴上耳機,破解東西更讓我著魔的了。所以在我創(chuàng)建我的***家企業(yè)時,我就已經(jīng)知道了很多有關(guān)于編程的事情。是不是謬論,且聽我下面一一道來:
1. 代碼很重要
我在很多地方工作過,發(fā)現(xiàn)成功之中隱藏著這樣一種普遍現(xiàn)象:早期的代碼看上去像是一群程序猿喝醉之后寫的。這聽上去似乎有悖常理,那是因為你得竭盡全力讓企業(yè)成長,所以就沒有時間去追求軟件的***。從另一方面講,失敗的企業(yè),卻會花很多很多時間來修正其代碼庫。
打個比方:如果你是一個壽司師傅。作為你工作的一部分,你收集了一套***的刀具。你花時間花精力來完成收藏,它們提升了你作為一名廚師的競爭力。
但無論你每天用多少時間去打磨你的道具,你就不是一個鐵匠。你的工作依然是做壽司。你雖然擁有了世界上***的刀具,但如果做不好壽司,那么你的客戶服務(wù)就是差評。你的餐館生意永遠不會成功。
軟件也是同樣的道理。當你運營公司的時候,你的業(yè)務(wù)目的是滿足客戶。代碼只是一個能達到目的的工具,它本身并不是目的。你可以,也應(yīng)當關(guān)心你的代碼,因為這能有助于提升客戶服務(wù)。但是,如果錯將工具當作了目標,那么注定你將一敗涂地。
經(jīng)驗教訓(xùn):你的客戶并不關(guān)心什么測試覆蓋率、技術(shù)堆棧,版本控制系統(tǒng),也不在乎你使用了什么算法。你的工作就是解決客戶的問題,越方便越好。
2. …關(guān)注實現(xiàn),而不是點子。
這聽起來似乎違背了傳統(tǒng)的創(chuàng)業(yè)須知:快速發(fā)布!執(zhí)行!迭代!執(zhí)行,不需要創(chuàng)意!快速失敗!
上面這些都是偉大的忠告。但是,“不需要創(chuàng)意”,并不意味著我們能通過卓越的執(zhí)行矯正一個糟糕的點子。成功就是發(fā)現(xiàn)好的問題,再好好地解決這個問題。所以,點子好卻沒有好好實現(xiàn)或者***實現(xiàn)了一個壞點子,都是不行的,當然前者還有得救。
很多程序員被困實現(xiàn)的死亡漩渦中,花了大量的時間去創(chuàng)建各種功能或者修復(fù) bug,相信再添一個功能就能成功。我告訴你,這是錯覺。你只需要解決了某個重要的問題,否則你這樣不斷為產(chǎn)品添加功能根本是沒有意義的,除非你添加的功能確實能解決需要的。
點子好卻沒有好好實現(xiàn),總比***實現(xiàn)了一個壞點子要好。
經(jīng)驗教訓(xùn):如果你添加的功能是用來修復(fù)一個失敗的產(chǎn)品,那么***先問問自己這能不能真正地解決問題。
3. ……代碼是寫給計算機的
我總是想不通為什么這一錯誤會如此之歷久彌堅。無論程序員是第幾次因為同事的糟糕文檔和溝通習慣而陷入困境,他們因此而得出的結(jié)論往往還是——程序員天生不擅長這類事情,也不應(yīng)該做做這些事情。
大錯特錯啊。
如果你是一個團隊的一部分,那么提升團隊效率***的一個障礙就是溝通——這不是夸張,團隊面對的是O(n2)問題。如果代碼是你的主要輸出,那么你需要改變你對編程的看法:代碼是寫給人看的,然后又剛好能在計算機上運行。
很多時候,我看到程序員花了幾個小時孜孜不倦地寫代碼,但是卻省略了用于更新代碼文檔的十分鐘。這是因為他們覺得:“殺雞焉用宰牛刀,這種事情留給以后的人就行了,我的時間寶貴著呢。”從某種意義上講,他們的想法荒謬至極。
經(jīng)驗教訓(xùn):代碼是寫給人看的。沒文檔就不要寫代碼。
4. …這是代碼編寫的***一步了。
你是不是認為,一旦你寫完這個功能,投入產(chǎn)品,那就大功告成了?錯了。每一個功能都有一個生命周期。你今天寫的代碼,如果成功,那么將會在你之后的多代程序員中耀武揚威??赡埽蜑榱苏樟夏憬裉鞂懙拇a,而不得不成立一個團隊。
好好想一想。如果你的工作就是為了照料別人寫的代碼,你愿不愿意?
解決問題的關(guān)鍵是要有危機意思:寫完***個版本,并不意味著代碼的完結(jié)。務(wù)必做好文檔、注釋、整理等工作。
經(jīng)驗教訓(xùn):己所不欲,勿施于人。
5. …程序員的工作就是寫代碼
大多數(shù)的程序員認為利用時間的***方式是坐在電腦前,戴上耳機敲代碼。但是,如果你寫的每行代碼都必須維護和支持整個產(chǎn)品的生命周期,那么算法就又有所不同了。
當你是因為愛好寫代碼的時候,那么你可以為所欲為,做任何你喜歡做的事情。但是如果你是在一個團隊中生產(chǎn)產(chǎn)品,那么你的首要義務(wù)變成了維護現(xiàn)有的代碼。其他的重要工作為:協(xié)調(diào)、溝通、規(guī)劃和指導(dǎo)。
經(jīng)驗教訓(xùn):程序員的工作是解決問題。指的并不總是寫代碼。
你不僅是程序員,也是產(chǎn)品經(jīng)理。
有時候,你可能會想:這事情聽起來像是產(chǎn)品經(jīng)理的工作,而不是程序員的。但是,如果你拿的是寫代碼的薪水——尤其是在初創(chuàng)企業(yè)——那么把自己當成是 產(chǎn)品經(jīng)理吧。如果你也希望產(chǎn)品能獲得成功,那么從大局出發(fā)是至關(guān)重要的。這不僅有利于你的初創(chuàng)企業(yè),對你將來的事業(yè)發(fā)展也很有好處。
***,如果各位什么不同見解,歡迎不吝賜教。