作者丨Peter Wayner
譯者 | 晶顏
審校 | 重樓
軟件開(kāi)發(fā)是一門(mén)具有挑戰(zhàn)性的學(xué)科,它建立在數(shù)以百萬(wàn)計(jì)的參數(shù)、變量、庫(kù)以及更多必須絕對(duì)正確的因素之上。即便是一個(gè)字符不合適,整個(gè)堆棧也會(huì)隨之瓦解。
多年來(lái),軟件開(kāi)發(fā)團(tuán)隊(duì)已經(jīng)想出了一些完成工作的規(guī)則。從復(fù)雜的方法論到新興的學(xué)科和哲學(xué),軟件開(kāi)發(fā)的規(guī)則手冊(cè)使每個(gè)人都能夠協(xié)作,并以有效的方式到達(dá)終點(diǎn)。然而,即便如此,仍然存在失敗模式:有時(shí)是這些方法被誤用了,或是好的想法過(guò)于偏向理論化;有時(shí)開(kāi)發(fā)者只是忘記了他們應(yīng)該做什么,或是故意為之。
軟件開(kāi)發(fā)中的這些錯(cuò)誤幾乎可以破壞任何項(xiàng)目。因此,如果想要確保您的團(tuán)隊(duì)能夠構(gòu)建偉大的項(xiàng)目,那么是時(shí)候停下來(lái)考慮一下以下錯(cuò)誤行為了。
1、選擇錯(cuò)誤的方法
所有的軟件開(kāi)發(fā)方法都有狂熱的擁躉,他們熱衷于那些定義自己最喜歡的團(tuán)隊(duì)組織方式的規(guī)則。但問(wèn)題往往是如何為您的團(tuán)隊(duì)選擇合適的工具。
一個(gè)很大的錯(cuò)誤是從高層強(qiáng)加這些規(guī)則。如果程序員是另一種方法的忠實(shí)信徒,那么當(dāng)他們被迫使用另一種方法時(shí),他們通常會(huì)抱怨和發(fā)牢騷。另一個(gè)錯(cuò)誤是讓程序員自由地選擇他們最喜歡的方法,然而這可能并不是對(duì)整個(gè)團(tuán)隊(duì)最好的方法。
選擇正確的方法并不能解決所有的問(wèn)題,但是它可以減少組織工作流程時(shí)產(chǎn)生的摩擦。團(tuán)隊(duì)將了解他們的角色,以及他們將如何在其中編寫(xiě)代碼。
2、忽略可擴(kuò)展性
一些軟件開(kāi)發(fā)問(wèn)題可以稍后修復(fù),但這絕不包括構(gòu)建一個(gè)能夠有效擴(kuò)展以處理數(shù)百萬(wàn)或數(shù)十億個(gè)事件的應(yīng)用程序。當(dāng)應(yīng)用程序最終全面運(yùn)行時(shí),創(chuàng)建沒(méi)有瓶頸的有效代碼需要足夠的深謀遠(yuǎn)慮和高層領(lǐng)導(dǎo)的支持。這不是以后用一些有針對(duì)性的編碼和虛擬管道就能解決的問(wèn)題。
算法和數(shù)據(jù)結(jié)構(gòu)需要從一開(kāi)始就進(jìn)行規(guī)劃。這意味著架構(gòu)師和管理層需要仔細(xì)考慮將為每個(gè)用戶存儲(chǔ)和處理的數(shù)據(jù)。當(dāng)100萬(wàn)或10億用戶出現(xiàn)時(shí),信息洪流會(huì)淹沒(méi)哪一層?我們?cè)撊绾翁崆盀檫@些時(shí)刻做好計(jì)劃呢?
有時(shí)候,這種架構(gòu)上的深謀遠(yuǎn)慮意味著扼殺一些偉大的想法。有時(shí),管理層需要權(quán)衡大規(guī)模交付功能的收益和成本。有些數(shù)據(jù)分析在大范圍內(nèi)并不適用。一些公式隨著用戶的增加呈指數(shù)級(jí)增長(zhǎng)。計(jì)算使硬件不堪重負(fù),并阻塞了通信。
開(kāi)發(fā)者并不總是想要考慮大局。他們很容易就會(huì)一頭扎進(jìn)去開(kāi)始創(chuàng)作。但是聰明的開(kāi)發(fā)團(tuán)隊(duì)和管理者會(huì)花時(shí)間預(yù)測(cè)這些問(wèn)題,因?yàn)槿绻麄儾贿@樣做,就會(huì)面臨失敗的結(jié)局。
3、沉迷最新趨勢(shì)
眾所周知,軟件開(kāi)發(fā)人員很容易被新奇的想法所吸引。也許它是一種提供更復(fù)雜查詢(xún)的新型數(shù)據(jù)庫(kù);也許它是一種新的編程語(yǔ)言,可以修復(fù)舊語(yǔ)言造成的所有錯(cuò)誤。
有時(shí)候這些想法是有價(jià)值的。然而,很多時(shí)候,由于每個(gè)人都試圖學(xué)習(xí)新技術(shù),最終會(huì)減慢開(kāi)發(fā)速度。有時(shí)候,新想法中會(huì)存在隱藏的缺陷,只有在項(xiàng)目必須交付之前,每個(gè)人都投入到工作中之后,這些缺陷才會(huì)顯現(xiàn)出來(lái)。
謹(jǐn)慎往往是采用新技術(shù)的最佳準(zhǔn)則。這也是一些規(guī)模最大、歷史最悠久的公司仍在繼續(xù)運(yùn)行由COBOL編寫(xiě)的軟件的原因所在。趨勢(shì)變化無(wú)常,但運(yùn)行代碼中的工作邏輯不會(huì)過(guò)時(shí)。
4、保留過(guò)多的數(shù)據(jù)
程序員是天生的囤積狂,他們喜歡儲(chǔ)存信息以備不時(shí)之需,而此舉可能會(huì)導(dǎo)致安全漏洞或侵犯用戶隱私。
對(duì)于出生日期或其他詳細(xì)個(gè)人信息,問(wèn)題可能更大。一些領(lǐng)域(如財(cái)務(wù)記錄或健康記錄)受到嚴(yán)格監(jiān)管,更容易違反規(guī)定。
好的軟件架構(gòu)需要提前計(jì)劃,以盡量減少存儲(chǔ)的數(shù)據(jù)量。它可以保護(hù)每個(gè)人,并節(jié)省存儲(chǔ)費(fèi)用,甚至可以通過(guò)減少移動(dòng)數(shù)據(jù)量來(lái)加快系統(tǒng)速度。
5、外包錯(cuò)誤的工作
關(guān)于究竟是自行構(gòu)建還是購(gòu)買(mǎi)軟件的爭(zhēng)論由來(lái)已久,目前尚無(wú)明確定論。然而,軟件開(kāi)發(fā)人員的選擇往往很糟糕。也許有一個(gè)價(jià)格合理的完美解決方案,但他們卻不舍得把自己的定制堆棧與內(nèi)部團(tuán)隊(duì)閑置一邊。相反的情況也會(huì)發(fā)生。一些管理者購(gòu)買(mǎi)了外部供應(yīng)商的產(chǎn)品線,結(jié)果卻眼睜睜地看著供應(yīng)商在鎖定完成后大幅提高價(jià)格。
不幸的是,對(duì)于軟件開(kāi)發(fā)團(tuán)隊(duì)及其管理者來(lái)說(shuō),決定使用哪種外部工具是一個(gè)持續(xù)的挑戰(zhàn)。利用合適的外部資源是天才之舉,但選擇了錯(cuò)誤的供應(yīng)商則是通往高價(jià)監(jiān)獄的門(mén)票。
6、忽略測(cè)試
高效的軟件開(kāi)發(fā)人員及其管理者都知道,測(cè)試是一個(gè)持續(xù)的挑戰(zhàn),就像編寫(xiě)遞歸代碼或設(shè)計(jì)優(yōu)雅的數(shù)據(jù)結(jié)構(gòu)一樣,是工作的一部分。測(cè)試過(guò)程應(yīng)該從一開(kāi)始就包含在內(nèi),因?yàn)閱卧獪y(cè)試和集成測(cè)試對(duì)于確保代碼在整個(gè)開(kāi)發(fā)過(guò)程中保持可行性至關(guān)重要。
測(cè)試對(duì)于處理大規(guī)模負(fù)載也很重要。當(dāng)我們是唯一的用戶時(shí),編寫(xiě)在桌面上運(yùn)行順暢的代碼十分容易。如果應(yīng)用程序擁有數(shù)百、數(shù)千甚至數(shù)十萬(wàn)用戶,則需要確保代碼是高效的,且部署能夠處理大規(guī)模負(fù)載。
許多團(tuán)隊(duì)會(huì)引入質(zhì)量保證測(cè)試人員,以發(fā)現(xiàn)并糾正程序員所犯的錯(cuò)誤。比如說(shuō),他們知道如何將一個(gè)參數(shù)設(shè)置為0,只是為了看看它是否會(huì)導(dǎo)致除0錯(cuò)誤(divide-by-zero error)。當(dāng)用例變得如此復(fù)雜,以至于任何一個(gè)人都很難想到所有的變化并編寫(xiě)干凈的代碼來(lái)預(yù)測(cè)它們時(shí),這種對(duì)測(cè)試的持續(xù)關(guān)注是必不可少的。
7、低估了計(jì)劃的力量
大多數(shù)代碼在構(gòu)建前期都需要進(jìn)行一定的計(jì)劃。但大多數(shù)程序員通常只是想直接進(jìn)入并開(kāi)始編寫(xiě)代碼。
資深程序員的經(jīng)驗(yàn)告訴我們,最好的步驟是停下來(lái),計(jì)劃,測(cè)試計(jì)劃,然后再完善計(jì)劃。寫(xiě)計(jì)劃可能看起來(lái)很乏味,但當(dāng)你進(jìn)行抽象思考時(shí),嘗試新想法的速度可能會(huì)快10倍。
計(jì)劃還意味著包括來(lái)自其他團(tuán)隊(duì)和涉眾的輸入。他們將是將來(lái)使用代碼的人,因此花時(shí)間討論項(xiàng)目并了解他們的需求,將在之后避免大量的挫折。這是避免上述列出的許多錯(cuò)誤的最好方法。
參考鏈接:https://www.cio.com/article/654284/7-sins-of-software-development.html