今天偶然間看到這篇文章覺(jué)得作者寫的非常中肯,現(xiàn)在IT行業(yè)工資高,一批一批的人都來(lái)學(xué),不管有沒(méi)有天賦,也不管基礎(chǔ)怎么樣,一股腦進(jìn)來(lái),結(jié)果呢,大家都懂。分享給大家。
這里還是要推薦下我自己建的前端學(xué)習(xí)群:593757064,不說(shuō)別的,進(jìn)來(lái)你必須是愛(ài)好前端的,營(yíng)造一個(gè)好的交流環(huán)境很重要,不管你是小白還是大牛,小編我都挺歡迎,小白嘛,主動(dòng)點(diǎn),勤快點(diǎn),多問(wèn)點(diǎn)問(wèn)題也就學(xué)好了,就怕你自己死敲代碼啊,不定期分享干貨,歡迎初學(xué)和進(jìn)階中的小伙伴。
寫這篇文章之前我的顧慮非常多,因?yàn)樗艿米锶硕覅s撈不到一點(diǎn)好處。但反過(guò)來(lái)說(shuō)我寫這篇文章并不是針對(duì)說(shuō)「達(dá)○」這樣的培訓(xùn)機(jī)構(gòu),或者「李○○」老師的一些言論,也不是針對(duì)說(shuō) Ruby China 上最新一些類似的培訓(xùn)帖。我是說(shuō)在座的,都是○○。
我要針對(duì)的甚至都不是培訓(xùn)行業(yè),反過(guò)來(lái),我認(rèn)為對(duì)于整個(gè)軟件行業(yè)而言,培訓(xùn)整件事情就不靠譜。這不是說(shuō)我心血來(lái)潮,我想諸位的公司只要不是沙丁魚罐頭類型的外包公司,對(duì)于培訓(xùn)這件事本身都多少抵觸。至于高端的培訓(xùn)班,我想你們也有自己的看法,只是有時(shí)候不方便說(shuō)出來(lái)。但我最近了解了一些底層勞苦人民悲慘的事實(shí),使我實(shí)在看不下去,只能出來(lái)批判一番了。
我們先拋開培訓(xùn)班的問(wèn)題,我們先來(lái)討論一個(gè)經(jīng)典的面試題,它叫做「FizzBuzz」。輸出數(shù)字 1-100,逢 3 的整倍數(shù)輸出 Fizz,逢 5 的整倍數(shù)輸出 Buzz,又是 3 又是 5 的整倍數(shù)輸出 FizzBuzz。那么稍有常識(shí)的人都知道,無(wú)論你學(xué)習(xí)什么語(yǔ)言,學(xué)的水平有多糟糕,這道題都很容易實(shí)現(xiàn)。但我們來(lái)看一下最常見的一些錯(cuò)誤是怎么出現(xiàn)的:
很多培訓(xùn)班會(huì)告訴你這些算法的基礎(chǔ)知識(shí)毫不重要,但事實(shí)上嚴(yán)格來(lái)說(shuō)這都算不上是一道算法題,這沒(méi)有任何已有的算法模板來(lái)解決,這只是一個(gè)最簡(jiǎn)單的循環(huán)和條件分支語(yǔ)句,有超過(guò) 9 成的開發(fā)者沒(méi)法正確寫對(duì)這道題。我認(rèn)為,這些人壓根就不該也不適合來(lái)寫代碼。
令人驚訝的是,這些人并非不能寫業(yè)務(wù)邏輯,比如說(shuō)讓他們寫個(gè) CRUD,他們甚至不比你寫得慢。但它們的問(wèn)題在于連理解文字、理解需求的基本能力都不具備。當(dāng)你說(shuō)「整倍數(shù)」的時(shí)候他們無(wú)法想到用余數(shù),當(dāng)你先提到 3 和 5 的整倍數(shù)時(shí),他們無(wú)法想到 15 應(yīng)該放在他們兩個(gè)之前判斷。
對(duì)程序最基本的邏輯的考察沒(méi)有通過(guò),并不代表他們無(wú)法進(jìn)行日常的開發(fā),就好像數(shù)學(xué)應(yīng)用題不會(huì)做也不一定會(huì)掛科一樣。他們通常會(huì)寫出非常糟糕的抽象,常見的例如在一個(gè)社交網(wǎng)絡(luò)里給每種類型的 UGC 內(nèi)容單獨(dú)建表,然后再為每種類型單獨(dú)建回復(fù)和點(diǎn)贊的表;將用戶重置密碼和管理員重置密碼完全拆成兩個(gè)方法來(lái)實(shí)現(xiàn);無(wú)法正確判斷自己方法在邊界條件下的情況等等。
培訓(xùn)班對(duì)于培訓(xùn)這樣的程序員來(lái)說(shuō)是容易的,而且市場(chǎng)上需要這些程序員。各位可能很難相信,今天的互聯(lián)網(wǎng)應(yīng)用大多都沒(méi)有什么魯棒性可言,市面上至少一半的產(chǎn)品都存在高危的漏洞只不過(guò)是沒(méi)有人想要攻擊他們而已。市場(chǎng)需要這些能用的垃圾來(lái)建一個(gè)原型、騙一筆投資或者交付一筆外包。
培訓(xùn)班能教你的歸根結(jié)底解決的問(wèn)題是「如何使用一個(gè)工具」,而不是「解決問(wèn)題的方法」。然而在使用工具這件事上,你無(wú)論如何都無(wú)法描述清所有的場(chǎng)景,就好像你在通過(guò)人為地輸入一些邏輯,來(lái)讓汽車學(xué)會(huì)自動(dòng)駕駛一樣是不完整的。然而在這層嘴臉上,無(wú)論是低端的還是所謂的高端的培訓(xùn)班都會(huì)用一種方式來(lái)糊弄過(guò)去,那就是「老師教給你的東西是有限的,更重要的是,你從老師這學(xué)到了代碼的基本方法,你要上進(jìn)才能更好學(xué)習(xí)」。但我們平心而論,老師真的教你們代碼的基本方法了嗎?他帶著你們?nèi)W(xué)習(xí)如何閱讀官方文檔了?還是教你們程序背后的基本原理了?都沒(méi)有,他明明在教你語(yǔ)法和一些非常弱智的場(chǎng)景?!附鉀Q問(wèn)題的方法」是學(xué)不來(lái)的,是你大量日常的工作積累的,所以什么號(hào)稱兩個(gè)月掌握別人兩年知識(shí)的都是騙子,你以為人家兩年都在那里劃水呢?你以為你兩個(gè)月真能干出來(lái)什么嗎?
承認(rèn)吧,如果有人真的寫好了代碼,就算他沒(méi)報(bào)班,自學(xué)也不會(huì)比現(xiàn)在差。
我覺(jué)得從某種角度來(lái)說(shuō)所謂低端的培訓(xùn)班和高端的培訓(xùn)班都是一丘之貉,都在宣傳時(shí)給你過(guò)高的期望,而畢業(yè)后這個(gè)期望永遠(yuǎn)是落空的。低端的培訓(xùn)班告訴你培訓(xùn)后你們就可以月入上萬(wàn)的工程師,主要面向的是二線和是三線城市學(xué)業(yè)失敗的人。畢業(yè)后通常需要通過(guò)偽造簡(jiǎn)歷才能進(jìn)入一家沙丁魚罐頭外包公司,拿著三四千的薪水,成天干著重復(fù)而無(wú)用的最底層的編碼工作。
而高端的培訓(xùn)班則面對(duì)一線城市的中產(chǎn)階級(jí),宣傳時(shí)讓他們認(rèn)為通過(guò)培訓(xùn)后他們能大大改善現(xiàn)在的生活,甚至利用自己的技術(shù)成為創(chuàng)業(yè)公司的 CTO,成為自己財(cái)務(wù)自由的墊腳石。然而畢業(yè)后他們能找到的工作也不過(guò)如此,根本沒(méi)有脫離他們中產(chǎn)階級(jí)的生活。
如果單單是這樣,我其實(shí)并不會(huì)寫今天這篇文章,因?yàn)樗麄冎辽偈菬o(wú)害的。但事實(shí)上,低端的培訓(xùn)班通常伴隨貸款出現(xiàn),可以先上課后付款,學(xué)員因此被賣身;而高端培訓(xùn)班高昂的學(xué)費(fèi)常常消耗掉一個(gè)中產(chǎn)家庭的全部積蓄,使其最少的財(cái)富積累化為烏有??梢哉f(shuō),培訓(xùn)班是坐莊穩(wěn)賺,而學(xué)員們?cè)谂嘤?xùn)后大多都變得更拮據(jù)和悲慘。這種資本驅(qū)動(dòng)下的套路,就和賣老年保健品的那些灰色產(chǎn)業(yè)一樣灰色。他們通過(guò)給你看到一個(gè)事物的片面使你盲信,從而滿足了他們自己的利益。
放棄吧,如果你沒(méi)有能力自學(xué),培訓(xùn)班根本幫不了你。
如果反過(guò)來(lái)回憶一下我們自己學(xué)習(xí)代碼的歷程,你會(huì)發(fā)現(xiàn)都是類似的,是螺旋上升的,是循序漸進(jìn)的。你是從先會(huì)一些最簡(jiǎn)單的邏輯,到開始寫一些能用但不好的代碼,慢慢自己通過(guò)閱讀文檔、閱讀別人的源碼來(lái)慢慢提升。如果你一上來(lái)就來(lái)看 Rails 的實(shí)現(xiàn),你肯定根本看不懂嘛。你對(duì)于一項(xiàng)技術(shù)的理解,也一定是先認(rèn)為這是黑盒,這是魔法,再到了解其技術(shù)細(xì)節(jié),最后和人說(shuō)這東西其實(shí)很簡(jiǎn)單。
我相信不少 Ruby 程序員都是從 Java 程序員過(guò)來(lái)的,對(duì)于這些程序員來(lái)說(shuō),他們很容易理解 Ruby 的面向?qū)ο蟮臋C(jī)制,但對(duì)于開類和模塊注入的一些方法卻覺(jué)得很魔法。而如果你是從一門 FP 語(yǔ)言過(guò)來(lái)的程序員,比如說(shuō) Lisp,那你會(huì)對(duì) Ruby 的 Block 機(jī)制感到很親切,對(duì)于開類和注入覺(jué)得很容易理解。相反對(duì)于一些面向?qū)ο蟮囊恍┦侄胃械讲皇呛苁炀殹?/p>
這些都是人類「遷移學(xué)習(xí)」的能力,你將已知的東西來(lái)做類比從而理解新的未知的技術(shù)。全棧工程師之所以成為全棧工程師,是因?yàn)樗婚_始精通一部分,隨著不斷學(xué)習(xí)新技術(shù),不斷將已知的遷移上去,從而對(duì)技術(shù)棧擁有非常全面的大局的認(rèn)識(shí)。然而一些培訓(xùn)班甚至能號(hào)稱自己能培訓(xùn)「全棧工程師」,你連基礎(chǔ)都沒(méi)有,就相當(dāng)于同時(shí)學(xué)習(xí)操作十臺(tái)機(jī)器,你想想那可能嗎?所以出來(lái)的那個(gè)不叫全棧工程師,那個(gè)叫全棧 Hello World 工程師。你可以在簡(jiǎn)歷上寫上:精通各種語(yǔ)言 Hello World 寫法、掌握各種數(shù)據(jù)庫(kù)的安裝、熟練各種操作系統(tǒng)開機(jī)。你其實(shí)什么都不會(huì)。
寫代碼一方面需要靈性,需要實(shí)踐經(jīng)驗(yàn)的積累,另一方面需要打好基礎(chǔ)。這些東西本應(yīng)該是由本科教育提供給你的,但不得不說(shuō)國(guó)內(nèi)大多數(shù)大學(xué)的本科教育也沒(méi)有提供合適的基礎(chǔ)教育,而培訓(xùn)班在拮據(jù)的時(shí)間內(nèi)也不可能教你這些基礎(chǔ)教育的部分。舉例來(lái)說(shuō),如何計(jì)算一段程序的時(shí)間復(fù)雜度、空間復(fù)雜度,如何理解棧、隊(duì)列等數(shù)據(jù)結(jié)構(gòu),了解網(wǎng)絡(luò)協(xié)議的基礎(chǔ)。這些東西就像是 RTS 或者 MOBA 游戲的經(jīng)濟(jì)一樣,當(dāng)前的經(jīng)濟(jì)并不會(huì)直接影響到當(dāng)前的局勢(shì),但發(fā)展一段時(shí)間之后,特別是后期和大后期就會(huì)立刻成為你的局限之處。如果你連時(shí)間復(fù)雜度都不會(huì)算,你怎么知道兩段程序誰(shuí)的性能更好,又是甚至性能差到根本不能工作的時(shí)候你又去求助誰(shuí)。
醒醒吧,寫代碼沒(méi)有捷徑,如果你希望在這條路上繼續(xù)走下去,你必須打好基礎(chǔ),不斷學(xué)習(xí)新的知識(shí)才有可能。
有位大佬曾告誡我,如果不是觸及到自己的利益,那么就不要去斷別人的財(cái)路。但也就是這樣,業(yè)界和學(xué)界都充斥著一股藥丸的氣息。所有人做教育都是想著幫你賣出去,而你自己學(xué)習(xí)的目的也是把自己賣出去。所以大學(xué)連「SICP」都不上了,培訓(xùn)班才越來(lái)越猖狂;所以越來(lái)越多的人相信基礎(chǔ)知識(shí)無(wú)用,認(rèn)為存在讓自己成功的捷徑;所以加班昏天黑,干不到 35 歲就被退休了;所以發(fā)的 paper 申請(qǐng)的專利都是為了完成指標(biāo);所以學(xué)術(shù)上造假,商業(yè)上抄襲,技術(shù)上停滯;所以你只有跑不起來(lái)的代碼,快不起來(lái)的程序,加不上的薪資,屆不到的戀。
希望所有在這行業(yè)里奮斗的同學(xué)們能沉下心多鉆研,不要相信有所謂的捷徑。
最后再說(shuō)2點(diǎn)建議吧:
千萬(wàn)不要嘗試著速成javascript,少看點(diǎn)十天,21天速成任何編程類的書,除了浪費(fèi)時(shí)間,也會(huì)讓人覺(jué)得你不夠靠譜,至少我本人是非常反感看這類書籍的人。
這個(gè)文章到這里就說(shuō)完了,想要前端學(xué)習(xí)資料的進(jìn)我的群自助領(lǐng)取,已經(jīng)上傳到群文件里了:593757064,歡迎初學(xué)和進(jìn)階中的小伙伴。
聯(lián)系客服