程序開發人員愛開發
作為軟體開發人員的我們很幸運。我們喜歡我們乾的工作,並且很多時候,當我們實際構建軟體時,我們又非常開心。不幸的是,這樣的情況並不普遍,因為許多軟體開發項目要求開發人員除了編寫代碼之外,還要做很多其他的事情,例如開無聊的會議,建立文檔或其他工件等等。在解決問題,學習知識和探索奧秘的同時,還要面對這些無聊的事情,可不是一件令人愉悅的事情。因此我們只能把注意力投入到編寫軟體中去。
專業的軟體開發從根本上不同於大多數人的想法。它與使用軟體或網路或其他任何東西無關。構建軟體是一項非常有創意的活動。
我問過幾乎所有我教過的學生一個問題,編寫軟體更偏向藝術還是科學。大多數開發人員表示,儘管兩方面的因素都有,但軟體開發更具藝術性。這意味著,作為一個好的軟體開發人員,你需要更富有創意和具備抽象技能,而不是一個明確的過程就行。當然,即使是編寫最簡單的程序也需要大量的訓練,這是一個通過投資時間精力而可以成長的領域。開發人員喜歡構建以前從未構建過的東西,喜歡解決問題,還樂意於提供改善人們生活的工具。
不要把我們想像成是那種孤僻陰沉的書獃子或沉溺於硅膠電路的極客形象。現代軟體開發人員來自社會的各個階層,他們有著各種各樣的背景。
編寫軟體或許是最具吸引力和挑戰性的行業。軟體開發需要多種多樣的技能,為了成功編寫軟體我們必須擅長所有這些技能。設計軟體需要可視化創意——畢竟,我們是用我們的想像來了解問題並對解決方案進行建模的。編寫軟體需要堅韌不拔的品質——我們必須跟蹤大量的細節,並使用各種各樣的技術來管理程序的巨大複雜性,哪怕是一個相對簡單的程序。調試代碼則需要具備卓越的分析能力——完全不同於設計軟體所需的技能,但開發人員必須兩者都擅長。因此,我們傾向於在構建軟體的過程中同時使用我們左右兩邊的大腦,這樣有助於製作出令人高度滿意的用戶體驗,同時這也是一個非常具有挑戰性的經歷。
我問了很多非軟體開發人員關於他們眼中編寫軟體的過程,聽到了很多不同的答案,但沒有一個回答接近正確答案。我相信其他領域也是如此。專業的表演不僅僅是裝扮。偉大的演員會代入他們的角色,就像變成了另一個人。這是一個偉大的技能,但是沒多少人擁有,他們所做的事情並非他們的職業描述的那樣。他們不是扮演他人,而是成為了他人。
我認識一些已經進入餐飲行業的人,他們喜歡與朋友分享食物的過程。但是,每天準備五百頓飯和與朋友坐下來享受美味晚餐是截然不同的。廚師是這麼多職業中最難的工作之一。廚師的工作強度很大,這也是為什麼很多人最終退出這個職業的原因。很多人認為他們必須對他們各自的領域做出妥協,因為生活就是如此——工作和興趣不能兩全。也許對許多人而言這是事實,但是軟體開發人員可以在每天構建軟體的工作中找到滿足感。
當然,這需要付出巨大的努力,因為真正進入一個專業並不容易。我知道的大部分開發人員是在工作時或通過大量的自學才汲取到那些他們必須了解的知識。就其本身而論,這個行業的技能組合和知識量有很大的差異。現在還沒有一套明確的標準,所以當每個人對於如何做事都有自己的想法時,團隊工作開展起來會很困難。
編寫軟體是一個小組活動。大多數軟體開發項目中的程序員彼此之間並不是孤立的。但是現在大多數為業務而構建的代碼其團隊合作並不緊密。當然,開發人員的並不以社交技能見長,但是隨著我們意識到隊友之間溝通的迫切需求,很多事情正在發生變化。
如何評估設計?
這是我經常在我的高級軟體設計課中問開發人員的一個問題。我傾向於得到空白的反應,不是因為他們不知道如何評估一個設計,而是他們很少適用一個通用的衡量法則。這對團隊來說可能是一個挑戰,使得我們在構建軟體時溝通和協作變得困難起來。所以我花了很多時間定義術語,以便能夠評估軟體設計中的良性。
開發人員喜歡我的課程,是因為他們意識到談論和思考這些事情的價值。我有幸能有機會與許多高級軟體開發人員合作,在合作過程中,我努力找出他們成功的原因是什麼,然後與我合作的其他開發人員分享。好像我們每個人都有一塊拼圖,當我們把這些拼圖放在一起的時候,我們就得到了一幅優美的畫卷。大讚!
※GPU渲染之OpenGL的GPU管線
※Matlab對深度學習工具包DeepLearnToolbox的例子實現
TAG:程序員小新人學習 |