學習手機客戶端 iOS 或者安卓軟體的開發,有哪些好的建議(包括入門書籍,開發經驗,行業相關信息)?


首先,不要和我一樣兩個一起學

Android和iOS程序編寫,是兩個完全不同的體系,兩者基本上就完全不存在交集,唯一扯得上關係的估計就只有OO Design這貨了

再之,如果你要學Android,那麼請絕對不要碰iOS,哪怕是轉到iOS也不行!因為一旦轉過去,你馬上就懶得從此不再願意寫任何Andoird軟體了,除非你有極其強大的信念和推動力(就和我一樣)

本人前些日子完成了iOS版的《輕國閱讀》,這幾天寫Android版寫得那個痛苦啊……好不容易搞出來了……人都要死了……

接下來我們來談一下Android開發和iOS開發的門檻問題

在這個問題上,我和@劉克波 的觀點是完全相反的。

Mac電腦,這就是錢的問題,而Android開發,門檻都不是錢可以搞定的。

比如說界面構架,iOS下你可以選擇StoryBoard、xid或者代碼構架;Android下,呵呵,那不是由你選的,雖然谷歌說你可以用代碼構架,呵呵,構架出來你自己都不認識,一定要求XML和代碼混合構架,不然就是各種問題,比如說坑爹的LinearLayout元素填充……不談……

再比如說兩個界面之間的Object傳遞,iOS真的就一個Function的事情,Android那就是坑爹的Parable了……你說谷歌你丫就算強制MVC也沒必要這麼坑爹啊!!

Mac電腦、iOS開發設備,最多就是個錢的問題,『能用錢解決的事情都不算事』;Android這邊各種技術難點才是真正的『事情』。

最後來談一下行業相關信息

做Android,絕對不要想著『單飛』,因為這個世界上就沒有一塊地方是可以給你Android程序員單飛的,你就是做到吐血的東西也收不到那麼多錢,盜版泛濫啊(不過現在有所好轉,因為Android 4.0+之後的收費軟體加密機制,不過這樣救得放棄Google Play非收費市場)。

做iOS,最好也不要想『單飛』,因為這個市場太滿了,好東西太多了,人眼球都轉不過來,哪來起步用戶呢……


好一段時間寫的了,關於開發者的一些基礎知識的分享,希望隨你能有所幫助。很長,需要有耐心慢慢看完。

A.教材上的知識

這部分內容來自計算機專業的課程教材。也有可能會涉及一部分來自其他相關專業或者相關課程的內容。

B.編程語言

每一個程序員只有在會使用一門語言的情況下才有可能從事開發工作,所以學習並掌握一門語言是最低要求了。

C.SDK

光有一門語言是不夠的,從事任何實際的軟體開發都需要一個類庫或者開發包才可以完成。比如C語言中的庫函數,C#中的.NetFramework類庫,Windows的API等等就屬於這個範疇。這方面的資源有個平台DevStore可以關注下,收錄了很多的sdk服務 配置過程 評測,直接搜索就可以了。

D.開發工具

以如今的情況來說,沒有開發工具理論上也是可以開發軟體的,但效率就是一個問題,所以掌握並使用一個開發工具完成開發任務應該也是一個最低要求。

E.領域知識

軟體總有用戶,於是開發這些用戶使用的軟體,那麼程序員就需要了解用戶所在行業的知識,至少需要知道一些基本的必須的知識。還有一部分的內容也劃分為領域知識,比如從事Photoshop這類軟體的開發那麼圖形相關的知識就必須了解一些,從事工控軟體的開發,那麼對控制方面的知識也要有所了解。

以上的分類是在開發過程中我對知識的理解,一個程序員知道這些知識後從事一個軟體的開發應該是沒有問題了。下面分別來討論一下這些知識的學習問題。

一.教材知識的學習

做為一個已經從業的程序員來說,我不認為計算機專業的所有專業課程(包括專業基礎課,我在讀大學的時候還有這個說法)都是有用的。實際上對於大部分程序員來說,只需要很少的一部分知識就足夠了。這些知識主要由三門課程組成:數據結構,編譯原理,操作系統。對於大部分的程序員來說,其他課程的內容不是沒用,而是在實際工作中用不上。

數據結構這門課程的重要性,可以理解為是程序員的聖經,怎麼如何形容其重要性都是不過過分的。這門課程中需要掌握的內容,我個人觀點如下:

1. 掌握所有線性數據結構的知識,比如表,棧,隊列等(廣義表可以不作要求)

2. 二叉樹的基本操作和基本使用

3. 圖中需要知道遍歷和了解最短路徑演算法,以及相關的一些概念

當然對於某些程序員來說,這是不夠的,因為從事的具體的軟體開發工作會有不同的要求。但是對於大部分從事MIS軟體開發的程序員來說,這些知識夠了。掌握這些知識可以有兩個層面的要求。第一個是完成足夠的習題,從而可以熟練的答題,第二個是能夠在實際工作中使用數據結構描述實際的事物。做到這兩點要求應該說不算太高,注意多加練習就可以了。目前來說這門課程的經典教材也不少,相信只要按部就班的學習完就是合格的了。

編譯原理這門課程主要是學習方法和思想而不是課程中的知識本身。因為畢業出來能從事編譯器開發的人實在是太少太少了。這門課程需要掌握了解的東西不多,我個人的觀點主要是以下幾個:

1. 確定有限自動機和非確定有限自動機的使用

2. 詞法分析程序的實現

3. 語法分析的方法

自動機在實際應用中的體現就相當於是狀態轉換圖,這個工具非常的重要,希望能夠務必掌握。我們在開發EntityModelStudio時,設計界面交互部分的內容就是先設計出狀態轉換圖然後再寫代碼的,否則直接開發的話就會面臨開發失去控制的風險,同時重構和維護也會相當麻煩。所以這個工具極其強大,非常實用。另外提一下,非確定有限自動機,這個工具的能力和確定的有限自動機是等價的。但是由於它的不確定性,更符合人的自然思維習慣,從而在某些設計場合相對會方便很多。這一點是很實用的,也是很吸引人的。

掌握詞法分析程序的實現,可以大幅度拓展開發能力和思考能力。這部分東西理論上描述可能比較麻煩,但是實際使用時還是很容易上手的,所以非常值得學習一下。語法分析程序不需要掌握了,畢竟開發編譯器的機會是微乎其微的。但是相關的方法和思想希望能夠了解,這可以幫助程序員用電腦的思維來思考問題。

操作系統需要掌握的東西只有兩個:

1. 五大管理的基本方法,尤其是涉及內存管理的策略

2. 線程或者進程的同步技術

操作系統是複雜的,但是教材中介紹的這些管理方法相對來說是簡單易懂很多了。這一難一簡之間體現了基本知識的重要性,基本知識在實際開發中的應用的廣泛性。好好的體會,就可以明白用簡單方法解決複雜問題的技巧。線程進程的同步,這個就不用多說了,大家都知道它的作用,如果實在不想掌握的話那我也非常願意相信你的理由一定是充分的,否則你絕對不會那麼做。

最後我想強調的是,無論你如何看待這些知識:可能覺的沒用,可能覺的太難,可能是不感興趣,但是如果你想做程序員的話,那麼請你務必最大可能牢固,最大可能熟練的掌握它。

二.編程語言

對於一個程序員來說,一般需要掌握2,3門語言是基本的,並且學習一門新的編程語言也是基本功級別的能力,所以這部分主要談談快速學習一門新的編程語言的方法。我學過的語言有這些(這裡編譯器和語言的概念等同了並且不按先後次序):Foxbase,C,C++,彙編,Visual C++,Delphi,FoxPro,VB,C#。就我個人的體會來說,這些語言可以分為三種類別:非面向對象的,面向對象以及支持可視化設計的。

這三種類別的語言有一些共同的內容,而這些內容也是我們在學習一門新的編程語言時首先需要知道的,可以說是關鍵的知識點。這些內容大致如下:

1.常量,變數,數組,不同的數據類型

這部分需要掌握常量,變數,數組的定義,初始化,不同數據類型的使用。數組中元素的讀寫,作為參數如何定義,作為返回值如何定義。有些語言還支持數組大小的重新定義。

2.函數(或者叫子程序)

函數如何定義(比如參數和返回值),如何調用(這裡存在非同步調用和同步調用的問題),全局的還是非全局的。

3.流程式控制制

分支結構:if語句,if else語句,switch語句;循環結構:for語句,while語句,do…while語句,有些語言可能是Loop。

4.最基本的輸入輸出和文件操作

最基本的輸入輸出語句可以幫助你在學習語言的過程中完成簡單程序的練習任務,比如:輸出到控制台,dos操作系統中輸出到屏幕等等。文件操作也要知道,至少以後寫個程序生成日誌文件就會了。

以上內容在學習一門新的編程語言時,希望能首先掌握,這能讓你很快的入門,並儘快使用新語言寫出代碼。另外還可以關注一下其他方面的內容,比如:

1.了解語言的新特性

這個階段只需要了解,不需要掌握,記住有這些新特性,在需要用的時候想起它們就可以了。

2.了解一下幫助文檔中,該語言的所有關鍵字

這部分內容有可能讓你發現一些很有用的東西。

好了,知道這些內容差不多一門新的語言就算入門了。當然還有其他很多東西,但是這些內容可以在具體開發中遇到時再去找例子就可以了。下面談談這些語言的差異。對於面向對象的語言來說,需要知道面向對象三大特徵:封裝,繼承,多態在具體的一門編程語言中是如何表達的或者等價表達的。對於支持可視化設計的語言來說,還需要知道如何設計窗體,以及常用控制項的使用。按照這個方法,從一門已經會的編程語言到學習另一門新的編程語言應該是比較快的。對於還在大學中學習的人來說,我的建議是C++或者Pascal中的一個,VB或者C#中的一個或者其它可視化開發語言中的一個學習一下。如果可能學習一下彙編是最好的。

三.SDK

掌握一個SDK才能使程序員在掌握一門語言的基礎上進行實際的開發,如果僅僅是一門語言那是不夠的。所謂SDK舉例子來說就是Foxbase的命令和函數,C的庫函數,C++的類庫(比如微軟的MFC),Windows的API,.NetFramework,這些都是我所說的SDK。程序員可以根據自己的實際開發需要,有選擇的學習相關的內容。我最初的做法是先google,然後查文檔,一般的問題都可以很快解決的,慢慢的也就逐步掌握了。但是搜索的過程中難免會搜索不到你想要的東西,需要SDK服務的話就去DevStore平台上找,像一些日常遇見的問題可以去百度,每個人對同一個問題有不同得看法和解決方法

另外一個建議是買一本書學習也是可以考慮的,這也是一個不錯的方法,只是買到好的書需要緣分。就我個人來說,絕大部分的情況下是看電子書,直接從網上下載的。

四.開發工具

除非你只用獨立的文本編輯器寫代碼,並且用命令行編譯,否則你一定需要一個開發工具,尤其是一個帶IDE的開發工具。對於你使用的開發工具而言,需要了解的基本內容如下:

1. 項目或者工程的創建,屬性修改,打開關閉等基本操作

2. 具體開發時的環境設置

3. 項目中的文件組織及管理

4. 常用功能的使用,比如:編譯,執行,斷點設置,代碼跟蹤,調試信息輸出,實用的快捷鍵,調試時變數查看,查找/替換等等

5. 從幫助文檔中了解IDE的新功能。因為這些功能有可能對你是非常有幫助的。

6. 幫助文檔的獲取

如果有自己的使用習慣的話,還可以了解一下如何定製IDE環境以滿足自己的開發習慣。首先了解這些內容可以幫助你相對快一點適應一個新的IDE。

五.領域知識

一個從事技術工作的程序員需要了解與技術不相干的領域知識,確實有點無奈。但是在具體的開發中,不了解這些知識就無法更好的理解用戶的需求,也無法更好的完成開發任務以及與同事領導的溝通。所以這個步驟是重要的必要的,有時候有可能還會帶來更嚴重的後果。在有些項目中如果不能很好的了解這些領域知識,項目中的成員有可能會被替換掉,我個人就有過這樣的經歷。所以這裡特別列出來強調一下。

差不多這些知識應該夠用了,下面再提幾個額外的內容,這幾點雖然和開發不是太直接相關,但是確實也很重要。它們是英語,數學,讀源代碼和讀書,有餘力的程序員可以盡量提高這幾方面的水平,這是很有用的學習途徑和方法。對於英語而言主要是讀和寫,這樣就可以閱讀英文資料並用郵件,論壇或者聊天工具和老外溝通。由此獲得的幫助是非常顯著而高效的。這裡要說明一下,微軟論壇上的回復的質量非常之高。

另外推薦你關注DevStore(主要是開發者服務商店)還有csdn和開源中國,都是很實用的網站。


DevStore(http://www.devstore.cn),主要是整合開發者會用到的服務,可以實現在線對比評測,省去自己去網上搜索尋找的過程,還有sdk配置過程,很方便的,嘿嘿,我還在這個網站上寫評測掙過外快呢。


csdn是 中國最大的開發者技術社區,牛人還是很多的

開源中國是目前國內最大的開源技術社區,主要是軟體下載,源碼託管


首先感謝別人的邀請,其實我只是一個剛剛進入Android的程序猿。

我從2010年4月開始接觸Android開發,具體的Android開發工作從2010年5月份開始,當時來到現在的公司——喜訊無限,當時公司就我一個人負責Android平台的開發,剛剛開始做了一個小遊戲,算是熟悉了Android平台下開發需要使用的工具,學會如何調試如何適配解析度。之後繼續做了兩個項目,應該還算不錯,呵呵。簡單描述一下我的學習過程吧,具體的沒有什麼非常適用的方法,說實在的也沒有什麼很好的書籍可以推薦。

  1. 剛剛開始接觸Android時,購買了一本叫《深入淺出Google Android》的書,非常非常簡單,就是簡單翻譯了Android官方文檔的一些基本的內容,不過內容都非常不錯,確實是必備的一些基礎知識,能讓你快速找到進入Android開發的感覺,了解Android四大組件的基本特性,學會如何實現UI布局等等,而且這個時候我在eoe中呆過一段時間,確實學到了一些東西,不過後續的提升空間比較小。
  2. 當我開始逐漸自己實現自定義控制項的時候,開始完全依賴Google官方文檔和Android提供的源碼了,主要是在packages目錄下的項目的源碼,推薦可以購買一本《精通Android》的書,還不錯,目前應該是《精通Android3》了。
  3. 學習Android開發前期的曲線比較平緩,後期的提升相對會比較陡峭一些,不過這些都不是什麼問題,在Android開發中最讓我欣慰的就是任何問題幾乎都可以通過閱讀Android提供的源碼來確定問題的所在,可以通過源碼來學習Android Framework的原理和機制。
  4. 目前市場上對Android和iOS開發人員的需求差不多是對等的,不過還是要看你自己目前的技術狀態偏向,如果之前做過Java開發的話,Android會相對快一些,如果之前有過C的開發經驗,那麼iOS會相對快一些。


學iOS門檻高一點,得買台mac電腦裝XCode。要不就試著用vmware裝蘋果虛擬機,但是還是受限,應該不能和真機聯調。「黑蘋果」也就是某些可以運行mac os的筆記本可能也可以,但是沒用過不知道效果如何。

iOS開發用的是Objective-C語言,需要有C語言基礎,可以從《Learn Objective-C on the Mac》看起,對於iOS開發斯坦福大學有視頻教程。

安卓門檻就低一點,PC就可以了。安卓開發用java,教程什麼的不是很了解。


學習ios開發必看的書:

《IOS開發從入門到精通》、《iOS軟體開發揭密:iPhoneiPad企業應用和遊戲開發》、《iOS軟體開發兵法:應用程序與遊戲開發之道》、《iOS6編程揭秘:iPhone與iPad應用開發入門》 《Objective-C基礎教程》、《Objective-C編程之道:iOS設計模式解析》、《iPhone4與iPad開發基礎教程》、《iPhone開發秘籍》、《iPhone遊戲開發入門經典:也適用於iPad 》、《新手學HTML5移動開發:面向iOS和Android平台》

————————————————————————

希望可以幫助到你


先選好一個方向來做吧,android入門容易但是後面比較難弄,UI不好開發,涉及底層的也相對比較難,對於設備也沒啥特別的需要,ios入門相對比較難點,但是後面入門之後開發簡單,而且也必須要用mac電腦才可以,真機調試要用開發者賬號99美元一年,需要一個iPod touch或者iphone來測試,投入比較多。


推薦閱讀:

大家對同步推的客戶端公然上了App Store怎麼看?
帶交互的 iOS 產品原型可以用什麼軟體製作?
為什麼 iOS 中加粗字體需要重啟(Respring),而改變字型大小卻不用?
iOS 和 Android 到底哪個優秀?哪個更有前景?理由是什麼?
iOS開發,視頻播放,項目不支持橫屏,如何監測手機是否橫屏?並旋轉視頻播放器view?

TAG:iOS開發 | Android開發 | Java | 移動開發 |