計算機從業者的技術成長學習之路

markzhai發表於2016-05-05

最近因為在學習一些新的東西,所以Android的東西沒有怎麼更新。趁著有些閒工夫,簡單說說技術上的學習,也算是自己對這幾年工作來的一個小結和經驗吧。

希望這篇文章可以給那些在校的,亦或是才踏入工作沒多久的程式設計師同伴們一些幫助。畢竟我自己也曾經止步不前,不知所措迷茫過。

英語

老實說,沒有比英語價效比更高的,需要學習的東西了。靠著別人的翻譯,或者機翻,終究不是辦法的。筆者自己日語英語姑且算是熟練掌握的地步,但在初期直接看那些全英文的書籍,仍然會覺得頭痛(謝謝HKUST虐我),但堅持下來就會發現其實計算機的英語還是有一個範圍的,多看看熟悉起來,就會覺得並沒有什麼難,甚至比起很多翻譯來說更容易看懂。

混跡GitHub就會發現國內的很多開發者英語上欠缺還是很大的,尤其是一些description和readme直接就上中文的。即便你英語渣,機翻也行啊。畢竟是計算機社群,英語才是通用語言。用中文去一些國外開發者的倉庫裡提issue或者回復也是一種很粗魯的行為。

如果讓我說一種對技術幫助做大的語言,那必然就是英語。有了英語,才能真正地獨立學習。

Google

問小白問題之前,你Google過嗎?如果讓我看到一個開發動不動去搜百度,那我估計會武斷地認定他很菜。其實Google是我們最好的老師,只要能正確把握問題的關鍵字,幾乎沒有找不到的答案,大部分會在StackOverflow上,其他散落在GitHub、部落格等等地方。

如果你要找的知識實在冷門,比如react native的一些深入用法,android上的視訊so閹割這種,那恐怕只能找找做這塊的朋友或者自己研究了,國內有一些好心的開發者或許會分享在自己的部落格。

至於科學上網,這個話題相關的技術太多了,請自行找方法,VPN也好,SS也好,都很簡單,相對的投入和產出對程式設計師來說價效比是很高的。實在不想花錢的去用AWS的免費雲伺服器搭SS也行。

實踐

看是沒有用的。比如看一篇關於Hybrid App原理的文章,或許它寫得很好,但其實就算看完了,讓我自己去寫一個,或者講講怎麼去做一個我們應用的版本,Android/iOS端通用的方案,最後也是支支吾吾說的不知所以。最後還是要去實踐做一些Hybrid頁面才能真正掌握,能說清楚這裡面的原理和應用場景。

紙上談兵終覺淺。

警惕體力勞動

當你的工作成為一種體力勞動,而自己無法從中獲得新的體驗和知識的時候,需要警惕究竟發生了什麼。

想得太少

對做的內容停留在完成的階段,而不對更好的方案,實現細節去思考更多,比如用了某個API,會不會去仔細看看其究竟是怎麼做的。或許你知道Handler,Looper,那你知不知道主執行緒的一切,四大元件的生命週期,各種View的觸控事件都是訊息驅動,在mainLooper裡面進行處理的呢?

工作內容重複

當Focus在一塊上太久之後,難免會碰到這種瓶頸,這時候可以看看是不是能換一塊做,比如做做快取、Hybrid、啟動優化、視訊等等。可以做的領域很多,實在發現興趣不在此,換著做後臺或者前端也行。倘若因為個人原因,比如公司不讓換或者可能工資會低很多,擠一擠時間在side project裡面搞搞也可以,只是有沒有心的問題罷了。

我面試過一些做Android 5-6年的程式設計師,但大部分真的連一些優秀的2-3年經驗的開發者都遠遠不如,問設計不懂設計,問流行的開源專案回答就是“好像聽說過”。我不希望我認識的開發者以後變成這樣的人。但你若是總是重複勞動,難免像這樣1年的工作經驗重複了5年。

在額外學習的時候,更多關注的應該是不同的地方,而不是說這個學Python,下個月去學Go,想想語言的差異性在哪裡,自己試試看做一些專案,培養全棧工程師的底子。還在念大學的時候,我學了C、C++、Java、Node.js、Python、Ruby、PHP、HTML、Perl、SQL/Redis/HBase等等等等,但對每個的理解都不夠深刻,現在想來那時候是做錯了的,思考的都不夠深刻,也直到這一兩年,我才足夠明白這個錯誤。

你應該有自己的專長,但也要能從全域性的角度思考問題,一個不懂前端的後端老大會導致前端過重不靈活,反正只要自己這兒的模組清晰就好,一個不懂前端的前端老大也會讓下面的人不要抱怨,做出來就好。

公司問題

發生在一些專案經理逼得特別緊,老大又比較無能的地方。專案經理為了向上面交待,對工程師說“這個進度能不能再壓一下呀”,或者乾脆直接不聽工程師的意見強行縮短工期,導致沒有時間去深入學習。老大明知這種情況,卻睜一隻眼閉一隻眼。這種公司,還是離開為妙。

一個合格的leader,或者說mentor應該做些什麼?至少從我的角度來看,儘管對公司他需要對專案負責,但對團隊內的開發者,他更應該做的是觀察和指導,看清楚那些團隊毒瘤(不做正經事,得過且過,假加班,搶功勞推脫責任,等等),營造團隊氛圍,而不是一味Push催進度和表現自己。

記錄和總結

寫部落格是為了什麼?

至少對我來說,寫下的東西更多是對自己的一個總結和交待。如果我能寫下來,至少能證明我有信心自己確實是這麼去理解的,沒有去坑人。另外,姑且也算是一種成長的足跡吧,偶爾自己還會去看看筆記。

分享也是目的之一,希望大家能互相進步,這樣才能促進發展。

寫部落格也好,寫一些筆記也好,點點滴滴也是對自己的一種整理。

問自己

想清楚自己要的究竟是什麼。

做全還是鑽?想做一個超強併發量的後臺?想黑別人的系統?想做出精準有效的推薦演算法?還是想做別人能實際用到的產品?

筆者正是因為想要的是後者,所以成為了Android開發(為什麼沒有選iOS,大約是Android的開放性吸引了我)。而現在,因為發現自己欠缺的(對前端駕輕就熟,大部分的事情對我來說只是體力活,而自己想承擔一個完整的專案卻又不行),所以又重新拾起了Node.js,看起了ES6,思考設計和產品的問題。


希望大家都能想清楚自己想做的,要成為的樣子。能自主地去學習。畢竟師傅帶進門,修行靠個人。我不想雞湯,大家各自走好,望來日可並肩一起,彼此說一句“很高興遇見你”。

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式

計算機從業者的技術成長學習之路 計算機從業者的技術成長學習之路

相關文章