Huli's Blog

Learning by sharing

Lidemy 鋰學院是一個為初學者而生的線上程式課程平台,希望能以淺顯易懂的教學,帶領初學者更快速地入門程式設計。你可以直接到網站註冊,或者是追蹤 Lidemy 的粉絲專頁,就能搶先得知課程的最新消息

自學、哲學、講學:我的程式之路(下)

| Comments

此篇為系列文章的最後一篇,如果你錯過前兩篇,傳送門在這:
自學、哲學、講學:我的程式之路(上)
自學、哲學、講學:我的程式之路(中)

會寫程式的文組生

每當有人知道我是念哲學系的時候,就會問我說:「咦,那為什麼你會寫程式?」,我都會跟他們說:「你搞錯順序了,我是先學會寫程式,才念哲學系的。」

接著一定會問我,我在上一篇裡面回答的問題:「那你怎麼會來念哲學系?」

哲學這個詞之所以能被放在標題裡,當然也代表他在我的成長歷程中佔了一定的份量,短短兩年不到的哲學系時光,教授講過一句令我印象深刻的話(原句一定不是這樣,但大意類似):

很多人都以為哲學把東西弄複雜了,但其實不是的,哲學其實是把複雜的東西變簡單。

這句話改變了我對哲學的想法。我以前也以為哲學是把東西變複雜,怎麼一堆名詞然後一堆理論,為什麼要把想法變得那麼複雜?後來我才知道,原來這就是理論,這就是學說,這就是整理。

如果你不念哲學系,當然也可以思考那些哲學問題,也可以思考自由意志與決定論,可以思考電車問題到底要不要按下按鈕。可是會碰到一個問題,那就是有時候你自以為你懂了,但其實卻沒有。如果你有念哲學,哲學就會跟你說:「喔,你的這個想法其實在哲學的領域叫做強決定論,幾百年前的某某人也曾經跟你一樣有相同的看法,但是這個學說其實會碰到什麼什麼問題」

哲學這套體系把那些極為發散的想法收斂起來,變成一個個專有名詞,如果沒有這樣做整理,在與別人討論對話的時候只會雞同鴨講,有時候你自以為想出一個極為創新的理論,念了哲學才發現幾百年前柏拉圖就已經提出過這樣的概念了。

知道你自己的這個想法其實早就被提出有什麼好處?好處就是以前的人碰到的問題,你也會碰到。每一個哲學理論都會碰到一些必須要解決的問題,如果你成功解開了以前人解不開的,你就可以延伸出這套哲學發展出自己的理論。

念了哲學系之後,你去看一個問題會去關注它的前提以及論證,你會知道說:「要相信一件事情是真的,必須要有一個好理由」,「好理由」是我很喜歡的一個單字。你要做什麼決定都可以,但重點是這個決定背後必須要有一個「好理由」支持你去做這個決定。

常常有人會戰說哲學到底有沒有用,我認為哲學有用極了。它讓我多了一種看事情的角度以及思考問題的方法,這些都是非常受用的。如果你念了哲學系卻怕找不到工作,沒關係,我已經決定了。以後Lidemy 鋰學院的線上課程,附上哲學系學生證,只要能證明你是或曾經是哲學系學生,所有課程一律給折扣(至於折扣多少,我還要再想一下...)。

與 Android App 再續前緣

還記得我前面說過學會寫 Android App 對我之後發生的事情有影響嗎?這個要結合之前與補習班的故事。在我大一的時候,高中的補習班主任問我說:「你是不是會寫 App?那來做個 App 版的學測落點分析吧!」,他事後說那時候只是說說,沒有想到我會真的做出來。

但總之我就是做出來了,那是全台灣第一個在做落點分析的 Android App。為了增加曝光度,主任還找了一些媒體來採訪,而我身上最有新聞點的當然就是:哲學系學生。

現在在網路上都還搜尋的到當年的報導:首個學測落點App 台大哲學系學生研發的台大生研發 免費學測落點App,甚至連台大校訊都有:哲學一胡立開發推甄申請落點分析APP 廣獲網友好評

這次經歷算是滿特別的,第一次上報紙,第一次登上網路新聞也第一次被採訪。但其實新聞熱潮過了之後也沒什麼感覺,頂多就是親朋好友都會知道:「你就是那個寫落點分析 App 的人喔!」。

這個 App 實作起來雖然不難,但是對技術能力其實也有一定的成長,這是我第一個這麼完整的 App,而且有實際上架到 Google Play。除了 Android 版以外,還有 iOS 版,所以 iOS 的開發者申請流程以及上架流程我也都完整跑過一遍。那時候我本來是想要學 Objective C,買了幾本書之後發現語法長得好怪,讓我很抗拒,之後就乾脆不學了。

不想學 iOS 開發可是又一定要有 iOS 版,怎麼辦呢?那時候我就朝向跨平台解決方案來看,例如說用網頁寫 App 的 Phonegap,但發現效能好像不太好,之後我又找到一套叫做 Titanium SDK 可以跨平台,但因為 Android 的版本我已經用 Java 寫了,所以我就拿這一套只做 iOS 的版本。

會這麼喜歡 Titanium SDK,是因為他的開發效率極快。我大概花了三四天左右,就把 Android App 整個移植到 iOS 上面了。

這個專案讓我學到了 Android 開發、Titanium SDK 來進行 iOS 開發以及 Google Play 與 iOS 的開發者帳號申請跟上架流程,等於是一個人就完成了雙平台的 App 開發。

而且這個 App 在市場上也拿下了不錯的成績。

Apple Store 最高名次:全部 29 名(2014/2/14)、教育類第 1 名(2014/2/14)
Google Play 最高名次:教育類第 2 名(2013/2/24)。

靠解決自己的問題練功:今晚九點電影

但其實在開發落點分析 App 之前,我還做過另外一個 App,叫做今晚九點電影。靈感來源是 ptt 電影版上面每週五都會有熱心的網友 po 這個週末的電視台會播什麼電影。身為一個電視兒童,覺得這樣的功能實在是太實用了,於是就自己寫一個。

我去 prase 開眼電影網的電視時刻表,後端一開始是用 Java 寫的,因為要把它放到 Google App Engine 上面。App 這邊當然就是用 Java 直接寫 Native 的 Android 了。

這是我第一個前後端都自己一手包辦的作品,甚至連 Logo 也是自己畫的。

上面這兩個 App 奠定了我在 App 開發上的基礎,知道自己有能力打造出一個功能完整的手機程式,也有能力把它上架到商店上面。

離職場更進一步:實習

在大一的時候,偶然間得知了學校有辦一個叫做新創企業媒合會的活動,會有很多新創公司在那邊找實習生。抱著試試看的心情,我就去那邊參加了。其實從進大學以前就一直很想出去工作了,但一直苦無機會。很多中小企業或大公司可能看到你還是個高中,或你是一個哲學系學生就不理你了,但新創公司通常比較自由開放,並且以能力至上。

這是我那時候帶去的簡歷,上面寫的其實我在這篇文章幾乎都有提到了,主要就是過去的作品跟比賽的經歷。

在去之前,我有先在網路上查好有哪幾家是我有興趣的,結果一到現場去之後,我有興趣的第一家直接問我什麼時候可以來實習,也就是當場錄取的意思。於是稍微敲好時間說之後再聯絡以後,我就回家了,剩下幾間有興趣的我都沒去。

我的第一個實習是一間新創的遊戲公司,大概才六七個人而已,但很可惜的,那時候因為比較忙的緣故,每週去一次,大概去了四五次之後我就沒有再去了。還在遊戲規劃的階段實習就結束了,一點程式碼都沒有碰到。這段經歷帶給我的啟示就是:要實習的話,就要全心全意實習。

相隔一年,大二的時候我再度去了新創媒合會,這次我把有興趣的都談過一輪,之後也陸陸續續補了幾次面試,最後選定了兩間作為我實習的公司。為什麼是兩間呢?因為其中一間要求一個禮拜去兩天,另外一個要求一個禮拜工作時數約 15 小時。我仔細想了想,只要我假日或是平日晚上也在工作的話,是可以兩邊同時進行的。

在提到這兩間到底在做什麼以前,必須先提到另外一件事情。那就是大二下開學後的一個月,我就休學了。

踏入休學者聯盟

在要休學的時候,家人一開始是有點反對的。但在經過我的不斷說服跟知道儘管他們不同意我還是會休學之後,他們就同意了。我那時候有寫一封信給他們,說明我休學的理由跟想法,我這邊直接貼上來,省得還要再打一次:


給最親愛的家人們:

我要休學了。聽到這個消息的時候想必大家都很震驚,也很關心
「怎麼會突然有這樣的決定?」,但是其實這個決定並不突然
大一上、大一下、大二上,我都已經想過休學這個問題,只是沒有提起

從國中開始,我就想出去工作了。
那是當我發覺,我對程式設計真的很有熱情的時候,但我最後還是接受了主流的道路,考了高中,接著繼續念大學
然而,想工作的這種心情一直沒有消失,一直沒有,這也是為什麼我會想去實習的原因
而我會選擇半念書半實習,還有一個原因就是:我沒有勇氣休學,所以只能妥協於這樣的方式

如果我終於無法忽視心中的那股聲音,才做出了這樣的決定,與其說突然,不如說早已醞釀許久
今天大家都提供給我很多意見、很多看法,而你們講的那些,我其實或多或少都已經想過了

先來說說我的計畫吧!
現在休學以後,認真的把實習的工作做好,到八月底結束
如果情況順利,那我就去當兵,然後就找工作進入職場,不復學了;如果情況不順利,那我就會乖乖復學,等於是休學半年再回來
(或是先當完兵,再復學,這還要再看看)
有些人問說,那為什麼不按照現今的步調,一邊念書一邊實習呢?
第一點是,我厭倦了念書的生活,作業、報告、期中、期末,絕對都會花費掉許多時間,更何況念的還是沒有很大興趣的科目。
第二點是,繼續念書只是為了拿到台大學歷。

你們每一個人都有跟我提過,學歷在職場上的重要性。我懂,我有在聽
但是我不信,我還是寧願相信能力比學歷重要,就像你們也深深相信學歷很重要一樣
我不否認有很多大公司,學歷是門檻,沒有學歷就進不去,但是我的夢不在大公司,而比較想去一些小公司

賺大錢,一個月拿很多薪水也不是我想要的,所以大公司對我沒有吸引力
而一些新創企業,就我自己的經驗看來,能力會比學歷重要
畢竟學歷比較重要的話,那幹嘛用台大哲學的我,而不用台大資工的?
待在新創公司,薪水或許無法拿的很多,但至少是做自己喜歡的事,是開心的,讓自己過的開心,是我覺得最重要的事

我的人生目標之一,就是要去證明能力比學歷重要這件事情
我要用我自己的經驗,去證明給大家看
那如果失敗了怎麼辦?

我知道你們自己苦過,經歷過,所以才不想讓我也一樣苦。想讓我走一條最舒適的路,能夠碰到比較少的困難
但如果我接受了,我的人生過的很輕鬆,那碰到困難的時候怎麼辦?我有能力可以擔的起來嗎?
不讓孩子跌倒過,以後哪天他跌到了,就不知道怎麼爬起來

我不怕困難,我也不怕失敗
因為我知道如果哪天我真的苦到撐不下去,你們會拉我一把
我認為,那才是家人應該在的位子,讓孩子知道你永遠是他的後盾,要放手讓孩子出去,他才會知道現實

如果我沒有吃過檸檬,而你一直說他很酸,但我卻永遠體驗不到酸的感覺
社會很現實,我知道,但我仍然想自己出去闖蕩,儘管跌跌撞撞也無所謂
自己遭受到困難之後,才會真正了解到你們所說的現實,才能繼續成長,而不是像個孩子只能照著規劃好的路線走

我認同你們想讓我人生過的更順遂的想法,但順遂的路卻不是我想走的
我想自己出去看看,用自己的能力工作,自己去體驗這個社會的現實
或許我休學以後,可能真的體驗到「阿!原來學歷真的很重要」,那我就會乖乖的回去念大學

這個時候,或許已經「浪費」了幾年
但是,那幾年真的有浪費掉嗎?我體驗到了學歷的重要、社會的現實
我「親身」去體驗過了,我相信這些經驗都是十分寶貴的

所以我覺得那幾年,一點都不浪費
或許那個時候我已經22歲,但我一點都不怕,因為我年輕,我相信年輕是我的優勢
如果年輕就害怕失敗,綁手綁腳的,那怎麼能成長?
如果不趁年輕的時候闖蕩,以後就沒有機會了

到了30歲,或許我要開始養家,於是有了包袱,有了不能失敗的壓力
到那個時候,我才會覺得失敗是一件會令人害怕的事

但是我現在,才20歲而已
或許有人會覺得,那至少先把大二下念完吧!
這點我也考慮過,但是我一點都不想

你們的想法是「只剩」半年,但我是想「還有」半年
我已經等了一年半,才做出這個決定,為什麼還要等半年?
有些事情,現在不做,以後就沒有勇氣作了
我不否認有些事情的確要有一絲絲的衝動,但休學這個決定我還是考慮過許久

如果我還要念半年,那就代表我還要欺騙我自己半年。欺騙我自己,學歷對我很重要,台大對我很重要
但這兩件事是我打從心底不相信的,不相信的程度,就跟你們相信的程度一樣

我是真的想休學
我考慮過了,也有把退路想好(復學)
只是復學問題跟兵役問題我還要詳細去問過以後,才能真正決定

我不怕失敗,不怕挫折
我只怕自己沒有跨出去的勇氣,沒有接受失敗的勇氣
我不怕以後薪水低,我不怕以後工作難找,我不怕學歷真的很重要
我只怕自己沒有用自己的力量去努力證明自己相信的事
我只怕自己太輕易妥協,失去了自己的信念

休學,或許不是對我人生最好的決定,或許也不是對我未來最成功的決定
但我敢保證,一定是最勇敢的決定

也是最誠實的決定

胡立 上


上面應該把該講的都講完了,休學這一塊我就不再多做描述了。

休學完之後,當然就是專心在剛剛講的那兩間公司實習囉。現在可以來講一下他們都在做什麼了。

QLL

第一間叫做 QLL,一開始是做一些跟兒童教育相關的 App,有出了很多有聲書 App。去那邊負責的事情是寫一個 App,這個 App 基本上是由他們提出來,我們再一起討論過後決定要做哪些功能。

比較特別的點是他們的 App 是用 Corona SDK 開發的,也是標榜寫一次就可以在兩個平台上面跑。使用的的程式語言是 Lua,酷吧!

最後的成品長這樣:(我大概做到七八成就結束實習了,另外兩三成由後續接手的人補齊)

Traiwan

另外一段實習是在一間做民宿管理系統與線上訂房的公司,在這邊可以讓我真的接觸到產品,終於能夠做到公司員工在做的事。主要內容其實就是前端部分改改頁面,用 jQuery 提供一些功能,後端則是 PHP 增加新功能,資料庫用的是 MySQL。

在這間公司真的學到很多。因為實習生不只我一個,所以要跟其他成員協作。而那邊的老闆也滿注重程式的規範跟結構,會跟你討論應該要怎麼寫會比較好。因為是旅遊產業,所以也跟一些旅遊網站串接 API,看到 API 文檔是長什麼樣子。

他們現在網頁已經大改版了,所以介面跟以前不一樣,但功能還是差不多的:

在這間公司也實習了半年,對我的幫助有三個。

第一個是提升對 PHP、MySQL 以及 jQuery 的理解度跟熟練程度,在這邊做了很多功能所以累積了滿多經驗。

第二個是學到「取捨」。舉一個小例子好了,程式設計師看到某地方的程式碼寫得很爛就會想改掉,或者是看到系統很爛就會想砍掉重練,這些其實都可以做,但重點是「資源有限」,對公司來說,到底什麼事情才是最重要的?維持現狀的話,你可以去串接新的廠商的 API,為公司開通一個渠道。

決定砍掉重練的話,可以減少以後要還的技術債,可是在這兩週內對公司的營收不會有任何實質上的幫助。尤其是在資源十分有限的新創公司,這樣子的取捨更顯得重要。有可能一個錯誤決定,就把整個公司帶向死亡。

這讓我理解到有時候不是程式的問題,而是資源的問題,重點在於資源應該怎麼分配才會更合理。

第三個是對於新創公司的嚮往。還記得那年暑假因為公司要到花蓮拓展,把整個公司包含實習生大約十個人一起拉下去花蓮,在那邊租一間三房兩廳的屋子,在那邊生活,也在那邊工作。

早上起床輪流出去買早餐,吃完早餐之後直接在餐桌上拿出筆電開始工作,工作到中午出去買便當或者是叫外賣,晚上工作結束之後大家一起去海邊走走或者是去逛逛夜市。全部人都生活在同一個屋簷下。

這時期是我對新創最難忘的一段,因為這樣子的生活實在是太有那種「新創公司的早期刻苦生活」的感覺,好像每一個人都願意為了公司付出所有,願意把工作跟生活混合在一起,齊心協力向著目標走去。這樣子的感覺我很喜歡,覺得這樣能有共患難的革命情感。

當初跟這兩間公司談實習的時候,期間都是半年,一直都八九月的時候正式結束。接著我就按照原定計劃等當兵,退伍之後出來找工作。

終於踏入職場:第一次求職

我原本就有持續在搜集一些理想公司的清單,其實我原本只打算投那些公司的,可是後來我心念一轉:「既然是第一次找工作,那不如累積多一點經驗吧!」,於是我就打開 104,任何系統推薦我的公司我都按「應徵」。

那時期詳細的面試心得我有寫在ptt上面了,一共面試了十五間公司。而這些經歷也對我滿有幫助的啦,至少讓我知道面試的流程以及面試的必考題大概會是什麼。

不過,幸好我有這樣投。因為我原先的那些理想公司清單,只有一間有理我,其他間連面試的機會都不給。而唯一那間面試過之後也沒有錄取。

面試結束之後必須要做好心理調適,自信心一直是我覺得很重要的一項人格特質,若是太高容易變成自我感覺良好,太低容易小看自己。我自己是中間偏低,界線到底在哪邊一直到現在我都還是拿捏不準。

但以我那時候來說,我覺得我的程式能力以社會新鮮人的標準來說應該也是挺不錯的吧!要求的薪資也沒有很高,有些甚至直接寫「依公司規定」,為什麼還是這麼多公司拒絕我?

後來我用兩個理由說服自己:

  1. 不是你不夠強,只是跟這間公司不適合而已
  2. 公司低估你,這是那些公司的損失

但我還是有拿到三四間公司的 offer,最後去了一間辦公室很漂亮,離家很近,做的事情也是我有興趣的公司。

初試啼聲

我正式工作的第一間公司很有新創的感覺,光是辦公室就很像新創公司了。

在程式上面主管也是給予我十足的自由,願意讓我花時間去學習 Node.js 並且應用到專案上面。在這間公司其實我做的事情滿多的,從前端 React + Redux 到後端 Node.js + Express,MySQL, MongoDB 跟 Redis 也有碰過,再到 Android 這端維護公司跟其他遊戲廠商串接的 SDK,前後端甚至移動端我全包了。

但其實在這邊學到最多的不是上面這些,而是對主機與架構的理解度。我在進去這間公司以前,是沒有用過 ssh 的,也沒用過 nginx,都只是聽過但不知道是什麼東西,是來這邊之後才知道 nginx 有多厲害。

在這之前對後端架構也是一竅不通,什麼 Load balance,什麼 NAT,什麼異地備援或是 DB Replication 我聽都沒聽過,是來這邊之後才慢慢學到這些的,也學到 AWS 的使用方法。對伺服器架構的理解程度瞬間提升了一個檔次,從完全不懂到能夠理解基礎。

在這裡我用程式解決了很多問題,也學習到一些新的用法跟技術。在這間公司待了一年多,我覺得成長了許多。如果你想知道我到底實際學會哪些東西,可以參考:資料庫的好夥伴:Redis用 Node.js 快速打造 RESTful API[心得] 與 DDoS 奮戰:nginx, iptables 與 fail2ban[Android] 人人都會的 apk 反編譯[心得] 高併發伺服器設定[Android] apache thrift 入門與android上的實作

除了這些以外,還有一件事情要特別提起,那就是在這間公司主動開設的內部課程。

教學的開始

當初跟一個同事在公司內一起開了 JavaScript 的課程,只要有興趣的人都可以來上課,總共是十堂,每堂應該是一個小時左右。在上課的過程中,我發現許多人其實缺少計算機概論的基礎,導致他們對於一些概念理解困難,我就想說,是不是有機會能夠提供簡單版的計算機概論課程,讓他們能夠更好的理解。

所以在這門課結束後,我就自己開了生活中的 Computer Science系列課程,希望能用簡單易懂的例子把計算機概論講得更生活化一點。

而這堂課其實就是我之後在 Hahow 上面開設的:初心者的計概與 coding 火球術的前身。

其實會一腳踏入教學的世界,除了 Hahow 這門課程以外,還有另外兩個因素。

第一個是我之前寫的:十年程式自學之路,這篇文章獲得知名度之後就有一些人來找我合作,大多都是去講自學程式的心得以及給自學者一些建議等等。

第二個是我在 ptt 受到其他人影響而發起的免費程式教學

這兩件事情再加上 Hahow 的課,開啟了我的教學之路。從一直在部落格上面問問題到自己開設線上課程,再到實體一對一講解程式概念,不知不覺就變成一個一直在分享的人了。

但其實你看我前面舉那麼多例子你就知道,我原本就是一個很愛分享的人,看我部落格這麼多文章就知道了。我一再強調我分享的理由是因為我這一路走來,真的受過的幫助太多太多了。要不是有網路上熱心前輩們的分享,我也走不到現在的位置。

另一方面,分享其實也是在「幫助以前的自己」,我希望不要有人跟我犯一樣的錯,我希望跟以前的我有一樣疑慮的人,都能夠找到解答。因此在我自己找到解答之後,才會分享出去,希望能幫助到「跟以前的我一樣的人」。想知道更多教學理念的話,可以參考:Lidemy 鋰學院:為初學者而生的線上程式課程平台

講到這邊,其實我的程式生涯就差不多了,現在的工作這一段因為待的時間較短所以先忽略掉,講到這就行了。這系列文章到目前已經涵蓋了從國小一直到出社會,將近十幾年的時光了。

結語

自己整理完這一段十年的程式之路以後,依舊覺得自己的背景真的很特別,而能在小六的時候就找到一生的志向也是無比幸運的一件事。我以自己這樣特別的背景自豪,這樣到處沾一點的背景,擴展了知識的廣度,也讓我可以從更多的切入點去解決問題。

而這樣自學程式、人文相關科系的背景,也讓我覺得自己更適合程式教學。因為我也是那樣走過來的,我也體驗過迴圈很難的日子,經歷過被指標搞瘋的時候。自己走過來之後,就可以用一種過來人的心態,幫助別人也一起走過來。

會寫程式的工程師有很多,但同時喜歡教學的可能只有一半,又喜歡分享的再砍半,還要能夠把概念解釋得清楚又少了一半的人。這樣一直減下來,最後的人就所剩無幾了。

幸好,我是其中的一個。

雖然文章很長,但仍然有許多段經歷沒有提到。

可是要完整提到的話還要再寫好多,我就先記在這邊吧!像是跟幾個朋友做的台北市長選舉政見 App:Brighter Future,或是讓我在上班的第一年還持續跟學校有連結,並讓我接觸到設計思考的 InfoPlat。還有不斷分享,不斷逼自己每個月一定要產出一篇文章的 Techbridge,這些經歷也都對我很有幫助。

上面每一段故事裡出現的人我都很感謝,都是幫助我成長的養份,讓我明白自己的價值在哪,讓我明白我原來還可以做得更多。

我目前最新的方向就是程式教學這一塊,是我難得很有熱情的一個領域,如果對之後教學的動向有興趣,歡迎追蹤 Lidemy 鋰學院粉絲專頁

最後,也希望正在閱讀的你可以從我的故事中得到一點收穫,只要能有一點點就好,感謝。

Comments

comments powered by Disqus