現在搞安卓開發的在國內大部分水平是不是特別低?
我在一家手機方案設計公司做測試,公司一般,做安卓開發的那些人給我的印象他們只負責敲代嗎,手機里的功能一點也不管,對於客戶的需求好多都一樣的,對於特別的需求,他們就直接說不會,然後讓解釋,這給我的印象他們的工作就是複製粘貼,工作內容大同小異,重複的工作!
是的,因為做一個app真的太容易了。。。沒什麼技術含量 甚至還有這樣的
因為大部分app要做的事都比較簡單。。。所以才有了"無需編程知識,3分鐘搞定你的app" 第一次知道這玩意感覺腦洞真是大得沒邊。。。然而這樣做出來的應用有幾個能長久地活下去?擺在應用商店但無人問津的應用又有多少? 太多這樣的應用存在,再加上國內混亂不堪的Android生態圈(前幾天收到郵件,百度開發者平台要推出自己的「應用加固」服務還特別指出有「惡意」應用使用「第三方」加固,也是醉得不行,仗著百度手機助手牛逼真是什麼都干啊)開發者自然不會把太多精力放在安卓平台,國內的安卓開發水平自然不會很高。記得有人說做Android/iOS應用就是做前端。當時覺得是無稽之談,但現在感覺有點道理。除了一些比較複雜的應用(比如遊戲,Office應用,圖像處理應用)之外,其他的真的和前端差不了多少。 然而到了鼓搗驅動程序/內核/Hook的時候就沒那麼多"水平特別低"的人了。
好吧其實本菜雞水平也不咋樣。。。年幼無知被各種CSDN博客坑慘了的時候才意識到不看文檔直接百度有多蠢
既然大家都在說水平差,那我就來說說怎麼才叫水平合格以及為什麼你們的安卓APP會卡出翔!!安卓APP做出來很容易,但要做好甚至比你想像中要複雜繁瑣很多。
利益相關,參與一個APP的安卓開發幾乎從一開始一路做到上百萬日活。半全棧工程師,轉安卓開發有兩年。
事實上我不否認題主的假設,因為無論任何行業都是水平低的人占多數。而之所以有這個問題可能區別就是安卓的入門門檻低,如果從事linux內核開發,大數據或者人工智慧這些,我想就不會被提這樣的問題。而且還有像輪子哥吐槽的,各種卡頓,耗電,只要使用或安卓手機的人都有同感。其實安卓系統本身會產生UI卡頓這個根源,大家都知道的它不是UI線程優先處理。據說5.0有專門一個線程處理動畫來改善,但這些我都還沒深究。在這樣一個不好的地基上邊蓋樓,是更要小心謹慎。至於後台駐留那些問題,我覺得不該反映到程序員水平低的問題上,因為這是大環境還有產品決定的,當然駐留的時候你就得乖點少佔用資源。
在安卓客戶端開發的問題上,首先大背景下,安卓手機其實相當於一台微型計算機,所以大部分情況下可以和PC的桌面客戶端軟體開發進行對比,但不同的是它的內存、網路環境及電量更加受限。
你在開發PC客戶端需不需要考慮分配那小到1到2K的內存?「JAVA不是自動內存回收嘛,很簡單啊」,雖然手機現在內存很大,但每個進程跑在Dalvik的環境上的可用堆棧內存是有限的。小心OutOfMemoryError分分鐘鍾跳出來狠狠抽你一巴掌。於是乎安卓自帶框架中還有界面裡邊部分元素的延時載入啊(ViewStub),還有每個item的重用規範啊(adapter convertView),既減少內存又加快繪製效率,這些都是基本需要掌握的知識,然後估計很多入門的程序員可能這點會不懂。
很多應用其實主要場景都是處理列表,這裡也是導致UI不順暢的常見場景所在,所以要減少View的嵌套層次,不需要常顯示的地方使用ViewStub。
假設一個有幾千個聯繫人頭像的信息的好友列表,你怎麼做到讓它順暢滾動和載入?不是分頁哦,是你一滑動就要順暢的滾動甚至一直不斷滾動讓所有聯繫人都一邊顯示出來。頭像能一下子放在內存嗎,不能!而且還要考慮有些頭像是本地的,有些頭像是還需要從網路拉的。你試想下大多數程序員直接在滾動列表的時候拉取頭像和載入頭像,你們的安卓應用能順滑嗎,絕B卡出翔!QQ的好友在滾動的時候,是不會去載入頭像的!只顯示載入過在內存裡邊的頭像。沒有哪個人能NB到邊滾動邊載入還猶如開著一輛911奔跑在一馬平川的公路上那麼順暢!因為你還要考慮你的客戶用的還是一台512MB,CPU800MHZ左右的原始時代安卓機。所以在列表滾動中相關處理的邏輯要考慮慎重。你在開發PC客戶端的時候要時刻謹記各種多線程任務,甚至需要進程與進程通信嗎?
在以上的例子中,大多數程序員甚至直接把訪問資料庫放在UI線程中,「我要顯示東西,東西在資料庫,我從資料庫查出來進行顯示。嗯,思維清晰,邏輯合理,我簡直是個快速解決任務的能手!」 於是他敲下的這樣的代碼可能此刻就跑在你的手機上,能不卡嗎,這其實是安卓開發入門的第一條,絕對不要在UI線程做IO 操作!!好的程序員基礎不但要懂,而且還要熟知AsyncTask非同步任務只是跑在有限數量的幾個後台工作線程中,要對當前所有的Task進行可跟蹤以便找出耗時的問題。資料庫、網路訪問、邏輯處理如果需要還要創建不同線程來進行處理。嗯,安卓還有一個應用多進程模式,於是在架構上複雜了很多,呵呵,我拿自己內存的一個數據還要去跨進程訪問,而且還可能隨時獲到一個進程未綁定的錯誤,痛苦啊,說多了都是淚。你在開發PC客戶端需不需要用到Cache?你知道我們是怎樣嗎,幾乎每個地方做得好都要加個LruCache有沒有,像上邊的好友列表頭像就用了緩存,而且還要看緊著內存。如果恰巧給你寫APP的程序員有這覺悟。但是多線程訪問cache,引發線程同步錯誤問題導致偶爾程序奔潰有木有!!接著就要考慮並發處理有木有!!這裡BUG收集也是很重要。
你在開發需不需要考慮那小到一兩百位元組的請求發送次數,需不需要考慮運算的效率帶來的耗電問題?「現在都4G了,而且都是WIFI,一個請求多發一兩次沒關係,快點完成任務就好!」 接著你分分鐘鐘被獵豹這些安全APP檢出來你是流量殺手、電量殺手然後把你卸載乾淨!還要在微博和朋友圈上把你在世人的眼光下進行鞭屍!!下邊一堆回復,這些程序員是不是腦殘的,還是上一個版本好用。所以我們用資料庫配合內存cache使用來盡量減少網路訪問,或者網路返回前先進行友好提示。接著你就要考慮緩存和資料庫數據時效問題了。其實好多性能問題是不難解決的,但主要是,緊張的迭代開發任務幾乎讓程序員都無從抽時間出來進行下手!這估計也是你們手機上APP為什麼一直卡的原因!!
因為項目已經大到一定程度,我開始搜索安卓框架,安卓MVC框架,安卓MVVC框架等。得到的全都是安卓本身就已經是MVC框架或者是安卓本身不複雜不需要額外的框架之類拉,我真心鬱悶很久! 我覺得是安卓沒有統一一個公認框架的原因是不同應用的代碼架構上差距很大,故每個公司都形成了自己的一個小框架,而絕對不是說安卓應用不複雜。
對於所有技術開發來說,我覺得水平低主要是因為沒有機會接觸比較大的用戶量產品或者本身客戶端邏輯不複雜,缺乏有效的用戶反饋來支撐,所以他們根本沒機會意識和感受到有各種問題的存在。可能用戶量大了大家覺得只是伺服器的事情,但舉例說做好一個移動設備上的IM,僅僅處理IM的消息可靠,離線接收,缺失消息同步等,就夠你玩的了。
還有各種安卓設備差異,屏幕適配的問題,這也許是比其他任何設備還煩的問題。
以上,可能國內複雜或者大用戶量的APP有限,所以基本大部分水平低的人也是很難有機會提高。跟做網站的技術人員應該差不多一個道理。其實只要好好把Android develope的開發建議看了和應用上,基本都是成為水平中等偏上的人了。第一次在知乎碼那麼字。。。
-----------------------------------------------------------------------------------補充
謝謝這麼多人支持,其實我是小激動的。對評論裡邊的大概在這裡答覆下。我這個回答從一開始就說明是水平合格應該要做到什麼程度,就跟評論中很多朋友指出來的一樣,都是些常識問題,所以如果你希望有看到什麼深度的技術方面的東西就會讓你失望了。而如果是剛開始開發或轉型的朋友可能會有所感觸,好多都是摸爬滾打過來的。其實好多我自己知道的常識類的東西我也是不能全部應用到項目中,再加上還有很多沒掌握的。所以不是說常識性的東西就不重要,就是簡單。就拿我們都知道程序要松耦合這個常識,有幾個人能在較大的項目中完美解決?順便修改了原答案中一些錯別字和補充了疏漏的地方"果然測試都是開發的天敵",題主的問題必然成立,任何行業都是中等偏下的從業者居多。不過題主得出這個結論的原因實在不敢苟同。
首先,題主說自己在一家「方案設計」公司?別那麼好聽嘛,大家都懂的~
其次,「做安卓開發的只負責敲代碼」,做開發的不敲代碼去幫你測試么?==
最後,「工作內容就是複製粘貼」,我去,你們那還招人么,我讓我姑姑嬸嬸隔壁家的王阿姨也去試試,絕對精通複製粘貼!
上面有朋友說的對,「你是什麼樣的人,你就會看見什麼樣的人。。。」
----------------------------------------------蒼老師的分割線----------------------------------------------First and last commit:之前的回答用官方的話說不太「和諧」,引起了一些個「誤會」,但是既然一開始就沒匿名,說明我本意不是來噴誰。"果然測試都是開發的天敵"這句話本是調侃,之前沒加引號,見有朋友當真了,特此更新~方案設計公司?是不是就是外包?外包就知道全國水平啦?
沒覺得啊,安卓開發甩鍋能力很是一流啊
開發不出5.0把鍋甩給晶元
某機型大面積中毒,把鍋甩給裝第三方app的用戶作為一名安卓開發人員,確實感覺現在合格的安卓開發人員不多。且不看輪子哥噴的問題,很多面試過的安卓程序員的java基礎都不紮實,並發、內存等問題都沒怎麼考慮與深入了解過,就更別說能深入系統底層了解jni、cpp層的實現了。這是現實,不得不承認。
但是話說回來,如果是各個大廠出產的app,質量還是有保障的,崩潰率一般都在萬分之幾,一般也都不會存在卡頓等問題。這些開發人員的質量並不比研究數據挖掘推薦等方向的人差。
另外,從事什麼職業與方向都一樣,都是優秀的人占很小的部分,這很正常。只不過由於現在大家每天都在用手機,體驗的多了罷了。在開發眼中測試和產品就是不懂技術瞎BB..還有樓上各位科班出身嘲笑非本專業的應該都能倒背演算法導論吧?
永遠不要把你看到的歸結於一個行業,你所在的只是一個行業里的小圈子罷了
是啊,做個app那麼費電,莫名其妙的就把聯繫人錯誤的當成用戶輸入發到了伺服器,還會有打開一個app的時候莫名其妙喚醒了其它app的這種大bug,除了產品狗和程序員垃圾以外還有什麼解釋(逃
因為安卓比ios難。
知道複製粘貼的值3k,
知道從哪裡複製的值5k,
知道粘貼到哪兒值7k,粘貼完還能讓app跑起來就值10k,重點是,樓主急需自己去試試還是匿名吧從語氣中可以看出,你覺得開發人員簡單複製粘貼卻比你累死累活薪資高,於是一種抑鬱不得志的心態瞬間提高到對整個行業的認知,然後在知乎上開啟問題來得到大眾認知,來證明你有多麼NB等你成為測試大牛再發起這個問題,不然就洗洗繼續測試吧
哎呦,知乎大神太多,看了答案,不禁嚇尿了。。。。什麼拉低程序員水平啦,巴拉巴拉一大堆,不過我還是想弱弱的說一句,咱能不能先把程序做出來,然後再指點江山,評論各種perfermance?我覺得,知乎裝逼的真是太多了!!!!!
國內市場有這樣的需求,有些小企業小初創樂意花小錢做個小APP自我宣傳。各位大神看不上眼,還不讓小蝦米們去賺錢了么?大神們名校畢業、BAT 矽谷隨便闖。國內low逼需求和市場還是需要小蝦米們去填補的呀。
從市場角度看,小蝦米們付出很少的努力就能找到價位合適的工作,總不是壞事。
以後市場成熟了、技術人員整體水平上去了,偷懶的人自然會優勝劣汰。差不多兩年後,再看到自己寫的答案,有點感慨。當初寫這個答案的時候,心高氣傲。看不起水平低的人,看不起培訓班出來的人。現在看來,真是too young。大家都是出來打工而已,沒必要瞧不起誰。
我進公司不到一年,就帶了幾個年齡比我大得多的人。水平不高,只能幹一些很基礎的活。有時我覺得他們挺可憐的,三十好幾的人了,為了養家糊口,晚上還要加班都很晚。做錯了事還要忍受同事的責怪。
it行業沒你們想像中好,賺錢的人始終是少數。賺錢的行業很多,看看你們身邊的人就知道了。我認識的人中,做銷售的,做獵頭的,做培訓的,做代理的,都有做得很不錯的。選一項合適自己的,而不是人云亦云,做別人的墊腳石。
最後回應一下題目。it從業人員的能力是參差不齊,有很多確實是能力不怎麼樣的。因為我們只需要少量的精英做決策,大量的碼農做基礎工作
——————原文————不只安卓。有些公司里的程序員真是垃圾得令人髮指。現在程序員太多,許多人學了幾個月,懂一些框架就去求職了。竟然還真有些公司會招這些人。程序員這個名詞越來越廉價了。 每人都奔著這個貌似高薪的職業去,花幾個月上個培訓班,就幻想能每月拿10k。科班出身的,看到培訓出身也能找到工作,就沒了學習的動力,想著找工作前花幾個月補一下就是了。而有些想的是到時再一邊工作一邊學,都太浮躁。 於是現在的人基礎真的差到離譜。我對想要成為程序員的人說:不要急好嗎?踏踏實實地學,把基礎打好。不要羨慕別人現在怎麼樣。我們要做的是程序員,不是碼農。
不是很低,是參差不齊,但是坑貨太多了,誰讓缺人呢。。。。
從用戶角度講
Android和安卓真的是兩個東西一票死活不上架Play Store的國產應用里劃掉multi task頁的所有標籤、然後綠色守護FC掉所有後台,關屏幕十分鐘後不自啟動的簡直是天地良心雖然黃易最近好些事乾的不厚道但是必須講一下新聞客戶端那個玩意我裝上之後因為不怎麼用居然放著幾個禮拜都沒騷擾過我……
雲音樂也是對比一下某個打車軟體……永恆的後台駐留哼我大四去實習,公司里自學了一學期的我是水平最高的,給了我基本工資和吹出來的百萬期權,伺服器運維、安卓、產品我都包圓了,時不時還要幫PHP和iOS的答疑解惑debug,就我一人看得懂英文文檔,同事基本全是培訓班定點丟過來的,老闆是做化妝品總代的,你們感受一下…
ps:我試用期沒過就走了,上周聊天說他們幾個老闆互相投資玩,融了1kw作社交app,不知是不是在吹現在是比較魚龍混雜,就我自己感覺而言確實很多水平很一般,曾經加過一個安卓群,群裡面討論的都是各種設計模式MVC,MMVM一聽好高大上啊,後來他們談到了關於引用的問題,他們居然認為map的putAll方法是拷貝了一份完全獨立的內存出來,沒人去深挖代碼邏輯,沒人去看基礎的書籍,得出答案的方法居然是寫段代碼Debug下然後看看值變了沒,我當時就暈了,有源代碼不看邏輯整這些。
我只說我在群里遇到的開發吧,整體而言我感覺他們比較熱衷於控制項的使用和所謂的界面設計模式,例如facebook開源了fresco各個熱烈討論如何用,但是例如對於fresco中的imagepipeline的實現邏輯,以及一些例如Java中的並行編程問題還有內存問題,還有比如Android中的Thread.java裡面的native start0方法是如何在cpp層做的,根本木人關心這些問題,其實我一直覺得安卓程序員學點cpp只有好處沒有壞處,你看我們寫cpp的都來學java和安卓了,大家互相學習一下各自的東西以後交流都方便點嘛。
當然至於樓主想說的大多數工作內容大同小異,重複的工作這個其實我覺得都不可以說怪大家,本來就是這個混亂的市場造成的,你看小馬哥和李大大提出個互聯網+之後,只要是個人就覺得要創業,創業要什麼呢?你至少的要個App啊,然後要App是啥人呢?他們要求是啥呢?要求就是你能做出來並且需要做的快去符合他們的奇思妙想,那很多時候其實你就是在做個搬運工,把Github上的控制項拿下來擼一擼改一改,至於程序真正應該關心的效率問題,崩潰問題他們壓根開頭就不在乎,因為覺得看不到。而當在一輪又一輪的這種創業公司輾轉的時候其實感覺已經完全淪為機器,很多時候也根本沒有時間用來看書和提升,所以作為後面畢業的師弟我都建議他們哪怕跪舔開始都要進去中大型公司工作見見世面,例如IT黃埔軍校的金山軟體,不然很多時候會荒廢了。以上我覺得都是客觀原因,還有一個主觀原因我覺得是心態,因為現在計算機對於一部分人來說是理想和愛好,而對於很多的人來說可能只是一門生存和謀生的技能--------------------------------------------------------------------------好多回答把這個問題理解為科班和非科班也是醉了,大家所不喜歡的只是這種營造起來的急功近利的氛圍只能說眼界限制了你,優秀的人都在往上走(一大波大神即將來臨,跑)
推薦閱讀:
※中年男士大屏手機選擇: note 3, htc one m8 or lumia 930?
※顏值最高的Android手機是哪款?
※為什麼低版本的Android用過一段時間(如一年)後,會比iOS更卡?
※如何評價LG今天發布的G2,能夠幫LG爭奪市場嗎?
※求推薦高顏值手機?