如何向外行人形象地介紹軟體工程這個專業?

怎麼能幾句話就讓外行人知道軟體工程這個專業是做什麼的?寫的代碼是做什麼用的?代碼和軟體有什麼關係?


軟體工程是學習怎樣合寫一部小說的專業。

總是和建築業進行不恰當的類比,是一切悲劇的根源。

項目怎麼延期了?加人!!

你們怎麼寫的這麼少?多寫點!!

還在討論什麼方案呀?快寫!!

文檔有什麼用?寫代碼去!!

爛書都是這樣寫出來的。


我以前跟娃們講的是:拿蓋房子打比方,學計算機專業就像搞物理和力學、材料的,研究蓋房子用到的原理和技術;軟工就像建築師和工程師,負責用現成的技術和材料把房子蓋起來。代碼就是磚呀~所以碼農又稱為搬磚工呀~ ^___^ 剛入門的碼農寫個幾百行代碼,就相當於砌個豬圈;進階後用點數據結構和演算法,做複雜一點的事情,相當於蓋個兩層小洋樓;軟工教你帶著一個施工隊蓋摩天大樓,難度不是一個數量級噠~ 學習軟工後你可以選擇做:搬磚工(碼農)、包工頭(項目經理)、建築師(系統架構師)、老闆(老闆)。


懂的人我一般都說我是搬磚的,

不懂的我一般說我是做網站的。


搬運一下以前的答案:軟體工程在工作中到底起多大作用? - 王德福的回答

軟體工程是一個一直存在的東西,一個軟體項目從開始到結束,必然要遵循一定的規律,而軟體工程就是解釋這個規律並且給出建議的學科。

就好像拿著一張照片去找建築師建立一棟一模一樣的樓,建築師也要從設計圖開始,進而施工,驗收,交付;拿著一張明星照片去找醫生整容,醫生也要從規劃開始,進而手術,跟進術後恢復,直到完全恢復。

但軟體開發是抽象的,難以憑直覺量化,在不了解軟體工程的人看來,要做網站只要一個psd,然後把psd還原出來,網站就可以上線了。而且按照這個路子胡搞瞎搞,最終做出來的東西也不是差得離譜,慢慢就被接受為常態。

畢竟大多數低質軟體的生命期並不足以暴露缺乏軟體工程帶來的惡果,比如做一個微信傳播的頁面,可以不做代碼版本控制,可以不做單元測試,上線前跑一遍主業務流程沒問題就提交,反正過幾天就沒人再打開了。

在做了很多minisite的外包之後,想要把重複的部分做成組件,這時候就需要分析業務邏輯了。建立組件以後,對每個組件做單元測試,而組件拼裝好上線之前要做回歸測試。再然後,打算做一個可視化編輯minisite的平台,需要規劃產品功能開發計劃,引入版本控制工具,引入自動化測試

所以軟體工程不是玄學,是工作中水到渠成的事情,只要你受不了在泥潭中掙扎,無論從那邊上岸,岸上都刻著軟體工程四個大字。

前兩天正好和朋友說起這個事情,ta說

我隨便找幾個朋友做的網站就不錯,管理後台也挺好的,現在又要寫文檔,又要重構,是不是你們程序員都喜歡什麼都自己從頭來一遍,把時間都浪費了。

我說,以前我們家門口有個人每天在路口要飯,他也覺得吃的很飽,偶爾還能吃到肉,然後我過去和他說這樣不行,是沒有保障的。他伸手給了我一耳光,說

「TM居然讓老子去種地!」


各種手機app、pc軟體、網站(包括上網用的瀏覽器)、辦公/業務系統,都是軟體支撐起來的

代碼 編譯出來 就是軟體了

軟體系統 複雜了,就要嚴格的過程管理,這就是 軟體工程


瀉藥。我也不知道軟體工程是什麼專業。難道畢業出來之後專門做版本控制、員工協作、編譯控制、自動點午飯這些軟體么?


就是寫 QQ呀、微信呀、支付寶呀、12306呀這些東西的。


學軟體工程的來強答一下。

向一般人介紹可以這樣介紹(儘管從專業角度來說有種種問題,但是這些細節的忽略不影響外人對軟工的整體感性認識):

綱要:

軟體工程的內容

軟體設計

軟體開發

軟體維護

一個比喻

軟體工程主要做三件事:軟體設計、軟體開發和軟體維護(主要省略了開發和維護之間的軟體測試)

軟體設計主要考慮我們的軟體要使用哪些數據,怎樣使用這些數據,最終達到一個什麼目的。比如淘寶的app,我們使用商家的各方面信息、商品的各方面信息、買家的各方面信息。賣家展示商品信息,然後買賣雙方通過把買家電子賬戶上的數字划到賣家賬戶上完成交易。(當然這是一個簡易得不能再簡易的說法,實際上有更多細節)這個app的目的就是完成交易。

我們把這些設計好之後就開始軟體開發,也就是具體的編碼,我們確定了數據和處理數據的方法(專業上叫做 演算法),然後把它們通過編碼(打代碼)轉換為計算機指令集(實際上編碼出來的還不是計算機指令集,也就是程序,但是經過一系列處理之後最終變成指令集,這一點對於外人其實可以不加以說明)。這些指令集就是我們說的軟體(其實是程序,但對於外人來說不妨把程序等同於軟體)。

軟體做出來以後我們還要繼續維護。一方面可能我們設計或開發階段會有一些差錯,另一方面我們軟體運行的環境(比如淘寶app運行在android和iOS環境下)也在被維護,也在發生變化,在一方面可能我們要增加、修改、刪除一些功能。

我們用蓋房子比喻。

設計階段我們考慮房子是做什麼的(寫字樓 商場 住宅 學校等等),房子蓋在哪裡(地形條件 地基條件 氣候條件 光照條件等等),房子蓋成什麼樣子,房屋用什麼建築結構等等問題。

開發階段就是具體的蓋房子,打地基、插鋼筋、澆混凝土、砌磚、做給排水、埋線路、做防水、做表面處理、綠化等等。

然後就驗收竣工啦。然後就是物管日常的修修補補,加裝太陽能、檢修線路、再蓋個單車棚什麼的。這就類比軟體維護階段。

以上都是談個大概,在專業範疇上其實可以說是錯的,但是在整體感性認識上是沒有問題的。


反正也說不明白

我一般都說 哲學家用文字描述世界,我們拿代碼描述世界。


修電腦的


我們這個專業吧,畢業主要的就業方向是搬磚,厲害的可以去修電腦。


「你們每天用的那個微信,知道伐,我們就是往出來做那些東西的......」

「真的,那幫我盜個QQ號......」

沒用,解釋不通的。再形象也沒用,頻率就不同的。


電腦搬磚漢


跟別人解釋這個專業就已經把你拉到了白痴隊列里,直接就說是修電腦的,他高興,你也省的煩


是不是那個修電腦的轉業


開網吧的


這個東西就說是搬磚的吧,說修電腦,萬一人家電腦硬體壞了,咱也是沒治


修電腦的


給懂得人說我是修電腦的、

給不懂的人說我是搬電腦的、

目測這應該是知乎上程序員被黑的最慘的一次了吧


推薦閱讀:

編譯技術中各環節比重如何?
有沒有比較好用的圖片文字識別軟體?
繪製架空世界地圖的方法及軟體?
彈窗到底算不算流氓行為?
如何給文件/文件夾添加備註?

TAG:軟體 | 計算機 | 軟體工程 | 軟體設計 | 軟體工程專業 |