1. 程式人生 > >軟體開發中的十大困難

軟體開發中的十大困難

[導讀]軟體開發中最大的難題不是編寫程式,寫程式碼只是按照邏輯去實現功能,這相對於開發者需要做的其他事情來說簡單直接多了。如果你還是一個不算資深的業餘程式設計師,那你一定要在真正的走向職業道路前確保可以解決下面這些障礙。

       軟體開發中最大的難題不是編寫程式,寫程式碼只是按照邏輯去實現功能,這相對於開發者需要做的其他事情來說簡單直接多了。如果你還是一個不算資深的業餘程式設計師,那你一定要在真正的走向職業道路前確保可以解決下面這些障礙。

1.向外行解釋你在做什麼

向外行解釋軟體開發的過程是極其困難的。雖然很多人知道程式設計,但他們終究是不會寫程式的人,在他們看來,程式設計師的生活就是整天在一間小黑屋裡趴在鍵盤前,消耗著很多咖啡。你會從你的朋友,親人,同事嘴中聽到這些話,他們認為這不是一個恰當的職業。

2.形象的說出解決方案

你會經常接到一些簡潔的,但通常表意不明的需求。比如現在有一個商業方面問題的需求,你就要根據它來設計資料結構,程式架構,演算法,介面和一些其他 技術層面的東西來構造這個問題的解決方案。關鍵的是,你要用大家都可以理解的語言,並在有限的時間內把解決方案講給客戶,但事實是很多開發者都做不好這件事情。

3.評估工期

這恐怕是很多程式設計師的痛苦之源。對於程式設計師來說,去評估一項從未做過的專案所需要花費的時間是極其困難的。你可能寫過相似的程式碼,但現在的環境,問 題和限制條件都發生了變化。雖然經驗會有一些幫助,但大多數程式設計師還是低估了問題的難度,通常因為程式設計師只考慮了程式設計方面的問題,而忽略了其他相關的事 情。

4.借鑑他人的程式碼

有很多種方法可以得出解決方案,但是借鑑他人的程式碼,在這個基礎上程式設計需要花很多精力和時間,因為你要去思考他們是如何構思的。而且,如果這些半成品的程式還沒有留下注釋和文件記錄,你就會更困難了。

5.面對專案需求的漸變和奇異的功能

雖然敏捷開發在一定程度上允許了需求的漸變,但並不意味著需求變化是一件好事,如果再加上一些客戶由於一時衝動提出的奇怪需求,你就更苦惱了。你知道這樣做一定會失敗,你的團隊也知道,但這是客戶的要求,而且錯誤的發生也是你的責任,因為你沒有站在他們的角度看問題。

6.在缺乏優化和過度優化間找到平衡點

複雜的軟體永遠做不到絕對的完美,因為總有更優的方法去完善它。你可以無限制的不斷優化你的程式碼,這也就是為什麼專案不會提前完成。而另一方面,你 有時也會有“這樣就行了,我以後再去優化它”的想法。這樣的程式目前可以正常執行,但明天可能就會出現錯誤。當然了,你也可以不用管它,等著下一個用它的 程式設計師去優化。

7.測試

你也許自己進行了單元測試,也把軟體交付給了測試組,但bug依然存在。原因如下:

軟體通常是複雜的,包含了成千上萬行程式碼,其中有數不清的互動介面和路徑,把這些全都測試到是很困難的;

類似的,你的軟體會在不同的環境下和不同的軟體互動,所以也不可能測試到每一種可能性;

寫好一個完善的單元測試是一項枯燥且困難的工作,理想情況下,測試程式的編寫應該在軟體開發前就進行,但是你要向你的客戶解釋清楚為什麼一個月過去了卻還是沒有可用的軟體;

單元測試不會發現所有的問題。理想條件下,一個專案應該有一個單獨的測試團隊,他們可以積極主動的,儘可能的去找程式中的問題,但這對大多數專案來說是一件需要很大花銷並耗時的事情,所以就讓開發人員同時負責測試的任務。但是,這樣的測試是考慮不到很多邊界和極端情況的;

程式設計師通常是在用理性的邏輯處理問題,但是客戶通常不這樣,他們會發現很多你意料之外的問題。

8.寫開發文件

給專案寫文件記錄是一件費力耗時的工作,幾乎沒有開發者喜歡或擅長它,不願意花時間閱讀它們。

9.處理各種IT問題

你每天都和技術打交道,你也許是一個HTMLPHP程式設計師,但你可能還要解決一些其他問題,比如硬碟損壞,驅動衝突或軟體報錯。這些雖然都不是你 的主要工作,但如果你不去解決這些問題,你就不能繼續你的開發任務。不幸的是,在那些非IT領域的人的眼裡,你什麼都知道。當他們遇到IT方面的問題時, 他們不會花時間自己解決,而是去尋求你的幫助,而且不管什麼問題,因為你是搞計算機的,比如如何將工資單匯入Sage,如何配置Oracle,或者為什麼 他們的藍莓手機發送郵件失敗。也許,這些干擾不會影響到你的日常工作,但真的不會嗎?

10.與他人打交道

這些問題都可以歸結為“與人打交道”的問題。沒有外行人會指導飛行員如何開飛機,或給電工如何佈線提建議,但是他們很願意給軟體開發“勇敢”地提出建議。現在可能還沒有辦法避免這樣的事情發生,你只能接受這樣的事實:世界上有一半人的智力是低於平均水平的!