開篇之做之——閱讀與思考

這個做業屬於哪一個課程 <課程的連接>
這個做業要求在哪裏 <做業要求的連接>
我在這個課程的目標是 學會現代軟件開發的總體流程,深刻理解軟件工程學並與實踐相結合
這個做業在哪一個具體方面幫助我實現目標 書中理論,做業明確目標,寫博客總結,造成輸出,重點掌握

1、初生小輩,泛泛而談

  • 小生博客: https://www.cnblogs.com/xnch/
  • 小子許歡: 來自西南石油大學17級軟件工程。講真的,頭一次遇到這樣的做業,不過還好,小生早些時候在CSDN上還有所建樹。這裏順便附上我CSDN的連接,歡迎你們前來打擾。我是半道出家的一個程序員,在經歷了志願被調劑後,在我原專業挖了一學期的石頭(地質學),還別說,有些石頭還挺好玩兒的。

    沒騙大家吧,標準的玉璽,權利的象徵,好看吧,那這些玩意兒就是靠咱們這些地質人滿山跑給整出來的。這個石頭還不叫好看,好看的在我們學校明辨樓A區大廳下,那玩意兒,高端大氣上檔次,不失爲西南石油大學的一道美麗的風景線啊。

  而後學着學着,就各類向斜,背斜,斷層什麼的,各類背,各類概念。我就思考,這不是我要走的路,那我要走什麼路呢,或許在我高考後填的第一志願適合我——軟件工程。來,請看:
html

  對嘛,這纔是咱們嘛,我就喜歡這樣,坐着動動手指是吧。俗話說得好:「咱們的指尖擁有改變世界的力量」。不開玩笑,的確如此,近十年來,多少萬程序員奉獻了他們的頭髮,來使咱們的生活變得更加智能。寫着東西就停不下來,上面吹了這麼多了,大家確定也看累了,下面說說實際的,既然做爲一個科班出生的程序員,那必須得要有掌握的一兩門技術嘛。git

  • 小生主攻Java,也瞭解其餘語言,將來主要是作一個後端工程師,先保證有口飯吃嘛,而後再看其餘技術,搞起走就好了。有喜歡Java的小夥伴或小姑娘的話,咱們能夠一塊兒探討交流技術。最後再分享我喜歡的一句話,也是個人座右銘:「紙上得來終覺淺,絕知此事要躬行

2、前人栽樹,後人乘涼

一、回想初入大學時對所在專業的暢想

(1)當初是如何作出選擇所在專業的決定的?

  當初我爲何會選這個專業呢,前面也提到了,我是轉專業學生,其實在高考畢業就填了這個專業,只不過被調劑了。至於爲何,我以爲首先是我表哥對個人影響吧,讓我在高中就接觸到過軟件,當時他用C語言編寫了一個貪吃蛇遊戲,我就以爲挺好的,而後就產生了興趣,想着本身可否也作一個出來。還有就是後面網頁的流行,不少地方都會用到瀏覽器,我就想着若是本身也能作一個網站那該多好,應該是一個自豪的事情(當時人工智能和大數據尚未這麼火)。
  後來就是在原來專業中感受到一天到晚摸索石頭沒啥意思,還有就是對本身之後發展的疑問。我之後就像這樣每天玩玩兒石頭了嗎,或者是常常到大山裏面去找石頭,而後常年常常出差,工做幾個月回家幾個月的生活?照看不了家人,不,這不是我想要的,因而考慮轉專業,正好對軟件有些興趣,而後社會上也比較火,就業什麼的,工資及之後的發展都還不錯,因而就選擇了這個專業。程序員

(2)過去一(兩)年中接觸到的課程是否符合對本身所在專業的期待,爲何?

  在過去的兩年大學生活中,這些課程在我學的時候,我以爲是不太符合的。就拿大一的數據結構來講,在我當時的想法中,別人已經實現了的東西,咱們只須要拿來用就能夠了,沒有必要深刻去研究它。再來到大一暑假所學的英語及概念實習(也就是C#),我決定那個英語據說沒什麼意思,爲何不直接給咱們上專業英語呢,這或許對咱們之後的發展更好。概念實習,當時跟着老師作了一個紅色天空遊戲,也就是小時候玩兒的飛機大戰,當時頗有興趣,可是回過頭來,不過只是跟着老師將老師的代碼本身手動的敲了出來而已,仍是同樣沒學到什麼,反正第一學年就在抱怨中度過了。到了第二學年,我開始了給本身選定了一個方向,無論學校學什麼,本身先學好那一個方向,先掌握熟練運用一門語言再說,因而我就奮力學習Java,在落後了衆多團隊大佬一年的時間,我只有花更多的時間努力學習。就在學了Java以後,我對計算機軟件又有了新的認識,也能夠說是對大一沒有認真學專業的一種後悔吧,後面才意識到數據結構及算法是至關重要的。因此說按如今的我來講,我接觸到的課程是徹底符合我對專業的期待,包括如今這門課,我相信在學完整個課程後,我會收穫到不少東西。github

(3)以爲所在的專業是喜歡的領域嗎,它是擅長的領域嗎?

  前面也已經提到過,目前我比較喜歡Java後端方向還有大數據領域。軟件專業,所涵蓋的領域實在是太廣,我感興趣的領域天然也就是軟件範疇的領域。同時,大學注重基礎,萬丈高樓平地起就是這個道理。相信你們都聽過厚積薄發這個詞,我堅信大學裏所學的東西會爲我之後的發展打下堅實的基礎。web

(4)未來會選擇從事和專業相關的工做嗎?是的話給出想去的城市、公司和崗位,否的話給出緣由

  之後必然是會選擇從事軟件行業工做的,主要是想去深圳或者就在成都吧,想去的公司確定是bat了,可是目前實力確定不夠,只能再努力了,崗位就是後端工程師。算法

二、對照前人們走過的路和描述將來發展,如今的你

(1)自我感受你已經具有的專業知識、技能、能力有哪些?已經寫過的代碼量是多少?描述你作的最複雜的項目/做業。

  我以爲具有的專業知識其實挺少的,主要是集中在編碼上面,學過C/C#/Java,數據結構,而後還了解了Python,matlab等。對總體的軟件開發流程,以及軟件整個過程還不夠了解,實際代碼量也沒多少,估計可能也就一千多行吧。最複雜的項目,說出來可能都不太好意思。就是在今年參加互聯網+比賽作的一個跨境電商比賽項目。
  引入全球化與智能化商品交易平臺模式,設計知足廠商和B2C銷售者實施跨境商品借賣銷售的系統。對多種用戶分配不一樣權限來實現對訂單的操做,還有對於生廠商的海外倉的管理,以及對各類經銷商之間的關係。對不一樣用戶的調貨系統的註冊審覈、登陸、信息分析、信息派送、彙總發佈、交易成功等。還有就是實現了企業之間的分單模式,能夠分單企業,分單供應商,分單產商。最後還作了一個小論壇,主要是爲了讓全球用戶在論壇上實現交流溝通。後端

(2)離成爲一個合格的本科畢業生,在專業知識、技能、能力上還差距哪些?

  首先,我以爲應該是找出咱們和培訓機構,或者職業院校出來的學生的區別。他們出來編碼能力通常比咱們強,那咱們的優點是什麼,咱們能夠找到本科所學的東西是他們沒有的,我以爲這是首要的。那如何提高這些知識呢,那就是要把理論專業課學好,就比如這門課現代軟件構建之法,以及計算機系統基礎,計算機網絡基礎,操做系統,軟件需求分析,軟件體系結構,軟件項目管理等,這是做爲一個科班出生的程序員的基本知識。其次,在編碼能力上還有很大的差距,我認爲在畢業前要有1萬行代碼纔算合格。瀏覽器

三、目前是一我的生選擇的十字路口,考研、工做、考公、出國,不一樣的選擇在大三就有不一樣的努力方向。而不管考研仍是工做的每條路徑,也有許多不一樣的分支。

(1)對照以上你閱讀的前人們的經歷,你的選擇是什麼?

  在閱讀了前人們的經歷,再加上本身的思考,大一浪費了一年的時間,還有想去的bat,我以爲考研多是目前最好的選擇。服務器

(2)在這種選擇下,你認爲你相比其餘同窗來講有何優點,有何劣勢?

  考研的話,我以爲優點多是本身數學和專業課學得還比較好。劣勢就是本身一直偏科英語,還有就是還須要比其餘同窗多花幾年在學校裏讀書,本身的工做經驗確定比不過工做了的同窗。網絡

(3)針對你的選擇,你給本身的大三設定的規劃安排是什麼?

  在近幾年的考研熱中,特別是計算機,複試刷下去了不少人,我以爲大三在上學期的時候我就多敲代碼,多作項目,把代碼量給弄上去,而後大三下開始準備考研以及算法數據結構基礎之類的學習,避免在複試的時候被刷。

(4)你對於實現本身的夢想已經作了或者計劃作什麼樣的準備?

  加入了新開的一個實驗室,能夠和研究生學長們一塊兒交流技術,而且在作項目中增長本身的代碼量,向1萬行看齊。各類技術書籍,高級及底層實現以及準備好,計劃着9610的工做狀態度過大三。

3、小試牛刀,不懂就問

問題1:職業發展之考級之路

第三章(53頁)做者談到職業發展之考級之路。
  做者談到了些許什麼國家認證,機構認證之類的專業技術資格證書。
疑問:因爲我在網上,知乎,CSDN等各大平臺上了解到,前人說的大可能是計算機類的專業考證沒有用。通常有經驗的不用證書,有證書的大多沒經驗,拿證書還不如多花點時間鍛鍊下技術。然而網上的各類考證官網又極力說考證考級的各類好處,書中也是雙面的簡單的介紹了一下,那麼這些證對咱們職業發展是真的有好處嗎?仍是隻是浪費時間考取無用的證書呢?

問題2:專與精的關係

第三章(52頁)專與精的關係
  做者談到街頭賣藝的單人樂隊,一我的能夠會多種樂器,而與之對立的是隻研究一種樂器的樂手。很明顯表達前專後精,比如全棧工程師與運維工程師運維不一樣的模塊。
疑問:如今互聯網公司成兩種形式,先後端分離或者就是前面提到的全棧工程師。據我瞭解Python和PHP作全棧工程師仍是比較不錯的,那爲何就成了街頭賣藝了呢? 的確術業有專攻,可是爲何如今社會上都須要會多項技能的人呢?就好比你技術強而後管理上又有建樹,又或技術+英語,技術+文檔撰寫能力,公司豈不是更應該喜歡花更少的錢來請人作相同的事情嗎?

問題3:軟件需求之用戶需求

第八章(151)軟件需求之用戶需求
  文中提到人們爲了解決現實社會和生活中的各類問題,要求助於軟件,須要替用戶想到他們的需求。
疑問:在開發軟件時,咱們如何去正確的找準市場定位與分析客戶的需求?這類問題書中提到的軟件尋找需求,但是用戶是多變的,如何能保證精準呢,是不是用到當下流行的大數據技術,還有當用戶信息量不夠時,是否是就作不到精準定位?在沒有這一技術時,是否是沒法定位到用戶的需求,產品就只能不斷的修改?

問題4:測試方法之問

第十三章(277)各類測試方法
  書中提到單元測試,構建驗證測試,驗收測試,搜索式的測試,迴歸測試,夥伴測試等等。那麼問題來了
疑問:咱們如何更好地進行軟件的測試,而且要下降測試成本,即可以對各類可能會發生的狀況進行測試,雖然上述各類測試方法,那怎麼找到一些潛在的難以發現的bug,而且提升測試效率?常常聽老師說,沒有完美的軟件,只有更好的軟件,合格的軟件,那麼軟件須要經過什麼樣的測試才能算合格?

問題5:創新和做坊所思

第十六章(370)創新和做坊
  做坊很容易被新技術拋下,落後的絕技也就沒有多大用處了,想開做坊的人,有些有能力的做坊,每每能找到合適的渠道和空間,實現本身的價值。
疑問:在當下這個時代,人們不談「做坊」了,如今的「雲」,「大數據」,「人工智能」,和「創新」纔是討論的熱點。如今國家響應着新技術的發展,開設了大數據專業,人工智能等專業,那是否軟件工程就變成了前面提到人們不談了的「做坊」?如今的軟件工程面臨着什麼樣的難題,軟件工程在新興專業以及新興技術下將如何繼續發展?又或者說軟件工程的下一個變革的方向將會在那一部分?

4、三分手藝,七分傢伙

  俗話說,三分手藝,七分傢伙,手藝好還要傢伙妙,拳頭再硬也比不上錘子。孔夫子也說 「 工欲善其事,必先利其器。」可見,利器之重要性,那麼咱們就來看看目前流行的源程序版本管理軟件和項目管理軟件。

Git

  • Git 是一個開源的分佈式版本控制系統,用於敏捷高效地處理任何或小或大的項目。

  • Git 是 Linus Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。

  • Git 與經常使用的版本控制工具 CVS, Subversion 等不一樣,它採用了分佈式版本庫的方式,沒必要服務器端軟件支持。

  • Git是目前世界上最早進的分佈式版本控制系統。

在這裏插入圖片描述

優勢

  1. 適合分佈式開發,強調個體。
  2. 公共服務器壓力和數據量都不會太大。
  3. 速度快、靈活。
  4. 任意兩個開發者之間能夠很容易的解決衝突。
  5. 離線工做。

缺點

  1. 學習週期相對而言比較長。
  2. 不符合常規思惟。
  3. 代碼保密性差,一旦開發者把整個庫克隆下來就能夠徹底公開全部代碼和版本信息。

GitHub

  Github是一個代碼託管平臺和開發者社區,開發者能夠在Github上建立本身的開源項目並與其餘開發者協做編碼。創業公司能夠用它來託管軟件項目,開源項目能夠免費託管,私有項目需付費。GitHub能夠託管各類git庫,並提供一個web界面,但與其它像 SourceForge或Google Code這樣的服務不一樣,GitHub的獨特賣點在於從另一個項目進行分支的簡易性。爲一個項目貢獻代碼很是簡單:首先點擊項目站點的「fork」的按鈕,而後將代碼檢出並將修改加入到剛纔分出的代碼庫中,最後經過內建的「pull request」機制向項目負責人申請代碼合併。已經有人將GitHub稱爲代碼玩家的MySpace。在這裏我又要打個廣告了,本人github:https://github.com/ordinaryload 歡迎前來打擾。
在這裏插入圖片描述

優勢

  1. 適合分佈式開發,強調個體;
  2. 公共的服務器壓力和數量都不會太大;
  3. 速度快, 成熟的架構,開發靈活;
  4. 任意兩個開發者之間能夠很容易的解決衝突;
  5. 離線工做,管理代碼成本低,不須要依賴服務器;
  6. 部署方便。基本上下個命令就能夠用;
  7. 良好的分支機制,可讓主幹代碼保持乾淨。
  8. Git對程序源代碼進行差別化的版本管理,代碼庫佔極少的空間。易於代碼的分支化管理。

缺點

  1. 資料少,學習成本比較大,學習週期比較長,要求人員素質比較高;
  2. 不符合常規思惟;
  3. 代碼保密性差,一旦開發者把整個庫克隆下來就能夠徹底公開全部代碼和版本信息。
  4. 不支持中文,圖形界面支持差,使用難度大。不易推廣。

Microsoft TFS

  TFS是一個應用軟件生命週期管理(ALM)軟件,是一個軟件研發平臺產品,其功能覆蓋了軟件研發過程當中的全部環節(包括源代碼管理)和全部角色。
在這裏插入圖片描述

優勢

  1. 易用性。
  2. 高度集成其餘工具。
  3. 是對敏捷,msf,cmmi等項目、過程管理、過程改善的支持。
  4. 任務版上能將需求、項目進度盡收眼底,對於小團隊而言,比甘特圖更有用。

缺點

  1. 能應用起來的團隊、公司的數量較少。
  2. 多數真正用起來,也就是源代碼管理這部分,這也僅僅是佔TFS極小部分功能。

Mercurial

  Mercurial與通常傳統的版本控制系統的最大區別在於分佈式的概念。所謂分佈式,就是指沒有一個所謂的集中的中心(central)庫,這個庫通常由svn server(svn),vss administrator(vss)控制,而Mercurial就沒有這樣的一個庫,因此使用版本控制的時候甚至都不須要一個administrator和server,本地直接建庫,直接就使用,任何一個庫均可以做爲中心庫,每一個庫在Mercurial看來都是平等的。
在這裏插入圖片描述

優勢

  1. 更輕鬆的管理。
  2. 更健壯的系統。
  3. 對網絡的依賴性更低。

缺點

  1. 權限控制的問題
  2. 分支的時候不能對單獨的子目錄進行,一次clone就是一個工程

----------------------------------------------------------紙上得來終覺淺,絕知此事要躬行---------------------------------------------------------

相關文章
相關標籤/搜索