漫淡Android開發與Web開發的淵源

本文的主旨是Web開發有很多先進的思想,Android引進了很多,希望大家重視web技術,學會其中的思想,會有助於你設計程序。


先分享一下我的經歷吧。

還記得剛畢業時就常聽人說不想做web,有一種理由是做web要學很多東西,也有人覺得做web沒技術含量,連個排序算都不用寫,很不幸當時的我也覺得有道理,而且Web又無厘頭的把Java綁定到一起,至少在我們當時的公司是這樣的,從而Java也被鄙視了一番,這種說法也給了我們幾個C++的人帶來了很大的優越感,讓我們更加義無反顧的猛頭札進去研究C++的一些機制,如虛表,STL的源代碼等一些亂七八糟的東西,當時我們也比誰看的書多,也經常辯論一些技術問題,嚴格的說是相互攀比,現在覺得當時很幼稚的,不過那樣學東西是快一點。


說說Java吧,這個東西起初是不被我接受的,我學Java也是因爲趕鴨子上架,因爲當時科室要做一個Android的項目,經果就兩個傢伙懂Android,有一個要離職,另一個就是架構師,不過他也接解不久,而Android的應用是要用Java開發的,沒辦法,當時我的其它任務剛好做完,就叫我先上,架構師問我做不做,我就問他是既會C++也會Java,他說是,當時我覺得這種人很了不起,內心也想成爲他這樣的牛人,不過當時沒信心,我就問他覺得我行不行,他說很簡單,只要願學就行,就這樣我就開始學Java。不過那時是帶着鄙視Java的心理學Java的,用Java寫C++風格的代碼,比如說匈牙利的命名法啊,左大括號放到到行首啊(不過老被Eclipse自動糾正,老煩了),等等扯蛋的事,還曾抱怨這破語言怎麼沒有命名空間呢,唉,往事不堪回首啊。久而久之,發現Java沒那麼糟糕,甚至還非常智能,有了Java,鏈表是生疏了,但開發更快了,後來還慢慢的開始有點興趣了,過了半年之後,我反而發現了C++跟Java比還有一些不方便的地方,這個在另一篇博客上已吐過槽了不贅述了,只囉嗦一句,沒必要重複造車輪,程序員因爲用更多的時間去想你的程序結構該如何設計。 


現在開始說Android開發吧,我其中有很多來源於Web的思想,在我看來,Android應用大部分都是網絡應用,你不信可以數一數你手機上的應用,即大部分應用都要和服務器交互,其表現更像一個胖客戶端,本地應用其實很少,一般的Android應用都要從服務器下載一個列表然後顯示,你點擊吧,它又會打開另外一個頁面,很有可能有圖片,一般又是從服務下載的,這樣搞不就是瀏覽器的原理嘛,完了完了,瀏覽器是要倒閉了嗎,放心吧,不會的,那爲什麼不用瀏覽器呢,顯然瀏覽器用戶體驗沒這麼好,目前還做不到這麼強大,或做這麼強大得不償失。


所以我覺得Android就是一個互聯網的終端,Google是個互聯網公司,不是手機公司,爲什麼要做個Android系統,這樣看來其用意就不言而喻了。

再從開發的角度聊聊吧,首先Android的佈局文件XML跟HTML是不是很像呢,當然像了,因爲XML就是跟HTML設計的,Android爲什麼要先用XML做佈局文件呢,Window怎麼不用呢,iOS爲什麼不用呢,因爲XML可以很方便的描述一棵樹,而一個界面的所有View就是用一棵樹組織的。所以這一點跟Web開發關係應該不是很大,Android選XML也可能是因爲XML的表述能力非常強,你要是不信可以想想用ini文件怎麼使用表達一個界面的佈局,頭痛別找我,儘管如此,這一點使得Android開發和Web開發在外表上拉近了一步。


除了這些,更加相似的來嘍,都知道Android可以給一個View指定一個style吧,這是啥玩意吧,不就是一個精簡版的CSS嗎,style也有繼承,你可以去看EditText和ImageButton的代碼、你會發現很短,他們分別從TextView和ImageVIew繼承而來,就僅僅加了個Style,這個Style你也可以在SDK裏找到它,也寫得很簡單,就改了個背景啥的,很神奇吧,這些思想都來源來web開發。

另外還有Android的生命週期,你這思想概念來源於哪裏,反正我知道VC裏沒人說生命週期,都是直接寫個死循環,Servlet裏倒是有這說法,包含init(),service()等。還有,Android可以直接使HTML佈局,也可以跑JavaScript代碼,不知道你是否玩過。

所以我感覺Android應用開發裏有很多思想都來源於Web開發,Web技術博大精深,卻遭到很多人的排斥,真想不通是什麼原因,我強烈認爲一個程序的價值不是他對SDK或語言的熟悉程度,而是他的程序設計能力,他設計的程序的結構的品質,而這些都來自源於設計思想,設計思想簡單來的說就是一些指導原則,比如面向對象,設計模式,RESTful,只要你的設計思想飽滿,就一定能設計出優秀的程序,而且用任何語言和任何平臺都可以實現,C語言可以實現面向對象都聽說過,Shell也可以實現面向對象你想到了嗎。Web技術裏面有許多優秀的思想,非常非常灰常灰常值得我們去學習。


我又想到一種說法,有太多人覺得相對web開發,嵌入式和Linux內核要難很多,要懂硬件,直到電路,很不幸當時我也這麼認爲,所以我用了一兩年去學Linux內核和嵌入式,通信原理,信息編碼,唉喲,都學遍了,後來懂了發現不是那麼回事,其實根本不能那麼去理解,其實他們不具備可比性,這兩個東西根本就不應該放在一起來比較哪個難,因爲他們走的是不同的方向,用一句話說就是,嵌入式走的是具體化,而web開發走的是抽象化。嵌入式會具體到一個電路一個元件,甚至化學鍵和量子力學,而web是極其抽象,抽象到雲,虛擬化,分佈式,所以拿具體化跟抽象化來比較哪個難,我覺得沒有可比性,具體化有很多自然規律要記憶和應用,而抽象化要不斷的提煉提煉再提煉,反正我是分不出高低了。

最近公司招聘,也發現幾個做web的轉Android,理由都是Android火爆啊,其實我很歡迎J2EE的來做Android,但這條理由真讓我哭笑不得,插一個題外話,我真的很少遇到追求自己興趣的人,太部分人都在追求他們認爲所謂“吃香”的行業,實際上,幾年前的我更極端,誰說哪個難我就做哪個,因爲我覺得難做的東西待遇就好,那也讓我走了不少歪路,也換了不少公司,現在回想慚愧至極。我覺得人要追求自己的興趣,在自己感興趣的領域創作一番,實現自我價值,而不是爲了餬口飯吃,那樣到頭來也不太可能有太大的發展。


又跑題了,正因爲老跑題,我給文章標題加了“漫淡”二字,這樣既可以裝逼還能掩飾我的頻繁跑題,希望不會有人罵我。

你可能已經找不到本文的主旨了,我還是申明一下吧,本文的主旨就是Web開發有很多先進的思想,在Android開發中就採用了很多,希望大家重視web技術,學會其中的思想,會有助於你設計程序。

還有一個論據是很多外企招聘Android工程師要懂Web技術,我隨便從linkin上摘一段Android高級工程師的招聘要求:


國內很少有企業有這條要求,可能也是根據國情來的,其實有很多web技術可以加速Android開發或提高Android應用質量,如Spring in Android、RESTful、Hybrid等,如果國內也有這個要求,可能很多人都不願意學Android了,其實沒必要害怕,你不一定每一個都要去學,只要熟悉一種其它的懂思想就可以了。

舉這個例子想說的是,Web開發和Android開發是一脈相承的,我覺得應該把他們當成一個整體,只不過一個是客戶端一個是服務端,客戶端又可以被稱爲移動開發,移動開發又有Android、iOS等平臺。

好了,完了。


本文跟傳統思想有點區別,所以我預感會有不少吐槽,不過沒關係,注意語言文明就行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章