黑客大牛告訴你在IT開發(fā)的道路上要注意哪些要點(diǎn)?軟件開發(fā)是一個(gè)非常嚴(yán)肅的過程,一點(diǎn)點(diǎn)的錯(cuò)誤就會(huì)導(dǎo)致軟件無法正常運(yùn)行。那么,在軟件開發(fā)過程中我們應(yīng)該注意哪些事項(xiàng)呢?現(xiàn)在我們就來仔細(xì)地分析一下吧!
1、代碼很重要
我在很多地方工作過,發(fā)現(xiàn)成功之中隱藏著這樣一種普遍現(xiàn)象:早期的代碼看上去像是一群程序猿喝醉之后寫的。
這聽上去似乎有悖常理,那是因?yàn)槟愕媒弑M全力讓企業(yè)成長(zhǎng),所以就沒有時(shí)間去追求軟件的完美。從另一方面講,失敗的企業(yè),卻會(huì)花很多很多時(shí)間來修正其代碼庫。
打個(gè)比方:
如果你是一個(gè)壽司師傅。作為你工作的一部分,你收集了一套絕版的刀具。你花時(shí)間花精力來完成收藏,它們提升了你作為一名廚師的競(jìng)爭(zhēng)力。
但無論你每天用多少時(shí)間去打磨你的道具,你就不是一個(gè)鐵匠。你的工作依然是做壽司。你雖然擁有了世界上最好的刀具,但如果做不好壽司,那么你的客戶服務(wù)就是差評(píng)。你的餐館生意永遠(yuǎn)不會(huì)成功。
軟件也是同樣的道理。當(dāng)你運(yùn)營(yíng)公司的時(shí)候,你的業(yè)務(wù)目的是滿足客戶。代碼只是一個(gè)能達(dá)到目的的工具,它本身并不是目的。
你可以,也應(yīng)當(dāng)關(guān)心你的代碼,因?yàn)檫@能有助于提升客戶服務(wù)。但是,如果錯(cuò)將工具當(dāng)作了目標(biāo),那么注定你將一敗涂地。
經(jīng)驗(yàn)教訓(xùn):你的客戶并不關(guān)心什么測(cè)試覆蓋率、技術(shù)堆棧,版本控制系統(tǒng),也不在乎你使用了什么算法。你的工作就是解決客戶的問題,越方便越好。
2、關(guān)注實(shí)現(xiàn),而不是點(diǎn)子。
這聽起來似乎違背了傳統(tǒng)的創(chuàng)業(yè)須知:
快速發(fā)布!執(zhí)行!迭代!執(zhí)行,不需要?jiǎng)?chuàng)意!快速失。
上面這些都是偉大的忠告。
但是,“不需要?jiǎng)?chuàng)意”,并不意味著我們能通過卓越的執(zhí)行矯正一個(gè)糟糕的點(diǎn)子。成功就是發(fā)現(xiàn)好的問題,再好好地解決這個(gè)問題。所以,點(diǎn)子好卻沒有好好實(shí)現(xiàn)或者完美實(shí)現(xiàn)了一個(gè)壞點(diǎn)子,都是不行的,當(dāng)然前者還有得救。
很多程序員被困實(shí)現(xiàn)的死亡漩渦中,花了大量的時(shí)間去創(chuàng)建各種功能或者修復(fù)bug,相信再添一個(gè)功能就能成功。我告訴你,這是錯(cuò)覺。
你只需要解決某個(gè)重要的問題,否則你這樣不斷為產(chǎn)品添加功能根本是沒有意義的,除非你添加的功能確實(shí)能解決需要的。
點(diǎn)子好卻沒有好好實(shí)現(xiàn),總比完美實(shí)現(xiàn)了一個(gè)壞點(diǎn)子要好。
經(jīng)驗(yàn)教訓(xùn):如果你添加的功能是用來修復(fù)一個(gè)失敗的產(chǎn)品,那么最好先問問自己這能不能真正地解決問題。
3、代碼是寫給計(jì)算機(jī)的?
我總是想不通為什么這一錯(cuò)誤會(huì)如此之歷久彌堅(jiān)。無論程序員是第幾次因?yàn)橥碌脑愀馕臋n和溝通習(xí)慣而陷入困境,他們因此而得出的結(jié)論往往還是——程序員天生不擅長(zhǎng)這類事情,也不應(yīng)該做這些事情。大錯(cuò)特錯(cuò)啊。
如果你是一個(gè)團(tuán)隊(duì)的一部分,那么提升團(tuán)隊(duì)效率最大的一個(gè)障礙就是溝通——這不是夸張,團(tuán)隊(duì)面對(duì)的是O(n2)問題。
如果代碼是你的主要輸出,那么你需要改變你對(duì)編程的看法:
代碼是寫給人看的,然后又剛好能在計(jì)算機(jī)上運(yùn)行。
很多時(shí)候,我看到程序員花了幾個(gè)小時(shí)孜孜不倦地寫代碼,但是卻省略了用于更新代碼文檔的十分鐘。這是因?yàn)樗麄冇X得:“殺雞焉用宰牛刀,這種事情留給以后的人就行了,我的時(shí)間寶貴著呢。”