iThome 網站首載:我的轉換跑道之路
在各個討論區、教育訓練或研討會等場合,常看到或聽到類似問題:「我想要轉換跑道,我該如何步入程式設計之路?」我也曾經是愛問也想迫切知道此問題答案的人,從會被問到這類問題開始,才知道這是一個沒辦法給答案的問題,畢竟這中間有太多的細節...
- 我喜歡程式設計?
許多人跨入程式設計領域的理由是,他們喜歡程式設計,覺得程式設計很有趣,實際上,大多不是這麼一回事,喜歡或有趣通常沒什麼根據,很多人根本不知道程式設計是什麼,過去的我也是其中之一,坦白說,我第一次C語言考試不到30分,資料結構、演算法、作業系統修得一蹋糊塗,怎麼可能會喜歡程式設計?現在回想起來,我應該只是在「使用」電腦上獲得成就感,即使只是寫寫HTML放到工作站,或是依指令不明就理地在Linux上裝個BBS自我滿足等小事情,當時的我連下make的目的是什麼都不知道。
由於從電機課程與使用電腦上「獲得的成就感極度不平衡」,在近兩年的兵役生涯過後,我決定走向電腦應用相關的領域,由於在學時曾接觸過HTML等網頁編寫,也寫過一本FrontPage的書,一開始是想朝網頁美術設計發展,當時正值台灣電腦市場頂峰,DreamWeaver、Firework、CorelDraw、Flash、PhotoShop等電腦書籍非常多,對於一個轉換跑道且無基礎的我來說,是非常重要的自學管道。
在自學一陣子網頁與美術之後,開始對於在網頁上與使用者互動產生渴望,想要能在網頁中親自寫個留言版之類的,因此開始自學PHP,甚至還翻譯過PHP書籍,現在回想,這才是我真正程式設計的啟蒙,從這開始接觸到大量網頁程式設計必須知道的名詞與觀念,排山倒海而來的資訊甚至曾令我感到嚴重焦慮,我渴望著能在短時間內吸收龐大資訊,站在電腦書局觸摸著一本又一本的電腦書,甚至能成為一種安慰。
我喜歡程式設計嗎?不!我是知道「我沒有退路」,也開始模糊知道程式設計這條路是什麼樣貌也並不好走,而我能選擇的是,消化掉眼前這龐大的資訊,看看能否找到答案,證明轉換跑道是正確的選擇,我知道起步的很晚,因而只能選擇跑得比別人快,下班後的每個晚上,除了自學還是自學。
- 開放原始碼與Java資源
在程式設計這方面,除了一開始的PHP之外,我重新撿回了過去拿不到30分的C語言,也自學了C++,當時曾看了本談GTK與Qt視窗程式設計的書,在Qt安裝路徑中,我找到了一個C++文字編輯器範例,花了點時間看懂了它的原始碼,好像懂了點什麼又好像沒懂什麼,當時我也正在自學Java,於是我想了個有趣的練習,把C++的文字編輯器範例,改以Java來實現,這是我第一次親手寫了個比較像個樣的程式,獲得的成就感無以倫比,第一次嘗到閱讀原始碼與動手實作的樂趣。
當時Java正是鎂光燈前的寵兒,有非常多Java的書,我找出書中許多規模較大的範例,閱讀它的原始碼且動手實作,也開始照著自己的想法在其中加點東西,我把自己(可笑)的東西丟到Javaworld@TW討論區上,被贊許、批評甚至也有被訕笑,然而也得到最多的互動,迅速地知道自己哪邊做對了而哪邊不對,我也開始嘗試閱讀JUnit、Struts等開放原始碼框架的程式碼,畢竟我曾經從閱讀原始碼中得到無比的成就感。
實際上,我並沒有特意選擇Java,只是當時成為鎂光燈前寵兒的Java技術,最大的好處就是資源充足,選擇Java的原因純綷就是,可以玩的東西很多,可以看的原始碼很多,可以找到的書籍文件很多,即使是設計模式、資料結構、UML、物件導向設計等書籍,不少也都用Java來作為示範,這時的我就像《學徒模式》中形容的,接上了水管狂飲能取得的各種資訊,這個時候是我學最多,也是犯最多錯誤的時候,基於對吸取龐大資訊的渴望,時空放到十年之後的話,或許我會選擇的是擁有類似榮景的JavaScript也說不一定。
- 技術寫作與教育訓練
大量消化資訊並不是件容易的事,過程中遺忘的部份總是多於獲得的部份,為了便於日後拾回被遺忘的技術細節,十幾年前就養成了隨時記錄所學的習慣,而且選擇公開在網路上,當時並沒有什麼部落客行銷的概念,也沒什麼優秀開發者與技術寫作之間關聯的論調,這幾年來強調從事技術寫作優點的文章開始多了之後,反倒令我感到驚奇,回頭來看,這應該是唯一在開始就做對的選擇。
大量的技術寫作,頻繁地與Java社群互動,使得自己在闡述技術名詞或相關觀念時的自信心增加不少,進而萌生了從事教育訓練的念頭,當時的想法是,這可以在程式設計的能力上,加上自己擅長的項目,應能比單純從事程式設計來得有意義,原本打算自行去幾間電腦補習班面試看看,卻因緣際會地在一次即時通訊上,獲得了到Sun教育訓練中心授課的機會,但也相對地帶來了更大的壓力,因為都是到場訓練,面對的學員都是在職的程式設計師,而我代表的又是Java原廠講師。
為了罩得住在職的程式設計師,我用自己能想像的資深高手程度,假設這類學員就在課堂之中,因而也逼迫自己去瞭解技術中更廣、更深、更多可能遇到的實務問題,壓力大到讓我度過好多個失眠的夜晚,甚至得緊抱著枕頭才足以紓壓,現在回想起來,才知道當時選的是一個強制我急速成長的方式,然而也可能是最危險的一種方式,畢竟我在這領域起步的算晚,過於急速成長所帶來的壓力,可能把自己逼出這個領域之外。
如果要我再選一次,會不會選擇另一種比較緩和的方式?應該不會,我渡過那段壓力的方式就是想著「起步比別人慢,就要跑得比別人快」,那時只想著,假設我起步之時,別人已經有了四年的基礎,那在接下來的四年,我就要取得八年的成果,轉換跑道就是這麼一回事,沒有壓力之下,在新的跑道上,終究只會成為一個落後的跑者。
- 你為何離開前一條路?
「我想要轉換跑道,我該如何步入程式設計之路?」對於這個問題,很多人都會說,對程式設計要有熱情、興趣、熱切求知的欲望,這不能說是錯,不過,那並不是一開始就能知道的答案,多半情況下轉換跑道的人,對於「程式設計」是什麼並不瞭解,又怎能知道自己是不是有熱情呢?多半只是個模模糊糊的想像,憑藉著這個想像,然後選擇到另一個跑道賭一把!
只不過賭需要勇氣,這個勇氣來自於「你為何離開前一條路?」的答案,你對為何離開前一條路的答案越清楚,轉換跑道遇到壓力後才越會有想突破的勇氣,也才越會有急速成長的渴望,轉換跑道不可能沒有壓力,想著退路只會讓你喪失突破壓力的勇氣,會想離開前一條路應該是種沉痛的決定,遇到壓力時,該想的是過去那些讓你沉痛的原因。
而且這場賭博有點久,中間你仍有機會調整你的籌碼,要做的是盡全力獲取你渴望想得知的資訊,盡全力地去消化它們,在這個過程中,找到自己技術能力基礎上,能進一步發揮的專長,然後從中取得成就感,也才能從中產生熱情、興趣與熱切求知的欲望。