合理規划,勇攀高峰——讀學長博客啟示錄 梁飛


在眾多學員的翹首期盼之中,微軟創新人才學員的重磅炸彈——高級軟件工程,終於開課了。課程的整體目標定位於世界級的軟件開發。在為期三個月的課程中,我們將體驗一套完整的軟件開發流程,學習先進的軟件研發知識,最后所有學員以團隊為單位開發出一套高水平的軟件應用。課程的整體目標是世界級的軟件開發。而我們的第一課就是聯系上屆同學,閱讀他們的技術博客,學習他們的開發經驗,為自己的軟件開發之路起個好頭。

          一提到軟件工程大家第一個想到的可能就是算法。沒錯算法的確是一款軟件的靈魂所在。但軟件工程和其他CS或EE領域不同的就是:only algorithm makes nothing. 我們必須通過在其他方面的努力讓先進的算法真正煥發出活力,真正做到被用戶接受並喜歡。在這篇文章中我會重點介紹我對軟件工程除算法之外的部分理解。

         最近,我仔細閱讀了上屆Rosting隊伍的技術博客。他們開發的項目是家族樹。簡言之就是提供一個互聯網搜索應用,方便用戶(主要針對學術界)查找學術上人物關系。有了它,申請出國的學生就能很方便的找到和自己的理想導師相關的同事或學生,正在招收學生的老師也可以很方便的獲取某同學的學術背景,從師經歷等。他們的工作給我最大的啟示就是做事的條理性與邏輯性。任何一件事絕對不是盲目的憑感覺去做,而是經過細致縝密的前期分析,最終才決定去做。這樣就可以盡可能減小做事情的風險,如果做事只憑一時沖動,一時熱情,很容易就出現事倍功半的情形。

        

嚴謹的可行性分析

          當我們有了一個想法想開發某個應用時,第一件要做的事情就是可行性分析,仔細評估這件事情的意義和價值,最后有沒有市場,用戶究竟會不會去使用。因為軟件開發和純粹的研究還是有很大不同的。僅僅是求知不能作為軟件開發的理由。軟件開發的目標是贏得市場,只有用戶願意去用,軟件才有價值,開發才有意義。Rosting隊的同學使用了專業的NABC方法進行可行性分析,很值得我們學習。

         N指的就是NEED(需求)。任何事情如果沒有需求就沒必要去做,尤其是對軟件開發這種應用型很強的行業。在Rosting的需求分析中,他們主要從留學生的 角度來分析需求。列舉了一些中國留學生數目龐大的證據,說明了他們迫切尋找一位好導師的願望,尤其是那些不太可能找到頂尖學校頂尖導師的同學,尋找這些大牛曾經的學生作為導師也未嘗不可。而且中國留學生的數目數量如此龐大,未來也只會有增無減,所以Rosting的隊員們一致認為家族樹的開發是非常有意義的。

         A即為Approach(做法)。不是所有有需求的事情都值得去做,一定要考慮它是不是可能被完成。綜合分析一件事情的實現過程的可行性,在當前的技術水平下有沒有可能完成,有時還要考慮是不是符合當地的法律法規。對於家族樹這個項目,核心問題就是去獲取師生關系。師兄師姐們認為可以通過已發表的學術論文和個人主頁來分析師生關系。只有找到了可能的做法,我們才有繼續做下去的理由和勇氣。當然我們要區別天馬星空和難度大的區別。有些事情可能剛開始很有難度,但只有親自做了才知道到底可不可行。所以在做這部分工作的時候多多少少要承擔 一些風險。但我們我想辦法把風險降到最低,及時排出那些純粹是天馬行空的設想。

         B指的是Benefit(好處),這部分和need是緊密相關的。一般利益都是基於需求的,有了需求就會有好處。通過上面需求的分析我們可以看到一旦一個產品投入市場將會對人們的生活和體驗產生多么大的影響。

         C即為Competitor(競爭),競爭分析主要針對軟件產品的市場而言。一般如果該產品其他人已經做了很長時間,而且效果足夠好,在沒有什么特別出奇的想法之前就不要盲目進入到這一領域。如果發現別人的產品有很明顯的漏洞,並且自己有很好的改進方法,則此時參與競爭應該是很合適的。在Rosting的分析中,他們就指出了目前市場上此類產品的局限性,並將會自己的產品中加以改進。

用戶至上的開發准則

         因為軟件最終的使用者是用戶,所以開發時要時刻謹記用戶至上的原則,要花很大工夫去盡量提升用戶體驗。如果用戶在使用時無法獲得非常舒適的用戶體驗,界面難看,操作復雜,用戶很容易就會失去對該軟件的興趣。相反,那些擁有很高的視覺體驗而操作有非常方便、人機交互做的非常好的軟件肯定會得到用戶的青睞。在Rosting的項目中他們很注重用戶體驗,他們用心設計了家族樹的顯示方法,因為一般一個老師會有很多學生,每一個學生也有可能有他的學生,所以家族樹有時看起來就很龐大,如何合適的把它顯示出來是個很重要的問題。另外,他們還利用了微軟的silverslight開發了非常好的動畫效果,使用戶在使用時能能夠得到更多美的體驗。

         從我個人而言,以前我並不注意界面,覺得算法才是軟件最核心的生命,界面的工作沒有什么技術含量而且十分枯燥,寫起來也十分繁瑣,所以我以前很少處理界面的問題,主要使用控制台去實現算法。但隨着我對軟件行業的了解不斷加深,尤其是軟件工業,我的看法也隨之改變。界面是軟件工業不可或缺的一部分,也是很有技術含量的東西。它不僅需要計算機科學的知識,還需要美學甚至心理學的知識。因為軟件是面向用戶的,不是面向計算機專業人士的,沒有好的界面,沒有好的人機交互,再好的算法也只是寫在紙上的廢話或存在計算機里一串沒有意義的代碼。我想這就是工業界和學術界最大的差別吧。希望通過軟件工程課的學習與實踐,我能大大提高自己編寫界面的能力。

重視團隊合作

         接下來要談的東西應該是做軟件工程的一個共性問題。隨着軟件工程的高速發展,編寫軟件的工作量越來越大,需要各種各樣的人才通力合作,很少有完全獨立開發高水平軟件的情況出現。正因為這樣,團隊合作才顯得尤其重要。開發過程中團隊各成員要多溝通,多交流,及時反饋自己的困難,報告自己的成果,使整個團隊能夠正常運轉。我以前以團隊為單位進行工作的機會不多,多數情況下都是自己單干。對我印象比較深的一次團隊工作就是大二暑假參加學校組織的機器人競賽。機器人是一個軟硬件結合的項目,團隊里有負責機械的,有負責程序的,也有負責電路的,雖然每個人工作都很努力,但是之間缺少交流,最后還是自己忙自己的,最后搞機械的一點程序都不懂,搞程序的一碰電路板就燒,這樣最后的產品只不過是個人產品的簡單組合,沒有真正起到團隊的作用,在未來的工作中,我希望能改變這種局面,我們的團隊要真正像團隊一樣工作,外界應該感覺不到我們一個個個體,我們是一個整體。

         說了那么多,先寫到這吧。

         Come on! Let’s make a difference!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM