您的位置 首页 kreess

【通俗易懂】軟件工程是什麼

軟件工程專業軟件工程專業是什麼和計算機科學與技術專業有什麼區別相關課程軟件工程什麼是軟件軟件工程是什麼軟件工程師軟件工程發展前景應用廣泛就業方向軟件工程課程真沒用嗎軟件工程

  • 軟件工程專業
    • 軟件工程專業是什麼
    • 和計算機科學與技術專業有什麼區別
    • 相關課程
  • 軟件工程
    • 什麼是軟件
    • 軟件工程是什麼
    • 軟件工程師
  • 軟件工程發展前景
    • 應用廣泛
    • 就業方向
  • 軟件工程課程真沒用嗎
  • 軟件工程師中年危機
  • 參考

軟件工程專業

軟件工程專業是什麼

軟件工程專業是2002年教育部新增專業,屬於工學中的計算機大類,學制4年,畢業生可獲得工學學士學位。

全國開設該專業的院校超過600所,畢業生規模約為每年60000人以上,規模還在不斷擴大。

軟件工程專業主要培養掌握計算機軟件基本理論知識,熟悉軟件開發和管理技術、能夠在計算機軟件領域中從事軟件設計、開發和管理的高級人才。

和計算機科學與技術專業有什麼區別

  • 平行的本科專業 軟件工程是和計算機科學與技術平行的一個本科專業。 在工學門類下的計算機類下,設有計算機科學與技術、軟件工程、物聯網工程、信息安全和數字媒體技術5個基本專業,另外還有一些特設專業。
  • 培養的目標不同 軟件工程與計算機科學與技術的培養目標不同。 計算機科學與技術,可以偏向科學理論方向,也可以偏向技術應用方向,對於科學理論方向基本都是高精尖的學校專業人才,大部分人還是會偏向於技術應用方向,一技在手,天下我有。兩個專業開設的基礎課程是比較相似的,專業課程則因各學校的培養目標的差異而有所不同,計算機科學與技術註重科學理論方向的學習、專業技術的研發,基礎性相對更強;軟件工程註重應用實現,其在產品研發管理方向專業性更強。 當然從技術知識上來說兩個專業的畢業生都可以相互轉崗,計算機科學與技術的人才可以去實現產品,對接實際產品用戶,軟件工程的人才也可以去專心研究一個方向的技術點或理論。
  • 受眾群體不同 在受眾群體上,計算機科學與技術理論上面向的是計算機軟件行業技術人員,為行業提供技術知識理論或底層系統,軟件工程面向的是終端產品用戶。
  • 宏觀與微觀 對於產品來說,計算機科學與技術(應用方向)偏向微觀,專註於點,講究深度;軟件工程偏向宏觀,專註過程,講究廣度; 兩個專業的課程大部分差異不大,隻是在方向上有大一樣,計算機科學與技術更偏向技術研究,軟件工程更偏向於產品實現,對於技術知識來說兩個專業都可以互相轉換,沒有必要深究,但最終都是為瞭產品,軟件工程雖然自身可以在技術方面下功夫,但更註重產品研發管理,計算機科學與技術更註重理論研究及技術點的研發。 打個能理解但不是嚴謹的比方:聯發科研發芯片,手機廠商研發手機,聯發科為各大手機廠商提高提供芯片(技術點),手機廠商利用第三方芯片、散熱器、屏幕、攝像頭等等技術點來設計開發一款手機產品。當然手機廠商中比如華為、蘋果等廠商本身有能力為手機提供一些技術點,比如系統、芯片等軟硬件技術點,但蘋果手機、華為手機(這裡隻談華為手機方面)側重點在手機研發、管理、營銷等。這裡手機廠商可以看做軟件工程,聯發科可以看做是計算機科學與技術,當然三星也制造自己的屏幕、芯片等硬件,甚至系統,三星也設計生產手機,所以實際上有能力的話,兩者是可以相互轉換的。
  • 研究生 這兩個專業的學生都可以報考軟件工程碩士這一專業碩士研究生。目前這兩個專業的就業形勢都非常好,其中以軟件工程更為好一些,計算機科學與技術專業的學生考研的學生多於軟件工程專業的學生,軟件工程專業的學生本科就業,個人能力稍強的,就業前景還是很好的。 隨著深度學習、人工智能的爆發,越來越多的計算機相關人才湧入,在理論和技術研究方向,需要更多的計算機科學與技術、數學等專業的人才。

相關課程

軟件工程專業要求學生掌握軟件設計、開發、運行、維護、管理的相關知識,因此課程涉及軟件建模與分析、軟件設計與體系結構、軟件質量保證與測試、軟件過程與管理。

大部分院校的軟件工程專業會涉及到以下相關課程:

編程語言(匯編/C/JAVA/.NET/C++/Python等)、面向對象程序設計、編譯原理、離散數學、概率統計、線性代數、數據結構與算法、操作系統、計算機原理、數據庫原理、網絡、UML、軟件質量保證與測試、軟件工程、多媒體、軟件項目管理、計算機英語、Linux操作系統、人機交互、嵌入式開發等課程。

不同院校課程有多有少或課程名不一樣。

軟件工程

什麼是軟件

通俗的說,軟件是一個集合,是程序+數據+文檔的集合。並不是大部分普通人認為的軟件僅僅是程序。

PC電腦上有IE瀏覽器軟件、360殺毒軟件、QQ、百度雲盤、迅雷下載、WPS辦公軟件、英雄聯盟等等;

移動端手機上有微信、網易雲音樂、高德地圖、墨跡天氣、郵箱、抖音、京東、知乎、美團、王者榮耀等等;

除瞭PC端與移動端,一些手持設備、公共場所設備、智能電器設備等智能設備,通常都會有相關軟件產品,比如豐巢櫃、kindle、智能冰箱、小米掃地機器、電視機盒子、銀行/機場/餐廳等細分行業自助機,等等很多能有屏幕的智能設備都會有內置相應的軟件產品。

程序可以通俗的理解為我們安裝的在電腦/手機上的軟件或App,數據可以理解為軟件預置的數據、使用過程產生的用戶數據等,文檔面向的是內部工程團隊。

軟件工程是什麼

軟件工程是一門研究用工程化方法構建和維護有效的、實用的和高質量的軟件的學科。涉及程序設計語言、數據庫、開發工具、系統平臺、標準、設計模式、開發方法等方面。

軟件工程包括三個要素:過程方法工具。通俗點說就是,描述瞭軟件開發應該是怎麼樣的過程,過程中的每個環節(分析、設計、開發、發佈、維護等)適合采用哪些方法與解決方案,采用這些方法是否可以通過一些工具來提高每個環節的效率,降低整個軟件工程生命周期的時間、資金、資源成本。

這裡我們也可以看出軟件工程的側重點在於應用,在於過程管理,在於方法、工具的運用,目標就是用更小的成本、更短的時間完成更完善更符合需求的軟件產品。軟件工程是一個綜合性的工程,是一個宏觀的行業,不隻局限於技術細節。

書面上的目標是在給定成本、時間的前提下,開發出具有必要性適用性有效性可修改性可靠性可理解性可維護性可重用性可移植性可互操作性和滿足用戶需求的軟件產品。

這些目標有助於提高軟件產品的質量、開發效率,降低整體成本。

軟件工程師

軟件工程師是從事軟件開發相關工作的人員的統稱。工程師是一個比較泛的概念,包括軟件設計、軟件架構、過程管理、開發等相關崗位。每個崗位的分工不同,工作內容都與軟件開發生產相關的,軟件工程師是IT行業需求量最大的職位。

工作內容

  • 1、指導開發工作
  • 2、參與軟件系統的設計、開發、測試、發佈等過程
  • 3、協助產品項目管理保證項目進度與質量
  • 4、負責系統中主要模塊、主要功能的編碼實現
  • 5、解決系統中的技術難題與關鍵問題
  • 6、協調工程團隊成員工作,並與其它軟件工程師協同
  • 7、協助或負責系統運維

軟件工程發展前景

應用廣泛

軟件工程的應用十分廣泛,近20年軟件行業高速發展,主要應用於多個方面,典型的軟件有IM聊天通信工具、音頻視頻軟件、遊戲軟件、瀏覽器、圖形圖像工具、網絡應用下載相關軟件、辦公閱讀翻譯相關軟件、教育學習軟件、系統工具等等

近10年互聯網達到一個新的階段,每個人都有手機,全民移動互聯,而各個行業幾乎都有計算機軟件的應用,不論是工業、農業、國企、私企、銀行、航空、政府部門等團體組織都需要有適合自己的軟件應用,這些應用全面提高社會工作效率、生活效率,進一步促進經濟和社會的高速發展,過去20年互聯網更多的是在高新及前沿企業有廣泛的應用,在傳統行業仍然有很大的空間,特別是近10年的深度學習、人工智能、物聯網的發展,更多的企業及傳統行業更積極的擁抱互聯網軟件產品。

就業方向

  • 軟件開發 軟件開發是大部分軟件工程畢業生就業方向,軟件開發涉及面很廣泛,Web應用開發、PC應用開發、移動端應用開發、嵌入式開發、系統開發、遊戲開發、數據庫開發等,開發還可以細分為前端、後端、移動端、底層、數據庫、網絡等
  • 軟件測試 軟件測試是軟件工程過程的一個重要環節,保證軟件產品質量。目前國內互聯網公司逐步重視軟件測試環節,越來越多的開發轉到測試團隊,提供更有力的測試能力。
  • 數據庫管理 數據庫系統管理也是一項很復雜的工作,我們說軟件=程序+數據+文檔的集合,一般軟件工程項目數據都存儲在數據庫,所以數據庫系統管理甚至開發是軟件工程中一項很重要的環節。
  • 大數據分析 近10年來,隨著計算機硬件及技術的發展,互聯網數據的沉淀,聰明的互聯網人不會讓沉淀的數據一直沉睡,通過大數據分析,系統可以得到一些更有力的數據來支持決策層決策,及更好的為用戶提高個性化服務。
  • 人工智能 深度學習再一次激發瞭人工智能的全面爆發,近幾年,百度、阿裡、騰訊、頭條等大廠在人工智能方面大量投入資源,國傢層面更是主動推動5G、物聯網來配合人工智能在傳統行業的落地,我們認為這是互聯網的第三次革命。
  • 項目管理 有產品,總是會有項目管理的崗位,小企業可能由項目經理或產品經理兼職,大企業一般會有獨立的項目管理的崗位/團隊。
  • 產品經理 在互聯網產品經理的門檻低,但好的產品經理真的少。有開發基礎和經驗的工程師也很適合轉崗產品經理,有技術溝通方面有一定優勢。過去10年有很多產品經理大牛都是從工程師/開發過來,雷軍最早一批的程序員與產品經理,馬化騰稱自己是騰訊最大的產品經理,丁磊在2010年就說自己不再定位研發工程師更像是個產品經理,周鴻禕標榜自己是產品經理的ceo之一,微信之父張小龍,這些大神早期都是開發/程序員/工程師身份。
  • 系統運維

軟件工程課程真沒用嗎

很多人覺得軟件工程這門課很虛,書本裡都是一些概念、知識點,字都認識,合起來一句話卻不是很明白是什麼意思。比如說書中提到的需求分析、建模、軟件過程、開發方法、開發模型等內容,都是一些純理論的知識,一開始讀像雞湯,怎麼看都是對的,但又不知道為什麼對。

但當我們正式投入軟件工程開發工作後,結合自己產品項目開發經驗回顧這門課時,就會發現經常遇到這樣的場景:

我們收到一個需求任務,想要開發前,我們需要先做需求分析;

而當我們準備開發一個較復雜的大點的模塊,開始時知道要先設計,將模塊自頂而下逐步分解成小功能,對關鍵問題及技術難題提前研究並設計,最後團隊開發成員協同分工完成開發;

在我們完成一個功能模塊後,會開始編寫單元測試代碼,還需要測試同伴來完成一些專業的功能、性能方面的測試;

在項目開發過程中,我們的項目管理人員會進行進度的跟蹤,時間與資源的實時調配,開發團隊需要對代碼進行日常管理比如版本分支等管理,測試團隊需要對測試用例、BUG進行管理及跟蹤,保證測試有序有質。

產品準備發佈時,我們會去考慮代碼版本、分支,灰度部署,一鍵分發,A/B測試等,這些都需要我們熟悉過程,采用合適的方法,運用合適的工具。

計算機技術最終都是服務於軟件產品,不論使用什麼編程語言,不論是前端、後端、底層、數據分析、深度學習、人工智能等層面的技術都是為瞭更好的生產軟件產品,軟件產品的實現離不開軟件工程知識的應用。

我們在大學期間的軟件工程課程更側重理論,屬於前人經驗的書面傳授,在大學期間,作為學生很難有機會參與比較完整的軟件工程項目,除非到公司實習參與開發或跟隨導師團隊完成項目開發,否則缺少實踐及問題導向意識,很難理解書中的知識,理解起來比較枯燥乏味。這有點像小朋友背誦古文一樣,在小的時候隻能背誦,但無法很好的理解古文的含義,過去大部分院校的軟件工程專業很難提供實踐方面的機會,即使有也並沒有很好的告訴學生為什麼需要這個實踐及這個實踐發作用於書本哪些知識,也不會再去結合結合實踐回顧書本知識,加強深刻理解,即使有院校做到瞭,大部分學生都是懵的,還不知道院校的苦心,隻知道學習一個開發技能努力就業。當然在畢業後再回頭結合軟件工程相關知識也不晚,我們覺得更好,項目更真實,根據參與的多個實際項目去理解軟件工程的過程、方法、工具三要素,去理解那些是什麼、為什麼、怎麼做,根據自身的理解形成自己的軟件工程理論與方法學。

從當下考慮,學好瞭軟件工程,你的工作可以按時保質保量完成,開發時間和成本可控。

軟件工程師中年危機

青春飯、中年危機、碼農、攻城獅、搬磚,這些詞匯有些是自嘲調侃,而說到中年危機,程序員到30歲就開始有點焦慮,究其原因是計算機技術更新迭代太快,所有人都在追趕潮流,擔心被淘汰,一個技術很可能流行個幾年就淘汰瞭,很可能這個技術就是你最熟悉最在行的,被淘汰瞭就相當於你少瞭隻手,肯定害怕。

那我們是否可以去考慮哪些技術知識不容易更新換代,或說可一直存在且可持續優化更新的,更長遠的去想,在軟件開發領域,有哪些知識是10年前很重要,現在仍然重要,未來可能同樣重要的?哪些知識會決定你發展的高度?

相信大傢心裡是有答案的,無外乎就是數據結構與算法數據庫SQL操作系統計算機網絡編譯原理,以及軟件工程,甚至更基礎的數學課程。

技術更新迭代速度再快,軟件工程的過程、方法(軟件開發背後的邏輯、知識體系、解決方案)卻是萬變不離其宗,隻有工具會一直更新升級來提高軟件工程的效率,降低軟件工程的成本,這些過去在用,現在在用,未來還會用的知識,就是經典的價值,就是行業最為本質的東西。

雖然過程與方法萬變不離其宗,並不是說他們一成不變,而是需要一切從實際出發,實事求是,理解並定義過程,根據實際情況與過程定義,采取適合的方法。

參考

  • 什麼是軟件工程,發展前景如何?
  • 什麼是軟件工程
  • 軟件工程是什麼
  • 計算機科學與技術與軟件工程
  • 計算機科學與技術與軟件工程
  • ZealReal:解讀【軟件工程的迷途與沉思】

來源:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

返回顶部