Python 在編程語言中是什麼地位?為什麼很多大學不教 Python?
MIT使用python作為導論課的教學語言。
首先,大學教材更新速度慢是真的,只要在大學圖書館裡看看Access和VB書的數量就知道了。當然,有些人說大學學的是基本能力,但我覺得這個解釋很勉強,因為學不學基本能力跟學不學新東西根本不是矛盾的,新東西就不能學基本能力了嗎?
然後,自學Python確實是完全沒問題的,但我認為除了正兒八經的CS你好好學學C/C++啥的,別的都可以用Python來入門。現在大學非CS專業的情況是什麼樣的呢?一門課下來,70%左右的人不知道編程為何物,甚至對此產生了恐懼,還不如學Python快快樂樂地了解基本理論和方法。
最後,對於非碼農而言,Python是日常真正能用的工具,用Python代替VBA操作Excel(需要特殊插件)、用Python寫個小爬蟲從網上採集一些數據都是非常給力的。大學也不教PHP的,大學能教會怎麼學習就不錯了,Python真的很簡單,有學習能力的學生很快就可以掌握基礎
真的不明白為什麼樓上要糾結大學入門課程教什麼語言,對於入門來講,語言知識一個橋樑,更多的是理解理念和,樓主所為的MIT拿python作為導論的語言,對於零基礎或者沒開發經驗人來講,我拿Ruby python,C++ 甚至java C #作為導論的語言其實沒什麼區別,導論課的核心在於導論,在於給沒基礎的人講什麼是數據結構,什麼是演算法,什麼是基本的數據格式,內存,線程這些東西一類的,這門課就不是在教什麼語法,更不可能是框架什麼的東西,說白了就不是在教開發。至於開發,我認為有底子以後看個人興趣自學了,有了底子上手什麼語言都快。高等教育是一個引導,而不是說教你什麼學什麼, 如果說就為了學個語言,用會某個語言,不深入理解然後去做點東西就滿足了,那還不如去北大青鳥上個JAVA python速成班來得快。說到底,高等教育不是功利性的教育,但很多學生沒有理解到罷了。
我覺得樓上各位說的挺好,但都是「作為資深碼農,如果我去教大學生,為什麼我會教c」。遠遠高估了大部分大學教授和教研組的責任心和水平,其實還有別的原因
實際上作為本科生的老師,他們的實踐水平是遠遠不能和一線人員比的,對於大部分c語言老師來說,會python的大概不多,不用說主要精力放在教學評估上的老師,很多老開發者都還在執著於mfc。
更重要的是,更換一個教學語言對於大學來說,太麻煩了,他們現在還在用vc6.0教學。(當然,教那點東西它確實夠用了)英國王爾德說過
真正有價值的東西 學校里沒人教你(意譯)- 原文:Education is an admirable thing. But it is well to remember from time to time that nothing that is worth knowing can be taught.
教育事業是值得欽佩的,但請不時想起:並沒有什麼值得知道的事是能夠被傳授的。
學校教你「應該」知道的東西,你自己可以選擇用著順手的。學校沒教的也不是不讓你用呀,就算學校教python也不一定能讓所有人高興,有人就是喜歡用C++。python確實易用,但對於操作系統,編譯理論 等等偏系統方向的學生來說,學C依然是最佳的選擇;當然,對於機器學習,數據挖掘以及信息系統等偏向於應用方向的學生來說,python可能更舒服一點,C太原始了。但是計算機系的本科生又不會直接分流成系統和應用方向。python等「高級語言」的崛起代表著應用的崛起。
如果你計劃開發軟體、硬體、甚至操作系統,那麼你或許想學習C語言。C語言剛出現的時候是一種偉大的語言,因為很多其他的語言都直接或間接來源於C語言,其中包括 Java、JavaScript、C++、Python、PHP 和 Per。
編程初學者應該先寫 c 還是Java還是Python?C語言。java我建議做第二個學習的語言,java是面向對象的語言,更貼近人的思考,很多底層幫你封裝好了,你不用太關注底層實現。
不同語言門檻不同,Python& python的靈魂不在於語言本身,而在於其諸多優秀的庫。Python有能運行的偽代碼之稱,是最適合初學者學習的語言,是程序員的啟蒙語言。當初Guido設計Python的時候,就是為了要設計一種簡單易用,能適合教學的編程語言。所以Python的語法簡潔清晰,並且在語法中強制性地植入了編程風格。 還有一些其他的好評如下:
接近英語的簡單語法;
開發環境簡單,能打字就能寫代碼;眾多的第三方庫;解釋執行,不需要編譯;跨平台,方便移植;
python是現代語言,具有足夠的抽象性,適合教學一些純數據結構、演算法的抽象知識。此外,Python的許多思想都能適用於其他主流的編程語言。因此學通Python,有助於你掌握Java,C#, C++, C等主流的工業編程語言。
結論是:作為首選語言沒有問題,其他語言還得學。
沒有最好的語言,只有最合適的語言。
沒有糟糕的語言,只有糟糕的程序員。
沒有一種語言是萬能的,只會一種語言是萬萬不能的。
用什麼語言不重要,最重要的是效率:開發效率和執行效率。
不過最後,我想告訴大家。第一門編程語言的學習過程永遠是痛苦的。選擇Python儘管可以讓這個過程變得輕鬆一些,但是你仍然得克服一系列困難。
做為一個程序員,是應該去選取不同思路的語言去學習的,而且當然要選擇最有代表性的語言,在編程的世界裡,主流的思路其實就兩種,一是結構化編程,一是函數化編程,面向對象只是結構化編程進化的一個階段而已,其他各種各樣的思路大多數是這兩個的分支。
對於非程序員來說,碼代碼是用來解決問題的,不用糾結底層的東西,能短平快解決問題才是最關鍵。
三、現在都有哪些人在學Python,為什麼學?
目前在很多行業中都在越來越多的應用Python,這也是很多行業學習Python的原因,Python主要的應用領域有哪些呢?我們來看一看:
目前來學的人群分為以下幾類:
第一類:入行編程新手:大學剛畢業或者其他行業轉崗,想從事編程開發的工作,目前認為Python比較火,想入行;
第二類:Linux系統運維人員:Linux運維以繁雜著稱,對人員系統掌握知識的能力要求非常高,那麼也就需要一個編程語言能解決自動化的問題,Python開發運維工作是首選,Python運維工資的薪資普遍比Linux運維人員的工資高。
第三類:做數據分析或者人工智慧:不管是常見的大數據分析或者一般的金融分析、科學分析都比較大程度的應用了數據分析,人工智慧的一些常見應用也使用了Python的一些技術。
第四類:在職程序員轉Python開發:平常只關注div+css這些頁面技術,很多時候其實需要與後端開發人員進行交互的,現在有很多Java程序在轉到Python語言,他們都被Python代碼的優美和開發效率所折服
第五類:其他:一些工程師以前在做很多SEO優化的時候,苦於不會編程,一些程序上面的問題,得不到解決,只能做做簡單的頁面優化。 現在學會Python之後,你和我一樣都可以編寫一些查詢收錄,排名,自動生成網路地圖的程序,解決棘手的SEO問題
最後至於大學不教授Python的原因:老師一周上2天班,其他時間都忙自己的事,你說怎麼更新新技術?
推薦你看看:湯哥在北京:python教程,pythonh學習線路圖?
剛畢業,正好我接觸過各類背景的同學,從C/C++/Pascal/Java/Python入門的都有,講講我的感受,求輕拍
先講個題外話:不要太低估國內大學計算機系的水平,國內比較好的大學開設的課程,其實都很緊跟國外的教學趨勢的,前些年的Perl,最近的Python和ARM、hadoop,幾乎都會有對應的課程。所以也可以不用那麼憤青啦~
其實交大從去年開始電類專業的程序設計思想與方法就從C++轉向了Python,用的教材是Core Python Programming. 基本上現在的格局是:
電類專業:一學期Python + 一學期C++非電類專業: 一學期C++?然後後面要用什麼語言就自己去學吧,Java也好Verilog也好Haskell也好學校都不教了。好處呢就是一開始Python的確比C++好上手啊。
壞處是:Python是一門好語言,但它不適合教學,特別是不適合電類的教學。結果是學弟學妹們並不是特別適應:一方面,國內的硬環境,是除了計算機和生物類,幾乎沒有人大規模使用Python——對於很多行業內仍然在用VC6/MFC寫界面的電氣類學生,你教他Python,他還是要再回頭學C++。更進一步說,由於C++的教學時間縮短,而人們又離不開C/C++——起碼操作系統課要用,寫ARM程序要用,所以反而使得新生沒有辦法專心掌握一種語言。
另一方面,Python並不適合入門:
Python之於C++,並不像是Lisp之於C,是計算模型的不同導致的簡化。相反,Python和C++的計算模型都是命令式為主的,而Python的美好,在於自然而隱藏了很多細節,像自省啊詞典啊動態化啊。但是Python本身的計算模型是比較雜糅的——有一點過程、有一點對象、有一點函數式。這就要求編程者要選用合適的方式來實現自己的方法——如@莫宇誠 所述,這是很實用主義也很精彩的設計。但是命令式的計算模型和強類型系統決定了,這部分的複雜度並沒有消失,只是隱藏了起來。理解這些複雜度,是能夠順暢使用Python的前提:我正在操作的是什麼類型?這個for語法隱式的使用了哪個對象的迭代方法?方法有沒有默認參數?
而偏偏,新生是很難理解這些的——在C語言里明明白白的寫出來,都有很多人頭痛,不要說藏起來隱式調用。就好像C++里的流,不深刻理解模板重載和迭代器,根本不會理解這東西「為什麼能這麼寫」。
所以學Python和學C++的時候,都會有很多學弟妹驚訝的問——呀,為什麼這個地方能這麼寫,不能那麼寫?我真的很難解釋——因為這些問題,往往牽扯到類型啊對象啊繼承啊——恰恰是語言的簡單背後藏著的那些東西。
=========================
所以對於新生來說,我覺得入門的語言要的是簡單:這種簡單,不是指代碼量上的短,而是指思維、語法和計算模型上的簡單:讓新手可以集中注意力理解少數幾個概念,不需要糾結於很多慣用法啊隱藏的細節啊:那是給熟手加快進度用的,不是給新人學慣用的。所以我覺得Python/C++/Java這種大型語言,都不適合入門——太複雜,太難掌握,最後只能學個皮毛,還不如教一種學生能吃透的語言,以後觸類旁通。C/Scheme,在我看來是很好的語言:它還算好用,而且模型簡單,學生容易徹底理解。日後比照著學習其他更加抽象化的語言,也更加容易。
至於C的缺點,是可以通過教學來改正的——教育學生合理的抽象,適度的隱藏,學會使用迭代和遞歸。而我覺得這,才是程序設計導論課區別於C++語法課的關鍵所在。但是很遺憾,不管使用什麼語言,能講到這個層次的老師,都太少了。(學生也不愛聽,他們只關心怎麼能做大作業,實現更多的功能)
=====================
其實MIT自己也認為現在學生用Lisp入門不太好,這裡有一篇文章引用Sussman的話解釋了原因。
Why MIT now uses python instead of scheme for its undergraduate CS program
總之,語言教學這件事,重點不是要趕時髦,而是要接地氣。根據樓主的問題, 感覺所有的學校都應該教Python才是正確的嗎?
國內的學校你就不用想了。 國外的我知道有學校在教Ruby, 肯定也有學校在教Python。
話說,為啥@王垠 把他的答案刪掉了呢 ? 不說的挺好的嗎CS的本科,做過學生,當過老師。會用python,講過C/C++
首先,表明態度。
1、非CS和EE相關專業,不建議教C/C++,教python或許更合適。 這些同學只需建立程序邏輯就好,更應面向解決問題,他們使用編程語言的根本出發點和實際需求是功利的(非貶義),那個語言能夠更快更容易的解決實際問題,就更好。對非專業從業者,編程語言是橋樑,一端連接著底層實現,一端連接著實際問題。語言越靠近實際問題越好。2、CS和EE相關專業,需分情況討論。
2.1 語言課,不建議python CS和EE專業的語言課體系,側重點有兩個:計算機系統運行機制、程序設計范型。這是職業程序員的基本素養,也是大學基礎技能教育所決定的,和高數、大物、離散、概率一樣,你工作時用不上,不代表所有人工作都用不上。打基礎、寬出口,是本科教育的目的。ASM是面向系統底層的語言,最靠近系統運行機制,必備不可替代。范型偏向面向過程,但受到系統機制限制,重點在於寄存器和定址。
C,個人認為必備。相對於ASM,更靠近自然語言表達,但指針仍和系統機制密切相關。范型是面向過程,重點在邏輯描述和表達。C++,個人認為必備。在靠近自然語言的基礎外,核心是OO范型。JAVA,個人認為不應該作為語言課。因為JAVA更側重於OO范型,但離系統底層實現遠了點。兩個培養目標一輕一重。 C#/Pyhon等類似JAVA。 對於專業從業者,編程語言是橋樑,一端列接著底層運行機制,一端連接著范型。 所以,語言課體系,講的是體系,而不是語言本身。專業程序員眼裡,C和Basic都是一回事,只是關鍵字不同,C++/JAVA/C#/Python也沒有本質區別,只是關鍵字不同!語言不等於IDE!語言不等於庫多少!語言更不等於能不能快速解決問題! 所教語言的流行程度,是考慮因素之一,但絕不是第一考慮因素。2.2數據結構、演算法等專業基礎課,沒有建議,用什麼都行。
數據結構和演算法的重點在於語言無關性,就算有STL,你也不會用的,是不是
2.3專業課,基本上什麼語言都可以。
只是覺得windows程序設計之類的,只要能調用API就可以,編程簡單越好。Linux啥的,C/C++類的都行。2.4方向課,該Python和JAVA這類語言出場了。
方向課才是真正面向你畢業工作的,看的方向了,那個最容易解決問題就教那個,那個當時市場佔有率高就教那個。2.5小結
討論該不該教python,應該限定個範圍,個人認為,不適合作為語言課體系中的一門,但不排斥在其他環節講授。綜上,擴展談談我作為當過學生的老師,如何看待大學教學體系的課程設置:堅持基本技能教育,兼顧市場需求。(1)堅持基本技能教育,是大學教育的基本出發點。大學教的是基礎技能,學的是基本學習能力。因為沒幾個人使用彙編工作,而不教面向底層的語言,是教的失職;只靠教才能會python,是學的失敗。(2)兼顧市場需求,是對不再繼續深造的同學負責。不是每個人上大學都是為了做基礎理論研究和技術突破,不是每個人上大學都是為了讀博士進而突破人類知識的邊界。一味強調基礎技能教育,不開新語言、新架構、新技術的方向課(注意,僅僅是方向課),是對以增加就業砝碼同學迫切需求的漠視!大學學習的基本設計思想,老師教授一兩張語言即可,關鍵自己得去鑽研,看自己喜歡什麼就去多看多練習多鑽研才可以
首先我是來看憤青的。其次作為一個大三的學生,發表一下自己的看法。本人電子專業的,我們專業只教c和c++,樓上有個人的觀點比較好,學好c然後彙編對計算機底層的理解比較好,而且一旦入門一個語言之後再學其他語言不是一件困難的事,至今我覺得沒有比c++更難學的語言,都是大部頭的厚書。有些學校已經開始教授python了,我見過的會python的人基本都是自學的。對於大學出來的有功底的人自學python完全沒有問題的。我認識的厲害的甚至高中就開始玩emacs,lisp的。所以我覺得真正熱愛技術的極客沒有教出來的,都是靠自己折騰。
我們學校的老師,每年的備課都是一樣,估計如果我兒子還是那個老師教,估計教案也是一樣的,你就知道為啥學校不教python了。
想想大家為什麼用 Python。從語言上說,Python 並不夠 clean。目前還有 2.x vs. 3.x 的分歧。從工程上說,Python 的集成性並不比 C 好,因為業界有很多庫還只是 C 介面,用 Python 必須有一些封裝。大家用 Python 是因為它的資源能夠幫助很多人解決問題。
但是這個「Python 是因為它的資源能夠幫助很多人解決問題」的問題不是大學生面臨的問題。大學生面臨的更多是 big, clean problem。這種問題需要邏輯純潔的方案,或者完全形成標準的方案。比如學語言用 C,學計算用 Lisp,學 kernel 用 Linux, BSD 都是沒問題。但是 Python 屬於戰場專業工具箱,應該等等。Python適合初學者,不過之後學習C還是必須的,有助於了解計算機的底層實現。
戰場工具箱