程式設計師需要克服的10大障礙
本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
軟體開發中最艱鉅的任務其實並不是程式碼。寫程式碼是一種鍛鍊,一種邏輯思維上的鍛鍊,相比於開發人員在日常工作中要執行的其他任務,它可顯得可愛多了。如果你覺得自己才剛剛跨入這個行業,只能算個業餘程式設計師,那麼為了確保能躋身專業領域,有些障礙你必須得克服……
1.解釋做了什麼
解釋軟體開發過程是很讓人崩潰的一件事。那些不會寫程式碼的傢伙可能在這一行有所瞭解,但是正如定義所說的,他們不會寫程式碼。在他們眼中,我們就是一群待在昏暗的房間中弓著背噼裡啪啦敲鍵盤的程式猿。
搞不好你的朋友家人還有同事,甚至有可能會有編碼“不是正當職業”的想法呢,呵呵。
2.視覺化解決方案
假設給定一組簡單的——難聽點說就是考慮不周的——需求,你需要制定資料儲存庫、程式碼結構、演算法、通訊協議,以及只要能解決業務問題就得去完成的各種技術內容。然後,還需要用一種通俗易懂,哪怕是外行人也能明白的方式解釋出來,並在規定期限內交付給客戶。
很少有開發人員能真正做好這一點。
3.預估交付時間
這是每個開發人員的噩夢。試想一下,以前一點也沒有接觸過的任務,突然要你確定完成它所需要的時間,是不是有點天方夜譚呢?可能曾經也寫過類似的程式碼,但是卻並不是在有著相同問題和限制的同一個系統中,好吧!
這個時候,那真的只能靠經驗了。但是大多數程式設計師會低估時間,原因可能是因為他們只考慮了編碼這部分而忽略了其他。
4.借鑑別人的程式碼
條條大路通羅馬,解決方案也是。借鑑別人的程式碼可能意味著要花上很多時間去研究上千行程式碼以瞭解整個的思路。而且,要是恰巧原先的開發人員一點也不留註釋和文件的話——甚至只是個半途而廢的半成品專案——那就更加令人頭大了!
5.範圍蠕變和你自認為神奇的功能
敏捷開發會造成範圍蠕變,這讓人既沮喪又無奈——特別是當你突然心血來潮要加點什麼愚不可及的功能的話,更甚。結果如何你自己心知肚明,你的團隊也明白失敗沒商量。但是客戶其實知道得更清楚,所以要是失敗不可避免地降臨時,那麼就全都是你的責任,因為你居然不相信客戶的眼光。
6.優化不足和過度優化之間的平衡
複雜的軟體永遠達不到完美的境界。我們不可能無限制地優化,這也是為什麼軟體專案從不在規定日期到來之前釋出的原因。
另一方面,很多人都會抱有“先就這樣吧——以後再來改進”的心態。現在這些程式碼是可以好好工作,但是這些人也明白這會成為明日的煩惱和失敗。當然,你不會再來修復和除錯了,它們會被留給下一個可憐的開發人員。
7.測試程式碼
既可以自己編寫單元測試,也可以組團通過軟體來測試,不過不要妄想能發現所有bug……
- 複雜的軟體可能會包含成千上萬行程式碼。系統可能有著數十億種可能的相互作用和路徑,想要全部測試是不可能的。
- 同樣的,一個軟體在不同的條件下,不同的系統裡碰到的軟體不同,其互動的結果也不盡相同。我們沒辦法測試所有可能的情況。
- 想要編寫出好的單元測試是一件既繁瑣又艱難的工作。在理想情況下,測試應該在軟體開發專案開工之前就寫好——但是要是我們先寫這個的話,我們怎麼向客戶解釋四個星期過去了為什麼一點程式都沒有?
- 單元測試不會突出顯示每一個bug。雖然我們都希望能有一個專門的小組來編寫測試然後積極去發現問題,但是由於現實條件的限制——成本控制和時間限制,這對於很多專案而言都是奢望,所以大都需要開發團隊自己來編寫測試。而他們在編寫時總是會無意識地避免任何不妥當的邊界情況。
- 程式設計師會用一種邏輯方式去解決問題,但是使用者很少會這樣做;所以有時候使用者會幫我們找到一些我們自己察覺不出來或者根本想不到的問題。
8.寫程式碼文件
寫文件的確是費時又費力。很少有開發人員擅長並願意花時間去寫/閱讀文件。
9.處理硬體問題
我們每天都需要處理各種技術問題,例如硬碟崩潰、驅動衝突、軟體故障等等。雖然這並非是我們軟體開發人員的工作,但是要是不解決這些的話,我們是沒法繼續工作的。
然而很多人卻會莫名其妙地認為,搞IT的就應該懂所有關於電腦的東西。當他們碰到問題,他們第一時間想的就是聯絡我們來解決,而且不管什麼問題都這樣,真心是讓人無語又崩潰。
當然這些中斷時間不應該對交付進度產生影響或者增加成本,但是這可能嗎?
10.和人打交道
上述任務通通可以總結為“如何與人打交道”。令人奇怪的是,非專業人士不會去指點飛行員應該如何駕駛飛機,也不會跑去和電工說我的房子需要重新佈線等等,但是他們卻非常喜歡在軟體開發上面指手畫腳,提供各種異想天開的點子。
關於這一點,我還真提不出什麼好的解決方法,所以,唉,各位,我們還是接受有一半的地球人他們的IQ低於平均值的事實吧!
譯文連結:http://www.codeceo.com/article/10-toughest-task-in-programming.html
英文原文:The Ten Toughest Tasks in Development
翻譯作者:碼農網 – 小峰
[ 轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]
相關文章
- 毀滅程式設計師效率的 15 個障礙程式設計師
- 專科程式設計師,學歷可能會成為發展障礙程式設計師
- 程式設計師如何克服焦慮?程式設計師
- 說說Web 無障礙設計Web
- [譯] 色彩無障礙性產品設計指南
- 《無主之地 3》設計師分享:如何開發無障礙輔助功能
- 「Adobe國際認證」平面設計師!如何突破創意障礙,名利雙收?
- 無障礙閱讀的設定問題。
- 失控的“遊戲障礙”遊戲
- 你需要程式設計師鼓勵師嗎?程式設計師
- 12.16前端無障礙學習小計前端
- 前端程式設計師需要了解的MySQL前端程式設計師MySql
- Java程式設計師需要學習的技能Java程式設計師
- Java程式設計師都需要懂的「反射」Java程式設計師反射
- .Net WEB 程式設計師需要掌握的技能Web程式設計師
- 程式設計師程式設計入門一定知道!程式設計師需要學什麼?程式設計師
- @程式設計師,你需要點財商程式設計師
- 如何確定自己是否適合做程式設計師?程式設計師的成長需要什麼?程式設計師
- 【非廣告,純乾貨】英語差的程式設計師如何才能無障礙閱讀官方文件?【石杉的架構筆記】程式設計師架構筆記
- 程式設計道路上的困難—怎麼克服?程式設計
- EV電池的設計,為回收工作造成了災難性障礙
- 程式設計師需要了解的10個Linux命令程式設計師Linux
- 程式設計師需要了解的邏輯學思想程式設計師
- 程式設計師需要有好的英語水平嗎?程式設計師
- @程式設計師,你需要點金融常識程式設計師
- 程式設計師做產品需要知道程式設計師
- 區塊鏈軟體公司:從事區塊鏈行業不得不克服的五大障礙區塊鏈行業
- 通往成功DevOps的六大障礙dev
- 消除障礙:金融科技的新路報告
- 以前的程式設計師,現在的程式設計師程式設計師
- 每日 30 秒 ⏱ 無障礙工具
- 新Rust程式設計師需要學習的9個功能Rust程式設計師
- 程式設計師需要了解的硬核知識之CPU程式設計師
- 程式設計師需要了解的硬核知識之磁碟程式設計師
- 一個合格的程式設計師,需要哪些必備技能?程式設計師
- 程式設計師需要重新考慮無程式碼開發的原因。程式設計師
- "無程式碼"時代的到來,還需要程式設計師嗎?程式設計師
- 初級程式設計師需要知道的基本程式碼規範程式設計師
- Java程式設計師需要學習哪些知識?Java程式設計師