前言

沒想到距離上次已經過了四個月了
然後再次寫 BLOG 竟然不是寫技術文章
不過應該也沒什麼關係,還是早早進入正題吧!

本文開始

大學階段

最初會開始接觸 Android ,還是由於大學專題的關係,這點很感謝潘健一老師,讓我一頭栽進 Android 的世界到現在
當初還是個連怎麼寫程式都搞不清楚的菜鳥,學會了點 JSON 就大驚小怪,會了一點 PHP 與 API 的建制就好像強的跟什麼一樣
現在回想起來,超級渺小的啊!當時!

程式結構也很糟糕,沒有任何的 Design Pattern 觀念,只知道一股腦的塞程式碼把功能做出來
不過在 PHP 上就有稍微做了些分層的結構,不會全部功能擠在一起,可能只是因為 PHP 當時讓我覺得比較像 C++ 吧?
雖然可能只是個錯覺,不過那時我的物件導向概念可以說是差得離譜,更可以說是完全沒有概念

後來荒廢了程式訓練將近一年,都在玩魔獸世界,這邊就可以不提了XDDD
直接進展到下一個階段:畢業出社會

初出茅廬

雖說初出茅廬,但其實根本不像孔明已經滿腹知識,只是一個不知天高地厚的小毛頭
雖然也知道 Android 的相關知識都存在於網路上,但能否靈活運用並解決問題跟知道這個「事實」其實根本就是兩回事。
所以就這點,將近一年前,去年七月時開始在某家公司上班,因為他們到現在都還沒做行銷,還是隱藏名字比較好

那個時候光是連客製化一個 Title bar 都要花上將近一周的時間,為了一個 iOS 的 wheel ,也用了將近兩周的時間
可見經驗與能力的差距究竟是多糟糕,不過那時還認為自己其實很強(靠腰)
這種情況持續到九月快十月,法國人進公司,整個的結構概念才真的有所起步

雖然那時才開始起步,但其實那時候法國人寫出來的結構(現在回去看其實還是有一定程度上不好的地方)讓我看的很痛苦
那時候我沒有任何一丁點 Design Pattern 或物件導向的概念,光是要看懂他的程式碼,還要趕進度,其實根本苦不堪言
還記得那幾個月根本沒一天睡好,天天熬夜,早上九點前起床趕上班,還擔心要報告自己的進度之類的

雖然以現在來看其實那時候的辛苦是有代價的,但不免會想應該還有更好的方法(實際上有,但沒經歷過不可能知道)
等到我真的弄懂法國人的 code 的邏輯的時候,他也離開了,不過我也同時掌握了 Design Pattern的概念
剩下的就是靈活應用,到此大約已經是今年一月中旬。

從去年 10 月開始算至今年 2 月,也有約 4 個月的時間
這期間弄懂了 JAVA 與 Android 的基本架構,學會各種不同的客製化,如何讓程式更容易 maintain
如果有稍微看過別人的 code ,就更能理解「架構」的重要

我看過擁有兩、三年以上的 Android 工作經驗者,有的實力跟 code 乾淨度真的除了讚以外找不到別的形容詞
有的光是看到那些 code 就會懷疑他是否真的有三年經驗
這時候也徹底察覺到,當我已經能夠分辨好的程式結構寫法與糟糕的程式架構之時,其實我已經有相當的程度了

雖說身為 RD 還是得謙虛一點,但是有時候自己的努力所建立起來的自信也是非常重要的
許多公司想要找 Senior Android Developer ,但實際上很多找到的只是冒充 Senior 的 Junior Android Developer
那 Senior Android Developer 到底消失到哪去了呢?

學習 Android 的必須注意事項

練習、練習、練習

其實重點不外乎兩個字・「練習」
我相信有很多人看到這裡就要開始問我說,他練習了很多 sample ,可是還是寫不出一個好的 app ,或是根本不知道「該怎麼實作出一個 app 」
我的回覆如下:「你的練習,根本連練習都稱不上。你只是拿了別人的東西依樣畫葫蘆,根本沒有融會貫通,自然根本實作不出來!」

我們身為 RD ,身為一個人,真正該做的,不是遇到問題就找人瘋狂地問,而是想辦法靠自己解決問題
當你都沒有花費心力在「解決你自己的問題」上時,為何會期待別人幫你解決呢?
我承認,有一個經驗者帶著做,一定會進步飛快,但這不代表你想要實作的 app 一定需要他人的 「 Sample 」啊!

別人做出來的 app ,你去下載,破解,想要學習別人的寫法,這些都是沒問題的
但是你有真的去理解 app 的作者為何要這麼寫?這麼寫的原因是什麼嗎?
我這幾個月來遇過很多這樣的 RD ,有實習生,有已經工作好幾年的 RD ,有對 Android 抱有一點興趣的人......etc

裡面有人除了破解別人的 app 外,其他理解都靠自己
也有人是破解了,看不懂,就開始瘋狂似的問人怎麼辦
也有人不知道怎麼破解後,就乾脆不學了

當然還有其他類型的人,不過就以上三種人,請問哪種人會學得最快?
如果今天是沒有程式底子的人,你最該學的是程式的邏輯,與相關的語法( Syntax )的基礎底子
如果今天是有程式底子的人,你最該學的是程式的架構與學習的態度

學習是沒有捷徑的,你必須一步一步來
如果 Android 是簡單到可以讓你用破解他人 app 你就能在短時間學得會的
我想就不會有任何專職 Android 的 RD 了

請不要想一步登天,每個人都是一步一步、紮實的砸下時間成本來學習的
如果你認為你天資很強很猛,看幾個 sample 就知道怎麼寫,那就不用出來詢問問題了吧?
我相信 Google 與 stackoverflow 一定找得到答案,為何都不先找就詢問一些問題呢?

實作、實作、實作

第二,想要進步,最快的捷徑依然是實作
如果你只會用你的頭腦想,用你的嘴巴問,你進步的空間是非常有限的
舉個栗子,如果鍾凱翔只知道用想的而不去做,他能有今天的成就嗎?

一個人是否有努力在一些事情上,是看得出來的
即使是現在,我還是秉持著「先自己 Google ,找不到解決方法才問人」
這應該還是最基本的,更不用說現在資訊這麼發達,網路資源這麼多,你會找不到資訊?當然找不到就問是沒什麼問題的啦

至於我花在 Android 上的時間有多長?
在看到真正的資深開發者後,為了趕上他們,我連坐車搭捷運、吃飯看動畫、睡覺的時間都拿來 Survey 相關資料
你知道搭著回楊梅的電車上,我還會刻意到南港站找到位置坐下,把電腦拿出來繼續拼嗎?

至少我是這麼拼過來的,一個人一天的時間只有 24 小時
你要如何運用是你家的事情,你可以虛耗一天不學任何東西
也可以花費一天只為了修養你的精神,也可以不停壓縮各種時間,只為了學習更多的東西

實作是最快的捷徑
但是實作也是得花時間去做的
很多實作上才會發生的問題,才是你要去解決的問題

如果你實作不出來,就表示你了解的不夠透徹,就必須繼續去學習,而不是想辦法找捷徑去偷工減料,那樣永遠學不到東西。

Chocolabs(假標題) 找工作(真標題)

其實我真的很難得可以看到一家這麼好的公司(我還是很討厭奉承的......怎麼可以這樣逼著我奉承呢!)
至於有多好其實我還是不要說太多好了,有被允許說話權再說
當然其他還有很多好公司,也有邀請過我去他們公司,只是最後還是很抱歉地打了回票

當你努力過後,你要怎麼讓別人看得見你的實力與能力?
你努力獲得的經驗與能力要怎麼展現給他人看?
只有兩個字:口才、口才、口才
還有四個字:真材實料

缺少上面的四個字,大概就會像某人批柯文哲草包一樣,被批成草包吧
口才不外乎也是很重要的,除了你自己本身擁有的能力外,你必須要向公司兜售你的知識
這種時候其實有兩種狀況

一種是遇上程式背景的面試官,你的真材實料被肯定;或是你的空肚子被發現
另一種是遇上沒有程式的「面市」官,通常你只要唬弄過去你就可以拿到高額的薪水
我說真的。

當然我還是推真材實料者,畢竟你擁有多少,那是你自己本身的財富
在 Android 方面(拉回 Android ),你能談的不外乎就是相關技術與各種cowork方式
不管是包含哪種 Design Pattern ,或是你的 Coding Style ,只要你能具體的說明,通常你的實力確確實實已經有一定程度

至於類似於版本控制的工具就有點像加分工具,那這邊就先不提了

Expand

我換公司的理由其實還滿多的,不過這邊就不詳細贅述
主要想說的還是,我們身為人,一生都在學習,你學習的東西不可能只有一項,當你發現你除了「工作」以外,什麼都無法學到了
你還要眷戀於當下的位置嗎?

人的一生,或多或少都在學習,只是你有沒有發現而已
你今天玩遊戲、打 LOL 、打魔獸,與人相處,都是在學習
工作能否讓你擴展學習的範圍與曲線,對我來說,是決定這份工作的價值高低

這一兩個月換到 Chocolabs 後,我學習到的東西絕對比留在原公司要來的多
為什麼呢?因為我有機會可以開始擴展我想要碰觸的東西,可以學習到更多其他人的經驗
什麼是學習?什麼是經驗?當你可以將一個原本不屬於你的能力,轉變成你的能力時,這就是你所學習到的經驗

現在我學習的東西已經不僅只是 Android 了,學習清單: Javascript,PHP,CSS,Ruby,Objective-C,Swift
然後 Git 目前也已經上手,只差最後的熟練了
然後除了這些以外,還攬了一堆其他的非工作之雜事......

包含教育體制與各種自己覺得很有趣的想法......
事情只會越來越多,你只能一個一個盡可能加速處理掉
當能力不停攀升,對於社會的變動我也認為根本無需擔心

說了這麼多的廢話,最後來個 Android 結語吧

Android 本身也是不停地在更新,我們也會不停更新各種知識,但是學習一些沒碰過的東西,你還是需要先將底子基礎打好來
除了學習 Java 本身的語法以及其自身所提供的 API 外,要能夠實作出一個 app,還得了解所謂的 Life Cycle
當這些基本都沒問題了之後,試著畫出一個流程圖,然後自己將流程圖上的 app 實作出來吧

以上的應用都沒問題之後,可以開始擴充功能,或是找尋第三方 Library ,增加自己的開發速度,同時也可觀察其他人 Library的寫法與結構
當整個快速開發都能夠達成後,必須要做的還有你的 app 的效能問題與 cache 問題

以快速開發來說, 20 個畫面左右的 app ,我可以在兩周左右產出一個架構很 ok ,隨時可以擴充或刪減的 beta 版 app 出來
或許還有能手可以更加速開發時程也說不定,不過考量到結構與延展性,我想一至兩周算是個極限
套句法國人說的話:「我不想做垃圾出來。」

總之,我相信大家還是願意不停精進自己的能力,只是找不到方法,或許這整篇看下來可能只有最後一段有用也說不定XD
不過這就是我的經歷,完全拼過來、動不動就熬夜的一年的經歷,也是建立起我的自信的經歷
另外我還要補充,多參加各種開發者聚會,你會學到其他人的寶貴經驗!

Comments

comments powered by Disqus