在2016年,Android 程序員應該如何選擇?

作為一名2015年畢業的普通二本的學生,如今在一家創業公司做著android開發的工作,可是長久以來一直有很大的問題困擾著。

如何從越來越多android開發人員(培訓機構出來的人如井噴一般,偽造工作經歷的越來越多)中脫穎而出,獲得更好的機會。

在學歷上沒有優勢,在能力上沒有質的區別,渴望提高卻沒有途徑。android的大門是自己一腳踹開的,可是面對更深的知識領域實在無能為力。

之前看到有關程序員的分類,天才型,理想型,平庸型。我想自己只是一個渴望成為理想型的平庸型,或者半個理想型,我稱之為普通型。

2016年,移動開發的低端領域應該何去何從,如何才能不讓自己淹死在茫茫的開發人員中,我想這也是大多數渴望成長的普通型程序員的困惑吧。


對於多數公司來講,更看重員工能給公司創造的價值和收益,而不是你的學歷,畢竟公司是商業組織,賺錢始終是第一位的。

我也是二本院校,11年畢業,到如今做Android開發已經有了近4年(剛開始做了一年基於mini GUI的小系統),出生、環境、基本功、智商相比於一部分人並不會佔優勢,但這些都不會讓我形成一種迷茫、不知所措、抱怨的狀態,正如最開始所講,你能不能更好地生存在於你給公司所創造的價值。

所以,我認為題主最需要的是亟需形成一套屬於自己的解決問題的方式,並且要有危機感;

  • 你出生不好,沒關係,你有一套屬於自己的解決問題的方法,兵來將擋水來土掩嘛,比如你可以在簡歷上不寫自己的學校;

  • 你所處環境不好,沒關係,你有怕被淘汰的危機感,會逼著自己去開闊視野,比如去參加面試、認識圈子裡的人、翻牆獲取更優秀的資源;

  • 工作一年你可能甚至還沒有熟悉整個業務開發的流程,沒有關係,危機感會逼著你去更加努力地學習編程之外的東西;

  • 有很多知識點你甚至還沒聽說過,目前處理問題的方案並不是最好的,沒有關係,你有一套屬於自己的解決問題的方式,起碼能夠解決問題,你有危機感,起碼你會想方設法地去改善自己的工作質量;

  • 你工作很忙,沒有時間學習,沒有關係,你有危機感,會逼著你減少睡眠時間去進步;

  • 你基本功不紮實,知識不成體系,沒關係,你有危機感,會逼著自己去看書、閱讀博客、認識圈子裡面的人,雖然慢點,但在進步;
  • 工作久了會麻木、疲勞,沒關係,你有怕被新人取代的危機感,並且你還需要去養活一家人,必須努力;
  • Android有一天可能會被其它系統取代,沒關係,你有屬於一套自己的解決問題的方式,做其它行業同樣沒問題。

學歷、環境、自己目前的狀態真的不是你煩惱、止步不前的理由;書要看、該玩就要玩、博客要讀要寫、開源項目要參與,但目前你最重要的是形成一套屬於自己的解決問題的方式,並且要有危機感。

不要相信不加班的言論,加不加班還得看你幹什麼;

最後,請不要自稱自己為「程序員」,這是一個腦力密集型的勞動,更應該稱自己為「工程師」。

同時,別忘了開闊視野,讀書、認識更多的同行、用好谷歌都是很好的方式。

說明:上面所講的同樣適合於還沒有畢業的朋友。


轉載自我的其他答案:

不知道你是不是指的純技術方面的準備,如果是的話,我就提供一些拙見,大部分算是一些開發知識死角或者tips吧,權當拋磚引玉了:)

下面的回答建立在JAVA基礎(看著《JAVA核心技術 vol1》目錄能梳理一遍JAVA常見知識點)和Android基礎都過關的情況下。

一、JAVA SE

1、JAVA標準容器

可能受一些網上流傳的各種demo的影響,大多數Android開發者最拿手的就是ListView(RecycleView)+BaseAdapter+ArrayList三劍客,但是要知道ArrayList還有兩個親戚,一個是近親CopyOnWriteArrayList,另外是遠房LinkedList、CurrentHashMap。CopyOnWriteArrayList的效率比ArrayList略有下降,空間利用率也下降了很多,但是CopyOnWriteArrayList是線程安全的,CopyOnWriteArrayList和ArrayList對尾的操作都為O(1),但是其他位置的刪除,插入操作很增加很大的時間複雜度,涉及到一次內存搬移過程,不過random access效率很高;LinkedList的隨即插入和刪除性能很高。

tips:數組複製,請使用System.arrayCopy或Arrays.copyOf 實現,且在JAVA中後者基於前者實現。

2、JAVA並發

1、ThreadPoolExecutor,JAVA並發的核心線程池框架,不過它的構造函數非常複雜:

public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue& workQueue) {
this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
Executors.defaultThreadFactory(), defaultHandler);
}

所以有一個方便我們使用的工廠類,Executors,可以創建4種類型的ThreadPool:

  • 固定線程數量的線程池:Executors.newFixedThreadPool(int size);
  • 單線程非同步隊列:Executors.newSingleThreadExecutor();
  • 周期性調度:Executors.newSingleThreadScheduledExecutor();
  • 多線程周期性調度:Executors.newScheduledThreadPool(1);

說到ThreadPoolExecutor的構造函數,它的最後一個參數BlockingQueue&來自於包java.util.concurrent,ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue、PriorityBlockingQueue和這個包裡面其他的類也要過一遍。

workQueue一定要用有界隊列!設想一個極端情景,假設每個TaskWork都運行10s(更確切的說,IO等待10s),而ThreadPool在10s內接收到了1000個這樣的TaskWork,如果我們使用了無界隊列,隊列的大小必然會急速增長直至進程Crash,但是如果我們使用了有界隊列,假設隊列長度為128,當TaskWork超過128,我們會有另外的線程幫忙處理,那系統的負載就可能降下來了。

上面說到了任務池的創建,那裡面的任務是什麼?從哪兒來呢?裡面的任務是FutureTask&,構造函數的參數是一個Callable對象,而我們真正的任務就在Callable對象裡面的call方法,FuterTask執行實際任務後會在主線程調用done函數,最後通過ExecutorService的submit方法將FutureTask提交到任務池。發一段偽代碼:

public class SomeCallable implements Callable& {

public SomeCallable() {
}

@Override
public String call() throws Exception {
// some heavy work consting amounts of time
return "result";
}
}
FutureTask& futureTask = new FutureTask&(new SomeCallable()) {
@Override
protected void done() {

String result = get();
//dosth to result
}
};
ExecutorService executor = Executors.newFixedThreadPool(1);
executor.submit(futureTask);

2、一個線程sleep的小坑,我相信很多朋友都寫過這樣的代碼:

public void run() {
try{
Thread.sleep(1000);
} catch (InterruptedException ie){
ie.printStackTrace();
}
}

但是設想一下,如果我們的線程在執行sleep之前就被interrupt了呢,別以為不可能,ThreadPoolExecutor框架就是通過對所有的Thread進行interrupt來取消所有線程,這是我們上述代碼就會拋出異常。所以良好的實踐應該是:

public void run() {

while (!Thread.currentThread().isInterrupted()) {
try{
Thread.sleep(1000);
} catch (InterruptedException ie){
ie.printStackTrace();
}
}
}

3、會用wait/notify來實現最簡單的生產者-消費者模式。生產者/消費者問題的多種Java實現方式

4、ThreadLocal變數的理解/定義ThreadLocal在Android中的應用,最典型的應用就是在android的messengeQueue-Looper模型中,Handler如何找到當前線程的Looper呢?我們平常直接在UI線程中new Handler()就可以了,裡面就是mainLooper,但是Android怎麼確定的UIx線程中new Handler()裡面是mainLooper呢,答案就是通過將Looper作為ThreadLocal變數。以及ThreadLocal基本的實現原理(在線程對象裡面有一個inner static class)。

5、JAVA的heap/stack的理解,可能會和多線程一起考察,blogspot.com 的頁面

6、ConcurrentHashMap的實現,blogspot.com 的頁面

7、 JAVA的Reflection,Android內部很多東西都是基於Reflection實現,比如我們經常用的屬性動畫,就是通過屬性名稱找到屬性的getter方法名,進而通過反射調用。不過對於日常開發的話,Reflection有兩個作用,一是在一些情形下(特別是對屬性的操作,包括更改、比較,比如我們可以定義一個通用的Collections.sort)可以提高代碼復用度,二是可以做一些比較hack的事情,比如使用一些internal class,內部的AIDL等,修改一些internal類的static value。

二、Android

1、預防內存泄漏!擅用WeakReference&!

所有從類外部傳來的對象(特別對於Context,View,Fragmet,Activity對象),如果要將其放進類內部的容器對象或者靜態類中引用,請一直用WeakReference包裝!比如在TabLayout的源碼中,在TabLayoutOnPageChangeListener中,就為TabLayout做了WeakReference wrap。

2、Android IPC,Binder的理解,理解Binder的引用和實體,知道所謂的客戶端和服務端分別代表什麼意思,懂得ServiceManger對每個Service註冊和根據服務名來getService的基本原理,這些沒多少坑,但是非常龐雜,建議閱讀《深入理解Android vol1》Chapter 6,深入理解Android (豆瓣)。

會寫AIDL,會用Messenger誇進程傳遞信息,具體的實踐:Android實戰技術:IPC方式簡介教程。

3、Activity的簡要繪製(創建)過程 ,Activity本質是為了Window(PhoneWindow)服務,

onAttach:建立mwindow對象-&>setContentView:創建DecorView,在DecorView中根據Activity的風格來 創建Title(ActionBar),TitleContent(ActionBar下面的內容,內部資源id為android:id="@android:id/content")-&>mWindow.addView(mDecorView),將創建好的DecorView添加進window,addview時創建一個RootView,也就是我們的R.layout.activity_main的母布局,然後對子控制項遞歸遍歷發送繪圖消息,子控制項收到消息後 執行onMeasure-&>onLayout-&>onDraw,這時,我們就可以得到各控制項的尺寸信息。

4、 在onCreate中獲得視圖的尺寸信息,注意到我們上面說,母控制項通過遍歷向子控制項發送dispatchView信息來使子控制項繪圖,當然,我們也可以在(setContentView)這之後在子控制項上post一個Runnable到控制項的runnable隊列中去,在其中自然可以獲得正確的尺寸。

5、關於View的點點滴滴。

基礎:自定義單一View,換句話說,叫自定義UI,就是僅僅在OnDraw裡面做了文章,比如儀錶盤,圓形頭像,自定義屬性

-&>中級:自定義View與其他系統Wdiget協同工作,比如繼承LinearLayout寫一個自定義的TabLayout來與ViewPager協同工作,處理事件(滑動、點擊、屏幕手勢)分發,處理滑動事件衝突,這個階段才可以被稱之為自定義Widget

-&>進階:突破Activity,直接向Window添加、刪除、更新View,理解WindowManager僅僅是個引用,真正的工作在WindowManagerService裡面完成。

6、圖片載入框架,熟悉並實踐過基本的緩存演算法LruCache、DiskLruCache,對Bitmap重採樣以降低OOM的幾率,熟讀一款中規中矩的圖片載入框架如Universal Image Loader的源碼,並能將各種策略總結。

7、SurfaceView的實踐,SurfaceView最常見的一個使用情境是在我們的界面之上繪製各種動畫,但是有一個問題,在布局發生改變時,SurfaceView會出現部分屏幕變黑的情況,包括但不限於在ViewPager、DrawerActivity中使用SurfaceView,需要知道這個問題的解決方案。

7、熟練使用ContentProvider,並懂得大概原理(很慚愧,我對Provider沒做過深入理解)

8、Activity的幾種FLAG和LauchMode分別代表的意義,以及使用場景。

9、知道65535 dex-merge問題是怎麼回事

10、熟悉使用Android開發者選項功能,比如最常用的 布局邊界顯示、過度繪製檢測、UI繪製速度檢測、Surface更新時閃爍、嚴格模式、CPU利用率展示、不保持Activity。

三、拓展(上面這些都真正透了,就沒有大的漏洞了)

1、事件流編程,EventBus、RxJava。

2、Kotlin語言。

3、DataBinding,Google的這個MVVM框架實現的很完全,很強大,包括像Angular中自定義directive/filter的類似feature。

4、知道Volley,okHttp他們的應用場景。

5、熟悉一些ORM,包括現在新出的非基於SqlLite的資料庫:Realm,Realm is a mobile database: a replacement for SQLite Core Data

6、Android對Vector Icon的支持

7、Android L新特性,Palette、CoordinatorLayout自定義Behavior等


謝邀。

一名優秀的開發者首先是一個優秀的人,能淹死在現在茫茫開發人員中的人,我相信做別的事情也很難脫穎而出。Android作為應用技術,開發相關的資料可以說多如牛毛,Android編程之路,提高之路我也看過無數的版本,在這種情況下,把無法提高的原因歸結於沒有途徑,是完全不成立的。最簡單的方式,Android開發者很多大牛都樂於分享,去找找他們的博客,看一下他們的學習歷程是怎麼樣的,他們在做什麼,他們最近在關注的是什麼;很多博客上也都有聯繫方式,如果對文章里的某些地方不太懂,誠心去找作者,我相信大部分也都是不會拒絕的。什麼?你說你一個都不知道?那至少先把胡凱翻譯的4季Android性能優化典範看了吧。

可惜也正如最高票所說,誰都想提高,但大部分人執行力太差,如果真的想在技術上有所進步,那就靜下心來想想自己身上的問題和短板是什麼,能補齊就補齊,能深入就深入,如果覺得環境已經成為瓶頸就準備跳槽。千萬不要找二本或者培訓機構越來越多這類理由,這種理由說的多了,搞不好自己就當真了呢?

最近在招實習生,要求不高,基礎紮實點就行。簡歷收了不少,也聊了一些,可惜大部分同學都是在簡單的堆開源庫,一個排序就能直接問倒大部分人。不管對於一本二本的學生還是社招,其實基本要求都是一致的:

  • 整個計算機體系的知識基礎紮實;

  • 經歷或者項目有亮點,項目中用到的知識完全弄懂。

社招還希望在某個方面(性能優化,網路,多媒體,架構等)有自己深入的理解。

只要題主能滿足上面的要求,像學歷什麼的絕對不是問題。從選擇上來說反而更不青睞培訓班出來的學生,畢竟學習能力是程序員最重要的一點,培訓班千篇一律的項目也實在讓人提不起興趣。

從去年下半年到現在,深感需求做的太多,沉澱太少,準備多看看書,把視頻相關的知識補齊。貼一下Trinea在14年的書單,有一些已經讀過,剩下的準備讀其中的一部分,有興趣的可以交流:

雙十一買的幾本書,加上以前的一些,新年要制定一份讀書計劃,消滅掉他們

另外如有興趣,我們這邊在招Android開發的實習生和正式員工,實習生簡歷有點亮點(實習,成績,Paper,競賽能證明自己的都行),基礎紮實點就行,正式員工的JD也在以下的鏈接給出:

騰訊Qzone團隊招聘暑期實習生 - MAGI的專欄 - 知乎專欄

騰訊Qzone團隊招聘Android開發和移動終端測試工程師 - MAGI的專欄 - 知乎專欄


看到這種問題就忍不住。特別是這句『在學歷上沒有優勢,在能力上沒有質的區別,渴望提高卻沒有途徑。』, 第一個『在學歷上沒有優勢』是客觀條件,你改變不了,屬於過去的債,你今日得還;但第二和第三,是完全由你來決定的,你可以改變,並沒有任何限制。

提升自己,真的需要什麼途徑和別人的幫助么?

我不這麼看,當下的每一分鐘,你都可以選擇去刷知乎或者去寫代碼,打遊戲或去啃技術書...哪有這麼多矯情。

說白了,潛意識你是希望找一條比較輕鬆,又比較快的提升之路,繞過幾千頁的技術書,省去幾千小時的練習,快速成為大拿掙很多的錢。經驗告訴你這是條死路,但又不願意去翻一翻那放了很久的《Thinking in Java》,不願意刷github上的Android開源庫(GitHub - bboyfeiyu/android-tech-frontier: 一個定期翻譯國外Android優質的技術、開源庫、軟體架構設計、測試等文章的開源項目)更懶得研究『傷腦經』的演算法(麻省理工學院公開課:演算法導論),更別提自己造輪子、鑽研JNI、深入底層源碼...。騷年,路就在腳下,缺的僅是好勝的那顆心。


謝邀

我想要說的是:別動不動就像是有受迫害妄想症一樣,就因為別人沒有把你當大爺供起來,所以就開始無病呻吟。去年不是流行一句話么,你弱你還有理由了。

不太明白 題主說的:渴望提高卻沒有途徑,面對更深的知識領域實在無能為力。

題主是被人綁住手腳了還是被人掐了網線了 還是什麼情況?和朋友喝酒聊天時無病呻吟,發發牢騷就算了,別太把這種情緒當真。

想要什麼 自己先付出,小時候看的鋼之鍊金術師裡面都說要等價交換,小孩子都懂的,成年人應該也清楚吧。

每個人每一天都意義重大,每一個選擇都至關重要,自己的生活只和自己有關,所以別扯什麼 2016如何如何,培訓機構出來的人如井噴一般,別人如何偽造工作經驗,這些和你有何關係呢?


補充一點我的經驗和方法。

先說一個自己對Android開發的評級

第-1級,小白

第0級,良好的計算機基礎,有一定的實踐經驗。和-1的區別在於,0有培養潛力,-1沒有。對應相關專業畢業生

第1級,從學習別人的代碼開始到能獨立完成一個簡單的應用,主要是熟悉api。和0的區別在於,1能直接參与開發,0不能。對應經驗一年左右

第2級,會寫一些複雜自定義View,會根據需求改寫UI庫,能獨立解決問題,對事件分發,view繪製,線程等原理深入理解。和1的區別在於,2能獨立開發,1不能。對應經驗2年左右

第3級,深入理解框架層,熟悉一些其它相關技術(jni,腳本語言,ios等),有主導的項目,有一定架構理解。和2的區別在於,3能領導項目,2不能。對應經驗3年以上

第4級,這之後不是很清楚了,在架構,系統底層,全面技術上進一步發展吧。對應經驗5年以上

感覺題主在一二級左右,所以覺得能力沒有質的區別,其實上面還有很多級別,還有很多空間可以提高,但如果不學習就只會原地停留,但題主畢業還沒多久,也不用太著急

學習上再送一句話,血淚總結:

實踐中不忘學習;

學習中不忘實踐。

開發中經常不會去思考學習,只想快點實現,就只有經驗積累而進步少,看書學習時又會覺得看懂了不去嘗試,發現沒有真正掌握,再到後面就會看不懂了。

原答案

---------------------------------------------

不是沒有途徑,而是沒有捷徑


想要脫穎而出,努力先讓自己成為一名「合格的程序員」吧。

成為一名合格的程序員的良好開端便是系統學習CS專業的基礎課程(數據結構與演算法、計算機體系結構、操作系統等)。"不合格的程序員「大部分不具備良好的CS基礎學科素養,導致他們無法獨立完成稍微複雜點兒自定義View(比如涉及到滑動衝突的)。(基本功的缺乏導致了他們難以駕馭「複雜度」。)

就Android應用開發來說,稍微深入點兒的東西對於沒有良好CS學科素養的人,都可能成為一個很難邁過的檻兒。就拿IPC來說,不少半道出家的連線程和進程的區別都搞不清...既然題主已經工作了,建議題主在搞好本職工作的同時,利用下班的時間不斷提高自身的CS學科素養。

個人一直在看的是蕭大推薦的教材:

1. 《深入理解計算機系統》

2. 《演算法導論》(個人覺得演算法 (豆瓣)的閱讀體驗更「平滑」)

3. 《計算機程序的構造與解釋》

4. 《程序設計語言-實踐之路》

讀過這些經典之後你會發現一個更大的世界,而且也會具備足夠的能力去探索它 :)


Android工程師回答一下吧

目前Android的環境還算可以.Android的市場很大.而你只看到APP這一部分.

智能電視,汽車電子,POS機這些以後都是Android系統.

如果是在手機開發個界面,從網上獲取個json,解析到UI上.沒什麼難度.

看看這個

用Android系統推兩個顯示屏,顯示不同內容,前後兩塊電容觸摸屏,後屏獲取顧客簽名,刷信用卡時列印成小票.讀取射頻卡,磁卡,外接條碼槍,激光平台.指紋鎖,熱敏印表機,列印圖形和二維碼,支持wifi,乙太網,3g/4g等等等.這一設備的一切都是依賴於Android平台.也只有Android可以實現這個.(window是滑鼠操作,觸摸屏體驗很差, ios不開源,除了蘋果公司第三方不能實現ios的設備)

我相信絕大部分Android程序員沒試過開發雙屏應用吧 哈哈哈Android工程師共勉


其實我很理解題主面臨的狀況和疑惑。 很多人說題主其實根本不想付出努力學習,只是想找一條成功捷徑,可我不這麼認為。

大家總是簡單地認為只要真的想努力,就一定有方法,這其實沒什麼錯,很多答主也給出了努力的方法,比如看技術書籍、參與開源項目等,但知道這些方法的人就能做到嗎?如果他們做不到,就一定是因為不夠努力、想不勞而獲嗎? 我覺得不是。

很多人可能一開始願意去嘗試這些方法,但問題在於很難自己製作一個有限工作量的學習計劃。也就是說,大部分人都覺得很容易開始,但不知道什麼時候才能結束。 為什麼「什麼時候結束」這麼重要?難道你就不能沉下心來踏踏實實的努力嗎?對不起,不能。為什麼?

因為不確定的工作量會逐漸磨滅一個人的鬥志,讓人看不到成功的希望,就好比人在一望無際的大海中游泳,不告訴他距離海岸有多遠,一旦疲憊,他就很容易放棄。因為成功在遙遠的不確定的未來,而自己正在經受當下的危機,權衡之下,很多人都會選擇放棄。 可是為什麼有的人沒有放棄而且能夠堅持下去呢?

因為他們對自己的工作量有著清晰的計算,就像游泳的人知道自己距離海岸有多遠一樣。所以當他們疲憊氣餒的時候,想一想自己再堅持一會兒,就能離成功近一點,再回頭看看自己已經走了這麼遠,於是重新充滿了信心。

所以,我覺得題主不是缺少進步的辦法,而是需要學會這種思維方式,對自己的學習做好良好的規劃,在懈怠的時候學會為自己加油打氣。

不過,其實最根本的原因還是在於你並不是真得相信自己通過努力完成這些學習任務就能夠成功的,只是從他人的口中得知這些經驗,但沒有通過親身經歷的驗證,難以徹底地相信,也就沒有完全的把握。在沒有把握的情況下努力付出是一件跟冒險的事。

而看似同樣情況下有些人願意努力是因為他們通過某些方式把沒把握的事變成了有把握的事,使得他們始終相信自己可以成功。他們是怎麼做到的呢?

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

重新思考了一下,有了些新的認識。

簡單來說,你願意付出努力但實際又做不到的根本原因在於不能很好地激勵自己。

任何需要努力才能成功的事必然都不會即時給你獎勵的反饋,要不你也不會將其定義為努力了。因此,做需要努力的事一定會有讓人懈怠的時候,都需要激勵才能堅持下去。這種激勵類似於一種麻醉劑,幫你遏制住自己的本能,讓理智壓過衝動。

在我看來,激勵可以分為外部和內部兩種。外部激勵來自於外部的環境壓力,包括他人的鼓勵這種顯性激勵,也包括不甘落後這種隱性激勵。外部激勵是比較容易獲得的激勵,只要有一個合適的環境就可以了。

而內部激勵可以算作情商的一部分,基本方法就是要「欺騙自己」,讓自己堅信跟自己體驗相反的事其實是正確的。比如,背單詞很容易放棄,因為在背的過程中你的身體沒有得到任何正向的獎勵反饋,因此身體或情感很容易認為背單詞是一件得不償失的事,會通過各種方式向你的大腦發出放棄的信號。而自我激勵就是要拒絕身體的反饋,堅決去做現在看起來得不償失的事。擁有自我激勵能力的人更容易成功,但要培養這種能力,也很難。

可以看出,題主只是一個自我激勵能力一般的普通人,但其實成功的人也並不都擁有很強的自我激勵能力。嘗試改變你的環境,同時有意識提高自我激勵能力,可以讓你逐漸遠離這種糾結和痛苦。


我發現很多人根本不適合做程序員。。學習能力差,邏輯差等等,最重要的一點是根本不想學


穩紮穩打,別總給自己設立大目標。

在需求中找到深入的點,做好記錄,給大家分享。

低端跟高端區別在於周圍的圈子,多主動勾搭大牛,有大牛喜歡組織分享會,積極點兒去參加。了解他們在研究啥,別一到周末就宅在出租屋裡。

好好鍛煉身體,別老熬夜。


既然是搞技術開發的。。。那就做一個自己"大白"吧。

開發一個自己的Android程序,剛開始時再簡陋都沒關係,然後一點一點地把自己的創意和想法加進去。也許只是一個自己的計時鬧鐘,也許只是幫自己查一下天氣提醒下雨,慢慢地讓自己的這個「大白」為自己服務。

然後在這個過程中,為了改善自己的「大白」,自己自然就會去鑽研學習更多更深的技藝。

同時這個產品,也可以在未來需要時更好地向別人展示你自己。

漸漸獲得更多朋友,漸漸獲得更多的機會。

就像下圖中的那位孩子:


不為繁華易匠心。

---

這句話要在這一年中時刻提醒我,為即將到來的校招和畢業。


從年前提出離職到目前為止,應該算是收到了3份offer吧!獵豹移動(因意外而最終無法前往)、酷狗、UC。所以,僅從個人角度談談我的一些看法。

1.學習。現在網上有很多新東西,如:RxJava、Retrofit等,我們可以嘗試著使用。不僅要會用,還有看源碼,看如何實現的;另外,要多看書!我就很後悔自己剛畢業的那一年,沒能好好看幾本書。

2.主動。作為程序猿,分享應該是一項很重要的內容吧!由於種種原因,之前的公司一直沒能堅持下來,我也和老大們提過很多次,未果。然後我就主動和老大提出自己要分享的想法,以期拋磚引玉,進而把分享會堅持下來。老大很認可,最後年會的時候也把分享列為了2016年的目標之一。在面試酷狗和UC的時候,我都有提到自己的這次主動,我想應該加分了吧!(關注這次主動分享,是在面試獵豹後,才下定決心要做的。)另外,分享的內容是RxJava+Retrofit,我也順便總結了網路請求的相關知識點,在面試的時候,也恰好遇到了類似的問題。

3.基礎。面試的時候,經常會問很基礎的問題。如View的繪製過程,消息機制,內存泄露,減少耗電,Service、廣播等實現原理...HashMap實現原理...這些都是需要我們通過看書或者源碼來了解的。

4.博客/Github。如果有堅持寫博客,Github有過百贊項目、Github經常提交,也都會加分不少。

5.總結。無論是做項目還是學習技術,一定要記得總結自己學到的東西。比如做完一個項目,遇到了那些坑,怎麼解決的。總結下來,可以分享給別人,可以避免以後再犯,可以面試的時候很有條理的講出來...都是很棒的事兒!

以上,希望有所幫助!


個人感覺不是很良好,除非跳到有自己產品的大公司,不然餓死真是遲早的事情。

現在外包公司稱APP開發時藍海,但這不代表對於程序員是藍海。

藍海從哪裡來?互聯網+的提出,大批公司開始做自己的APP,但是!從cost上看,我雇幾個程序員做自己app的花費要比把軟體外包出去的花費高多了,而且外包活還快在現在搶佔市場的大環境下,還能有更多的收益。

既然現在也算從業半年年了,也應該聽過外包公司的傳聞或者是清楚外包公司的實際情況,他們的開發時間是非常短的,與此同時程序員會非常的累,很少有學習的時間,結果就是你的競爭力並沒有提升,這對未來來說肯定不是好事。

現在程序員的門檻已經非常低了,不要求學歷,不要求能力,只要你能掏出1W多大洋,你就能成為一名初級程序員。

所以關乎於你的未來,既然已經認定自己是平庸型,不如等干夠一年後轉崗,在工作的時候去了解產品需求,以後轉去做產品是一個很好的選擇


我準備先學好英語, 然後突破我目前所處的平台期


我認為,從一大堆培訓機構出來的人中脫穎而出的辦法,就是做出一個可用的東西。

這裡的可用不是你覺得可用,是至少一千個用戶覺得可用。換句話說,你得發布出去,讓一千個用戶樂意使用,並覺得可用。

當然,有多於一個項目更好。但鑒於你目前的情況,只能慢慢來了。


有困擾說明你現在的狀態是除了上班,其餘的時候你沒有哪來學習,然後那種巨大的空虛感淹沒了自己,讓自己胡思亂想,假如你現在每天除了上班就是讀各種技術博客,看視頻,看書,寫代碼,當你又學會一個技能的時候或者你寫的小項目掛在了git上面然後到微博上@了那些什麼liao百萬哥啊,什麼技術小黑屋啊,什麼hi大頭鬼啊等等等,他們給你說句鼓勵你的話,你會更加自信,更加努力,根本沒時間胡思亂想,也更不可能覺得自己能被培訓機構出來的人比下去


技術上,別只做已經熟悉的東西!


不說語言、平台,安卓現在已經算是好(熱門)的了

【不讓自己淹死在茫茫的開發人員中】

就是不斷提升自己的技術,適當增加自己的管理技能和業界交流

(當然,都是 說起來簡單,做起來難的)


推薦閱讀:

開發程序的人對他寫的程序使用了如指掌嗎?
在紐約當程序員是怎樣的一番體驗?
想寫個 App 練手,有什麼有趣的 API 介面推薦嗎?
轉專業去美國讀CS,實習對找工作影響到底有多大?
程序員的你是怎麼接到第一筆私活的,在什麼時期?

TAG:程序員 | Android開發 | 職業規劃 | Android | 移動開發 |