聊聊困擾很多同學的一個問題:是否要轉方向 ?

  • 2019 年 10 月 7 日
  • 筆記

來源:大飛碼字 作者:大飛碼字

這篇來聊聊困擾很多同學的一個問題:是否要轉方向 ?

這類問題沒有標準的答案,每個人的理解也不一樣,我寫下的也只是我個人的想法,僅供大家參考。

iOS 開發

本以為 iOS 開發諮詢這類問題的會比較多,沒想到實際卻很少。後來想想,iOS方向可能已經比較 "冷"了吧。iOS 目前的市場佔有率只有百分之十三了,比起巔峰時期,確實低了很多,而且還有繼續下降的趨勢。連技術類公眾號裡面,都幾乎見不到 iOS 方向的。

我記得有個畢業生諮詢過 iOS方向的問題,我給的建議是,順便學學 Android 開發或前端開發。

前幾年的時候,我們這邊有:iOS 開發, Android 開發, 塞班開發。當時的 iOS 可謂如日中天,很熱門,沒想到只幾年時間,市場變化如此之大。

近幾年,我們這邊的iOS開發都被要求學習 Android 甚至接觸一些前端開發了,所以我覺得 iOS 的同學確實需要考慮這個問題。

當然,我不建議 iOS 的同學直接轉後台開發或者機器學習, Android 和前端是更好的過渡。

Android 開發

Android 開發的轉方向諮詢是最多的,最想轉的是大數據和機器學習。不過我大部分都是建議不要轉。目前客戶端開發確實有大前端化的趨勢,像 Flutter, React Native 確實也帶來了不小的影響, 但相對於原生開發, 這些框架都還存在不少的性能,細節體驗上的問題。

至於未來會發展成什麼樣子,也不好預估。

就這個問題,我特地請教過我們這邊的前端開發專家。對於未來他更看好 H5 的方向,但就現在而言還有點為時過早,原生開發還是最好的選擇,當然,他建議大家有時間和精力也可以多接觸新框架,但沒必要現在就談轉方向。把現有的事情做好,學習些更底層,更本質的東西是更好的選擇。

我個人的建議是 目前 Android 客戶端開發的整體發展方向還不明朗,建議先不要隨便轉方向,更加不要轉大數據,機器學習。

因為大數據,機器學習跟 Android 開發幾乎不搭邊,遷移的損失極大,幾乎是完全從頭開始,更合適的是前端或者後台。前端在思維模式上更接近,後台首選 Java 後台 ,至少在語言層面,在虛擬機層面是可以復用的。

Java 後台

Java 後台的同學諮詢的也比較多,大部分是想轉大數據或機器學習方向。跟 Android , iOS 不一樣,他們不是擔心 Java 後台的發展,而是因為覺得 Java 後台的東西太多,學起來太難了,另外覺得大數據和機器學習更火,所以想轉過去的。

對於這類同學,我不建議轉。因為難,就轉方向,這肯定是不妥當的。凡是吃香的,賺錢的崗位,必定是一堆人湧入的,人多了,競爭自然激烈,要求,門檻自然被拉高,所以有難度其實是好事。

Java 後台應該算是最穩定的一個方向了,一個是後台開發本身就比較穩定,近年來新增且比較火熱的也就是 go, 但 go 只是一門新的語言,有後台開發基礎的同學,就算學起來也很快的,算不上是大問題。

後台伺服器系統這十幾年來都是以類 Unix 系統為主,底層機制方面,只要掌握了Linux (Unix) 和 資料庫,感覺可以吃到退休了。

後台開發最難的幾個問題:高並發,高性能,一致性。這些並不會因為語言的改變而改變,只要掌握了這些問題的解決辦法,積累了這些問題的架構經驗,無論怎麼換語言,都可以遊刃有餘。

所以 Java 後台的同學,就不要隨便轉了,遇到學習的困難,應該是迎難而上,而不是繞道而行。

Python Web

這個方向也有些諮詢的同學。Python Web 算是後台方向,但實際業界使用的不是特別多,一些小公司或者內部系統可能會用,但大廠幾乎沒有用 Python 來構建大規模分散式後台的。

找工作應該是可以的,但未來發展的天花板會比較低,如果是考慮長遠發展的話,我建議學學 go 或者 Java 。相對於Java , go 要學習的東西會更少些,也更容易上手,當然這個要看個人的喜好。

關於工程轉演算法

做 Android 開發的同學想轉大數據或機器學習,Java後台的同學也想轉大數據或機器學習。因為工程和演算法有很大的不同,所以我還是單獨說說這塊吧。

先說數據分析。

數據分析實際的工作並沒有大家想像的那麼好,大部分數據分析的同學最後都是在公司內部做報表,做數據提取,也就是跑SQL,其實是很枯燥的。

我們這邊做數據分析的同學也經常抱怨,工作重複,枯燥且沒有技術提升,所以想轉數據分析的同學要慎重。

當然有同學會說,現在數據分析很火熱呀,外面有那麼多的培訓機構以及各種宣傳都在說數據分析前景很好,但那些看看就好,畢竟是商業宣傳。

再來說說機器學習。

機器學習的發展確實不錯,未來,我也很看好,它的問題是學習的門檻很高。有些同學覺得會使用開源的庫,拿數據來跑跑模型,就算會機器學習了,不好意思,如果只這個水平,對公司是沒有什麼價值的。

機器學習是門檻很高的方向,無論是對於公司還是個人,只是會跑模型是不行的,我在以前的文章裡面寫過演算法方向的水平劃分:

第三級,完全看不懂英文的paper,知道常用的演算法,但無法區分出各種演算法的優劣和適用場景,會用 Python,C++等語言的庫進行演算法組裝。

第二級,不能完全理解paper和演算法,但知道演算法在某些特定場景下的效果和調優的方式。可以在GitHub上面找到合適的開源實現,進行使用甚至優化。如果有豐富的項目經驗和實操經驗會加分。

第一級,能夠讀懂英文的paper,完全理解 paper 裡面描述的演算法。知道演算法的優劣和適用的場景,並且可以用自己熟悉的語言實現出該演算法,且有改進和調優模型的能力,這個算是一流水平了,應該可以拿到很高工資。

大部分同學自學了一段時間,達到了入門的第三級,但要在工作中,真正的運用起來,至少要達到第二級的水平,但第三級和第二級的鴻溝是巨大的,要達到第二級,要有比較好的英語基礎和數學基礎,我覺得自學的同學大部分達不到這個水平(有些牛人除外)。

所以做工程的同學想轉演算法方向,我建議三思而行。

結語

以上,就是我對於轉方向的一些建議,不算是什麼標準答案,但我覺得應該適用大部分人的情況。轉方向是很大的一件事情,會帶來歷史經驗的損失和未來時間的投入,是需要極其謹慎的事情。需要綜合現有方向的未來和新方向的未來,還有自身的學習情況來定。

最後,祝大家職業發展順利 !!!