之前我拿這個問題問過我的同事,也問過國內的一些javascript高手。
最近,我一直在拿這個問題問自己。之所以會有這個問題,我基於兩個前提:第一、我自認為自己不笨;第二、我學習和使用javascript也有一段時間瞭,並且自己學習還算努力。
思來想去,我覺得我應該先回答下這個問題:如何提高自己的學習效率?
想象一下學校的場景,有一些知識,有的人就是學得比你快。為什麼?可能他本來就比你聰明;可能他之前學過的、接觸過的東西使他對這個知識有啟發;可能他背地裡比你花的功夫還多。不管哪一種形式,從旁觀者的角度來看,他就是學得比你快,也就認為他的學習效率比你高。
排除第一個答案不討論。我們來討論下第二個和第三個答案。
答案二:“他之前學過的、接觸過的東西使他對這個知識有啟發”,我這裡簡單的歸結為積累,關於積累問題,我上一篇博客程序員的學習和積累有談到。
答案三:“他背地裡比你花的功夫還多”,還有現象本身“他花的功夫比你少,學得比你還好”,關鍵字都落在瞭“功夫”二字上。如何下功夫、功夫下在什麼地方?這又引出瞭一個新問題。
關於這個問題,糾結瞭這麼多天,我的回答是:如何下功夫?動手!功夫下在什麼地方?和工作有關的地方!
說到這,我又想起瞭我深受毒害的應試教育。應試教育缺乏的正是動手和實踐知識的場所或曰方式。很多時候我總是懶於動手,為什麼懶於動手?難道是我真的懶嗎?我不承認,我不動手是因為我找不到動手的理由,或是不知道如何動手。拿寫一個javascript庫或框架為例,為什麼我到現在還沒有寫一個javascript庫?首先我找不到寫它的理由,現在這麼多流行、易用且被廣泛使用的javascript庫或框架瞭,有必要再寫一個嗎?就算我寫瞭,公司會使用它嗎?如果沒有對其他庫或框架的深刻理解和認識,隻是把各個庫或框架中的一些東西拼湊在一起,甚至不知道其中一個函數實現的內部原理,那能叫我寫的嗎?其次,我找不到入手的地方。在沒有對其他框架有深刻認識,自己能找到其中的缺陷、不足而加以修正和實現之前,我找不到入手的地方。
解釋下答案:
功夫下在和工作有關的地方,這需要有強烈的責任心和主人翁意識。我們需要深刻理解這句話,“功夫下在和工作有關的地方”不是說,每天把上司交給自己事情做完、沒有bug、達到需求就可以瞭。而是要做得更好,我想提出3點,也給自己樹立目標:
1、用最優的方案實現需求。在自己的已有知識結構、能力、經驗上用最好的方式實現需求,在此基礎上努力搜尋業界相關的解決方案比較優劣,選出最佳的方案,最終實現需求。
2、關心自己已做完工作,關註業界的相關新思想、新技術、新理念,把已完成的工作,用最新最優的方案予以重構,並在適當的時機在產品上得以實現。
3、關註自己所負責工作的未來,把產品當做自己的孩子,努力將他引向最美好的未來。努力將自己所負責的產品打造成為業界的標桿(特別是自己所負責的部分,那是自己影響圈內的事情)。
動手。如果你知道瞭功夫該下在什麼地方,也自然知道瞭要動手做什麼,動手也會成為快樂的事情。
不知道大傢有沒有這樣的經歷,當你有極大的渴望想把某件事情做好的時候,你會花很大的精力去研究怎樣把事情做好,為此你會學習很多相關的東西,平時你可能花一周時間也學不會的東西,你花一個上午就學會瞭,還應用到瞭你要做到事情中,並且事後你會對所學過的東西印象深刻。
這,就是我對“如何提高學習效率”這個問題的回答。
很抱歉,寫到這裡我還幾乎沒有正面回答“如何快速成為javascript高手”這個問題,如果你已經有所收獲瞭,我感到很欣慰。如果沒有,再談談javascript,因為我目前還不算javascript高手,下面這段算畫蛇添足也好,算狗尾續貂也罷。
語言層面:編程語言之間是想通的,至少高級語言是想通的(相對於機器語言和匯編語言),javascript是一門特殊的語言,既可面向過程、又可面向對象。有人喜歡它弱類型語言的特性,而將其語言本身的特性發揮得淋漓盡致。有人喜歡java這類純面向對象語言的嚴謹,而使用一些功能函數將其包裝成完全的面向對象,並采用它實現瞭一些常見設計模式。所以說,真正要精通javascript這門語言本身,需要對其他語言的一些理解(至少是瞭解)。鑒於目前javascript從業人員的構成,非計算機專業科班出身的同學可能需要努力補補課。
環境層面:javascript運行的環境目前有瀏覽器端和服務器端,將來可能有機會到嵌入式設備中。目前大部分應用主要集中在瀏覽器端,而瀏覽器廠商為瞭各自利益等各種歷史原因造成的javascript運行環境兼容性問題,也是javascript從業人員較為頭疼的問題。
業務層面:很多其他語言有功能完善的底層API、工具包,抱歉,javascript暫時沒有(瀏覽器端、nodejs開始有雛形,希望commonJS規范能夠一路走好)。所以各種庫、框架對於一些基本業務需求都提供瞭類似但非相同的實現。一個優秀javascript程序員需要辨別各種框架或庫中的業務實現,或編寫出自己的業務實現。
綜上,要在語言、環境、業務三個方面都精通,確實是需要花費很大的功夫。一個人的精力是有限的,其他語言積累幾十年的東西,你想一個人在javascript得到實現是不太可能的。術業有專攻,不是說你是javascript高手,javascript的方方面面你都能做到最好。
故,我認為“如何快速成為javascript高手?”, 無解。無法快速!
“如何成為javascript高手”,動手,把功夫下在和工作有關的地方上!
運用javascript把工作做得最好,才是javascript高手!
PS:這是本人對自身問題的思考和分析,之所以發到首頁來,是希望能給有同樣疑惑、同樣迷茫的同學帶來些思考。分享這篇博文花瞭4小時的寫作時間,如果你有同感,如果你覺得我還算用心,請幫忙右下角推薦一下,這樣能給更多的同學帶來一點思考和幫助。如果你以為我是javascript高手,隻是來學習經驗的,卻沒有半點收獲,失望而歸,請拍磚
作者 慢熱君