2016年8月30日 星期二

Android 從無到有(3)

大家好,我是Teng,
我從事Android App Development已經有三年經驗了,
分享一下我從無到有的學習路程認知。
如果你是新入行的朋友,可以參考參考,
也希望如果我哪裡走偏了可以被指正,感謝。
之前提到了寫程式之前應先了解測試與寫Code的初步,
如果有遺漏的朋友可以去之前的文章看看。
第三部分
當走過第一第二部分以後,
我相信大部分的Android App規劃已經不是什麼問題,
但比較困擾的是之後呢?
我應該要發展的廣?
還是專研的更深?
這點我沒有標準答案,畢竟我也只是小小碼農,
一切依造個人喜好。

Gradle(Groovy):

我覺得接觸專案到某個數量以後,
會自然而然的去接觸Groovy這個語言,用來操作Gradle,
譬如如何利用Product flavors去快速的部屬不同外觀但是相同內容的Application,
或是如何利用Gradle自動產生對應版本號碼,跑自動測試等等的功能,
值得高興的是Android Studio內建許多強大的Gradle Script,
我通常只要搞懂什麼Script是幹嘛的就能順利的使用這些功能。
不過還有很多不懂的地方就是了…

RxJava:

RxJava大概是近一兩年內最火紅的程式寫法了,
鑑於網路上超級多文章,就不多贅敘。

Cross platform language:

如果想要發展雙刀流(Android,iOs),
React Native或是比較淘汰的Cordova都是個入門方式,
最近跟人交流時也有聽過使用CMake建構非UI的程式架構,
供不同平台的語言使用。

AOSP:

如果對於四大元件在Android裡面到底是如何生成的,
或是想要了解Android從開機到使用者可以操作,
這一整套機制是如何運行的,可以花些時間專研這個,
我提供一些收集到的資源網址:
另外就是偷偷打個我們社群目前在試辦的讀書會廣告,
以下是大家一起編的教材。
還有本周三(8/31)會在台北舉辦的第二場活動
第二回AOSP學習會(試辦)

Domain knowhow:

或許你的工作注重的是非程式方面的商業邏輯,
那麼也會有許多值得探索的地方,
有時候要解決一些現實中的需求,
需要的不只是程式的專業,
一些非程式的專門知識,
如何與程式結合,也是一門課題。

------------------------------------------------------------
以上是我這三年寫Android中學習到的一點心得,
趁者最近有空閒的時候,把這三年來學到的東西,
系統性的自我分析一下,希望能提供新人們一些方向。
最後要感謝跟打個廣告給提供我許多學習資源的社群,
社群中有許多技術深厚的大大跟一起努力的夥伴,
在摸索程式的路上提供了許多建議,
也歡迎在台北的Android programmer可以一起參與這個社群,
大家互相交流成長!

2016年8月25日 星期四

Android 從無到有(2)

大家好,我是Teng,
我從事Android App Development已經有三年經驗了,
分享一下我從無到有的學習路程認知。
如果你是新入行的朋友,可以參考參考,
也希望如果我哪裡走偏了可以被指正,感謝。
之前提到了寫程式之前應先了解測試與寫Code的初步,
如果有遺漏的朋友可以去之前的文章看看。

第二部分

看這篇文章之前,
希望是對第一部分的一些基礎概念比較熟捻的程式開發者了,
但也可以依照個人學習習慣。
我認為當熟練了一些Android的基礎架構以後,
可以開始看這四個比較進階的東西,譬如:
Third party library:
原則上,
就是看一看網路上的大家提供了哪些自己寫的元件,
有些元件可以直接達成工作上希望你做到的事情,
既然有人寫好輪子了,也就不用自己造輪子,
可以讓事情的進展更快,也可以學習別人的程式架構、習慣、想法。
我自己是看這幾個以及Github上比較多星星的項目,
看到新的時候想一想自己大概要怎麼把她實作出來,
大約需要幾天,有空就實作看看,歡迎交流:
Design pattern:
隨著寫程式解決問題多了以後,
會發現有很多問題不是那麼的好解決,
會想知道有沒有更好的解法,
這時你就該開始看一看Design pattern了,
一方面可以驗證你的想法,
也可以知道別人如何優雅的解決這些問題,
譬如前一部份的Adapter就是一個經典的Design Pattern。
書本的話網路上很多推薦的了,
我自己是參考這些網址:
我自己也有練習用自己的話去解釋哪些Design Pattern是什麼意思,
不過還在練習當中(遮面)。
OOP(Object-oriented programming)
其實我自己是寫程式的過程中慢慢去體會了解這個東西的,
我也不知道我算不算是很懂OOP了,
但應該比一般人好一點點,
簡單來說就是把寫的程式都物件化,擬人化,
這樣在解決問題的時候就會非常的直覺,
而不會覺得很複雜或是很讓人思考起來很不舒服。
這個東西我比較建議去看市面上的書學習,
網路上的東西東一塊西一塊,
看著看著可能還是不懂他的涵意,
未來有機會我再整理一套我自己對OOP的看法…
DI (Dependency Inversion Principle 依賴倒轉原則)
我以前寫程式的時候也不是很懂這個東西,
一直到我後來系統寫得越來越複雜後,
發現測試開始很麻煩的時候,
才開始接觸這個概念。
program to an interface, not an implementation
寫介面,而非實作。
少用繼承,多用介面。
這部分我還不知道如何清楚的描述,就不多說,
下面列出我在理解的時候看的一些網路資源:
Android 有些Framework就是為了方便這個概念而實作的,
譬如Dagger
我自己覺得OOPDI是對立且需要兼具的能力,
對立的原因是因為為了顧及DI,寫程式的時候要考慮的比較多,
(可能是我還不熟悉,會寫比較慢XD)
而需要兼顧的原因是因為,
良好的OOP設計可以讓架構非常的完善跟修改快速,
而良好的DI可以讓測試時非常的清楚跟測試方便。
這兩者都具備的系統架構,我覺得是目前的我在這部分仍需努力的。

2016年8月23日 星期二

Android 從無到有(1)

大家好,我是Teng,
我從事Android App Development已經有三年經驗了,
分享一下我從無到有的學習路程認知。
如果你是新入行的朋友,可以參考參考,
也希望如果我哪裡走偏了可以被指正,感謝。
上次提到測試跟寫Code兩個區塊,如果有遺漏的朋友可以去之前的文章看看。

Code:

當你有了Java底以後,
你也可以先從Code開始了解,
我將Code這部分分為三個部分,
你可以在學習的過程同時產出成果,
然後循序漸進學習更深入的程式,
可能你之前學過一些相關語言,
那你就只有一開始入門的工具比較不熟悉,
或在做某些課題的時候可以直接跳過。

第一部分


首先,
你應該要先了解四大元件的基本,
包括生命週期,如何建構,以及其用途,
深入一點可以探討他是如何被實作出來的,
是從哪繼承來的,可以做到哪些事情。
也可以順便看一看Fragment是什麼,他的生命週期是如何的。

UI Widgets/Container/Layouts

當你對基本的元件熟悉以後,
你可以去理解程式的一些物件用法,
如Relative Layout,Button,EditText…
隨著工作你會慢慢的理解越來越多的元件跟他如何使用,
值得一談的是如果程式比較理解的話,
可以慢慢的往基礎元件看下去,
譬如幾乎所有的元件都繼承自View,
那麼View是怎麼被實作做出來的呢?
他又是如何處理觸碰事件等等的。

Adapter/ListView/Recycler View

他是Android裡面一個蠻重要的Design Pattern,
至於Design Pattern是什麼,要了解到什麼程度,
在了解程式的當下,
我覺得這個階段的你可以先不用花時間理解,
後續的部份我們會再談到這塊,只要先搞懂Adapter的概念即可。
為何要先理解Adapter呢?
因為Android有一個蠻重要的元件ListView,
在Android 5.0以後, Google出了RecyclerView,
但不論如何都需要學習Adapter,因為他是這些元件的核心單元。

Thread

因為Android幾乎都會碰到網路傳輸,
而在Android理面是限制UI Thread去使用網路的,
所以你還是要花時間理解多執行緒的,可以的話也多看相關的文章。

Animation

Android許多漂亮的過場畫面跟元件表現,
都是理解整個Android Layout架構後刻出來的,
如果有機會的話務必投資這塊,
可以讓你的App美觀程度大幅提升。

Call back

Android 幾大元件包括Click Event以及與網路溝通等等,
都使用Call back機制,徹底了解Call back機制,
可以讓你的程式不會出現讓人啼笑皆非的架構。

Else

其他的 Coding style
團隊合作用的Git
Android Studio Plugins
Coding tips
以及Clean Code等等的知識都能幫助你在寫程式的時候,
更好的跟團隊合作,以及擁有更高效率的產出。
林林總總打了一堆,
很多東西網路上都有相關資源,
可以自己去搜尋,
這部分的學習也是學不完的,
不過大致上就這些,一定程度理解了這些,比較好進入下個部份的學習喔!