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