1. 程式人生 > >李昂 軟體工程第一次作業

李昂 軟體工程第一次作業

第1次個人作業

2.分析軟體

第一部分 結緣計算機

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

這兩個問題,不得不說我的答案都是否。我很難喜歡計算機程式設計,更遑論軟體硬體原理等等,感覺有些晦澀了,無法讓我很有興趣。如果不是現實的要求,不會計算機技術的工科生可能寸步難行,我可能不會主動接觸計算機程式設計等等。部落格I中提到從中學就開始喜歡計算機,我表示我就默默仰望一下吧。當然,沒有興趣,之前也沒有花很多時間學,僅僅學了最基本的,當然不是擅長的了

2.你對計算機的熱愛是怎樣的?僅僅是口頭的嗎?

可能我在用Python做了一些基礎的物理計算,發現比c語言好用時,確實感受到計算機程式語言的強大和有用。這就是發自內心的了,或者說不是熱愛而是佩服。

 

第二部分 學習生活

1.你對你的大學生活有什麼想要吐槽的地方嗎?你理想的大學教育應該是什麼樣子的?跟學校給你的有什麼區別?

部落格M中又是一個怒秀操作的大佬,從中學喜歡程式設計,大學做了一大堆專案,成為技術牛,最後去了微軟。我的本科學校很讓人留戀,並不想吐槽它,跟本科學校相比,海工有缺點,例如各種雜事將人的時間佔的滿滿當當。我理想的大學教育是能夠讓學生足夠的自由,有自己的時間安排去完成自己需要學習的東西並用以科研或其他。

2.迄今為止,你寫了多少程式碼,描述你做的最複雜的軟體專案/作業。

只在大學一年級c語言課上學過。總共程式碼數大概300行。最長的程式碼80行左右?一個涉及二維陣列的題目。

3.速成的培訓班和打基礎的大學教育還有mooc之間有區別嗎?

速成培訓班,就是純粹教技術。打基礎的大學教育有利於給予一個好的思維導圖和知識框架。博文C的作者不喜歡本專業但是在大一大二認真練習了很多計算機語言,雖然不是解釋的系統教育,但是也因大學的時長較長而有了一個用長時間打磨基礎,鍛鍊思維導圖,知識框架的過程。mooc則相對自由,可以由本人根據自己的時間安排。如果能夠長時間,高效地利用,也能夠起到打好基礎的效果。如果時間不夠或效率低,可能就像速成培訓班一樣甚至還有所不如。

4.學線性代數和概率論的時候,你是否有過這樣的疑問“我們為什麼要學這麼多數學,這和我們的專業有關係嗎”,你現在是否還有這樣的疑問?對這個問題,你有自己的解答了嗎?那麼其他學科呢?

有過。線性代數是我大一的課程,當時那個教授講得非常偏向物理,在矩陣的概念還沒有講清楚時就開始講量子力學中要用到的厄米矩陣和酉矩陣等。當時學得並不紮實,後來又自己看書予以補充學好。當時覺得用處不大,但作為一個物理系本科,工科研究生,我漸漸意識到線性代數初次接觸時會覺得較抽象而不實用,但在較深層次的科學上,線性代數是非常方便的工具。而且細細體會,裡面的內涵非常奇妙。數學的確很有用。我本科學的物理同理,在有了數學基礎的前提下,物理能夠學好,並且作為絕大多數工學的基礎根基。

 第三部分 未來規劃

1.你有什麼樣的夢想或者未來想從事什麼樣的工作?你準備怎樣來規劃你技術道路,職業道路和社會道路?

我的夢想,不切實際一點的,就是每天沒有什麼事情做,可以自己呆在屋裡看看自己喜歡的書,非常自由。切實一點的或者說為了生活不得不規劃的,就是留在海工做一個老師,我更喜歡的是教學而不是科研——如果非要對比的話。

我的規劃就是現階段努力學習,搞好科研工作,考上並讀完博士並爭取留校。部落格k中說職業規劃就像軟體工程,需要考慮很多,很系統,我完全贊成。然而規劃得再好計劃也趕不上變化,現階段我想多了沒用,做好自己的事情就行了。

2.你對於實現自己的夢想已經做了或者計劃做什麼樣的準備?

在努力學習中。例如軟體工程這門我完全不喜歡的課我也要儘量學一下,一是必須通過這門課,二是學習程式碼和軟體,核科學裡面也需要用到。

第四部分:課程期望

1.你對這門課的期望是什麼?你打算平均每週拿出多少個小時用在這門課上?你願意為了一個你感興趣的專案、或得到實戰鍛鍊而付出更多時間和精力(包括熬夜)嗎?

這門課我只希望通過,然後學到東西——由於非計算機科班,我覺得達到通過這門課的程度,就肯定已經學會很多很多東西了。平均每週拿出多少個小時我說了不算,因為這門課的高要求已經決定了大概是10小時以上。我也沒有辦法,但我會盡力坦然接受。同樣地,在這個完成課程要求的過程中我會學到一些東西,所以不希望再過多地付出額外時間。熬夜更是我希望盡力避免的,我重視早睡對身體健康的重要性。

 

3、分析軟體

軟體有很多種: ShrinkWrap(在包裝盒子裡面的軟體)、Web APP ( 基於網頁的軟體)、Internal Software (企業或學校或某組織內部的軟體)、Games(遊戲)、Mobile Apps(手機應用)、Operating Systems(作業系統)、Tools(工具軟體),選取三種軟體,請分析它們各自的特點。

首先我選擇遊戲,手機應用,作業系統。

1.這些軟體的開發者是怎麼說服你(陌生人)成為他們的使用者的?他們的目標都是盈利麼?他們的目標都是賺取使用者的現金麼?還是別的?

遊戲:以其可玩性吸引玩家。我的朋友們對此的好評也有吸引效果。目標盈利。最終賺取的應是現金。

手機應用:更多地是在社交軟體上的推廣。(包括社交軟體本身)目標是盈利,最終也應該賺取現金。

作業系統:感覺這是一種非常壟斷的系統,因為作業系統開發難度過高,能經得起考驗的作業系統不過微軟,蘋果,linux寥寥幾家。通常似乎都是直接繫結在售賣的電腦上的。目標是盈利,最終也應該賺取現金(我不明白是否還有不以盈利,賺取現金為最終目的的情況,吸引使用者,提高人氣,等等最終還不是歸結於賺錢嗎?)

2.你個人第一次用此類軟體是什麼時候,你當時多大,具體在什麼學校讀幾年級,老師是誰,同桌叫啥?軟體是如何到你手裡的?例如:郵購,下載,互相拷貝,從應用商店購買,…….

遊戲:2003年,家裡剛買了電腦,鄒城市兗礦第二小學讀二年級。班主任是王志明老師,具體的同桌已沒有印象。遊戲通過爸爸(可能是網上下載後)教給我玩

手機應用:2014年,高考後(是的我高考後才擁有第一部智慧機,之前我連非智慧機都沒有),鄒城市第一中學高三畢業,班主任王鵬老師,同桌是孫志文。以手機QQ為例,從app store下載。

作業系統:2003年,前幾項均同於“遊戲”一欄,Windows系統在電腦上自帶(當時應該是xp版本?印象不深了)

3.我們知道有些軟體是收費的,有些是“免費” 的, 那麼,軟體公司為何會給你免費使用這個軟體呢? 寫這個軟體的工程師們,他們的工資如果不從你(使用者)這裡來, 從哪裡來呢? 目前你們當地的軟體工程師的工資大約是多少,請給出儘量詳細的分析,精確到年收入多少萬元人民幣。

作業系統,遊戲,手機應用這些絕大多數免費。我一直的認知裡只知道是它們可以放廣告,廣告費很高,尤其是使用者量大的,流量就是錢。(這是一直想讀廣告研究生的女友——雖然現在是前女友了——告訴我的,否則我還傻乎乎的沒有深刻的認識)然後為了完成這個作業,我又去百度了一下,發現有一些我不知道的:有增值服務(如微信公眾號的稽核需要錢);廣告不是一定要在軟體裡直接讓使用者看到的,可以掛在不會直接看到的站點上;還有捆綁外掛等等。

如前所述,軟體工程師的工資就是這麼來的,實際上應該是買斷了軟體的公司先以甲方身份付給他們開發費,之後如前所述地盈利。

我諮詢了北京一位本科畢業工作,做前端開發的同學(計算機科班生),他給我的資料是他這個檔次的新人25萬人民幣左右。更強的公司和更強的人,達到50萬以上不是問題,如果出現大專案,獲利當然更多(想起了王者榮耀開發團隊年分紅千萬的事情)。

4.你是如何學會用這軟體的?它給你什麼好處,壞處? 這些軟體是如何處理 bug 的?  如何更新新版本的?  你估計軟體團隊更新一個主要版本花了多少 人月? 請寫上人月的定義. 如果你們宿舍(或者你和另外三四個同學)要做同樣水平的軟體,請估計你們需要多少時間?

遊戲:自己試著摸索,不會了就百度教程;好處是給以我放鬆,給我與人交談的話題;壞處是浪費時間,但我還不到上癮的程度。處理bug和更新的過程不清楚。這肯定都是通過更改程式碼實現的,我們使用者看不到。更新主要版本,說的比較模糊,不知道到底工作量多大,只參考下面對手機應用的分析吧。

作業系統:自行摸索,很多小功能要百度。好處是電腦執行不能離開它,它本身的壞處應該說不明顯。處理bug,更新,同上。

手機應用:基本上開啟應用都有貼心的操作指南,不怎麼需要學。用用就會了。好處是源於它本身的功能,比如微信讀書給我提供電子閱讀的好平臺;壞處是有時浪費了時間,使我不能集中精力(比如QQ微信),不能說使我不能集中精力就沒有這個軟體的鍋,我小學沒有手機的時候靜坐6小時一直看書沒問題的,悲傷。處理bug就不講了,更新我只能看到appstore經常出新版本,加點新功能之類的。對於QQ加入一個小功能,比如有一個塗鴉的新功能(6月份出的吧)應該量不是很大,一個團隊10人,大概用兩週?也就是約5人月,人月的定義應該是人數*平均每人花的月數。如果我們寢室,目前我和另一個室友只會基本的c,另一個完全不會程式設計,假定他現在開始學吧,此時計時開始,估計要半年。18人月。(怎麼感覺估低了)

5.同一型別的軟體之間是如何競爭的?你現在還用它麼,你為何選擇這個產品,而不是它的競爭對手?

遊戲,手機應用,都是通過它們本身不同的功能,介面等等進行競爭。作業系統的競爭感覺就是電腦公司的競爭,哪個電腦賣得多。

遊戲我基本上10年連續玩一個遊戲,因為我懶得換新的遊戲,除非它的競爭對手在某些方面有絕對優勢。手機應用同理,當然手機應用剛用了也就四年,不好說以後怎麼樣;選擇手機應用就看是不是對我合適,如果是社交類就看大家用什麼,人不能是一座孤島。作業系統一直用win系,不想換。

6.5年後, 這種軟體執行的硬體會有什麼變化, 軟體再過 5 年還會存在麼,為什麼?

 軟體執行的硬體,我理解就是比如遊戲,作業系統所在的電腦,手機應用所在的手機。5年後電腦和手機當然處理器,記憶體,硬碟容量都會大大提高,其他的是否有顛覆性的改變我想象不到。從08年到18年,電腦好像並無本質性改變,手機倒是從非智慧機變成了智慧機,也想不到怎麼改了(看來我就是不能做這類創造性的工作哈哈哈)。這三種軟體,過5年都應該存在啊,現在人們都已經離不開這些了啊。

7.列舉你在使用上述軟體的時候觀察到的 “特殊”現象,它們和硬體有什麼不同?  這些能說明軟體的某些本質特性麼?

“特殊”現象,我還真不知道什麼是特殊的,會卡之類的算嗎?還有在電腦上玩小遊戲“金庸群俠傳3”的各個版本,經常出現bug比如郭襄加入隊伍就會黑屏,等等這些。以bug為例論述,軟體是用程式碼寫成的,會出現很多不同的功能,也有人們不希望的功能,這就是出bug的通俗解釋。硬體是物理元件,沒有這個。說到硬體我突然想到本科《微機原理》的依那老師——一位接觸不多而且還不是我們學院的但卻讓我非常尊敬和感恩的老師——所說的:“硬體除錯看天意,有的時候咳嗽一聲或者除錯前沐浴焚香一下,它自己就好了。我不做硬體,因為我不想靠著天意吃飯啊。”(後一句的原話可能有點偏差意思沒錯,以及想起本科唯一一次穿著學士服跟兩個好友走在校園裡四處亂拍的時候還能在湖邊偶遇散步的依老師,何況好友之一就是當時一起菜雞互幫去選微機原理課共度難關的朋友,可以說是十分感慨了,還是以前的時候好啊)。扯遠了,能夠說明軟體的本質特性的就是它是由程式碼寫成的,可以靈活修改,不斷除錯吧。