作為一個程式設計師,進步完全取決自己

Fiona發表於2014-05-30

我曾經在Hacker News網站上讀過一篇帖子的評論,其中一個年輕的程式設計師說他們不想呆在那些只會讓思想陳舊的老程式設計師離開而不是對他們再次培訓的公司裡,因為他明白,有一天他們也會這樣。

也許這個人的本意是好的,但是他這種說法還是讓我惱怒。首先僅僅因為一個程式設計師年齡較大並不能說明他思想陳舊(就像一個年輕的程式設計師你不能因為他年紀輕就說他思想新潮)。我認為這個評論中最大的問題是:始終讓自己接受教育並跟上時代的發展,這應該是你自己的責任,而不是公司的問題。

我做程式設計師已經32年了,而且我一直努力讓自己學習各種技術來保持進步。我知道很多像我這個年紀的人自從拿到計算機學士學位以後就再也沒有學習過任何新知識,因此他們最終會被淘汰。我花了6年的時間學習化學,但是一旦當我成為一名程式設計師,我發現我需要了解在我工作之外發生了些什麼,而且我有不斷學習的慾望並一直在嘗試各種各樣的程式設計。當然在當年那個時候,所有事情都要慢得多,因為所有的學習都要靠閱讀,這是一個很大的挑戰(當時沒有網路,你必須讀紙質版的東西!)

在我做程式設計師的第三年,我預見到微型計算機是未來發展的方向,因此我調整了我的工作重心,並加入了他們那個團隊。有一次,在那裡我讀到一門新的語言(即C語言),並說服我的經理買下它。事實證明,會用C語言意味著我的第一個應用程式就可以用C語言來編寫,而不再用Pascal。

後來我又知道了關於物件導向程式設計,它點醒了我,於是我在C的基礎上增加了一些可以取巧的物件以便利用。因此當後來C++出現的時候我已經遊刃有餘了。

當我在蘋果工作了一段時間之後,我認為我需要在網上工作並去了諮詢公司使用NeXT WebObjects寫了一些被稱之為稱為Objective-C的晦澀語言。一旦Java J2EE出現,我相信公司會使用它來工作,結果就真的利用J2EE做了第一個專案。巧合的是,當時做那個專案的公司就是現在我老闆的母公司,這是他們的第一個完整的Java專案。

當你關注的是整個行業發生了什麼,而不是隻關注你自己正在做的事情的時候,一切就自然而然的出現了。你沒辦法知道哪件事會成為下一個大事件,但是你可以做到讓自己對所有的事情都有了解,即使你沒辦法將它們一一嘗試。

我記得2000年中期的時候有一個同事,是搞C++的頭兒,當時他的IE瀏覽器出現了一些問題,我建議他試一下firefox。結果他像看一個瘋子一樣的看著我,因為除了IE之外,他不知道還有別的瀏覽器。在那之後他也沒有興趣去嘗試一下firefox,即使這並不會影響到他的工作。我沒辦法理解這種態度。你沒辦法知道下一個大事件會從何而來,拒絕承認這個世界在改變並不會真的讓世界停止改變。

我有一些獲得本科學位的朋友,當大型機退役之後他們隨之失業,當他們發現他們沒辦法再繼續當程式設計師的時候,他們開始抱怨說早該花點時間學些別的東西。但是當你意識到這些的時候,一切都太晚了。認為你的老闆會來培訓你無異於痴人說夢。有時候你的老闆會連個通知都沒有就開了你,你會丟了工作,專案,甚至是整個公司,然後你不得不去找份新的工作。指望老闆對你進行培訓是不現實的,如果你是一個汽車生產線上的工人這還有可能,但作為一個程式設計師是完全不可能。

能不能進步取決於你自己,你要自己去嘗試新的事物,即使它們並不重要。學習任何東西都是有用的,因為你嘗試的程式設計技術和工具越多,再用其他的工具就會越容易。你所學的東西可能會沒什麼用,但是學習本身永遠不會做無用功。不管是你在寫開原始碼,或是自願的編個程,或者僅僅是在家裡寫一個別人永遠看不到的東西,都沒有關係。它訓練了你的大腦開始接受新事物。即使是僅僅瞭解了在程式設計的世界裡將要發生什麼,也可能是有用的,因為不知道在什麼時候,就會有老闆問到你關於這方面的問題。

當我第一次聽說Ajax的時候(在這個術語出現了幾個月之後)我正在寫web應用程式,然後我開始使用它;再一次的,我先把這個新東西教給我的同事們。遺憾的是這讓公司的架構團隊感到恐慌,他們認為我購買了一種未經批准使用的新技術,他們也懷疑這種新技術能否得到支援。他們中間沒有人聽說過這個東西(其實是他們沒有去關注過),當我告訴他們這只是一種Javascript的時候他們才勉強息怒。我在架構團隊裡,與時俱進的接受新事物是我的職責所在,這也是個很痛苦的過程。

當iphone最初面世的時候,雖然還沒有任何已開發的工具包,我仍然覺得它代表著未來。我的Objective-C方面的知識再次派上了用場,這實在很讓人吃驚。

現如今要與時俱進是很荒謬的一件事。用JavaScript做 web 應用的人們每週都能搞出新的大事件;即使學的再快,你也沒辦法在新的框架覆蓋之前就學習完所有的東西。那些日子我的工作並不在這個領域(當時我只做ios),但是我仍然堅持學習,你永遠不知道未來會朝什麼方向發展,也沒法知道你會在哪裡結束。

在老闆給我的少數的幾堂培訓課裡,我基本上沒學到什麼有意義的東西,因為我那些東西我都已經瞭解,而且有些新技術我都已經使用過了,即使它們對我的未來沒那麼重要。不過所有的事情都是這樣,你沒辦法知道哪些東西會在以後幫到你。

在研究生期間學習化學的時候我學到了APL,除了玩,我從沒用它幹過別的事情,但是最後它成了我第一個產品Trapeze的基礎。在1999年之後我把Objective-C忘得乾淨,但是現在它成了我的主要語言。你沒辦法知道在未來能幫到你的東西跟現在有什麼關聯。

有的程式設計師會忽視掉他們工作方面以外的一切,這種行為深深刺激了我。我曾與一些利用4GL工具生成RPG程式碼的人一起工作。他們吹噓說他們使用的工具是世界上最好的,他們無需再瞭解別的什麼東西。我甚至能夠想象當他們中的大多數人下崗的時候,他們會開始疑惑,為什麼他們沒辦法再找到一份新的工作。技術很少會消失,但是你的工作會減少,除了可怕的維護工作外你可能什麼都做不了,然後你就變得多餘,直至被掃地出門。現如今任何人都沒辦法幫助你重新成為有用的人,除了你自己。如果你還在等待,那麼等到一切都已經太遲的時候,你的事業就會遭受到毀滅性的打擊。

所以現在不要再拖延了,學點新東西吧,讓自己更好的學習新東西吧。睜大你的雙眼,你可能就會看到未來正在向你走來。當它展示在你面前的時候你會發現這沒什麼大不了的。很幸運一直以來我能夠保持專注,這讓我在三十年之後仍然能夠進行程式設計,能夠在一些很現代化的東西上進行工作。

所以要睜大你自己的雙眼,不要指望別人會幫助你。就像棒球投手Satchel Page所說的那樣:“別回頭,別人隨時有可能趕上你”。在程式設計方面你需要一直向前看,因為你背後唯一的東西是討厭的顛覆者。

相關文章