1. 程式人生 > >軟件工程第零次作業

軟件工程第零次作業

提升 老師 更多 編碼 體制 指令 操作 畢業 之前

第一部分:結緣計算機

在進入大學之前,我的生活和計算機似乎沒有太大的關聯。要說和計算機有關的生活,也就是打遊戲了吧。因此在高考填報誌願之前,我從來沒有想過會去學習計算機。後來選擇計算機,僅僅是聽說這個專業很火,很多人學。

大一上學期的計算機基礎操作,學了一點點Python。第一個程序是print(‘hello, world’),運行後在屏幕上看到hello, world一行字十分激動。這是我寫的第一個程序。再到後來,老師講了變量,表達式,函數以及Python的面向對象。當然那時候的我是不能理解面向對象的。

但後來我漸漸發現,我周圍的同學並不都是和我一樣對計算機和編程一臉懵逼。他們進入大學前有了很強的編程能力,博客I[1]也是這麽說的:“我把所有課余時間都放到學習電腦和編程中了。很少玩遊戲,而且比較少參與課外活動,周末和假期都把所有時間都投入到學習編程中。高中,學習的確繁重,但我仍然把相當多的學習時間都放到學習編程中。”這讓我意識到,原來一開始我就落後了別人那麽多,不努力追趕,就會掉隊。

1. 你為什麽選擇計算機專業?你認為你的條件如何?和這些博主比呢?(必答)

  當初選擇計算機專業的時候,只知道這門課是敲代碼的,學完就可以做遊戲做軟件。因為不曾接觸過計算機編程,也不了解專業的內容,所以在開始學習這個專業之前,談不上喜歡這個專業。

  到了大學和同學比較,發現我的條件並不怎麽樣。一切從零開始。我在讀博客時發現很多很厲害的人在初中高中就接觸了計算機和編程,這一點我是比不上的。但了解了這個專業之後,我喜歡上了計算機,我也相信這份熱愛能幫助我更加努力的學習。

2. 計算機是你喜歡的領域嗎?是你擅長的領域嗎?

  學習了兩年計算機,確定了計算機的確是我喜歡的領域。我很享受自己寫的程序正常運行時的成就感。一個程序能快速且精確地處理輸入,然後把結果輸出出來,我認為這是十分神奇的,即使十分清楚它的內部邏輯是怎樣的。我還記得在不了解遞歸時看到了漢諾塔問題。網上的簡潔的遞歸程序讓我十分著迷,即使了解了函數調用,但我從來沒有想到過函數裏面還能調用自己。這些以及其他一些神奇又精煉的算法和表達式讓我喜歡上了計算機和編程。

  計算機專業是不是我擅長的領域,這個問題很難說。至少作為一個理科生,可以自信的講解決理科的題目是我擅長的領域。而計算機編程也能表述為一個個數學題,所以我想我應該也是擅長的吧。

3. 你熱愛這一專業嗎?你對計算機的熱愛是怎樣的?僅僅是口頭的嗎?

  我認為我是熱愛這一專業的。中學時代,做語文英語的題目總是讓我昏昏欲睡,而面對數理化時卻從來不會這樣。因為我當時是熱愛數理化的。到了大學,敲代碼時我總是很亢奮,有時候過了睡覺的時間都渾然不覺。所以我想我是熱愛計算機的。

第二部分:在計算機系裏學習

現在我也已經在計算機系裏面學習了兩年了,學過了數據結構,學過了計算機組成,學過了面向對象和操作系統,以及一系列的數學課程。讓我真正入門編程並快速提升編程能力的就是大一下學期的數據結構。首先是快速掌握C語言的基本語法,以及指針操作。然後講了鏈表,樹和圖。課上講的都是照搬書上的內容,講完一遍感覺還不是自己的東西。真正幫助我的是課後針對性的編程題。每道題都緊扣課上的基礎內容,需要自己實現各種數據結構。同時又有難度上的提升。這對於當時的我來說很有挑戰性。完成了這些編程題目之後,才算是真正理解了這些數據結構的內涵。博客B[2]中也提到了類似的經驗:

我們的授課老師,卻只講最簡單的概念和不深的理論描述,給我的感覺就是,“數據結構”幾乎是門和“離散數學”差不多的數學課——他用最膚淺的知識,“成功地”告訴了我們“數據結構”是門幾乎不用動手寫程序的課程,只用上課聽聽就好了。於是乎,一門需要動手實踐、將會極大地提高我們編程素養和思維能力的課程,就被我們這樣迷迷糊糊上完了。

2005年準備研究生考試的時候,我旁聽了朱仲濤老師的“數據結構”課,當時的感覺只能用兩個字來形容:震撼。在他的課上,我對數據結構有了全新的認識,對計算機也有了一點與以往不同的了解。他的講課風格非常獨特,他只用1/5的時間簡述一下要講的內容,剩下的時間都是當場寫程序。

在讀了大神的博客之後,發現他們在本科學習階段做的最多的一件事就是看書,並且自己敲書上的每一行代碼,然後運行。這是我沒有做到過的。本科學習是積累的過程,要看很多書,要深入的看書,包括每一塊代碼和每一章末尾的習題。只有擁有異於常人的精力和對計算機的熱情才能真正學好這門課。

大二上的計算機組成原理一方面讓我們了解了計算機中最底層的運行原理,另一方面,我們通過數周的編程,修改和重構,完成了真正意義上的完整的項目。當完成編碼後看到輸入的一條條匯編指令得到結果的時候,這種成就感是十分醉人的。

大二下學期的面向對象課程讓我們初步感受到什麽是結構化和模塊化編程。你寫代碼不僅僅為了完成當前需求,還需要考慮到需求的更新和補充,以及其他人能夠快速的讀懂你代碼的邏輯。因此面向對象的三個精髓:繼承,多態,封裝變得尤為重要。

1. 你對你的大學生活有什麽想要吐槽的地方嗎?你理想的大學教育應該是什麽樣子的?跟學校給你的有什麽區別?比較你在中國大學的經歷,你的老師和學校能做到和國外那樣嗎?如果不能,請分析一下為什麽。(必答)

2. 迄今為止,你寫了多少代碼,描述你做的最復雜的軟件項目/作業。(必答)

到現在為止,我大概寫了近萬行代碼。我認為最復雜的軟件項目是MIPS流水線CPU。這個作業大概有上千行代碼,直到P7時,能支持二、三十條指令,以及中斷處理。這項作業的難度逐步提升,完成P5以後,原來的一部分代碼由於邏輯結構不夠清晰,已經很難再擴充功能支持更多的指令,因此我在P6時將大部分代碼重構。重構之後的代碼在擴充功能時變得十分清晰而簡單。P7增加中斷處理時也並沒有那麽困難。

第三部分:未來規劃

有時候的確也會去想一想以後走怎樣的路。博客L[3]中也這樣寫道:“如果你對技術的熱情一般,也沒有太多的自我價值的追求,也不想拼搏,而且對吃大鍋飯不反感,對沒有激情的工作不反感的話,那麽,你應該去事業單位,當個公務員,走走常規則的人生,養養老也不錯。這裏,我多說一句,根據中國的現在國情來看,如果你有自我價值的訴求,你要去大城市,去好的公司,走體制外的路線,如果你又不想來大城市 ,只想呆在地方的話,那麽,我個人非常建議你走體制內的路線,在地方,只有體制內的路線是最好的。”一方面我希望將來的工作富有挑戰,另一方面,生活在大城市裏對無依無靠的畢業生來說是很困難的。而最終要走哪一條路,只有自己經歷過才能知道。閱讀過博客A之後我也意識到了面試時技巧的重要性,同時本科期間多看書多做題是有助於面試的。

1. 對於你未來在IT行業的發展,你有什麽樣的夢想或者未來想從事什麽樣的工作?你準備怎樣來規劃你技術道路,職業道路和社會道路?(必答)

在未來,我希望能從事和前沿技術密切相關並且投入實際應用的工作。進入社會投入到工作中時,應該抱著提升自己的態度,多學習多積累,這將是未來自我發展的基礎和本錢。

[1] http://www.cnblogs.com/unruledboy/p/DevCareer.html

[2] https://book.douban.com/subject/4006425/discussion/22803961/

[3] http://coolshell.cn/articles/4561.html

軟件工程第零次作業