2011年9月20日 星期二

雜記:學徒模式讀後感

最近在看【學徒模式:優秀軟體開發者的養成之路】,收穫很多。

算算從高中以來開始寫程式一直到現在也過了將近8年了,但是我仍然時常覺得我還是像當年剛開始寫程式一樣是個菜鳥。但這八年來我也跌跌撞撞,經歷了很多個不小心學到一些經驗和技巧,在這本書也有提及,並且作了更深入且全面的說明。

像是我曾經很容易為了自己所使用的技術成為熱衷的信徒,排斥他種技術。這是一個非常嚴重的壞習慣,每個技術當初設計的概念、用途本來就不一樣,因此不能站在一個世界裡去評斷另外一個世界的語言。反而我們應該站在另外一個世界,用他的方式模式去思考該如何達到我們需要的目的。我自己曾經以為(到前不久還是這麼認為),我寫其他語言就像在寫C語言一樣。而這是一個常見的問題,因為這表示我從來沒有真正學會了新的語言,我只是了解他的框架而已。唯有學會不同程式語言的邏輯想法,才能真正學會認識程式設計的精髓,從而去蕪存菁成為大師。

再來,我看過的程式碼不夠多,因此我累積的東西也不夠多。現在想想,每次看別人程式碼所學會的小技巧都非常實用。像是C#的樣板,是從看了別人的程式碼才開始使用;動態二維陣列的配置,則是讓我看到了第二種寫法,因此現在如果要撰寫相關的程式碼,我又多了一個工具可以使用。我曾逃避一些對我來說太難的程式碼,但現在想想這是我放棄了讓自己成長的絕佳機會。

我參與太少開發者同好的讀書會,沒有多認識一些人,一切自己獨自一人。也因此我少了一些回饋的網路,在學習上要花更多的時間,要繞更多的路。無論這個人是不是資深的程式設計師,我們都能夠從他身上學會許多經驗和技巧,從而提升自己的能力。當然,我們也要樂於分享自己所知道的,當在描述自己所會的事物時,其實也是重新檢視自己該知識的時候,從而可以了解自己還需要加強、概念不清楚的地方。

在Y!面試我的時候,提出了兩個問題來驗證我寫程式的能力:1.給予任3個數字,請找出最大值。2.請修改前面第一個程式可以處理N個數字。這題目是再簡單不過了,但一時之間要寫出清楚能懂的程式碼,也在腦海裡轉了很久。接著,他問我資料結構的問題:請問陣列和鏈結串列有何不同?陣列我常用,鏈結串列我也常用。資料結構第二堂課就是在教陣列,第三堂課在教鍊結串列,但是何時使用他們?我很驚訝我自己忽然無法很清楚明確的回答這個問題,結果面試就變成和兩位面試官討論、請教。其實在我面試的時候,我在想就算我沒有上,我也要從這裡帶一些東西回去。很難得我身邊會出現可以跟我討論程式問題的人,我一定要多學一些。

我以前常分享自己所撰寫程式碼的片段,但那只是實做。但現在覺得實做固然重要,但其概念與精神更為重要。如果能把一項技術摸清楚然後在網誌上跟大家報告,或是自己開發時面臨了那些問題,我又如何解決?長久下來可以為自己留下成長的足跡,而這網誌也成為自己的知識庫。

很高興我看了這本書,解開了許多存在我心中許久的疑問,也對自己未來的成長之路重新思考,更重要的再度點燃我心中學習的慾望,讓我回到學徒期,好好重新摸索資訊這塊領域。