|
普通編程與專業(yè)編程之間有很多差別,而最為顯著的就是截止日期。
截止日期 / 最后期限
當你給自己寫程序的時候,只要你愿意,就可以用很多(或者很少)的時間來完成,但是當你給別人寫程序的時候,你就只有一點有限的時間和資源來完成任務(wù)。而根據(jù)我的經(jīng)驗,一般會導致以下兩種情況之一:
1. 你必須延長時間以妥善完成任務(wù);
2. 你必須寫些不嚴謹?shù)拇a來應(yīng)付過關(guān)。
如果你做過專業(yè)編程,你會明白我的意思。只有極少數(shù)靈活的項目能夠給予足夠的時間和資源來完成任務(wù)。這就使得程序員必須做出艱難的抉擇。
任何一個有自尊的程序員都不愿意提交不合格的代碼。但是當交易中伴隨有超時違約金時,想要始終提交高質(zhì)量的代碼是很困難的,尤其是在專業(yè)環(huán)境下,與那些不需要理解技術(shù)違約概念的非技術(shù)員交易。
幸好,這里有幾條準則供你參考,可以在臨近截止日期時,幫你把不嚴謹?shù)拇a總數(shù)最小化。它們不一定能夠快速修復問題,但毫無疑問將有助于那些需要日復一日,始終寫出一流代碼的人。
準則一:編碼之前設(shè)置連續(xù)部署
這是我從《The Pragmatic Programmer / 程序員修煉之道》一書(絕對是程序員的必讀之書)中找出的小竅門。總是,我是說總是,在編碼之前設(shè)置你的連續(xù)部署系統(tǒng)。
我所說的連續(xù)部署是什么意思?好的,在你開始編寫你的項目之前,你應(yīng)該有一個能部署你的項目代碼為產(chǎn)品的系統(tǒng)(最好對于演示和開發(fā)環(huán)境也是如此)。這樣,當你編碼時,你就會有一個平和的心態(tài),因為你知道你可以隨時部署你的項目。
在很多開發(fā)流程中,這一點能節(jié)約相當多的開發(fā)時間。相比于在測試環(huán)境中部署/調(diào)試代碼(或者更糟,直接在生產(chǎn)服務(wù)器上),你可以直接把代碼推送至你所用的源代碼控制系統(tǒng)中,然后讓你的連續(xù)部署系統(tǒng)負責接下來的事情。這也許看起來不像個節(jié)約時間的方法,但是如果你考慮一下每天都要把你的代碼復制過去并手動測試所浪費的時間,你就知道這樣做能快速完成并在每月中節(jié)約數(shù)小時。
準則二:先寫測試
如果你從沒聽說過測試驅(qū)動開發(fā)(TDD),請立刻看看維基百科的解釋。如果有人付錢讓你編寫軟件,并且規(guī)定了截止日期,你就要隨時練習 TDD。
測試驅(qū)動開發(fā)的基本概念是,在寫項目代碼之前,你寫一段簡單的代碼來測試你假設(shè)的項目代碼,以獲得預期的反應(yīng)。例如:你的項目需要你寫一個函數(shù),把兩個數(shù)相加,并返回和。在寫這段代碼之前,你應(yīng)該寫一個測試函數(shù),test_add_two_numbers,它調(diào)用你的 add_two_numbers 函數(shù)來驗證不同的輸入值所返回的結(jié)果都是正確的。
這看起來很麻煩,但是它有許多好處:
- 寫測試首先能幫你明確你的應(yīng)用程序架構(gòu)。
- 你將有一個平和的心態(tài),因為你知道你的代碼是可運行的。
- 你能夠輕易的重構(gòu)項目,而不用擔心破壞代碼。
- 你可以避免放出低質(zhì)量的代碼,以免玷污你的聲譽。
準則三:透明(Be Transparent)
透明很難實現(xiàn)(取決于你的工作環(huán)境),但卻非常有益處。
為了達到透明,你需要確保與接收代碼的客戶之間保持一條清晰的溝通途徑。你需要保持定期更新,這樣才能看出來工作正在進行,并且進展到哪里。更好的一點是,你能一直部署代碼到演示系統(tǒng),從而讓客戶夠看到未完成的項目和它一天天的改變。
如果你能跟你的老板(們)保持透明化,他們就很有可能了解是否需要推遲截止日期。非技術(shù)人員通常不懂軟件開發(fā),視它為黑盒技術(shù)。通過與客戶保持清晰的溝通和透明化,并讓他們參與到開發(fā)進程中,客戶可以更了解你的工作,使得對將要開發(fā)出來的產(chǎn)品更青睞。
規(guī)則四:維持日常計劃表(Todo list)
時間管理問題肯定是超出本文談?wù)摰姆秶俏胰砸赋觯瑸榇_保事情一直向前進展,作為一名程序員你所能做的最好的事情之一就是維持一份日常計劃表。另外,一個得力的時間追蹤工具也能幫上大忙。(老外推薦的10個時間追蹤工具)
軟件開發(fā)是極為復雜的事情。成為一名優(yōu)秀的程序員要求有多年的實踐,耐心和鍛煉,并且學無止境。當需要在截止日期內(nèi)開發(fā)軟件時,往往你正在編寫一個復雜的系統(tǒng)。為保持思路清晰,并且確保發(fā)揮你編程的最大能力,你應(yīng)該維持一份由每日需要完成(編碼方向)的單獨的任務(wù)組成的日常計劃表。
不要寫過于空泛的計劃表,像“調(diào)試聲音問題”這樣的,而是要真正地想一遍,并且寫出事情的幾個步驟。例如:
- 寫一個音樂文件加載功能的單元測試,檢查 mp3 是否能夠播放。
- 寫一個音樂文件加載功能的單元測試,檢查加載 wav 文件時是否崩潰。
- 創(chuàng)建新的特性分支,設(shè)計升級,適用于新的網(wǎng)頁設(shè)計模板。
- 使用網(wǎng)頁設(shè)計新模板升級 style.css。
有一個明確的可操作的事件列表可以使你集中力量在一段時間內(nèi)解決一個單獨的任務(wù)。這樣就不用時刻平衡分配和在腦子里想著接下來的步驟。編寫軟件已經(jīng)夠復雜的了,不要讓你的生活更困難。
準則五:做應(yīng)該做的事
毫無疑問,會有令你緊張和不舒服的情況出現(xiàn)。你拖延時間并忽略了新特性的單元測試嗎?當這些情況發(fā)生時,不要任意妄為。相反的,做應(yīng)該做的事。
不管是否需要你回顧還是重新查看一些舊代碼,都要多寫一些測試用例,甚至推遲截止日期也要這么做。作為一位專業(yè)的技術(shù)人員,持續(xù)地開發(fā)能夠運行的代碼是你的工作,即使這意味著你必須做出艱難的抉擇。
結(jié)語
對一個軟件開發(fā)人員來說沒有輕松的任務(wù)。我們的世界一直充滿挑戰(zhàn)和困難,只有歷經(jīng)磨練和充分的準備,才能幫助我們在困難時期渡過難關(guān),并在好時光里成功。一直利用我們最精確的判斷,通過運用毫不動搖的工程實踐去打破時間的桎梏并且不向困難低頭。
你能夠做到。
it知識庫:論編程的最后期限,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。