對於 iOS 開發基於經驗的一些總結與規劃 (轉載侵刪)

轉自:http://www.code4app.com/blog-822715-1670.html

心得:python的學習對客戶端有很多幫助,確實比較強大的感覺。

關於成長

回首發現自己步入程序員的行業也有幾年的光陰,記得一開始的時候,我也和很多初學者一樣,四處詢問怎麼才能實現高速的成長,想窺探大牛們的成長祕籍…雖然現在的自己依然有着超級多的不足,但是比起當初可笑的自己,也可以無愧的說沒有辜負這幾年的光陰。

曾經我一直認爲我要是能進一個足夠大的團隊,和一羣牛人一起工作,不會了就去問,肯定成長的超級快。年初的時候,自己足夠幸運,到了一個還不錯的團隊,團隊裏的小夥伴也很給力。這一年我發現自己也確實得到了長足的進步,學會了 Python ,能用來做一些有趣的事,開始嘗試寫一寫前端。逐步涉獵更多的知識…

但是我發現整個過程卻和我當初的設想相去甚遠…當初以爲進了大的團隊,就有人教你帶你,但是事實上並非如此,在大公司業務需求可能會變得很複雜,每個人的工作量變得極大.面對 KPI 等壓力,沒有人可以很輕鬆的怡然面對… 也沒有人有時間去在很小的點上錙銖必較的對你一點一點的提攜…所以,那些覺得進了大廠,就一定能成長的小夥伴,真的大廠極大的壓力並不一定是成長最好的土壤,但是不可否認的一點是高壓力和高負荷的工作,能提升工作效率,能從事更多深入的工作,深入纔是成長的原動力。當然感覺自己這一年來成長較快的另一個原因是從身邊的隊友身上學到的改變了一些解決問題的思路和方式,以及提升效率的方式。
而這一切進大廠並不是必然條件,對於個人的高要求和好奇心一樣可以達到一樣的效果。

說了上邊一堆的廢話可能對於許多人而言,並沒有什麼很大的用處,其實細化到日常,不過是不要忽視很多細節,保持技術上的好奇心,多實踐也許就是技術人最好的成長方式。比如我想每個 iOSer 肯定都知道 Runloop 的概念,網上講解一大堆,每個人面試的時候都要爲此好好準備一番,但是很少有人去真的思考這個很多操作系統上都有的機制到底是用來作什麼的,原理到底是什麼…其實基於原理的思考,再看技術上實現細節,也許真的會事倍功半…當然下邊還會說這件事…

還有很多人說,我在研究什麼什麼高深的技術,但是一問到技術上的細節,就會說那一部分基於 SDK 的並不瞭解… 對於這樣的問題,記得以前做直播接入的騰訊雲SDK,那個時候就敢說自己做過直播,現在想來自己真的蠻好笑的…

此外,現在網上鋪天蓋地的一萬小時理論.但是我認爲這樣的理論會讓很多的人走向一個誤區.以爲我一直努力一直付出就一定可以成長,我不否認這樣成長的事實,但是如果一萬個小時的努力只是去做完全相似的事,成長真的有限…我認爲同等時間的基礎上生長速度卻取決於涉及的深度,反思總結的能力以及眼界,知識的廣度等多方面的因素綜合的結果.遙想高中時代,同樣的付出結果大爲不同,其實道理大致相同。

當然我上邊的話,同樣會給一些人造成誤區。因爲只要努力的去學習一些難的知識,往深了看就行,其實我過往的經驗是,我深入看一個知識的時候,經常過一段時間沒有技術場景的情況下,就基本上忘記了,記下的都是皮毛,但是我發現經常再看一些基礎知識的時候能夠聯想到一起去,再回頭去看那些技術,反而有一種豁然開朗的感覺,所以在深入的時候基礎的重要性不言而喻。但是單看基礎一樣有此問題,所以孰輕孰重,完全在於個人實踐。其實我認爲最好的方式是對於一個技術方向從淺到深的持續研究。這也就是很多優秀的技術博客,我們看了沒多久就忘記的原因。因爲我們總是看到一個技術面,缺少整體和深入的理解。

這裏也可以拿自己作爲例子,因爲各種各樣的原因,最近有換工作的嘗試,找身邊的朋友內推了滴滴。面試的過程中我的簡歷中寫了最近自己做的一些包大小優化相關的工作,我們做的程度大概到 Mach-O 的級別,其實還有很多不足,滴滴技術上的的老大就問我有沒有從編譯原理上做一些考慮。其實知道 clang 的詞法解析,語法解析,語義解析生成語法樹的過程,但是真的不知道技術上的細節…其實這裏就涉及到了編譯原理的基礎和編譯原理上的深入…其實就是想借此說一下基礎和深入的區別到底是什麼以及基礎對於深入的重要性。雖然有幸耗時兩個小時過了據說最難的 iOS 老大的技術面,但是還來不及興奮,就因爲手寫不出 DFS 等比較基礎算法被淘汰…說實話對於這樣的失敗方式心底十分的不甘心也很難接受,可終究是因爲自己菜,怨不得任何人,至此更明白基礎的重要性。

可能有人會問,對於客戶端開發,算法真的有那麼重要麼。我想說對於部分人而言重要,算法可以是優化函數執行時間的思路和方向。而對於部分人而言,確實可有可無。其實深入的時候,很多優化相關的工作其實和算法真的息息相關。可對於實現需求本身,可能有人會覺得意義不大…所以看法完全因人而異,算法之於我,我認爲就是自己不足的短板,最近可能會用很長的一段時間,花時間去補相關的知識。再多餘的說句可能會讓人覺得裝逼的話,不過我覺得無所謂別人怎麼看。成長絕不是出於功利目的,所有隻是功利目的的成長一定伴隨很多潛在的問題。

關於未來的思考

面完滴滴之後,我完全放棄了換工作的想法。其實不是找不到,自大的認爲找到一家比起當前薪資有一點漲薪幅度的公司應該不難,但是從成長的角度考慮,這樣的選擇無疑是一種失敗。

因爲就換工作這件事而言,本身就是一件成本極高的事情。程序員要在離職前完成很多交接的工作,下一家公司還要熟悉新的開發風格規範等等…這一段時間其實我認爲做的工作就相對低效。而且沒想清楚自己爲什麼要換工作,盲目的找到了下一份工作,最後的結果大部分都是步入持續換工作的死循環。所以換工作一定要去想,這份工作爲什麼想換,下一份一定不會出現相同的問題麼?怎麼在下一份工作中解決相似的問題。如果有解決方案,那就在當下去實踐沒有什麼大不了。

此外,頻繁的換工作其實會對自己的職業生涯產生很大的影響。前段時間練車,同車的人閒聊中得知是 360 的前端,技術上聊天中感覺很強(當然我前端很菜,但是我認爲很多知識有共通性)從其口中得知,因爲回老家了兩年,兩年間兩份工作,回到北京面阿里的時候,過了所有的技術面,但是因爲頻繁的換工作,被 HR 拒之門外…我認爲這樣真的太可惜…可是不穩定,對於一個企業而言從成本角度考慮也完全能夠理解。現在京東對於穩定性的要求,瞭解的人自然都懂,當然對於職業生涯沒有這樣量級要求的小夥伴也完全當我沒說….所以,如果對於下一份工作沒做好多年穩定下來的準備,希望最好不要換。

當然我說到阿里這些公司,並不代表我的意思一定要去頂級的互聯網公司,此外做大廠的螺絲釘也不一定是最好的選擇。其實大廠之外,依然有很多好的公司可以給我們比大廠更好的成長,但是這就需要我們發現的眼光了。

其實這裏可能就會涉及到最近看書中寫道的一些預見性。有幸去一個有足夠成長空間的公司,公司業務量級的不斷擴大,陪伴一個企業成長,不斷地去承擔更大的壓力和責任,我想這樣的成長速度和成就感才一定是很多人最想要的。

說到預見性,舉個小例子。就說我爲什麼選擇滴滴面試,想進滴滴吧,因爲我看好出行領域的未來,看好的原因是新能源汽車現在已經成爲了未來的大勢所趨,而無人駕駛汽車的量產我想也並不會太遠了。此外隨着技術上的深入,我覺得最多十年的時間,街頭上可能會出現很多無人駕駛的新能源汽車而且成本不會很高。可能有人就說我說的是僞命題,成本低了那麼買的人多了,對於共享出行並沒有什麼優勢。其實不然,因爲不會變的是城市空間。所以將來城市出行可能會因爲汽車太多而變得更加擁堵。而滴滴基於多年的大數據和現在的自研地圖一定有能力去優化出行路徑的預判和選擇,這就是很多人忽略的壁壘。而且在省去了其中人力難於管理,更容易提供統一化的服務之後,成本可能會更被大衆所接受。那時共享出行可能會真的改變人們的出行方式,那個時代也許出租車真的會被淘汰。對於將來這樣的預見,是我想去滴滴的原因。

其實上邊不過是預見的太多的例子中的一個,移動時代移動支付的興起,回到幾年前再往後看,其實這其中的道理也就沒那麼難懂了…當然,對於預見性,也有很多僞命題,比如多年前的共享,其實不是想法不好只是當時沒有移動互聯網的土壤供其成長,所以太早的預見性也可能失敗。所以對於預見性,更多的是仁者見仁,智者見智。但是只要是基於足夠思考的踐行我想都不會太差。

如果只是爲了換工作而換工作,最後可能會走入死循環,我想這是每一從業者都不想看到發生在自己身上的。

此外對於換工作而言,一定要有對於行業和市場的有足夠清晰的判斷,比如當下一份 double 薪資的初創企業請你去,會如何選擇呢? 前段時間有朋友真的面對這樣的抉擇,當然薪資可能不至於那麼誇張,當時我們吃飯說到此事,我就很直的勸他不要去…

因爲現在的大市場環境就是不景氣,現在的投資環境並不好,再加上美國近幾年可能會不斷地加息,國內市場雖然沒有直接的加息,但是貸款等變向加息很多人都能感覺得到。這就意味着資金的流動性在將來一段時間一定會變得較差,所以投資人會變得相對謹慎,再加上美國不久將來會降低企業稅,國外的資本在硅谷也就有了更多的選擇。所以這一切對國內的創業環境而言都是打擊,所以我認爲明年可能是創業更寒冷的寒冬。會有更多的小企業面對資金不足的問題,這個時候選擇去初創企業那所謂的高薪。確實有很大的風險。一旦失業,再重新起航,這來回之間時間成本因素考量之下,也並不一定值得。在此還想說我沒有任何對於創業者的否定,在這樣的環境下堅定初心的創業者,我相信一定是內心強大的勇士,我心底也充滿了敬畏。也相信在這樣環境下成長起來的企業,一定有很好的前景。只是希望可以讓很多人在換工作的時候有足夠的考量,如果沒有面對這些問題的勇氣的人,也一定不是創業者想找的人。彼此不耽誤,我認爲這樣也許再好不過。

其實說了那麼多,才發現好像偏離對於未來思考的主題。那麼就言歸正傳。既然決定了穩定下來,那就在工作之餘,一定要給自己定下成長的方向。除了對於自己影響較大的算法之外,我認爲將來的客戶端工程的發展方向都是向着巨型項目的方向進行發展。所以這一過程中,我想有經驗的開發者一定知道效率在這個過程中的重要性,接下來一年我可能會看更專注的去做相關的東西。其實面試滴滴給了我一個很好的出發點,所以第一步就從編譯原理入手吧。

此外,最近在看一本 debug 相關的書,發現 debug 完全可以變得更加高效。但是其中可能會用到 Python 腳本來完成部分工作。這半年越來越發現,對於客戶端開發掌握一門腳本語言的重要性,真的會有很多很多的使用場景的。所以會嘗試使用 Xcode 的實現更高效 lldb 。 總之我認爲效率化的方向,都值得深入的去研究。

前段時間有幸的看到了 bestswifter 分享的機器學習在客戶端的使用場景的 ppt ,其實這完全是可以進行嘗試的方向,隨着手機計算和存儲能力的提升。完全有理由相信客戶端能夠完成更多相關的任務,這個方向深入的研究,說不定會是一種趨勢。

此外也給小夥伴提個醒,作爲 iOS 開發者,對於蘋果官方的消息,一定要有足夠的預判。比如對於 Hybrid 的開發模式,是不是可以適度的減少相關鑽研的時間。滴滴在做 HTN 我想可能就有對於這方面的考慮吧。再比如蘋果可能會大範圍的下架模板化的項目,對於外包而言將是極重的打擊.所以在外包行業的小夥伴,真的提前要有一定的準備…

總之接下來即將到來的 18 年一定不忘保持初心,在好好工作之餘,看足夠的書,完成自己想要做的事,哪怕明年這個時候發現自己更菜了,但是回首此文,能讀到自己的成長,就足夠了。

作者:北小洛


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