移動應用開發入門,是否可以考慮先學習 React Native?

只學過一門Python語言的小白 想自學app開發

問了一個前端的朋友 他表示未來是JS和React的天下 而且掌握react native可以跨平台

但是我搜索了一下發現React native是需要前端經驗(學習成本比較高)而且不能實現所有性能

所以在糾結是否專註於ios 從Xcode上手

還是一開始就學習React native?

搜索了一下並沒有相關回答

望指教~謝謝


建議原生android或者iOS選一個。React Native 只是聽起來很美好,好像只需要開發一個工程,實際上這一個工程遇到的坑所消耗的時間不會比開發兩個原生工程更少,而且會遇到一些無法解決的問題。

就目前而言,直接開發原生Android與iOS app是成本最低的技術方案,也是最可靠的方案。有閑心可以嘗試新技術,否則就不要趟坑了。有些東西只是看起來美好,實際你去看看 app store,有幾個app是整個用rn做的?rn官網showcase里的app大部分也只是個別頁面用了而已。

對於初學者而言,很重要的一點就是盡量減少不確定性,相比於rn,原生android和iOS的莫名其妙和無法解決的坑會少得多,並且解決方案和資料會多得多,各種你需要用到的組件和庫也會多很多。react native 的api複雜度並不比原生低,而成熟度和完善程度不是一個量級的。

補個圖:

另外,你問前端同學往往對其他技術領域了解不多,只看到自己圈子的情況。在客戶端領域來說,普遍對 react native 只是看個新鮮的態度而已。這個東西完全依賴 native,能力是native的子集,又引入了大量問題。上手難度對於非前端而言,比native只會更高,所謂學習成本低僅僅是指前端同學想轉來搞native而已。

有人說 react native 是未來?這可不好說,目前來看優勢很少缺點很多。再說這又不是第一次想用前端來兼顧兩大移動OS了,PhoneGap都五年多了,還有ionic等等很多框架,業界踩過坑以後還不都是老老實實回來寫原生android iOS?這次只不過是 facebook 明星效應,踩完坑大家還是會回來的。當年fb主推h5做移動端,都把自己帶溝里去了。


如果目標是前端工程師,順帶做個小app,RN確實是很不錯的選擇,如果目標就是移動端開發的話,還是直接選擇某平台去學習吧。

我司幾個月前就開始嘗試RN和native混合開發,我就是寫RN的前端之一,我們有幾個模塊是RN開發的,論感想,RN真的坑太多了,尤其是考慮不同平台不同版本的兼容性的時候,甚至還出現過上線後碰到某原因崩潰的問題。今天我們把RN從0.36降回了0.28,為了解決ios8上的bug,導致一些使用了新版本特性的地方需要修改,欲哭無淚。

RN最近更新速度很快,api經常有變化,至少等待1.0穩定版再看吧。


瀉藥~

根據題主的描述,題主的目前經驗主要是在python,並且只學過一門python。因此,對於題主的來說,無論是web前端(含 pc web、h5...)還是客戶端開發(iOS、Android...)這一塊是沒有太多經驗的。因此,題主掌握了基礎的編程邏輯思維,但是缺少了UI開發的相關經驗。其實,學習web前端、React native、iOS/Android都是可以的,都可以幫助你迅速提高應用層面的經驗。但是,題主沒有特別明確的表達自己選擇方向的初衷或者理由是什麼?那麼,這裡,我做幾個大膽的假設:

1. 快速開發App

如果題主是希望可以快速開發一款App。根據你描述的目前情況,還是需要補充不少知識。尤其是面向用戶的知識,例如:前端UI、交互、設計、產品等。如果單從技術的角度來看,提供可以選擇react native或者weex,都是不錯的選擇。但是,無論是react native還是weex,都需要掌握最基礎最基礎前端的基礎知識(html、css、javascript)。但是,這無需題主了解很深,基本上邊學邊寫代碼即可。react native這一塊會有一點成本,就是jsx語法。但是,也許題主完全沒有接觸過前端,完全是可以當作新的語法來學習即可。

因此,是出於快速開發App的目的,選擇react native或者weex都可以。

(1)可以不用去深入學習iOS/Android的知識;

(2)前端相對入門較快;

(3)至少跨平台/移動動態化是一個趨勢;

參考資料:

react native

(1)入門指南:vczero/react-native-lesson

(2)快速找到附近的廁所:vczero/toilet

(3)App集合:vczero/React-Dou 或者 vczero/React-Native-App

weex

(1)快速入門實踐指南:vczero/weex-learning

(2)微閱讀應用:vczero/weex-yy

(3)vczero/weex-yy-h5

其實,還有很多其他同學的貢獻,我就不一一貼了。參考資料基本都能搜索到。

2. 進入移動開發領域,並且深入進去

如果題主是希望深入移動領域。那麼,選擇哪一個作為切入點都是極好的。個人建議,可以先從Android或者前端入手。畢竟Objective-C語法可能早期還是有些難以接受。如果直接學習swift吧,Objective-C還會繼續存在很長一段時間。

那麼,學習Android的好處就是:

(1)畢竟python學習的時間不長。學習Android的時候,可以了解JAVA,甚至可以深入學習JAVA;畢竟不能只學習Android SDK。這樣,可以幫助題主了解一門語言的更多知識。

(2)如果將來深入進去的,Android的方向還是很多的,比如底層(這也就是開源的好處)、比如優化。

(3)Android開發使用java語言,後期研究javascript,就不會感覺到特別的陌生。

注意一下哈,我這裡寫的是【移動開發領域】。因此,將來深入的同時,避免不了了解iOS、了解前端。當然,這就是後話了。如果真的到了深入一端的時候,掌握其他兩端應該都特別快。

3.把握趨勢,讓自己所學更有價值

如果題主是為了【把握趨勢】,領先起跑線的話。我相信上面的幾個:前端、react native | weex、iOS、Android都不會讓你贏在起跑線。因為有3點:

(1)他們都不是一門新【語言】

(2)他們都需要比較紮實的編程基礎。

(3)任何現在為人所知的知識,都是出來一段時間了。

【我覺得作為開發者了解趨勢是一件特別重要的事,但是,不是剛剛進入某個領域的時候需要去特別關心的事。】

因此,我們需要選擇一個入口,沉下去,然後才能很好的浮起來,才能衝出水面更高,更能看清前面的方向了。

至少,我覺得未來幾年,Objective-C和JAVA不會消失,相應的iOS和Android系統還會繼續存在;掌握這些本真的東西才是走的遠的保重。框架都在變,唯一不變的本質是【移動開發經驗的掌握】。說白了也就是:類似於Objective-C、JAVA、JavaScript這類語言構建應用的經驗,而不是上層框架的使用經驗。

即使社區特別發達,也會有純【上層框架】無法提供的功能或者組件,至少人類的需求一直在變。就像秋褲和打底褲的流行一樣,說不定,過了幾十年,大家愛死了【秋褲】。當需要底層能力的時候,掌握iOS | Android | JavaScript 開發就顯得彌足珍貴。

流行不流行,秋褲還在哪裡,看你在 墨爾本,那裡至少不會太冷。我上學那會,都不會太想這些問題,所以取名vc zero。就是純粹希望把vc++從零開始學好。加油~


謝邀,有點受寵若驚~

贊數最多的是來自鬼謠大牛,自己就是看他的書入門React Native的,感謝這些為技術發展做出努力的前輩!我想鬼謠前輩的回答已經是很中肯全面的了,基本可以參考他的意見。

如果你只接觸過Python,又有考慮iOS開發的話,那我覺得還是直接學習Swift比較適合,也相對容易上手些。不過就是現在很多公司還是使用Objective-C,除非你有針對性的投專門使用Swift的公司,不然進去的話也不好接手公司原項目。

如果想直接學習React Native,那成本相對來說就要高很多,需要學習的東西更廣些。React Native不僅限於UI的搭建,還要涉及到原生UI、模塊的封裝,以及JavaScript與原生的通信,所以這樣一來,就需要涉及到JavaScript、Objective-C(目前iOS的第三方組件基本是用Objective-C來寫的)、Java以及React的知識,意味著我們需要學習更多,這些對新人來說,可能會是個很高的門檻。

門檻總會有的,不過技術廣無止境,希望題主能找到自己的切入點,保持堅持學習的態度,以後回過頭來看,會覺得很多是順其自然的。

當然我還在路上,哈哈,共勉!


好比是想要實現共產主義然後直接投胎到朝鮮。


只學過一門Python啊……那或許讓你直接轉Objective-C的困難比較大。

1. 語言層面的話,JavaScript(或者嚴格說是ECMAScript 7,React-Naitve是使用node-babel轉義到純ES5的代碼的)的話更容易上手一點,由於有著腳本的動態類型,簡潔的語法,而且避免了ES5時代的各種語言上的問題(無論是沒有class, module導致的各種工程化問題,還是var的全局this的坑,不同對象property拷貝問題),學習起來肯定比立即轉Java(Java的話,主要Android用的Java 7,做移動開發的話,會寫出很多匿名內部類)或者Objective-C(問題更大,發送消息而不是函數調用這個就能讓你糾結一短時間,更別說什麼內存管理了)要容易得多,語法層面的難度大概是Objective-C &> Java &> JavaScript

2. 框架層面上,由於畢竟React-Native只是藉由V8或者JavaScriptCore這種JS引擎執行,缺少了原生的支持,而且儘管到現在,版本號仍然沒有到1(截止發的時候應該是0.37),很多地方存在潛在的Bug(甚至是和文檔描述衝突的,比如組件層面的ListView、Input,樣式層面的borderType,還有一些引擎方面的問題,比如bridge,ImageLoader的崩潰),對個人學習和企業採用有一定的影響。

而原生的Cocoa Touch(iOS)和Android API都非常成熟,而且一定是Apple和Google專門撰寫文檔,測試過再發布的,並且所有新功能都會及時融入,開發用各種資料連百度都能隨便搜到,更別說stackoverflow上,基本可以說沒有什麼絕對的難點不能做。相比React Native在國內找不到幾個相對好的技術論壇,遇到一些少見的用例和問題,除了自己Debug,提Issue很少有成熟的解決方案。

性能方面,由於本質上就是用的原生的View和Layer,在移動平台上簡單的應用都可以達到理想的性能(不過實際上,Android上的React Native相對薄弱一些,需要相對多的處理和優化),至於真正需要優化性能的,也可以用原生Bridge出來封裝成一個組件或者流程,比起Hybrid H5這種不知道高端到哪裡去了。

3. 平台性

嚴格意義上講,React Native就不是一個專門跨平台的框架,常見的一般是通過把iOS/Android差異的地方和原生調用Bridge出來,統一用JS代碼處理,達到一份代碼再在Android和iOS復用,但是要想和前端的ReactJS混用是不現實的,付出的代價太大,除了控制項無法統一管理外,移動開發和Web前端很大不同,在於一個是適用於多級管理的流程式控制制和消息事件機制,另一個是強調單頁面複雜處理數據流管理和狀態管理(就算你能用Flux,Redux管理你的所有React Native項目,一旦App的層級和頁面深度越來越複雜之後,你的整個架構就得調整,而這就會凸顯移動和Web的區別)

React Native最大的優點,就是天生的動態性、快速建立原型的能力,適用於各種電商、團購、資訊、社區平台這種需要頻繁變更的內容。不同於Web前端這種用戶永遠拿到的是最新的版本代碼,移動App很大的一個問題是版本迭代、商店上架推廣審批限制,這對這種快速變動的內容造成了很大的問題。而H5在很多情況下性能是一個問題,這種地方就是最需要React Native的,也可以看到很多大廠都在相應的模塊部署了React Native,用來做熱更新特別方便。

4. 前景

雖然這樣說,以後在很長時間一段時間,React Native這種超越了Hybrid Web App的框架肯定會處於一個和原生混合的地步,畢竟集成難度不大,而且很適合上面說的那些業務。不過純粹拿React Native架構起來的大型App會很少,在國內Swift開發都相對較少的情況下,僅僅是精通React Native肯定不會有前景,肯定需要你對移動領域或者其他領域有深入才可以。

5. 簡單的總結性意見:

如果你的目標是短期內找移動開發領域的工作,而不是學習的投資,那麼我還是建議你學Java/Objective-C中的一個,對應Android開發/iOS開發。學習成本至少3個月吧,從語法、框架、Demo依次開始來,可以考慮優先去投一下實習,接觸一下真實App的架構、迭代流程

如果你目標學習興趣,想接觸接觸移動開發,那麼其實更推薦學Swift,不需要花很長時間學習Objective-C這個有近30年歷史的古老語言的語法(平均的話1周時間語法層面就可以搞定),而且也是社區很活躍的選擇,排除了語法層面上的問題,對Cocoa Touch框架的學習成本是要比Android API低一些,搭配可視化的IB和簡單的Autolayout,更容易做出簡單的Demo來實踐,而不需要浪費大量時間在UI代碼布局、XML布局上,所以其實很推薦學生來從這個方面入手。

如果你的目標是為了長期後的技術投資或者可能並不局限於移動端,那麼可以先嘗試一下React Native,同時建議主要學習一下Java,因為國內現狀的話Java可以做到大數據平台、業務服務端、推薦搜索等各個深度和各個方面,相比於Objective-C這種完全側重於客戶端開發的要廣一些,以後選擇的空間更大,而很多普通的iOS/Android程序員很可能最多停留到高級工程師就無法繼續縱向發展,要轉而橫向遷移的難度也很大,所以建議多考慮一下。


不要走邪路,RN是大牛的玩具,不是小白的工具。

RN有什麼優勢,我真心沒看到,

比OC強大?並不,

比OC易學,並不,

比OC主流,並不,

比OC穩定、並不。

那還有什麼好的,難道就是他給你畫了個大餅,指望有一天能用RN既開發iOS又開發Android。(據說目前對iOS平台支持好一些,Android平台還到處是坑)

等到那一天別人早就同時學會兩大平台的原生開發了。


看到題主的描述,感覺我來答還是比較合適的。我目前是Android開發,自學Android之前,也是對python有點了解的小白,學校里學過彙編和c,但都沒深入,後來工作中學的python。首先要告訴你的是,你用python做數據分析、網上爬蟲啥的和做app還是挺不一樣的。

現在的確有web一統天下的趨勢,但是你之前連Html、css和js都沒學過,上來就學ReactNative不太現實。況且RN目前還不成熟,有不少坑。如果你想儘快開發一款看得過去的app,我還是建議你學native,也就是Android或者iOS。

原生開發發展至今已經非常成熟,網上有非常多的學習資料以及靠譜的開源框架,學習成本低。而且,移動客戶端和web前端都是前端,有很多思想是互通的,在API背後,各個平台實現GUI的思考以及方法很多也是可以互相借鑒的。掌握這些原理和思想才是最重要的。

至於Android和iOS,我建議學安卓,理由如下 :

  1. iOS開發需要Mac和iPhone,經濟門檻高。
  2. Java語言比OC使用範圍廣,Swift雖然發展快,但是iOS開發目前主要還是OC。
  3. 得益於安卓的開源,安卓開發除了做App還有Framework層的開發,如果你以後想往底層走,這也是個方向。


少年,這麼跟你說吧,當你想做一件事情的話,千萬別慫,真的,別慫。直接懟就行了。
想學RN?學啊,猶豫這麼多幹啥,學RN對你以後做前端是有幫助的。當你能用RN做一個小應用的時候,你就會對程序的開發有一個自己的認識,再做別的會輕鬆不少。另外,到後期為了實現更多的功能你會自己驅動自己去學更多的東西。

至於語言,RN用的主要語言是JS,學學JS沒壞處。而且語言這種東西在很多理念上是相似的。以後再學別的語言不至於束手無策。不過現在JS能做到的事情真的是越來越多。

學RN看文檔就好,或者看看我在B站做的入門視頻也行~附上鏈接http://space.bilibili.com/3239018

還是那句話,直接懟,別慫。


別聽他胡扯,老老實實學原生,哪天心血來潮學一點js再考慮搞不搞RN


一,首先我肯定你學Swift是不會吃力的,因為Swift 跟 Python的語法有很多相似之處。

二,我個人是否定你朋友或持有類似觀點說在不久的將來都是跨平台語言的天下,而Native語言都會被淘汰的說法的,理由如下:

  • 羅馬不是一天就能建成的,同樣蘋果已經有精心經營三十年以及上百萬開發者的Objective-C和社區的狀態下又投入大量人力物力開發新的語言Swift不是拍腦袋就能做到的,在開發一個新語言之前蘋果肯定會分析當下市場、當下開發環境 以及未來十幾二十年的前景,如果明明知道未來的移動app都是用跨平台語言寫的話蘋果還不如直接擁抱它們。
  • 跨平台的最終目的是寫一次全平台運行,技術的不斷革新是時代發展的發動機,在當下跨平台開發app還是存在諸多問題,比如原生app的極致的用戶體驗、UI 自定義等等跨平台是沒辦法做到的,一個移動 app 吸引用戶最大的武器之一就是用戶體驗,至少在三五年內還是用原聲語言開發還是真理。

三,所以我是毫不猶豫的推薦你直接學習Swift,直接學習Xcode的iOS開發

四,再說說我理解的Swift以及Python個子的重要性

  • Swift 作為全新編程語言借鑒了很多主流開發語言的優秀特性,比如從JavaScript、Python、Go等。編程語言的強大在於其背後的框架,畢竟不是所有功能都要讓開發者自己寫,而是一門好的語言會讓優秀開發者為其提供非常優秀的框架,我覺得Swift具備這個能力。
  • Python 是非常強大的語言,在機器學習、人工智慧等領域目前Python是絕對的老大,包括谷歌的AlphaGo也是用Python來寫的,所以我覺得掌握這兩門語言的人在未來十年是最值得開的。

五,關於學習方式方面

  • 當然自學是能行得通的,如果英語閱讀能力好的話直接看官網文檔就能滿足並達到學習的目的
  • 如果英文不好、但搜索、整理、理解能力強的話通過網上的免費資料以及課程也能達到學習的目的,自學的話就是時間稍微慢長一些,大概在半年以上。
  • 如果想快速入門的話當然需要有人在前面引導、讓自己少踩坑,現在也有很多在線教育機構、個人、以及平台型的教育資源,因為是做了很多工作、勞動成果有交易價值,所以需要投入一點物質價值。

註明:我個人正在行事iOS學習方面的指導,也正在錄製一些課程(Swift 語法入門_騰訊課堂),當然只是找我進一步聊聊只要我知道的都能交流,願意學我課程的當然更開心咯,祝大家學新技術順利,個人QQ 578568439


可以呀,rn做前端,python做後端

前端基礎思想都差不多,開始學rn還能夠融會貫通android和ios相關技術。

我自己用rn做著玩的 都是ios版本

http://www.weichuanghome.com


未來是JS和React的天下 ,未來是何年?能不能活到?

建議選擇原生開發!編程是殊途同歸!

進階高級後你的眼界就不在止於形式上的東西!(我老大這麼教育我的!!! )


建議專註iOS比較穩妥.RN門檻確實比較高,而且莫名其妙的crash比較多,第三方組件質量參差不齊.其實我倒覺得專註python也不錯的,我現在正入門python哈,想自己爬取處理分析數據,比做界面更吸引我哈


我敢保證,你學react-native,如果完全不懂原生開發,你會發現,你越來越懵逼。建議你最起碼有點原生開發的知識,然後重點學習react框架開發,然後,會好一點吧。但是,我跟你保證,有很多深坑等著你的。不用害怕,作為一個填坑程序員,你值得擁有。:)


React Native還有很多坑,並不完善,React Native幾乎每個月都有新的小版本發布,至今還沒有推出1.0正式版本。這也恰恰使我們學習React Native的理由!

程序員就像蚊子一樣,群體很多,在後廠村路上10個估計有7個是程序員,但是每個程序員個體壓力又很大,想生存必須吸取新鮮的血液。

目前使用React Native的公司不是很多,當你作為一個產品經理或CTO時,你肯定優先跟隨大多數人的選擇的做法,有個專業術語叫做「業界最佳實踐」。因為這個詞出現的原因就是為了產品經理/CTO 推卸責任。既然我選擇的是「業界最佳實踐」,如果不成功,不是我的問題,而是「業界」的問題。看薦-黑板報


luke_up的博客 - 博客頻道 - CSDN.NET 希望大家能瀏覽瀏覽,提提意見,在此感謝不已。


推薦閱讀:

碼農如何從零開始做出有設計感的app?

TAG:前端開發 | iOS開發 | Xcode | 移動開發 | ReactNative |