欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
學(xué)校只教Java的危險性
                                     ~.~Joel Spolsky   
     如今的孩子變懶了。
     多吃一點(diǎn)苦,又會(huì )怎么樣呢?
     我一定是變老了,才會(huì )這樣喋喋不休地這樣抱怨和感嘆“如今地孩子”,不理解為什么他們不再同意,或者說(shuō)不再能夠做艱苦地工作。
     當我還是孩子地時(shí)候,學(xué)習編程需要用到穿孔卡片(punched card)。那時(shí)可沒(méi)有任何類(lèi)似“退格”鍵(Backspace key)這樣地現代化功能,如果你出錯了,就沒(méi)有辦法更正,只好扔掉錯地卡片,從頭再來(lái)。
      回想1991年我開(kāi)始面試程序員地時(shí)候。我一般會(huì )出一些編程題,允許用任何編程語(yǔ)言解題。在99%地情況下,面試者選者C語(yǔ)言。
      如今,面試者一般會(huì )選者Java語(yǔ)言。
      說(shuō)到這里,不要誤會(huì )我的意思。作為開(kāi)發(fā)工具,Java語(yǔ)言本身并沒(méi)有什么錯。
      等一等,我要做個(gè)更正。我只是在本書(shū)特定地環(huán)境中不會(huì )提到作為一種開(kāi)發(fā)工具Java語(yǔ)言有什么不好地地方。事實(shí)上,它有許許多多不好地地方,不過(guò)這些只有另找時(shí)間來(lái)談了。
      我在這里真正想要說(shuō)的是,總體來(lái)看,Java不是一種非常難的編程語(yǔ)言,無(wú)法用來(lái)區分優(yōu)秀程序員和普通程序員。它可能很適合用來(lái)完成工作,但是這個(gè)不是我今天的主題。我甚至想說(shuō),Java語(yǔ)言不夠難其實(shí)是它的特色,不能算缺點(diǎn)。但是不管怎樣,它就是有這個(gè)問(wèn)題。
       如果我聽(tīng)上去像妄下論斷,那么我想說(shuō)一點(diǎn)兒我自己微不足道的經(jīng)歷。大學(xué)計算機系的課程歷有兩個(gè)傳統的知識點(diǎn),但許多人從來(lái)都沒(méi)有真正搞懂過(guò),那就是指針(pointer)和遞歸(recursion)。
       你進(jìn)大學(xué)后,一開(kāi)始總要上一門(mén)“數據結構”課,然后會(huì )有鏈表 散列表以及其他諸如此類(lèi)的課程。這些課會(huì )大量使用“指針”,并且經(jīng)常起到一種優(yōu)勝劣汰的作用。因為這些課程非常難,學(xué)不會(huì )就表明學(xué)生的能力不足以達到計算機科學(xué)學(xué)士學(xué)位的要求,這些學(xué)生只能選擇放棄這個(gè)專(zhuān)業(yè)。這是一件好事,因為如果你連指針都覺(jué)得很難,那么等學(xué)到后面要你證明不動(dòng)點(diǎn)定理(fixed point theory)的時(shí)候,你該怎么辦呢?
        有些孩子讀高中的時(shí)候就能用Basic語(yǔ)言在A(yíng)pple II型個(gè)人電腦上寫(xiě)漂亮的乓(Pong)游戲。等他們進(jìn)了大學(xué)都會(huì )去選修計算機科學(xué)101課程,那門(mén)課講的就是數據結構。當他們接觸到指針那些玩意以后,就一下子完全傻眼了,后面的事情你都可以想象:他們就去改學(xué)政治學(xué),因為看上去法學(xué)院是一個(gè)更好的出路。關(guān)于計算機系的淘汰率,我見(jiàn)過(guò)各式各樣的數字,通常在40%到70%之間。校方一般會(huì )覺(jué)得學(xué)生拿不到學(xué)位很可惜,我則視其為必要的篩選,淘汰那些沒(méi)有興趣編程或者沒(méi)有能力編程的人。
       對于許多計算機系的青年學(xué)生來(lái)說(shuō),另一門(mén)有難度的課程是有關(guān)函數式編程(functional programming)的,其中就包括遞歸程序設計(recursive programming)。麻省理工學(xué)院將這些課程的標準提得很高,還專(zhuān)門(mén)設立了一門(mén)必修課(6.001),它的教材(Stucture and Interpretation of Computer Programs,作者為Harold Abelson等,中文版書(shū)名為《計算機程序的構造和解釋》)被幾百所高校的計算機系采用,充當事實(shí)上的計算機科學(xué)導論課程。(你能在網(wǎng)上找到這門(mén)課程的視頻,應該看一下){http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/}。
        這些課程難得驚人。在第一堂課,你就要學(xué)完Scheme語(yǔ)言的幾乎所有內容,(Scheme語(yǔ)言是Lisp語(yǔ)言的一個(gè)變種,業(yè)內人士都稱(chēng)為L(cháng)isp的方言。于1975年誕生于麻省理工學(xué)院,以其對函數式編程的支持而聞名。)你還會(huì )遇到一個(gè)不動(dòng)點(diǎn)函數,它的參數本身就是另一個(gè)函數。我讀的這門(mén)導論課式賓夕法尼亞大學(xué)的CSE121課程,真是讀得苦不堪言。我注意到很多學(xué)生(也許式大部分的學(xué)生)都無(wú)法完成這門(mén)課。課程的內容實(shí)在太難了。我給教授寫(xiě)了一封長(cháng)長(cháng)的聲淚俱下的Email,控訴這門(mén)課不是給人學(xué)的。賓夕法尼亞大學(xué)里一定有人聽(tīng)到了我的呼聲(或者聽(tīng)到了其他抱怨者的呼聲)。因為如今這門(mén)課講授的計算機語(yǔ)言是Java。
       我現在覺(jué)得,他們還不如沒(méi)有聽(tīng)見(jiàn)呢!
       這就是爭議所在。許多年來(lái),像當年的我一樣懶惰的計算機系本科生不停地抱怨,再加上計算機業(yè)界也在抱怨畢業(yè)生不夠用,這一切終于造成了重大惡果。過(guò)去十年中,大量本來(lái)堪稱(chēng)完美地學(xué)校,都百分百轉向了Java語(yǔ)言地懷抱。這真是好的沒(méi)話(huà)說(shuō)了,那些用grep命令(UNIX/Linux環(huán)境中用于搜索或者過(guò)濾內容地命令。)過(guò)濾簡(jiǎn)歷地企業(yè)招聘主管,大概會(huì )很喜歡這樣。最妙不可言的是,Java語(yǔ)言中沒(méi)有什么太難的地方,不會(huì )真地淘汰什么人,你搞不懂指針或者遞歸頁(yè)沒(méi)關(guān)系。所以,計算機系地淘汰率就降低了,學(xué)生人數上升了,經(jīng)費預算變大了,可謂皆大歡喜。
        學(xué)習Java語(yǔ)言餓孩子是幸運地,因為當他們用到以指針為基礎的散列表時(shí),他們永遠也不會(huì )遇到古怪的“段錯誤”(segfault是segmentation fault的縮寫(xiě)){指的是軟件中的一類(lèi)特定錯誤,通常發(fā)生在程序試圖讀取不允許讀取的內存地址或者以非法方式讀取內存的時(shí)候。}他們永遠不會(huì )因為無(wú)法將數據塞進(jìn)有限的內存空間而急得發(fā)瘋,他們也永遠不用苦苦思索,為什么在一個(gè)純函數的程序中,一個(gè)變量的值一會(huì )兒保持不變,一會(huì )兒又變個(gè)不停!多么自相矛盾??!
        他們不需要怎么動(dòng)腦筋就可以在專(zhuān)業(yè)課上得到4.0的成績(jì)。
        我是不是有點(diǎn)太苛刻了?就像電視里的“四個(gè)約克郡男人”{《四個(gè)約克郡男人》(Four Yorkshiremen)是英國電視系列喜劇At last the 1948 Show中的一部,于20世紀70年代播出。內容是四個(gè)約克郡男人競相吹噓各自的童年是多么困苦。由于內容太夸張,所以顯得非??尚?。}那樣,成了老古板?就知道在這里吹噓我是多么刻苦,完成了所有那些高難度的課程?
        我再告訴你一件事。1900年的時(shí)候,拉丁語(yǔ)和希臘語(yǔ)都是大學(xué)里必修課,原因不是因為它們有什么特別作用,而是因為它們有點(diǎn)被看成是受過(guò)高等教育的人士的標志。在某種程度上,我的觀(guān)點(diǎn)同拉丁語(yǔ)支持者的觀(guān)點(diǎn)沒(méi)有不同(下面的四點(diǎn)理由都是如此):“(拉丁語(yǔ))訓練你的思維,鍛煉你的記憶。分析拉丁語(yǔ)的句法結構是思維能力的最佳練習,是真正對智力的挑戰,能夠很好地培養邏輯能力?!币陨铣鲎許cott Barker之口(http://www.promotelatin.org/whylatin.htm)。但是,今天我找不到一所大學(xué)還把拉丁語(yǔ)作為必修課。指針和遞歸不正像計算機科學(xué)中地拉丁語(yǔ)和希臘語(yǔ)嗎?
        說(shuō)到這里,我坦率地承認,當今地軟件代碼中90%都不需要使用指針。事實(shí)上,如果在正是產(chǎn)品中使用指針。這將是非常危險地。好的,這一點(diǎn)沒(méi)有異議。與此同時(shí),函數式編程在實(shí)際開(kāi)發(fā)中用到地也不多。這一點(diǎn)我也同意。
       但是,對于某些最激動(dòng)人心地編程任務(wù)來(lái)說(shuō),指針仍然是非常重要地。比如說(shuō),如果不用指針,你根本沒(méi)辦法開(kāi)發(fā)Linux地內核。如果你不是真正地理解了指針,你連一行Linux的代碼頁(yè)看不懂,說(shuō)實(shí)話(huà),任何操作系統的代碼你都看不懂。
      如果你不懂函數式編程,你就無(wú)法創(chuàng )造出MapReduce(是一種由Goolge引入使用的軟件框架,用于支持計算機集群環(huán)境下海量數據PB級別的并行計算。),正是這種算法使得Google的可擴展性(scalable)達到如此巨大的規模。術(shù)語(yǔ)“Map”(映射)和“Reduce”(化簡(jiǎn))分別來(lái)自L(fǎng)isp語(yǔ)言和函數式編程?;叵肫饋?lái),在類(lèi)似6.001這樣的編程課程中,都提到純粹的函數式編程沒(méi)有副作用,因此可以直接用于并行計算。任何人只要還記得這些內容,那么MapReduce對他來(lái)說(shuō)就是顯而易見(jiàn)的。發(fā)明MapReduce的公司是谷歌,而不是微軟,這個(gè)簡(jiǎn)單的事實(shí)說(shuō)出了原因,為什么微軟至今還在追趕,還在試圖提供最基本的搜索服務(wù),而谷歌已經(jīng)轉向了下一階段,開(kāi)發(fā)Skynet,我的意思是,開(kāi)發(fā)世界上最大的并行式超級計算機。我覺(jué)得,微軟并沒(méi)有完全明白在這波競爭中它落后了多遠。
        除了上面那些直接就能看到的重要性,指針和遞歸的真正價(jià)值在于那種你在學(xué)習它們的過(guò)程中所得到的思維深度,以及你因為害怕在這些課程中被淘汰所產(chǎn)生的心理抗壓能力,它們都是在建造大型系統的過(guò)程中必不可少的。指針和遞歸要求一定水平的推理能力 抽象思考能力,以及最重要的,在若干個(gè)不同的抽象層次上同時(shí)審視同一個(gè)問(wèn)題的能力。因此,是否真正理解指針和遞歸與是否是一個(gè)優(yōu)秀程序員直接相關(guān)。
       如果計算機系的課程都與Java語(yǔ)言有關(guān),那么對于那些在智力上無(wú)法應付復雜概念的學(xué)生而言,就沒(méi)有東西可以真地淘汰他們。作為一個(gè)雇主,我發(fā)現那些100%Java教學(xué)的計算機系已經(jīng)培養出了相當一大批畢業(yè)生,這些學(xué)生只能勉強完成難度日益降低的課程作業(yè),只會(huì )用Java語(yǔ)言編寫(xiě)簡(jiǎn)單的記帳程序,如果你讓他們編寫(xiě)一個(gè)更難的東西,他們就束手無(wú)策了。他們的智力不足以成為程序員。這些學(xué)生永遠頁(yè)通不過(guò)麻省理工學(xué)院的6.001課程,或者耶魯大學(xué)的CS 323課程。坦率地說(shuō),為什么在一個(gè)雇主的心目中,麻省理工學(xué)院或者耶魯大學(xué)計算機系的學(xué)位的份量要重于杜克大學(xué)的,這就是原因之一。因為杜克大學(xué)最近已經(jīng)全部轉為用Java語(yǔ)言教學(xué)。賓夕法尼亞大學(xué)的情況也很類(lèi)似,當初CSE 121課程中的Scheme語(yǔ)言和ML語(yǔ)言幾乎將我和我的同學(xué)折磨致死,如今已經(jīng)全部被Java語(yǔ)言代替。我的意思不是說(shuō)我不想雇用來(lái)自杜克大學(xué)或者賓夕法尼亞大學(xué)的聰明學(xué)生,我真地愿意雇用他們,只是對于我來(lái)說(shuō),確定他們是否真地聰明如今變得難多了。以前,我能夠分辨出誰(shuí)是聰明學(xué)生,因為他們可以在一分鐘內看懂一個(gè)遞歸算法,或者可以迅速在計算機上實(shí)現一個(gè)線(xiàn)性鏈表操作函數,所用的時(shí)間同在黑板上寫(xiě)一遍這個(gè)函數差不多。但是對于在學(xué)校只學(xué)Java語(yǔ)言的畢業(yè)生,看著(zhù)他們面對上述問(wèn)題苦苦思索卻做不出來(lái)的樣子,我分辨不出這到底是因為學(xué)校里沒(méi)教,還是因為他們不具備編寫(xiě)優(yōu)秀軟件的素質(zhì)。Paul Graham(Steve Soong(宋易峰)強烈建議讀一讀他的一本叫《黑客和畫(huà)家》的書(shū),很不錯喲?。⑦@一類(lèi)程序員稱(chēng)為“Blub程序員”{Blub程序員(Blub programmers)指的是那些企圖用一種語(yǔ)言解決所有問(wèn)題的程序員。Blub是Paul Graham假設的一種高級編程語(yǔ)言}[www.pualgraham.com/avg.htm]
        大學(xué)里只教Java語(yǔ)言,無(wú)法淘汰那些永遠也成不了優(yōu)秀程序員的學(xué)生,這已經(jīng)是很糟糕的事情了。但是,學(xué)??梢詿o(wú)可厚非地辯解,這不是校方地錯。整個(gè)軟件行業(yè),或者說(shuō)至少是其中那些用grep命令過(guò)濾簡(jiǎn)歷地招聘經(jīng)理,確實(shí)是在一直叫嚷,要求學(xué)校使用Java語(yǔ)言教學(xué)。
        但是,即使如此,學(xué)校地教學(xué)也還是失敗地,因為學(xué)校沒(méi)有成功訓練好學(xué)生地頭腦,沒(méi)有使他們變得足夠熟練 敏捷 靈活,能夠做出高質(zhì)量地軟件設計。(我不是指面向對象式的“設計”,那種編程只不過(guò)式要求你花上無(wú)數個(gè)小時(shí)重寫(xiě)你的代碼,使它們能夠滿(mǎn)足面向對象編程的等級制繼承式結構,或者說(shuō)要求你思考到對象之間的式“has-a”從屬關(guān)系,還是“is-a”繼承關(guān)系,這種“偽命題”將你搞得煩躁不安。)你需要的式那種能夠在多個(gè)抽象層次上同時(shí)思考問(wèn)題的訓練。這種思維能力正是設計出優(yōu)秀軟件架構所必需的。
       你也許想知道,在教學(xué)中OOP(Obiect-Oriented Programming,面向對象編程)是否是指針和遞歸的優(yōu)質(zhì)替代品,是不是也能起到淘汰作用。簡(jiǎn)單回答是“不”。我在這里不討論OOP的優(yōu)點(diǎn),我只指出OOP不夠難,無(wú)法淘汰平庸的程序員。大多數時(shí)候,OOP教學(xué)的主要內容就是記住一堆專(zhuān)有名詞,比如“封裝”(encapsulation)和“繼承”(inheritance),然后在做一堆多選題小測驗,考你是不是明白“多態(tài)”(polymorphism)和“重載”(overloading)的區別。這同歷史課上要求你記住重要的日期和人名的難度差不多。OOP不構成堆智力的太大挑戰,嚇不跑一年級新生。據說(shuō),如果你沒(méi)學(xué)好OOP,你的程序依然可以運行,只是維護起來(lái)有點(diǎn)難。但是如果你沒(méi)學(xué)好指針,然后你只好停下來(lái),深呼一口,真正開(kāi)始努力在兩個(gè)不同的抽象層次上同時(shí)思考你的程序是如何運行的。
       順便說(shuō)一句,我有充分理由在這里說(shuō),那些使用grep命令過(guò)濾簡(jiǎn)歷的招聘經(jīng)理真是荒謬可笑。我從來(lái)沒(méi)有見(jiàn)過(guò)哪個(gè)能用Scheme語(yǔ)言 Haskell語(yǔ)言和C語(yǔ)言中的指針編程的人,竟然不會(huì )在兩天里面學(xué)會(huì )Java語(yǔ)言,并且寫(xiě)出的Java語(yǔ)言的質(zhì)量竟然不能勝過(guò)那些有5年Java編程經(jīng)驗的人士。不過(guò),是無(wú)法指望人力資源部里那些平庸的懶漢聽(tīng)進(jìn)去這些話(huà)的。
       再說(shuō),計算機系承擔的發(fā)揚光大計算機科學(xué)餓使命該怎么辦呢?計算機系畢竟不是職業(yè)學(xué)校??!訓練學(xué)生如何在這個(gè)行業(yè)里工作不應該是計算機系的任務(wù),這應該是社區高校和政府就業(yè)培訓計劃的任務(wù),那些地方會(huì )教給你工作技能。計算機系給予學(xué)生的理應是他們日后生活所需要的基礎知識,而不是為學(xué)生第一周上班做準備。對不對?
       還有,計算機科學(xué)是由證明(遞歸)、算法(遞歸)、語(yǔ)言(入演算)、操作系統(指針)、編譯器(入演算)所組成的,所以說(shuō)那些不教C語(yǔ)言 、不教Scheme語(yǔ)言 、只教Java語(yǔ)言的學(xué)校實(shí)際上根本不是在教授計算機科學(xué)。雖然對于真實(shí)世界來(lái)說(shuō),有些概念可能毫無(wú)用處,比如函數的科里化(function currying指的是一種多元函數的消元技巧,將其變?yōu)橐幌盗兄挥幸辉逆準胶瘮?。它最早是由美國數學(xué)家哈斯格爾 科里 Haskell Curry 提出的,因此而得名。)但是這些知識顯然是進(jìn)入計算機科學(xué)研究生院的前提。我不明白,計算機系課程設置委員會(huì )中的教授為什么會(huì )同意將課程的難度下降到如此低的地步,以至于他們既無(wú)法培養出合格的程序員,甚至無(wú)法培養出合格的能夠得到哲學(xué)博士學(xué)位 進(jìn)而能夠申請教職 與他們競爭工作崗位餓研究員。噢,且慢,我說(shuō)錯了。也許我明白原因了。
        實(shí)際上,如果你回顧和學(xué)術(shù)界在“Java大遷移(Great Java Shift)中的爭論,你會(huì )注意到,最大的議題是Java語(yǔ)言是否還不夠簡(jiǎn)單,不適合作為一種教學(xué)語(yǔ)言。
       我的老天啊,我心里說(shuō),他們還在設法讓課程變得更簡(jiǎn)單。為什么不干脆用匙子把所有東西一勺勺都喂到學(xué)生嘴里呢?讓我們再請助教幫他們接管考試,這樣一來(lái)就沒(méi)有會(huì )該學(xué)“美國研究”了(是對美國社會(huì )的經(jīng)濟 歷史 文化等各個(gè)方面進(jìn)行研究的一門(mén)學(xué)科。這里指的是,計算機系學(xué)生不會(huì )因為課程太難被淘汰,所以就不用改學(xué)相對容易的“美國研究”)。如果課程被精心設計,使得所有內容都比原有內容更容易,那么怎么可能期望任何人從這個(gè)地方學(xué)到任何東西呢?看上去似乎有一個(gè)工作小組(Java task force)正在開(kāi)展工作,創(chuàng )造出一個(gè)簡(jiǎn)化的文檔,小心地不讓學(xué)生纖弱的思想接觸到任何EJB/J2EE的臟東西。這樣一來(lái),學(xué)生的小腦袋就不會(huì )因為遇到有點(diǎn)難度的課程而感到煩惱了,除非那門(mén)課里只要求做一些空前簡(jiǎn)單的計算機習題。
       計算機系如此積極地降低課程難度,有一個(gè)最善意地解釋?zhuān)蔷褪枪澥〕龈嗟貢r(shí)間去教授真正屬于計算機科學(xué)地概念。但是,前提是不能花費整整兩節課向學(xué)生講解如Java語(yǔ)言中int和Integer有何區別。好的,如果真是這樣,課程6.001就是你地完美選擇。你可以先講Scheme語(yǔ)言,這種教學(xué)語(yǔ)言簡(jiǎn)單到聰明學(xué)生大約只用10分鐘就能全部學(xué)會(huì )地程度。然后,你將這個(gè)學(xué)期剩下的時(shí)間都用來(lái)講解不動(dòng)點(diǎn)。
       誒。
       說(shuō)了半天,我還是在說(shuō)要學(xué)1和0.
     (你是1?真幸運??!我們那時(shí)所有人得到的都是0。) 
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
JAVA語(yǔ)言學(xué)校的危險性
南京大學(xué)李樾副教授:淺談國內高校編程語(yǔ)言教育
為什么說(shuō)C 從入門(mén)到入墳?
程序員面試寶典
掌握 Java 泛型類(lèi)型(三)
王垠:如何掌握所有的程序語(yǔ)言
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久