Contents
走上寫程式這條路
會走上寫程式這條路,八成是小時候愛打電玩吧。大學聯考填系所時,都不知道哪個系以後能做什麼,資訊工程系感覺可以寫遊戲,幻想著以後能寫遊戲,就進了這個科系。從大學到研究所畢業這段就略過了…中間發生了一些事情,過程不是很順利,但結果算還不錯。
職場經驗談
老實說,工作所需要的技能,和學校所教的技能,是有所差距的。而學校很難,也不需要補足這一塊。目的畢竟不同。
學校的訓練,最有用的是思考方式,和解決問題的能力。像是網路實驗課,給一個php + Linux + MySql的作業,全班沒幾個會這些技能,然後一個禮拜後想辦法生出來之類的。還有就是基礎學科的能力,像是演算法、數學相關的科目、影像處理之類的。有些Domain Knowledge,進了職場之後就很難再學了。
而工作所面對的,大都是大型專案。程式碼幾千行算是很小很小的專案了,但在學校是己經算很大的一個作業。而且需求會不斷的變更。學校作業通常A就是A,而工作的話,今天是A,明天可能會變成AB、或是C了。需求可能增加,也有可能需求整個改變。
「因為努力的人很少,所以只要比別人努力一點,就會比別人厲害。」
這段話我忘記是在哪看到的了。工作前幾年,一開始是維護Win32, MFC的專案,後來寫iOS App。空閒的時候,就是看書。
因為小時候愛下象棋,和看武俠小說。程式設計,用絕世武功來形容的話,分內功和外功。內功偏像概念,像Design Pattern、演算法、OO的概念、經驗這一類的,我覺得就是內功。而C、C++、Java、Objective C就像是外功。內功強的話,外功都很好上手。
而且內功的特性,適用任何的外功。畢竟武俠小說都是這樣寫的,看看張無忌,有了九陽神功後,學什麼都很快。
工作算算也七年多了,前一份做了六年。看完的原文書,應該有二、三十本以上吧。對工作一直很有幫助的就下面這幾本吧。
Code Complete 2nd
不餽是十大必讀好書排行第一名的。一直到現在,還是受用不盡。真的沒時間看書的話,這本建議一定要看看呀。早點看完早點受益。
這本講的很全面,怎麼規畫程式、怎麼計算程式複雜度。有一些重構的技巧,像是減少nested if-else的層數。而有趣的章節,像是怎麼使用goto這種有爭議的語法,那章是講protective programming,一開始談到使用assert這一類的語法,檢查input parameters,甚至是計算後的result,也做檢查。然後,優化程式效能的技巧,也會列舉同個技巧下,不同語言的優化程度,這裡他會強調,同個技巧,在不同的語言下,不見得有用,可能會更糟…。
覺得這本書的總綱就是「high cohesion, low coupling」,「高內聚、低藕合」。書本還蠻厚的,電子書沒感覺,買了一本中文翻譯本就很有感覺了,還蠻厚重的一本書。
Martin Flower系列
- Patterns of Enterprise Application Architecture 這本的話,有在寫Web service,和資料庫的會比較有感覺吧。像是在寫asp.net MVC, asp.net WebAPI時,這本幫助就超大的。 因為那時候迷Pattern這東西,看到有Pattern的字樣就拿來看了。後來接了Web service的專案,說服主管用asp.net MVC,而不是asp.net WebForm,幫自己爭取福利…。其實asp.net WebForm,和asp.net MVC都是MVC的框架。但是asp.net MVC是front controller,而asp.net WebForm是Page controller。像是Python django, Java jersey這一類的,都是front controller的概念。而關於View那塊,看看template view, secondary view的章節後,也會更了解這一類的東西。 裡面會講到Offline concurrency locking。有實際用到的有,optimisic offline lock、Pessmistic Offline lock。像MSSQL (EntityFramework)在Optimistic offline lock這一塊很容易實作。會了Optimistic offline lock,用它實作Pessmistic offline lock也會很方便。
-
Clean Code, Code Craft的內容,其實Code Complete 2nd就己經涵蓋了。
-
Design Pattern
工作前一兩年迷Pattern,相關的中文書,和經典的GoF原文也拿來看了。後來中文書全部轉手賣掉。這個要看,建議看GoF原文的那本,而且要搭配重構那幾本書看。因為這本,比較理論,而Refactoring to Pattern會教實際的案例。簡單來說,Design Pattern是武功心法,而Refactoring to Pattern教的是武技。兩個結合在一起,威力強大。 -
Database Management Systems, 3rd Edition
工作時因為需要,花時間把這本看了2/3…,。後面有四、五個章節沒看…。這本是大學時代的教科書,工作時再花時間看完…自然就是大學的時候沒學好的下場了…。因為它是很多大學的教科書,所以,很容易找到教學投影片。只看原文書很容易就睡著了,搭配投影片看,把每個章節後面的作業練一練,花個一個多月,現學現賣,直接用在公司的專案上。當時要負責Database那塊的規畫,用了ORM (微軟的Entity Framework),但是對Database底層在做什麼不是很清楚,所以花時間K書。了解Database在做什麼,真的幫助很大。在規畫Db schema時,比較知道自己在幹麻。知道怎麼寫SQL語法,效率會更好。
這幾年線上課程很夯,所以Andrew Ng的Machine Learning也上完了。有修完的線上課程真沒幾個,聽課的可能還比較多。有時候會想著,是不是在回去校園生活,學點東西。進了職場,反而會想念學生生活。但當學生的時候,只想趕快出去工作,賺錢活口。呵呵。
會一直K書,跟堅持要正常上下班的念頭有關係。要有效率的工作,不斷投資自己的技能總沒錯。能力和技能越來越熟練,能選擇的工作機會就越多,也越有本錢篩選自己想要的工作環境。只是,年紀越來越大,有時也會懷疑,程式設計師這個工作,能做多久就是了。
關於本文作者
Aecho
目前任職於 艾特維
如果您想與本文作者互動討論, 請到 https://github.com/softnshare/careergrowth/issues/8 留言
為什麼會有這篇文章?
目前我們在Soft & Share slack的 forum-careergrowth 辦一個很有意義的活動, 大家一起來分享自己的學習成長, 職場, 脫離舒適圈等經驗, 如果您看了我們的分享, 您覺得您的故事也可以對大家有所啟發, 歡迎來加入我們的分享行列.
喜歡我們的分享嗎? 記得使用以下社群分享按鈕分享給您的社群朋友吧!