軟件開發的世界里充滿了不理解,
客戶不理解軟件是怎樣開發的、經理不理解開發人員、開發人員不理解指揮者。問題在于軟件開發驚人的困難,造成很少有開發人員能夠說出軟件自始至終是怎樣開發的,并能夠對這個過程中會遇到的不同選擇所隱含的結果表現出適度的理解。
在軟件開發人員還很年輕的時候(十幾歲或二十出頭),他們通常集中精力學習和使用技術,稱自己為perl程序員、Linux專家、EJB開發人員、.NET開發人員等。對他們來說技術是最重要的事情。因為技術在不斷的變化,年輕的程序員傾向于大致學習一個技術,在一到兩個項目中使用,然后重新開始學習新技術或者是學習以前使用過的技術的最新發展。這里的問題是,他們一遍又一遍的重復的學習的不過是同樣的低層次基本技能的不同風味。
幸運的是,很多開發人員在經過了幾輪技術學習之后逐漸意識到:一旦用COBOL、Java、C#等語言為事務控制編寫過代碼,就會開始認識到基本的、本質的東西是不變的。不同環境下的數據庫訪問、用戶界面設計等領域也是同樣的情況。不久以后,開發人員逐漸認識到無論具體的技術怎樣,很多基礎性的東西是保持不變的,這些基礎性的東西有的在學校里講過,有的沒有。
這種認識經常發生在開發人員接近三十歲或剛過三十歲的時候,通常是人們開始穩定下來,結婚、買房的時候。這是比較幸運的情況,因為上面提到的這些新的個人需求意味著他們不可能再投入大量的時間去學習新的技術,他們需要用這些時間和家庭成員在一起。突然的,高層次的角色如項目負責人、項目經理、(非敏捷的)建模人員等對他們變得非常有吸引力,因為這些角色不需要持續花費大量的時間和精力去學習新技術。于是,等到開發人員開始真正學到技藝的時候,他們已經處于離開開發人員角色的轉變過程中了。所幸的是,新的“小年輕”不斷的跟上來,這個過程在不斷的循環重復。最終的結果是:大部分最活躍的正在開發軟件的人通常不是最稱職的做這件事的人,而他們自己甚至還不知道。