一個普通iOS開發者的2015大總結

bestswifter發表於2017-12-13

我一直認為,對於程式設計師來說,寫一天程式碼不算什麼,也許這只是解決了一個bug,或者乾脆就沒能搞定。一週的時間學習內容頁有限,可能是一兩個困擾已久的知識點終於悟透了,也可能是新學了某個知識點。但是和一個月前的自己相比,總是感覺自己進步頗大,和一年前的自己相比,就有一種判若兩人的感覺了。2015就要過去了,我想有必要總結一下這一年來的收穫得失。

從小白開始

從去年年底正式開始寫iOS開始,到大約三四月份,一直在開發自己的第一個iOS應用,現在回顧那段時間的部落格,主要是關於UI方面的總結,以及一些常見錯誤的解決方法。在這個過程中瞭解了怎麼處理HTTP請求和Json解析(沒錯,當時還不知道HTTP請求是什麼),圖片的非同步載入與快取,UIScrollviewUITableView這些稍微“高階”一些的UI控制元件。也開始接觸了定時器、記憶體管理等知識。APP上架以後我就天真的以為自己已經把iOS學得差不多了。

第一次失敗

五月份的時候做過兩個小的專案,一個APP上架(廣告賺了將近200),一個Xcode外掛在Github,然後興沖沖的去面了一家公司。待遇是12K+包吃住,雖然也沒覺得自己達到這個水平,不過真正到了第二輪被拒的時候還是有一些小傷感。面試雖然沒過,卻還是有些收穫:

  1. 逐漸開始過渡到用Google查資料,平時關注Objc.io並RSS訂閱各個大牛的技術部落格,偶爾在StackOverflow提個問題。總的來說就是層次提高了,獲取知識的來源拓寬了。這一點至今讓我受益匪淺。

  2. 關於UI方面的一些細節,以前做專案,只想著效果OK就可以,面試官問我怎麼處理圖片的拉伸問題我就一問三不知。還有一些比較底層的知識,比如CoreGraphisCoreAnimation等也是之前欠缺的。

  3. 以前只會嘴上喊MVC模式,實際程式碼中VC負責一切。被面試官一下子問個正著。現在嚴格遵循MVC模式,而且學習了MVVM模式,寫了幾篇分析ReactiveCocoa原始碼的文章:ReactiveCocoa詳解。可惜對函數語言程式設計的思想還是不夠熟練,在專案中用了一兩次之後就暫時擱置了,聽說美團在用RAC。

第二次失敗

面試結束後,把面試過程中遇到的問題總結了一下,又投了一份簡歷。可能是運氣不錯,我準備的問題被問到了好幾個,也有可能是那個創業公司比較缺人,所以成功的拿到了Offer。當時談了400一天,後來因為晚上加班,最後實際給了440一天(大二就月入過萬了,當時還是有點小驕傲)。六月份開始入職,但是問題來的比工資快。現在想來主要是這幾點:

  1. 不適應身份的轉變。企業是企業,學校是學校,在學校的團隊裡,自己是技術leader同時還身兼產品經理。自己定好需求再實現。但是在公司裡,產品經理的需求一日三變,寫完的程式碼leader看技術實現,產品經理看效果,美工檢查UI佈局。由於以前基礎太不紮實,態度也比較敷衍,所以這麼一來漏洞百出,顧此失彼。

  2. 心態不夠好。剛開始幹勁十足,但總是被PM改需求,被leader批評。後來慢慢的也有些失望,甚至是牴觸。其中的過程比較複雜,至今也不太能理清楚,

總的來說,第二次失敗的原因有兩個。一是自己技術水平不夠,這裡有程式碼規範問題也有iOS開發上的問題,二是太以自我為中心,如果當時能多站在公司的角度考慮問題,也許情況就不是那樣。後來和公司的關係越來越僵,最後九月初選擇了提前離職,回到學校繼續鑽研技術。

回到學校之後的整整兩個月都沒有看技術。半主動離職讓我開始懷疑自己,雖然對公司的領導、氛圍小有憤懣,但畢竟自己的問題更加嚴重。於是選擇了逃避,每天玩遊戲、看電影,甚至去大連旅遊了一趟。回家呆了一段時間,再回學校已經是11月,感覺逃避也不是辦法,只是還是要一點點學。

讀書

15年讀了不少好書,收益頗豐。實習期間看完了《Effective Objective-C 2.0》和《Objective-C高階程式設計》,對不少基礎知識,比如ARC、block和GCD都有了更加深入的瞭解。

實習的時候還看了一本《老碼說程式設計之玩轉Swift江湖》,當時Swift還是1.x版本。從這一點來說,我是個不合格的實習生。實習期間路上、晚上都在看書,導致白天精力不濟。因為當時的思想還是利用實習期間多學技術,但創業公司要求的其實是實習生為他創造效益。

11月讀了《程式設計師的自我修養》,對程式的執行和作業系統有了更透徹的理解。讀完之後寫了一篇讀後感。12月的Swift 2開源,感覺Swift是大勢所趨,所以開始學習objc出版的"Advanced Swift",同時自己也寫了它的中文翻譯版,後來有人提醒我版權問題,所以已經暫停原文翻譯了,後面的幾篇文章都是對原文進行加工和總結後得出的。

閱讀和翻譯英文書的收穫非常大,對很多的知識的理解比直接閱讀中文教程要深刻的多,同時也大幅度提高了自己閱讀英文教程的能力。

收穫

最大的收穫,莫過於Swift的學習了,瞭解基本語法的同時,有機會也會自己看一下已經開源的部分的實現原理。

磨刀不誤砍柴工,我減少了很多寫專案的時間,希望把基礎知識弄紮實,因為很多bug往往來自於對某個概念的錯誤理解。與其一知半解的去解決bug,不如先掌握知識。所以在讀書的同時,我也開始深入的思考iOS開發的一些基礎知識:

  • AutoLayout和UIScrollview的聯合使用
  • UIScrollview效能優化
  • GCD和NSOperationQueue
  • UIView的生命週期
  • Swift與OC在複製物件時的異同
  • Swift與OC閉包的異同

感謝Google上的各種資料,我完成了自己的Xcode外掛,用來統計在Xcode中所有寫過的程式碼行數和寫程式碼時間,不過好像有隱藏的bug,後來也就不維護了。因為看過《程式設計師的自我修養》,對一些底層的知識有了淺顯的瞭解,所以在Google的幫助下,自己破解了一款收費應用:一個數字的魔法——破解Mac軟體之旅

仔細想想,其他亂七八糟的東西也學了不少,實習期間相當長的時間在做C++專案,寫了一個靜態庫分別給OC和Java呼叫,所以也稍微瞭解了一下C++。發現了CSDN部落格的一個bug,又去了解了一下Python,寫了一個指令碼把自己積分刷到了第一。學校有安卓的課,所以不得不寫了個安卓應用,也算是瞭解了一些簡單的Java和安卓開發。年底的時候註冊了bestswifter域名,搭建了個人部落格,雖然註定要被打臉,但也希望能夠鞭策自己。

2016年的計劃

  1. 文章要繼續閱讀和翻譯英文書籍。目前Advanced Swift翻譯了三分之二,一月份估計可以結束。下一個目標或許還是Objc的書:Core Data。事實上總是有讀不完的好書的。

  2. 閱讀優秀的博文。實際上今年2015年的很多時間浪費在一些低質量的文章上,不僅學不到知識,還把自己弄得暈頭轉向。NSHispter和Objc.io有非常多優秀的文章,足夠在2016年好好拜讀了。

  3. 技術與基礎。有些知識點還沒來得及學習,有些學過但是長期不用已經忘了,目前想到的涉及這幾點:響應者鏈與事件處理、KVO、幾種訊息傳遞機制的比較、Runtime、NSUrlSession、CALayer等等等等。雖然要學的太多,不過一直很喜歡一句話:“怕什麼真理無窮,進一寸有一寸的歡喜”。

  4. 大學期間就該做大學裡該做的事,比如讀書。目前想到的是《程式碼整潔之道》、《圖解TCP/IP協議》,如果有空希望可以深入瞭解Mac與iOS作業系統。

  5. 實習。目前對創業公司有了一定了解,希望能夠到一家大公司實習幾個月。

雖然任務浩繁,不過總得盡力完成,希望一年後的自己與現在判若兩人!

相關文章