如何評價中國大學軟體課程中對於流行技術(如Git)的忽視?

很多計算機專業學生不知道git github,但是很多高中生初中生都在用。(我本意不是說學校不教學生如何去使用,而是讓學生知道有這麼一個東西,知道社會上現在流行的一些技術,開闊眼界是很重要的。我也沒有拿大學教育去和職業教育對比啊)


看了一下其他回答,我來說說我的觀點。

國內大學不是技校。

本科教育也不是教你怎麼掙錢。

這句話完全正確,畢竟當前的高等教育並不是面向就業的。大學為啥不教現在熱火朝天的Android、iOS開發、前端開發?無非就是兩個原因:

  1. 這些是技校、培訓學校乾的事,在培訓學校培訓兩三個月就能學會,大學是高等學府,是研究高深理論的地方。

  2. 學校的教學大綱一般是固定不變的。很多老師都不願意去學新技術,或者完全不關心新技術。開新課需要老師吧?並不是每個老師都會呀!沒老師怎麼辦?聘請新老師還是讓現有的老師去學?都不太可能吧。所以說想要學校課程想要跟上流行的新技術難度是比較大的。

但是呢為啥斯坦福每年都會開設iOS開發課程呢?而且教學語言從Objective-C換成了Swift,iOS6 -&> iOS7 -&> iOS8呢?

難道學CS不是比數學,比物理嗎?

所以說在軟體工程專業開設了大學物理、物理實驗、數學分析、數字電子技術、模擬電路、信號與系統分析課程?

然後再看看浙大這份計算機專業2014級的培養方案

http://box.zjuqsc.com/-cs2014

浙大藥丸?

大學要培養的是全方位的科學家

本人在鄙校軟體學院軟體工程卓越班就讀,班上同學的情況應該比較具有代表性。

我們來看看那些不知道Github的「全方位的科學家」是怎麼樣的。

  1. C語言程序設計(大一上) —— 掌握簡單語法、最最最基本的編程能力。但是僅僅能應付考試。

  2. 數據結構(大一下,C語言教學) —— 能力僅僅能應付考試,鏈表、棧、隊列考完試就不會怎麼實現了,更別說什麼複雜的各種圖、樹的演算法。

  3. 面向對象程序設計(大二上,C++語言教學)——僅掌握基礎C++語法和上課寫出的代碼樣例以應付考試,面向對象?這是啥?

  4. 軟體工程(大二下),軟體工程是啥?寫文檔?
  5. 資料庫(大二下),掌握基礎的SQL、資料庫理論。至於資料庫是幹嘛的,I don"t care.

所以說這樣的科學家,靠譜嗎?


目前在新加坡一個大學學CS,學校的做法類似於:上課教java語法和簡單演算法,學期大作業是4人小組編寫一個能聯機對戰的Android遊戲,老師推薦幾個lib讓我們自學,遊戲形式任意,期末各個小組聯合展示打分,期末成績60%來自這個項目。

結果最厲害的組做出來的遊戲完全可以拿來賣了,還有自學erlang搭後端的。這是大三上的課。

因此並不需要教實用技術,只需要逼學生學實用技術就好啦。(逃


動不動就「大學教育不是職業教育」,好像自己上個國內一本有多牛,個個都要當科學家了似的,事實上保守估計九成以上的人出來還是搞工程的,大學是要教理論,但是不帶工程課並不是值得驕傲的事情,早起步接觸工程意味著找工作比同齡人有更多的資本,你30歲達到的工程水平別人可能25就達到了,人生有幾個二十來歲的五年?

另外請看看國外同類學校的課程設置(條件不允許的話看公開課也成),再看國內的課程設置,差距是存在的,難道國外開工程課的都是技校了?

誰說要做工程就要廢了理論了,考慮問題不是非黑即白的。如果非要不睜眼看世界,提高自己的競爭力,整天就嚷嚷大學教育不是職業教育來麻痹自己,祝你們早日都如願成為科學家。

補充一下

我為啥要在這裡言辭激烈地吐槽這種觀點,就是怕你們誤人子弟。國內大多數人本科期間理論課搞得不怎麼樣,paper都沒看過幾個,要是信了你們的答案,看別人搞工程還嗤之以鼻,覺得自己要當科學家,感覺良好,然後畢業以後發現自己啥都不會找工作被別人爆出翔,到時候誰難受誰自己心裡有數,你們輕飄飄回答這麼一句,逼格有了,優越感有了,可你們這是害人你們知道么?

我的建議,本科期間沒有在實驗室認真做學術自己讀paper甚至發paper的同學,不要做你的科學家大夢了,那路已經不屬於你們了,現在學好幾門關鍵理論課的同時,找個工程方向好好研究一下,將來路好走的多。

利益相關 本人國內排名前幾的CS本科畢業,現在BAT之一工作。回答態度有些尖銳,和本人平時形象不符,所以匿了


中國大學忽視的不是流行技術,而是實踐。

大學課程注重基礎理論沒有問題,畢竟流行技術幾年一變而理論知識很少變動。但中國教育一貫輕視知識在實踐中的運用,這個就不好了。理論知識是道,具體技術是術。術是可以讓學生自己在實踐中自己掌握的,不必特別教授,提點一下就夠了。但你得先讓學生多實踐。


「你們真的是想當科學家嗎?」

「你們從事所謂科研的動機純粹嗎?」

「你們不是在自己騙自己嗎?」


謝邀。

首先為了避免題主修改題目,我拷貝如下:

中國的大學軟體課程是不是很失敗?

很多計算機專業學生不知道git github,但是很多高中生初中生都在用。

題主的邏輯是:

計算機專業學生不知道很多中學生都在用的軟體開發工具 (git),所以中國的大學軟體課程到了 「很失敗」 的邊緣(不確定)。

這個推理的很多方面都值得推敲。

計算機專業的學生 -- 軟體課程, 二者是什麼關係?

很多計算機專業學生不知道某事 -- 很多中學生知道某事, 這兩個 「很多」 的比率到底是多少?

git,github 作為一個源代碼管理工具, 是否屬於在校計算機專業學生的 「必知必會」 科目?

「課程失敗「 是什麼意思?

1. 課程體系設計是失敗的 (參看:現代軟體工程 習而學的軟體工程教育 )

2. 某一個具體課程 (例如軟體工程)的設計是失敗的

3. 教課的老師沒教好 (參看: 軟體工程講義 0 微博上的軟體工程 )

4. 學生沒學好

5. 誰來判定 「失敗」, 有客觀標準么? 有一個時間維度的問題:

期末考試之後, 很多學生都輕鬆過關了, 同學們說 - 這個課是成功的! 我過了!

畢業後,學生說, 我草,這些東西我們學校都沒講! 學校課程太tm失敗了!

還有判定者的角度:

a) 學生,我要做這麼多練習, 為啥這麼難,什麼爛課!差評!Sina Visitor System

b) 老師: 紀念第一次評教得B——兼談如何取悅學生

c) 教務處: 這個課居然有這麼多的同學沒及格,他們鬧起來怎麼辦? 這是失敗的!

d) 學校領導: 我們收了很多學費,終於把學生都送走了, 「男的不死,女的不生」 *。 我們的教育體系是成功的!

e) 但是用人單位覺得畢業生儘管號稱學過某些課, 卻不知道基本概念和工具,這是失敗的。

建議題主再完善一下題目。

*注: 「男的不死,女的不生」: 沒有男生因為打架鬥毆,酗酒,通宵遊戲,自殺等死亡;沒有女生因為未婚先孕生娃。

---2015/7/26 --- 修改 ---

題主把題目改了:

如何評價中國大學軟體課程中對於流行技術(如Git)的忽視?

如果大學的學生都認真學習了基礎課,專業課,軟體工程實習,並有一定量的代碼練習和團隊的實戰經驗。 那麼,當他們第一次看到 Git 這些工具的時候, 你覺得他們會花多長時間來掌握其基本功能?

我猜想,好學生需要一個小時,一般的學生幾個小時就夠了。

所以只要大學的軟體課程好好地教學生,學生好好地練習,就算是用30年前的教程 (Automata,Data Strcture, Unix C, C++, RDBMS, TCP/IP,早期的Unix 自帶的源代碼管理系統 SCCS),也能很快地撿起 「流行技術」。

反之,如果老師和學生心照不宣一起混,就算有最新的概念,最酷的MOOC,最時髦的工具,畢業出來的也是一些混子。

-- 2015/12/22--- 修改

可以看看北航同學在上了以《構建之法》為教材的軟體工程課之後,寫的源代碼管理的總結:

【Beta階段】團隊源代碼管理

團隊作業Week14——源代碼管理


大學不是教你用github,用docker,用spark的地方,是教你奠定計算機科學基礎的地方,數據結構,演算法,編譯原理,操作系統,以及概率論,數理統計,數據挖掘… 這些課程才是核心啊親。當然,大學生在學好這些課程的基礎上會用github,會用nginx,會swift,當然是好事,不會用也行,熟悉一種編譯型語言和一種腳本語言就可以了。


先說一下Github,像工具類的要看個人,老師一般不會向同學介紹系統/編譯器/其他工具及其優劣勢,除非一個project,不然我們也不會規定工具。而且我們一般都是去bbs或者學長交流會上了解這些。。。。。

****************************************

首先我先說一下,知乎用戶的計算機水平遠高於本科生水平。。。。

好吧言歸正傳,第一點,本科主要培養的是思維方式,這是為了糾正之前十二年養成的錯誤習慣,即不考=沒有用,不過好像大部分學校做的不好。。。

第二點,我們怎麼選大學選專業的?看高考分數。學計算機的不是有基礎對計算機感興趣的,而是覺得賺錢而且分數夠的。結果呢,課程那麼簡單,沒基礎的大一忙一年還沒一些人隨隨便便考得好。要是按某些人的要求,估計得掛一半以上。

第三點,有幾個大學沒有計算機系?那麼多老師到底能有多少是有實際經驗的?有實際經驗不如自己接項目賺錢。

第四點,語言這種東西,不是理論好就有用的,不多寫都是白說。如果之前沒有基礎,大學能把基礎都學好就不錯了。

所以與其說大學教育有問題,不如問問自己當初為什麼學計算機,如果真的是感興趣,上完課多寫,或者直接讀碩士,有的是要寫代碼的時候。。。沒興趣又想找好工作的,那還真沒辦法


上學是花錢學比較的東西,比如操作系統,編譯器等(當然這些東西入門後想深入還是靠自學)。Git什麼東西不需要什麼智商的(高初中生都會)自己刷本書就會了,在大學課堂上交豈不是浪費資源?


===居然改問題了……

大學教育,至少軟體教育是很失敗,但是不是因為不教git,而是教的東西和預期不符。我這學期選修了學校開的java課,前一半時間講語法,後一半講GUI,最後考試是在紙上寫簡單的一個GUI程序,最後擠進了22%的優秀率裡面,我也算學的優秀了,但是出去以後我不敢說自己會java,因為我知道我學的東西有多水,甚至連培訓機構都不如。回頭看看課程介紹,有基礎語法,GUI,網路編程,JSP,SSH,然而後面的幾個都沒講。其他的課大概也就是這樣,那麼我們的時間放在哪裡了呢?數學物理-.-!

於是到了畢業的時候,會一點基礎的語言,擅長各種數學各種物理,還是得去培訓機構_(:3)JL)_

===補充

數學物理很重要啊,最近學opengl還用的到線性代數什麼的呢,但是不能讓數學物理擠佔了軟體學生敲代碼的時間,畢竟那個才是飯碗,雖然我並不是軟體專業的_(:з」∠)_

===原回答

不知道git的大神還是大神,知道git的渣渣還是渣渣

利益相關:正在github上給下一屆小朋友寫c語言教程的渣渣


課程設置並沒有什麼問題,專業必修課基本上是計算機科學幾十年來沉澱的精華部分。真正有問題的是教材、授課水平以及教學要求。

至於版本管理工具、軟體開發流程、編譯器、IDE這些,參與一個完整的項目基本都能熟練掌握了,並不能反映教學水平。而是否向github提交代碼,更是個人喜好問題。


等他們做團隊項目需要merge代碼的時候,或者自己電腦硬碟崩了需要恢復的時候,就自然明白這兩個的重要性了。這個不需要教,因為再怎麼通過課堂來灌輸也沒有用,真真切切經歷一兩次就明白了。

學校給的東西,不一定順手,不一定符合個人習慣。其實也不是學校的過錯,任何地方都一樣。不能只是別人給你什麼,你就用什麼,還是要貫徹「拿來主義」,從開發者社區裡面自己找。現在有個詞叫「搜商」,就是衡量你會不會找你想要的東西。說到底,還是做得少,見識短。

所以多計算機專業學生不知道git,並不能夠說明課程或者老師很失敗,而是他們真的很少做東西,至少是很少協作去做某個東西,或者他們對開發者這個圈子、社區不感興趣。究其原因,想必已經很清楚了,有多少軟體專業的學生是調劑進去的,有多少又是看著IT行業的薪資水漲船高而拼了命往裡擠的。

======================================================

學不是教你用github,用docker,用spark的地方,是教你奠定計算機科學基礎的地方,數據結構,演算法,編譯原理,操作系統,以及概率論,數理統計,數據挖掘…

大學是要學演算法、os、編譯、數據挖據、線代概統,但你告訴我哪個不是工程向的?(或者說一些二流學校的課上根本不讓你碼代碼,連工程向都做不到。)os和編譯你不需要寫lab嗎?學數據挖掘不是讀paper改進演算法而是拿他來挖實際的數據,你拿著weka去挖數據,跟擺弄spark有何兩樣?線代和概統,都叫工科數學了,還不是工程向的么,人家工程力學和金融也學這些東西,而且比我們計算機用到的數學基礎多很多,也沒有整天把科學兩個字掛在嘴邊。再有別跟我提演算法了,連培訓班出來的都知道面試前刷幾十道OJ。本科讀完這些課程連幾篇paper都沒看,就習慣拿「科學」標榜自己,要是人人都能搞科學,我家的狗也能搞,不過話說回來我實際上沒有養狗。

難道學CS不是比數學,比物理嗎?

比數學我不反對。但是你打算搞物理,去ee啊。寫什麼代碼,去焊板子唄。我沒有說焊板子沒用,但起碼你需要找對正確的方向啊。

國內大學不是技校。

本科教育也不是教你怎麼掙錢。

這跟掙不掙錢沒關係。好的工具無論對於科研,還是工程,都是事半功倍的。

大學要培養的是全方位的科學家

這個世界同樣需要工程師。如果還是這樣唯科學家獨尊,一點多樣性的選擇都沒有的話,桂枝藥丸啊。


git,svn,基本和LaTeX一樣,是工具。一般不需要專門花時間去**學習**一遍再用。而是因為有需要,所以使用,因為使用,所以查文檔,如此就熟悉了。使用git和svn,基本和熟悉一套api無區別,世界上api多的是,一般都是用到再去查文檔熟悉一下而已。假設他在學校里覺得git,svn不是那麼好理解,他如果選擇程序員這個職業,一般上班第一周就需要熟練,否則估計也做不了兩周吧。


這個不應該老師教吧,自己稍微花點時間基本操作就會了。不過不提的原因可能是蝸殼網路環境不好,經常非常卡,乾脆不用。


是的,工程水平直接影響科研效率,熟悉c++和GitHub的初中生可以完爆半數以上的985本科生。


大學教育不是職業教育。


我現在在github上也沒賬號,可是我已經主導我們公司開發兩三個產品了,從架構到設計到演算法到實現到支持我都管了

不知道github不寫開源程序又怎麼了

但是這並不代表我寫代碼寫得少

這個是關鍵

如果計算機課的概念都用試捲來考,那一百年也考不出頂尖的人才

這個才是關鍵

-----------------------

EDIT問題居然改了……

針對新問題的回答:如果可能當然應該提,然並卵……任何新技術如果你沒有仔細讀過文檔(至少要讀完introduction和基本的樣例代碼),也沒有自己試過(做一個基本的deployment然後試用基本功能),你知道了跟不知道是沒有任何區別的……

提了的最大好處大概是可以給有興趣的學生指出一個方向。但現實是,第一現在的大學教育連基礎都教不好,談行業動向還早了點;第二是國內大多數的大學生只是為了混日子的,本來他也沒興趣好好學——你跟這樣的人講任何不考的東西就是浪費時間…………


題主提到的流行技術的缺失,我覺得算是目前大學計算機專業課程的一個不足。不過,我覺得更大的問題是大部分課程沒有很好的闡述這門課程相關技術「為什麼」被提出和使用。導致的結果是學生即使認真做作業,複習,最終拿到高分,仍可能是處於「知其然,不知其所以然」的地步,挺可惜的。

每種新技術的提出,必然是由於背後某些因素在驅動,通常就是已有技術在某些場景下的不足;於是,為了克服這些不足,以少量的核心想法為支撐,一門新技術會被提出並實現。所以,要從本質上去學習一個技術或方法,我覺得最需要抓住兩點:

1. 動機:這門技術的提出是基於怎樣的背景。具體的說,它最初的提出是為了彌補哪個已有技術的哪方面不足?

2. 核心想法:為了彌補這個不足,支撐這個新技術最核心的基本想法是什麼?

當然,隨著一項技術的慢慢發展,各種各樣的新功能常常會被不斷添加。但只要理解好上面兩點,就不至於被一個技術不停加入的新功能點搞暈,而搞不清它最基本的設計出發點和核心思想,本末倒置。

以題主提到的Git為例。我覺得軟體課程如果涉及它,應該是去講清楚下面這些問題(從代碼版本管理系統的角度):

  • 代碼版本管理系統在什麼樣的場景下會對寫程序有很大的幫助?為什麼?【場景具體的話可以從參與人的角度:個人、小團隊、大企業;也可以從項目規模的角度,等等】

  • 已有的代碼版本管理系統都有那些?它們產生的順序是怎樣的?

  • 不同系統其最初被提出的原因是什麼?是否是克服了某種已有系統的不足?是怎樣克服的?

關於實踐,我個人覺得可以出一些比較簡單的小項目讓學生初步使用一下Git,但是高級的技巧命令啥的沒必要當成講課和實踐的內容。相信如果能把上面這些問題講清楚了,心裡接受了代碼管理系統優點的學生也會願意在自己的項目中去嘗試使用的。

綜上,我覺得一門好的課是通過講述「為什麼」,讓學生對一門技術或方法最初被提出的原因有所了解;再通過講述其「核心思想」,讓學生知道這個技術背後得以實現的本質;最後,若能夠給出一些有價值的參考資料,引導有興趣的學生去進一步自學,少走一些彎路,就更好了。


有人說,git加github一天就能學會,理論知識才需要成年累月的鑽研。

姑且不論一天學會的git在實際協作工程中會造成多少災難,不論會用github指的是什麼(實際上github是工作流程和社區,沒有團隊沒有參與或開源項目談不上會用github),就說理論知識好了,在軟體行業,還有比學理論知識更簡單的嗎?

C/C++/Java這些基礎編程語言,演算法,數據結構,哪門沒有公認優秀的教程書籍?跟著讀完一本書很難嗎?能用到超過3個月時間嗎?

大家都能看出來,關鍵問題不是看書,而是通過實踐驗證和掌握書里的理論,再把學到的理論運用來更好的開發項目。而這正是高校教育最弱的地方,從教材的設計到教師的素質到課程驗收的方法,經常和實際項目沒有任何關係。更別提高校使用的教材可讀性和權威性也比不上行業普遍認可的書籍(一般好書都是引進的),導致本來學生自己看能看進去的東西跟著課堂反而沒興趣了。

大部分軟體專業的學生根本就不想要做計算機科學或語言方面的研究,要能完成各種項目工程的開發,既是配合理論學習的途徑,也是個人能力成長的目標。所謂高等教育和技校的差別,你可以看做「通過教授理論來開啟學生在工程中的各種能力」和「只教授操作方法,能勝任低端職業需求,其他我們不管」的區別。

最最重要的問題是,學生的職業規劃是怎樣,學校有沒有幫助他們建立合適的職業規劃?你來告訴我,現在高校這些課程能體現出什麼樣的職業規劃?你說高等教育就該教理論,能代表那麼多入坑學生自己的目標嗎?學生花大錢讀完四年找工作還拼不過別人技校培訓一年的是什麼鬼?


國內大學不是技校。

本科教育也不是教你怎麼掙錢。

至少花里胡哨的技術我還是覺得技校出身的人學的好,但是大學尤其名校科班出身的人更牛逼,做的事情更高端。

知道github和不知道區別很大嗎?難道不是等需要用的時候就自然知道了。

大多數本科生貌似在本科對github的需求確實沒有那麼高,一大堆基礎還沒學好,搞那些花哨的東西玩毛啊!

難道學CS不是比數學,比物理嗎?知乎上經常有人這麼說啊。什麼時候變成比用不用github了?

還想問一個地方:你說很多高中生,初中生都在用,確定不是吹逼?國內的行情難道不是大多數cs學生本科前並沒有接觸過cs教育,初中高中學的也僅僅是參加個競賽而已,真正從小接受cs教育的人占的比例是相當低的,不知道你的「很多」是從哪考證來的。


GIT還要專門的課程教,大學計算機教育是智力扶貧嗎?


真的是挺失敗的...理論沒教好,工具也沒學好。


軟體工程專業本來就是奇葩的存在。大計科才是為學術界培養人才的好么。


不客氣地說一句,大多數說大學不是技校的學生都在以對付不了譚浩強的智商做著成為高德納的白日夢。


1、中國軟體工程教育並不完美,但要說失敗,是標準的扯蛋。

題主,你TOO YOUNG .

現在是信息化社會,軟體工程教育的思想、方法、手段國內的IT教育界人士一清二楚。你現在可以很容易地弄一門MOOC下來看,很容易地直接跑到MIT、卡耐基梅隆去看課程大綱、實驗,寫個郵件原版書後的答案都很快MAIL過來,你說國內軟體工程失敗?這也太扯了吧。

中國軟體工程師的編程能力還是很好,基礎還是很紮實的好不好?

中國學生在海外讀軟體小碩,和歪果仁組隊,組成往往是這樣的:

1.1 本地土著折騰需求分析,吹牛打P;

1.2 阿三寫需求文檔,衣冠楚楚做PPT進行講解;

1.3 中國人苦逼編程實現;

2、題主拿工具軟體說事,實在是太LOW了。

越是牛的學校、老師,越覺得工具軟體不應該是學習重點。比如袋鼠國,它相當重視版權,相當重視獨立思考能力,老師在上課時幾乎不在工具軟體使用上花時間,他們寧可講演算法、思路,具體怎麼實現學生自己組成團隊搞定,最後演示說明就可以了。

反正在我印象里,VISUAL STUDIO、ECLIPSE等工具軟體沒有一個老師講解超過十分鐘的,最多提一提。

國內211,985里的青年教師目前大多數是海歸博士,精英級人物。大部分教師要升級打怪,是要在國際期刊上發文章並被EI/SCI檢索的,工具軟體在這方面實在是上不了檯面,所以老師沒什麼研究的積極性。 現在部分軟體學生對編程怕,折騰工具軟體可以是一把好手,GIT這樣的工具軟體在國內講得也少,老師不屑講,感覺學生自己折騰一下就會了。

3、IT高中教育VS本科研究生教育

有高中生喜歡折騰各種工具軟體,包括GIT等,覺得自己很厲害很了不起。一進大學編譯原理、數據結構等需要抽象思考,體現思維能力的課一下來,許多人可能當時就懵了,需要花費精力慢慢跟上。如果拿起一本國際期刊,更是英文看不明白,內容更看不明白。

剛工作不會GIT被嘲笑的大學生,咬牙悶頭玩個1-2天,連搜索帶問,很快就上手使用了,基礎不一樣。

要我說,玩工具可以增加興趣,提交效率,玩玩不錯。

要是把玩工具熟練當成自己的核心競爭力,並否定大學教育,那就大錯特錯了。


我覺得在大學中更注重的是內功。

張無忌5年學成九陽神功,於是內功天下無敵

於是頃刻之間學會了乾坤大挪移

倘若他沒有原先的五年,練就乾坤大挪移第一層都至少需要7年

在我看來,你在大學學習的專業課便是內功,工具就是招式和外功。

你的內功直接決定你學習外功的速度和天花板,所以,不要急於求成。


確實是這樣,中國的不錯的大學相比國外(尤其美國)好大學在課程設置上確實有差距,國外會有一定比例工程性很強的課程,也會找業界工作經驗豐富的老師來帶課,而且給學生做的項目很多都是業內公司正在做的項目(這樣也算放水,哈哈,這樣他們的學生畢業後直接去相關公司面試會很有優勢),比如雲計算相關,所以美國的的工程系本科生出來工作綽綽有餘,中國很多學生不得不再去讀個研究生給老闆免費打個三年工。

一個是理論一個是實踐,兩者可以相互促進,缺一不可,國內很多大學可能是因為資源比較缺乏也比較懶沒有動力,沒有多少人去推動業界的工程牛人回校講工程類課程,不得不說是個遺憾。

當然很多東西都可以自學,其實你不交學費不上大學,給你課本你也可以自學,但是有老師教你並且給你答疑會讓你進步更快,大部分學生還是要畢業工作的,理論最終還是要服務於工程實踐,就我個人體會來說,國內很多高校說自己是研究型大學不教這些工程實踐的東西是很不負責任的做法~~~

我發現中國的很多老師不是他們不想教,因為很多都是一大學畢業就留在學校教書,很多好的工程實踐他們也不懂~~~~


依草民愚見,可能主要是出於以下幾個原因吧:

一,自我定位的問題。很多人,包括教育者和學者,把大學看作是最後的凈土,他們希望在大學,至少在本科期間,能夠把那些傳承千年的所謂「無用之學」傳承下去,無論這些知識和該學科的聯繫大不大,他們希望學生不要太過於功利——非本專業知識不學。他們把很大一部分精力放在了教授學生一些通識科目,並且對這些科目的學習定下了很高的要求(例如高等數學,大學物理,無論什麼工科理科專業,這些科目都得學,而且還不是水水就很好過的科目),而在有限的時間內,專業範圍內一些技能的時間就要被犧牲掉,以選修甚至不教授的形式處理。

二,水平局限的問題。當蘋果在2014年6月推出全新的編程語言swift後,Standford的白鬍子教授馬上把他們的iOS課程改用了swift語言來教學。與時俱進。這個要求看似輕鬆,實則是幾乎所有的中國高校都不能承受之重。特別是在我們計算機軟體領域,知識的更新速度讓很多傳統的教育工作者吃不消。我們這學期學習數據結構,用的書還是上世紀的課本,而且還是國產課本。。。學院里的幻燈片,在製作好後代代流傳,多年內幾乎沒有太大變化,這怎麼可能滿足學生的要求呢?而像Git這種技術,可能很多教授根本沒有聽說過,即便知道,他們也沒有動力去學習。原因請看第三點。

三,天朝的特色制度。在中國,教育界飽受行政干涉之苦。即便是在大學這種學術之地,也會有政府的滲入。學校的高層,一部分是由權威教授組成,一部分則是行政管理出身,對教育沒有深入的理解。而在每個學院內部也是,你總能發現有些學術水平不夠的人,當著什麼導員書記之類的工作,給廣大學子帶來各類醉人的決策。在我們學校,曾經有老師申請要開設包括ruby和git的課程,然而被那些所謂的領導給rejected了,原因是他們認為這些課沒什麼卵用,就連java這門早已成熟的語言,也是近年來才開設。對此我只能表示呵呵。有些人,根本就沒有水平和資格來干預教育的事情。然而在中國這個官本位的國家,當官的可以管一切,領導的權威高於一切。你又有什麼辦法呢?

匆忙中寫的,有些地方可能邏輯稍顯混亂,請諒解。


個人看法,個人經歷

/******************正文***********************/

題主所說的不是教育的失敗,是學生的失敗。學校教了os,體系結構,演算法等課程,老師每節課都準時上課,但是學生們去上了幾節(這可能只是我身邊的情況吧),然後到畢業的時候看到別人找工作20W了,30W了,帝都戶口了,就開始埋怨社會不公平,教育體制有問題,這種做法著實可笑。答主畢業也出落的比較差,但是我從不認為這是大學的責任,都在自己。

另一方面,作為一所985,211如果像git,svn這種工具你還需要老師手把手教你去使用的話那你還是去藍翔吧,那兒就針對一套工具,一個XXX管理系統,手把手的教你做,等XXX管理系統出來那一天讓你感覺你已經學會了編程,是個程序員,但事實上你連指針都不知道是啥。


先說觀點,很失敗。但題主描述並不是理由。

是否知道git,這個和教學沒多大關係,學校也沒有足夠的精力去讓學生帶領學生了解各個新鮮技術。讓學生了解git,又有人會問為什麼不少學生不了解AngularJs。

現在問題在於,學校並不能讓學生養成自我學習的興趣。授之以魚,不如授之以漁,可是我不知道這些魚是幹什麼的,更不知道這條魚好吃。所以對魚和對漁我都打不起來興趣,更別說自己去發現更好用的魚竿了。

現在教學的所有安排都傾向於完成目標,老師完成教學目標,學生完成考試。然而誰都沒在意這些意義到底是什麼。

以上不只針對軟體的課程。


經常在貼吧裡面看到有大學生說連自己本專業學的基本知識都忘的一乾二淨,更別說額外的什麼git,svn之類的學習了


高校教育和業界需要在軟體行業差距不小是真的,但大學教給我的很多學習方法和基礎知識,也是難能可貴的。

下面挑大家討論的比較歡的一點思考一下:

大學教育不是職業教育,大學不是技校。

這個觀點明面上看,很對,但脫離現實。

目前國內教育將優秀生源、教學資源等大多都聚攏在高校內,求學的學生無論他們將來人生的目的是什麼,都接受了同樣的教育,都被打造成科學家的原型。然後因為大家可以自由選擇,卻沒有選擇「大學」里「應該是什麼樣子」的「模板」,就被構建出鄙視鏈,這是其他部分回答里比較可笑的一點。

你能否認,上述形容的現象,不是普遍現實嗎?你認為,一個以工程師為理想的優秀人才,主動在國內的大環境下選擇技校深造,這種事的可能性大嗎?

要打臉嗎。

大學已經不是純粹的大學了,它被寄託了太多的東西,但自身的改變卻還沒能完全適應這些期望。


這個問題可以通過知識圖譜的分層關係來回答。中國大學軟體課程的在大綱上的設置其實沒有大家想像的問題那麼大,而在實施上的問題則比大家想像的大得多,各個大學也存在顯著的差異,由這個問題展開能夠牽扯到若干個更深層次的問題。

知識分為多個層次,從表層到深層,大概可以劃分6個層次,分別為表層感知、體驗經歷、操作方式、解決方法、邏輯理論、思想。知識的層次越深,越接近事物的本質,從知識傳授的角度,技校、駕校都是教的1-3層次的知識,而大學的目標是培養4-6層次的知識。因為任何知識都涉及到內化掌握過程,所以如果在4-6層這裡制定的目標沒有恰當地落地,實施得不好,可能教出來的就是廢物,從實用角度還不如只教1-3層知識來得實在。但單純從大綱設置及目標來說,大學側重4-6層知識培養的出發點沒有問題。顯然,培育1-3層知識的成功率比4-6層知識的成功率高很多,學挖掘機到藍翔,應該比較靠譜。標榜培養高級人才容易為人詬病,因為落地實施的時候,容易產生大量殘廢品。這從精英教育的角度,所謂一將功成萬骨枯,高端的人才培養難度極高,但不能不做,甚至以犧牲大部分受教育者的無效學習為代價,也是有其必要性的,這就像搞航空航天,火箭飛船會失事墜毀但也得做。但對於個人而言,這裡面就會有很多悲劇產生。

為什麼以培育4-6層知識的教育容易失敗?以git為例,從操作方式上看就是版本的更新、提交、分叉等指令,但從其內在邏輯和技術思想涉及到「工作量保存」、「產生即存在」、「版本控制學」、「分叉去衝突機制」等等;本來1-2-3-4-5-6是連貫沒有矛盾的,由表及裡,層層突破,但是這種連貫關係是由大量的知識顆粒堆積而成(多互聯非樹型關係),通過貫通式教學可以顯著提高成功概率。這需要一個教育落地實施的產品架構師,根據所培養人才的目標,描繪知識圖譜,並分解成具體的任務,落實到具體的師資和課時容器裡面。這也就是所謂的「學科帶頭人」。而這個角色在中國高校裡面的存在是很擰巴的,基本上沒有參與教學設計的存在感。這是教育部和高校體製造成的,具體原因另說,具體的結果就是,課時容量無法裝入足夠多的內容,師資不願意也沒辦法搞貫通式教學。知識大綱和課時的容器拆分本身沒有問題,但是沒有設計主心骨的存在,這些容器沒有串聯,都是孤島,對於學習者而言,這是很難受的,學習起來沒有成就感,挫敗感強,不易建立整體知識體系架構,喪失學習樂趣,就是這麼一個結果。

我們說「所有的學習都是自學」,包括在大學裡面上課,也是「自學」,因為上課也是自己在學,而不是給他人在學(「他學」)。大學裡面的教育只是個人自學的一部分,如何把這些孤島串接起來,是每個人進入大學都應該意識到,是自己要做的第一件要事。


那些說大學不是技校/職業教育的人,說得好像國內大學就能把軟體工程的科學理論知識和基本的素質教育做的很完善似的。

這句話雖好,但不要總拿它來當開課水平糟糕、官僚體制強於學術氛圍的擋箭牌。

再者說學會技能,能在社會上安身立命也算是大學教育的目的之一吧。


上全球最大的同性交友網站也要老師帶著?而且,在大學不就是培養學生的自學能力嗎?


私以為大學是鍛煉自學能力的最佳場所,我前前後也帶過些實習生,一開始都是除了學校學的基礎知識啥也不會那種,但是給他訂好學習計劃,偶爾指導一下,遇到問題幫著分析分析,扔那一個月基本就能上手做些事情了。相反,也帶過一個號稱有一年工作經驗從培訓學校出來的,工作一年多基本上除了在培訓班學的其他啥也沒進步,就連配給他的電腦要他自己把開發環境搭好都做不到,最奇葩的是他後來被公司辭退後有一天發給我一份c語言試題讓我幫他做一下他明天要拿去面試,我頓時被雷的里焦外嫩,我只是奉命帶過你幾天不是你的爹媽什麼都要幫你搞定好嗎?

所以每次看到有人說大學裡教的都是沒用的這種說法我就忍不住想你丫就是上培訓班的命,上啥大學啊,浪費資源。為什麼同樣是上大學別人出了學校能很好的適應社會,優秀的甚至還在學校讀書就已經在業界小有名氣了,而你就只會抱怨學校沒教你這個沒教你那個呢?學校沒教你啪啪啪你是不是一輩子打光棍了?


對的,中國大學的計算機專業,說白了就是沒卵用,我就是計算機本科生,學校講的根本就是基礎之基礎,什麼Github csdn 沒有幾個人知道,只有自己涉獵。教材用的簡單,淺顯,學時安排不合理,我們用的譚浩強C++竟然連深淺拷貝都不提!這種書都能做教材,析構函數在那本書也被一筆帶過,完全沒有結合實際開發!我們老師竟然也不讓我們寫析構,90%的同學連內存泄漏是什麼都不知道。


會用git,上過github重要還是計組,數據結構重要?


所謂的經驗,就是你不去經歷就不知道,經歷了立刻就知道,不成體系,脫離場景讓你去想卻想不起來的知識,比如編譯器環境配置。這些東西只能在實踐中自己體會,無法放在課堂里。

什麼人養什麼鳥,認為失敗的,敢不匿名嗎


本質上本科為的是培養學術人才,雖然國內教學水平確實有限,但是硬是拿職業教育的效果來要求的話,本來就是有點過分的。


這是大學啊,不會這些工具你找學校原因還是找他自己原因?


大學教育失敗?

那BAT咋喜歡985的學生不喜歡北大青鳥、山東藍翔的畢業生呢。


大學要培養的是全方位的科學家,,而不是一個月培訓達到的軟體達人,,雖然這種人在社會上就業更好ヾ( ̄▽ ̄)。。。

關於github,比如多少大學生連翻牆都不會,配置個GoAgent看把他們煩的。很難嗎?他們根本沒有興趣到github去傳代碼。。安我舍友來說,我把GoAgent詳細配置方法發完。。給他們說幾個可能犯錯的地方,然後他們默默打開LoL。根本沒興趣去碼代碼_(:з)∠)_。。。

個人感覺大學生是不怕壓迫的。要是學校強制你每天上課,每天寫代碼,估計最多嘟囔兩句就又開始繼續學習了,小學到高中都是這麼過來的,成為改變不了的習慣。。然後大學很開放,有學霸心和學霸毅力的人好好學習,其他人飄過就好。。個人感覺有點教育的失敗


我記得國內某位知名的學者說過「大學培養的是悲天憫人的情懷」。教怎麼就業,那可是職業學校的事呀,大學教有什麼勁呢?

名校的畢業生,就不應該考慮房子、薪水這類低級問題,多關注下祖國的未來,人類的未來,不是更好嗎?現在本末倒置,名校畢業生也開始追求這些低級需求,對得起國家的培養嗎?

換句話說吧,程序員這個職業在某國就是個悲劇,做這個職業的代價太大,以後這個職業門檻是高還是低不好說,但很明顯,職業化的需求還是旺盛的。

名校的計算機本科生如果在畢業時無法具備進入世界級公司的能力,那還是放棄這個職業吧,這十分對不起名校的培養。

普通學校畢業的,這個職業註定走不遠,早日轉型才是出路。


美帝cs 本科在讀

之前從community college 轉到了university

社區學院給我的感覺就是像在讀技校, 當然只是針對於專業課程而言 演算法數據結構什麼的基本上沒怎麼教, 只講了最最入門級的畫流程圖和程序語法, 入門語言用的 c, 老師講到指針以後提了一下鏈表, 之後課就結束了, 進階的課程用java講了面向對象編程概念, 之後比較有用的是講了怎樣做一個多線程程序, 雖然當時完全不明白 "多線程程序" 這個概念(之前並沒有學過計算機結構和操作系統)

然後用微軟的sql server講了資料庫(怎樣使用sql語言做query, 並沒有講不同query在讀寫同一個表單時產生的衝突問題, 外鍵的作用以及為什麼要使用外鍵, 三範式也只是簡單提了一下, 做的最多的事情就是用sql實現各種各樣奇怪的query, 做一些 nested table join.

網路編程僅僅講了前端的html,js還有css, 不過那個時候html才剛出來2年, jquery還很火, 對伺服器端完全沒有概念.

後來覺得在社區學院沒有機會接觸到任何的實際項目開發經驗, 於是轉到了一個university, 沒想到在university裡面學到了一些顛覆我認知的東西.

最先開始學了c++, 也是講到指針沒講下去了, 然後上了數據結構與演算法(在這個學校數據結構和演算法是一門課), 但是因為學校學生太渣,老師只講了基本數據結構: 鏈表, 樹 和 哈希表. 還有不同的排序演算法: 冒泡, 插入, 快速排序 和 merge sort.

比較有用的是學期的兩個大的作業, 一個讓我們生成數據然後數據可視化不同排序演算法所耗時根據數據量(n)的變化而變化的情況, 當我把圖做出來的時候發現原來計算機還真的跟數學關係很大,沒有基本的數學知識都不能一眼看出來演算法的複雜度是 O(n), O(n^2), O(2^n) 還是 O(n lnn).

另外一個大作業, 讓我們用java自己實現哈希表, 對於相同的哈希值採用鏈表的形式儲存數據, 雖然實現方法很見到但是讓我理解了為什麼哈希表的查詢時間是常數, 並且讓我意識到了"所有演算法都是用空間換時間/時間換空間" 這件事.

之後出於對演算法的興趣選修了一門研究生課, 老師很tough, 演算法進階, 從最簡單的排序講到了圖的演算法, 最小生成樹, 最短路徑還有對時間複雜度的推導, 裡面用到了高中就學過的數列通項式的推導(這邊大學裡面的初級離散和初級微積分也會講到), 然後產生了 "資料庫的表單和外鍵在磁碟上的儲存應該跟這樣的數據結構有關係" 這樣的想法, 然後在之後的大數據(也是選修課) 上了解到了mysql的外鍵確實是以 b+樹的形式儲存的, 還知道了哈希表可以以常數的時間複雜度查值, 但是並不能很快速的進行range search 也就是範圍查找

本來之前在community college上學的時候覺得老師手頭沒什麼實際項目(比如能給第三方寫個應用或者網站啥的)然後快速轉到了university, 後來發現大學裡面更加不注重學生的實際操作經驗, 最多讓本科生做一下數據分析, 樣本數據挖掘之類比偏研究向的東西.

後來才知道學校的計算機科學專業以前本來就是從數學系分家出來的, 很多老的教授都是數學系過來的教授, 理論知識特別多但是沒什麼實際開發經驗所以也教不了學生什麼. 最多最多當時上網路編程的時候用html/css/js寫了一個小遊戲, project2 可以看到代碼沒有做任何的優化, 載入的時間也非常慢, 還有一個無法終止遊戲的bug. 而且這門課還是某個研究生代課教的, 當時就發現反而這樣的學生更注重對於框架的應用(跟我們講了很多拓展知識, ajax 和 正則表達式), 各種各樣的網路開發stack和輔助工具, 接觸到node也是在那門課上.

估計隔壁UM要稍微注重實際應用, 聽說老師布置作業會讓學生嘗試用c++實現一個類似sql的資料庫, 然後用c++模擬一個簡單的邏輯電路加法器或者是乘法器的實現啥的.

感覺要學習流行技術的話還是得自己去鑽研, 計算機科學跟計算機工程或者軟體工程還是不太一樣的學科, 理論知識特別多,學完了以後也會需要自學很多各種各樣的技術棧. 印象最深的是當時去參加過兩個hackthon 一個自己學校辦的規模比較小, 當時對於網路後端都沒什麼概念, 只學了一點點的php, 嘗試結合Python做一個爬蟲未果, 然後用java寫了一個搶課的軟體結果還沒得獎.(摔! 其他人就寫了一個數據展示的東西, 就應為是一個web程序就拿了二等獎啊!) 第一次對伺服器有了認識, 導致後來跟著一幫朋友做了一個aws的伺服器還申請了一個域名來玩, 之所以現在能找到工作也是跟去參加hackthon有分不開的關係.

所以感覺大學還是學習基礎知識的地方, 要是想學流行技術的話需要自己本身對技術棧感興趣或者有這方面的需求, 周圍很多希望靠著刷題進大公司然後混吃等死的也不佔少數, 都有種劣幣驅逐良幣的感覺了.


感覺大學並不需要教Git怎麼用

但是至少要介紹這類工具,給大家指個路

其實Git我是自己自學的,目的是能在宿舍電腦編程編到一半有事出去,在外面還能拿筆記本電腦繼續寫碼


很失敗,用不用git倒是小問題。從這個小問題中反映的老師的水平太差才是大問題。大學裡混日子的老師太多了。


很多高中生初中生都在用的Git、Github難道是老師教的嗎?


因為老師不會。


王小波說過一句話,人的痛苦本質上都是對自己無能的憤怒。

你在這吐槽中國大學不教最新的工程,殊不知大神照樣可以學術工程兩手抓。即使中國大學按你的意思增加了工程課,每天都安排的滿滿的,你又會嫌每天安排的太滿,不給學生自由發展和學習的時間。如果為了增加工程課,削減了一些基礎課,比如模電,數電和大物(我想像形勢與政策,軟工經濟學,馬哲這些水課本來就沒多少人會去吧,就算去了你完全可以自己寫作業),你又會說中國大學的教育和職業學校沒區別。

所以正視現實吧,職院一樣會有大神,清北照樣有失敗人士,如果你恰巧是個失敗人士,還是安貧樂道,洗洗睡吧。


大學不是職業教育,也不是家電下鄉定向扶貧,流行技術兩三年就大洗盤,哪裡跟的上。至於具體軟體工具的使用可以在大作業等場合涉及。


俺在想,萬一真的都在git上提交作業了,然後被牆了,學生們是不是要加修翻牆技術了。。。


這些一天就能學會的所謂新技術,有必要專門開門課教嗎?

說實話,要是能把學校布置的課程學好,學別的什麼都不算難事。


git/svn只是scm工具而已,不要看得太神聖了。windows下安裝msysgit,就可提供命令行支持。常用的命令也就這麼幾個:

set PATH=%PATH%;c:xxxxGitcmd

d:

cd yyy

git add --all

git commit -m "xxx"

git push origin master

git pull -v --progress origin master

git clone git@----/xxx.git

所以你有web或ide方面的編程能力,可在你的界面生成、非同步調用批處理,編寫一個自己的web ide/本地ide。


因為有的東西不需要教


首先 基礎不牢地動山搖

其次 你想學實踐,那就去找實習。最後畢業找不到工作,自己沒一點實習經驗還怪學校?大學生又不是高中生。

最後 學校不打基礎,等到到了工作崗位,還有這麼好的機會?


我覺得好像老師也不會用這個東西吧。。。。。


如果只是想使用git的話,如果不會自學它的用法,這大學也就不用接著念了;

如果想做git相關開發的話,就老老實實學習大學裡的基礎課程吧。

好鋼要用在刀刃上,把大學這幾年寶貴的時光用在更有用的知識的學習上,而不是追趕時髦,技術上的時髦也一樣。


目前在美帝讀研,Java課是HBO的工程師來教的,不教git,但作業必須以github PR的形式教。本來覺得基礎可以上這課可以輕鬆應付。結果期中考的時候頓時跪了。在編程題和代碼閱讀題里精心考察了很多不偏但異常重要的細節,稍不注意就要掉陷阱里。每個人的作業也都會詳細評論各種best practice ,短短半個學期的課程感覺學到了非常多實用的工程技巧,比國內語言課就是語法課的設置好多了。


用git的時候碰到點問題,問教安卓的老師,他說這是啥?我說版本控制用的,他說不知道我說的啥-_-#


非計算機專業,學習git一個下午


傳統教育與社會實踐的脫鉤


大學之所以是大學 是和培訓機構有區別的


推薦閱讀:

某211大學軟體工程專業在讀女生,喜歡平面設計嚮往設計師生活狀態,是否應該考慮轉行?
有些軟體更新只是更新部分文件(資源、DLL),為什麼不採用增量更新,而要採取全量更新?在設計軟體更新的時候,增量更新和全量更新是如何考慮的?
軟體上線後出現了重大bug,要軟體測試工程師負主要責任還是要開發人員負主要責任?那麼項目經理呢?
chrome 安裝路徑不讓用戶干預,是一種什麼設計理念?
為何國內計算機研究領域在計算機應用技術領域非常火,而計算機軟體與理論很冷清?

TAG:軟體工程 | Git | 高等教育 | 如何看待評價X |