上次跟大家分享的時候,就已經說明了如何對待技術的投資,今天在這裡要談一談如何在思維程度上投資,而不是僅僅局限在我會一門語言這裡,我在幫部門招聘程式員的時候常有一些感想,我判斷一名程式員是不是適合這份工作,首要因素是他對這行的興趣。如果我知道你是為了自身發展,或者更理想的是:你單純為興趣而學習新的東西,我會在心裡給這名面試者打上高分,因為他會投入時間給他的興趣,他的熱情是他今後工作的動力。當我提到一些生僻的詞彙或者非主流的技術的時候,我最不願意聽到的答案就是:"抱歉我覺得沒有機會使用,所以我沒有去瞭解。"
一個人對技術的執著可以激勵你,讓你更加熱愛工作,更重要的是,邊緣的技術和方法能讓你擴充自己的視野和深度,像別人學習的人才會更優秀,更具有智慧和創造力。如果你發現你對新鮮的技術和事物缺少激情,你不想知道發生了什麼。對不起,我要遺憾的告訴你。你可能選錯的職業。做程式員不要死咬著一門語言和技術不放,我們學的是釣魚,而不是死咬一條魚(程式設計語言)。看過武俠小說的都知道,一般高手都是會很多武器的,只會舞刀或者使棒的一般都是小嘍囉。我們要學的是程式員思維方式,是上成的內功心法而不是局限在某種語言裡面。
如果大家有時間,不妨去學習一下新的語言。這門語言盡量的要與你常用的語言差異要大一點。如果你習慣了用Java或者C#不妨礙你去學習下Ruby或者Perl這類語言,試試方便快捷的物件導向感覺如何!你不需要成為專家,但是你可以感覺到兩者的截然不同之處,你可能要轉變一種新的思維方式來面對新的語言了。我有時候常用一種語言去理解新的一門程式設計語言,學C++的時候,什麼OOP,多態,封裝,我基本都沒有聽明白,那時候我只會pascal語言,後來一看之前常用的override不就是多態嗎?把begin..end變成兩個括弧不就是開始結束嗎?語言其實都是相通的,無非都是拿著判斷,迴圈,遞迴在堆積木而已。不過要學會漁,還請大家注意三個方面:
1.打好基礎。
至少要會一門語言吧,一些常用的演算法,文法,數學基礎,邏輯思維能力都要有。一般的武林高手,都會先修一門內功,內功修鍊到了極致這個時候可以就可以博學外功了,而是事半功倍。
2.注意一些概念。
每門語言都有自己的一些獨特的個性,技術差異。有的是資料類型的差異,有的是類型定義的區別,有的是邏輯符號的不同。單看一個‘='有的語言就是賦值號,有的語言就是邏輯判斷,還有幾個長的像的兄弟 ‘:=' ,‘ =='這樣都值得注意。
3.養成良好的編程習慣
編程入門不難,但入門後不斷學習是十分重要的,相對來說較為漫長。在此期間要注意養成一些良好的編程習慣。編程風格的好壞很大程度影響程式品質。良好的編程風格可以使程式結構清晰合理,且使程式碼便於維護。如代碼的縮排編排、變數命令規則的一致性、代碼的注釋等。公司來了位新員工,今天幫他改代碼,當著他的面,我一行一行的幫他調整縮排,最佳化冗餘代碼。雖然只是一些小的舉措而且花了不少時間,但是我希望我的行為可以給他一些觸動,讓他可以重視這樣的細節,這些對他的未來成長很有協助的,而且我們團隊需要有統一的編程風格和習慣。
4.給自己充電,學習更多電腦的理論
我現在其實很後悔的我的微積分沒有學好。學編程是符合"理論→實踐→再理論→再實踐"的一個認識過程程式人人皆可編,但當你發現編到一定程度很難再提高的時候,就要回頭來學習一些電腦科學和數學基礎理論。學過之後,很多以前遇到的問題都會迎刃而解,使人有豁然開朗之感。因此在學習編程的過程中要不斷地針對應用中的困惑和問題深入學習資料結構、演算法、電腦原理、編譯原理、作業系統原理、軟體工程等電腦科學的理論基礎和數理邏輯、代數系統、圖論、離散數學等數學理論基礎知識。昨天在開發組裡面跟大家討論遍曆2叉樹的時候,竟然忘記了那本大學圖論教材的名稱,看來真的很有必要溫故知新下了。
這樣經過不斷的學習,再努力地實踐,編程水平一定會不斷提高到一個新高度。臨淵羨魚不如退而結網,我們要會漁而做一個漁人而不是愚人。