微軟最具價值技術專家:我的16年軟件開發經驗總結

大家好,我是寶玉。有同學說是從自學編程出身的,碰到過很多的問題,走了很多彎路,日常搬磚,增刪改查,非常困惑沒有自信。

這讓我想起了自己的經歷,和很多人一樣,我也是“野路子”出身的,2000年自學 Asp 編程,大學期間兼職給別人做了不少網站。但那時候拿到一個項目,上手就是寫代碼,沒有對需求進行梳理分析,也沒有設計,直接就是想到哪寫到哪。

以前沒多大的感覺,並且這種邊寫邊改的模式看起來開發速度很快,但是後面遇到了不少問題。

比如說因爲沒有分析需求,所以做出來的東西不是客戶想要的結果,就得要多次返工重寫,浪費不少時間;寫之前也沒有設計,邏輯都混在一起;難得接手一個複雜的、大的功能模塊開發,也不知道如何拆解分工協作;以爲功能上線就完事了,沒想到還要寫測試代碼進行功能測試;還有些日常的小工具像源代碼管理、Bug跟蹤等等,竟然都要用。

最誇張的是有一個代碼文件有上萬行代碼,最大的函數有一千多行的邏輯。可以想像,維護這樣一個項目是多麼的痛苦!因爲很多業務邏輯沒有抽象,都是重複的,修改的時候得一個個查找替換,一不小心漏了就出bug了。

有一件事我一直沒好意思提起,就是大二暑假還給別人山寨過一個“金領辦公系統”,如果你搜索一下“金領辦公系統 Asp 源碼”估計還能找到下載,可以看看我當年作爲一個“野路子”程序員是什麼水平了,各種拼音+英文混合的命名、意大利麪條式代碼、重複代碼到處複製……

比較幸運的是,我大三轉到了軟件工程專業,重新學習了軟件工程、數據結構、面向對象這些基礎課程,畢業也順利的成爲一個程序員。

最近爲了籌備我在極客時間的專欄《軟件工程之美》的內容,我在重新梳理軟件工程相關的資料和知識體系時,看到了很多同學對軟件工程理解的留言,也很有感觸,如今再回顧當年學的專業課,很多專業概念已經記憶模糊,唯有對一位老師的教誨記憶深刻,對我畢業後的職業生涯影響深遠:“Everything is a project。”

這句話對我影響很大。我真的開始在日常生活中,把每一件事都當做一個工程項目來推進。

2010年在上海的時候,我機緣巧合參加了一個關於產品設計與用戶體驗的線下活動,我可能是與會人員中,爲數不多的非專業產品設計的同學。在活動中組織者安排了一個遊戲環節,每5個或6個人分成一個小組,來設計一個給老年人使用的手機,限時30分鐘,完成後,每組選一個人上臺花5分鐘展示作品,最後投票選出做得最好的一組。

我的第一反應就是把它當作一個項目,於是快速地擬定了如下計劃。

  • 0~10分鐘(分析):頭腦風暴,收集想法。
  • 11~15分鐘(設計):根據頭腦風暴結果,確定最終設計。
  • 16~25分鐘(開發):將想法畫在紙上。
  • 26~30分鐘(發佈):完善結果,準備展示。

這個計劃小組成員都很認可,於是我們嚴格按照這個計劃進行手機的設計。同時我觀察了一下其他組的情況,大家都在熱火朝天地討論各種想法,似乎沒有意識到時間其實是有限的。輪到演示的時候,我們組毫無爭議地拿到了第一,因爲我們不僅準備充分,而且設計的手機功能完整,而其他很多組甚至還沒來得及把想法完整地畫下來。

後來我才瞭解到,這種有目的、有計劃、有步驟地解決問題的方法就是工程方法。工程方法不是軟件工程獨有的,幾乎所有工程類別都可能會應用,例如建築工程、電子工程等,只不過步驟可能略有不同。

經過軟件工程的專業學習後,對我後面成長還是幫助很大的,這個幫助主要體現在兩個方面。

第一個,就是學習新技術的時候,很快能領悟和融會貫通。比如說我學過瀑布模型,後來去看微軟的 MSF,去看敏捷開發,就能根據以前的理論基礎,去看它們共通的地方、不一樣的地方、各自的優缺點,這樣很快就能掌握。

第二個,就是做事的時候,會更有章法,有理論指導。寫程序前會先注意對需求進行梳理,搞清楚產品經理想要的是什麼,這樣就不用有太多的反覆。寫代碼之前我會先做設計,思考有哪些共同的模塊,業務邏輯應該怎麼抽象。

後來到飛信的時候,因爲表現出色,我開始有機會去管項目。

我還記得第一次作爲項目經理去管一個小項目,我一時之間還真有點懵,不知道該怎麼做。好在學過軟件工程,尤其對瀑布模型、軟件生命週期特別熟悉,於是就嘗試着按照生命週期模型,先把項目拆分成幾個階段,然後在每個階段裏面,按照模塊再去細分,再去制定項目計劃。

幸運的是,我還找到了當初的項目計劃表,分享給大家看看。

這個工具叫 MS Project,是微軟出的軟件,在專欄中的「項目管理工具」我會再詳細介紹

在制定計劃的過程中,也幫助我做了一個很重要的轉變,面對問題我會參考軟件生命週期和瀑布模型,把一件事情分成幾個階段:分析、設計、實施、測試、完成,然後制定相應的計劃。

這種方法不僅非常有效,讓我的做事效率大幅提高,而且讓我在看待事情上,能夠更全面地、站在更高的角度去思考。

這個項目後來按照我當時制定的計劃進展的很順利。如果之前沒有軟件工程的這些理論基礎,也許我後來還會轉型做管理,但是一定沒有當時那麼順利,要多走很多彎路。

所以我其實一直在微博上、微信上,很多地方都說過,軟件工程是大學裏最重要的一門課程。我希望《軟件工程之美》專欄能幫大家重新理解軟件工程,從苦鑽技術不得法變得行有章法。

現在專欄上新優惠倒計時最後1天,限時¥68,感興趣的同學可以準備入手了(馬上要恢復原價¥99),現在訂閱還可以邀請你加入「軟件工程學習羣」,我們一起交流學習進步;還給大家申請了額外福利,來自 InfoQ 頂尖技術大會——QCon 全球軟件開發大會(門票價值6800元),2018年全部2場大會PPT珍貴資料免費送給你。(獲取方式:“極客時間”服務號後臺回覆“軟件”)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章