我是如何從Web開(kāi)發(fā)轉(zhuǎn)向移動(dòng)開(kāi)發(fā)的?
我的職業(yè)開(kāi)發(fā)生涯是作為一個(gè)Web開(kāi)發(fā)人員開(kāi)始的,使用的是PHP。不久后,我切換到.NET生態(tài)系統(tǒng),使用C#和ASP .NET MVC框架來(lái)繼續(xù)搞web開(kāi)發(fā)。我一直以來(lái)創(chuàng)建的都是Web應(yīng)用程序,直到最近……
幾個(gè)月前,我開(kāi)始用Android和iOS來(lái)開(kāi)發(fā)移動(dòng)應(yīng)用程序,然后多虧Xamarin,我依然可以使用C#。我之所以寫(xiě)這篇文章是想分享一下我做了這個(gè)改變之后的感受。
為什么下這個(gè)決定
你可能會(huì)問(wèn),為什么我會(huì)決定從Web開(kāi)發(fā)轉(zhuǎn)向移動(dòng)開(kāi)發(fā)。因?yàn)槲蚁胍鲆恍┬碌臇|西以學(xué)習(xí)新的技能,雖然在web編程上我仍然有很多需要學(xué)習(xí)的地方。
我認(rèn)為,移動(dòng)app有一個(gè)前途光明的未來(lái),雖然已經(jīng)有很多app存在于網(wǎng)上的商店里。但是,新的移動(dòng)設(shè)備來(lái)了,如智能手表,它們是開(kāi)發(fā)人員嶄新的機(jī)遇。這是一個(gè)學(xué)習(xí)如何為移動(dòng)設(shè)備創(chuàng)建應(yīng)用程序的很好契機(jī)。
更何況我目前就職的公司恰好有這個(gè)機(jī)會(huì)能夠使用我最喜歡的語(yǔ)言(C#)來(lái)開(kāi)發(fā)新的Android和iOS應(yīng)用程序,那么為什么不利用這個(gè)機(jī)會(huì)呢。
新的編程模式
我知道編程的方式是會(huì)變的,這從我以前經(jīng)歷過(guò)的一個(gè)叫做Windows Phone的項(xiàng)目,一同參與開(kāi)發(fā)移動(dòng)應(yīng)用程序時(shí)就已經(jīng)得知。但我還沒(méi)有準(zhǔn)備好要做什么,并且也不認(rèn)為我能做好準(zhǔn)備。
不像網(wǎng)站中的應(yīng)用程序有特定的生命周期,你不能只是用響應(yīng)來(lái)回復(fù)請(qǐng)求。幾乎所有我從構(gòu)建Web應(yīng)用程序中學(xué)到的東西都不能幫助我——范式是全新的。
在這個(gè)領(lǐng)域中,異步編程是強(qiáng)制性的,因?yàn)槿绻磺卸歼\(yùn)行在用戶界面(UI)線程上的話,應(yīng)用程序會(huì)停止。我一直都想提高自己在這方面的技能,而且也被我找到了一個(gè)實(shí)現(xiàn)這個(gè)目標(biāo)的好方法。
分離關(guān)注點(diǎn)也不同,不再有Model View Controller(MVC),使用的是Model View ViewModel(MVVM)模式。即使我已經(jīng)用過(guò)(在WPF和Windows Phone中),但并不是在同一水平,我仍然有很多東西需要學(xué)習(xí)。
當(dāng)然,你還必須使用模擬器來(lái)測(cè)試應(yīng)用程序,每次要測(cè)試的時(shí)候,你都必須建立并部署模擬器,你不能只是刷新頁(yè)面來(lái)看發(fā)生的變化。反饋環(huán)很長(zhǎng),大多數(shù)時(shí)候都需要幾分鐘才行,因此調(diào)試會(huì)很慢也會(huì)很重要。
走出安樂(lè)窩
我大概在兩個(gè)月前,開(kāi)始工作于應(yīng)用程序,并且現(xiàn)在仍然有很多東西需要學(xué)習(xí)。我需要處理兩個(gè)我完全不曾涉足的生態(tài)系統(tǒng)(Android和iOS),兩個(gè)我一無(wú)所知的框架(Xamarin和MvvmCross)和一些并不容易滿足的業(yè)務(wù)需求。不過(guò),幸運(yùn)的是,至少我知道如何使用C#。
現(xiàn)在的我每天都在奮斗,我有很多東西需要考慮,主要的就是一些與我新的開(kāi)發(fā)環(huán)境相關(guān)的“怎么做?”的問(wèn)題。還有很多“如果…怎么辦?”的問(wèn)題:“如果網(wǎng)絡(luò)不可用,怎么辦”,“如果這個(gè)解決方案太慢,怎么辦?”,“如何為客戶提供***的體驗(yàn)?”……
有時(shí)候,我一整天都沒(méi)有辦法產(chǎn)出任何東西,說(shuō)實(shí)話,那個(gè)時(shí)候我會(huì)覺(jué)得自己真沒(méi)用,是個(gè)欺世盜名之徒——既然我不能在工作上生產(chǎn)出任何有價(jià)值的東西,那么怎么能認(rèn)為自己是一個(gè)專(zhuān)業(yè)的軟件開(kāi)發(fā)人員呢?
嗯,我覺(jué)得這種感覺(jué)就像走出自己的安樂(lè)窩,正處于學(xué)習(xí)階段的一個(gè)峰谷中。
有峰谷的學(xué)習(xí)速率
不放棄
不過(guò)我不是唯一一個(gè)正在轉(zhuǎn)換的人,我不是一個(gè)人在戰(zhàn)斗。團(tuán)隊(duì)中的所有人都不得不面對(duì)相同分量的學(xué)習(xí),高級(jí)開(kāi)發(fā)人員和初級(jí)開(kāi)發(fā)人員皆是如此。
現(xiàn)在回過(guò)頭去看我這兩個(gè)月的歷程,我認(rèn)識(shí)到,我還存在著各種不足,需要走的路還有很多,但我也學(xué)到了很多東西,比如說(shuō)現(xiàn)在對(duì)于異步編程和那些MVVM模式的概念相對(duì)而言熟悉多了。
如果我想成為一個(gè)專(zhuān)業(yè)的移動(dòng)開(kāi)發(fā)人員,那么我依然需要繼續(xù)學(xué)習(xí),繼續(xù)完成我的旅程,學(xué)習(xí)我缺乏的技能,產(chǎn)出符合客戶期望的價(jià)值。即使我的工作時(shí)不時(shí)地讓我苦不堪言,但是我不后悔,因?yàn)檫@是一個(gè)非常棒的學(xué)習(xí)機(jī)會(huì)。不管花多少時(shí)間我一定會(huì)成功。對(duì)了,以后我會(huì)分享一些Xamarin的技巧和竅門(mén)。
希望下次再見(jiàn)!