1. 程式人生 > >2018總結與2019規劃

2018總結與2019規劃

時間也是過得很快,不知不覺又過了一年。這一年發生了很多事,但是好像又過的很平淡。回想起來自己好像做過好多事,但好像又沒做過什麼事,在這裡我再次回顧一下去年的一些狀態、然後展望一下未來,接著立一下對應的flag。

去年的目標總結:

我去年好像說過要好好鍛鍊的,這個基本放棄了,或者說從來沒有開始過,但是體重好像也算是控制助理,沒有想象中漲的那麼快,去年120,今年130。當時給自己定下的是140後開始鍛鍊。這個算是不了了之了。

之前好像說過要嘗試著自己做飯,但是後來找到理由說服自己了:買菜10分鐘、洗菜10分鐘、做飯可能20分鐘、飯後洗碗10分鐘,吃飯10分鐘,這麼算下來好像做飯很虧的樣子,所以這個也就不了了之了。

這麼算下來自己當初定下的一些小目標好像都沒有實現過。而關於讀書這個我統計了一下,包括現在正在看的一本,好像總共17本,未達到當時定下的20本的目標。

在對照著之前寫的2017的總結那篇文章上的目標好像自己完成的不多,但是我感覺這年在手機的使用時間上卻是是降下來了,每天大概在1小時左右。這個降下來還主要是由於加班太多了。從6月份開始好像就很少能在10點之前到家的。

工作總結

今年我正式接手了公司主要專案——Web掃描器的維護。在剛接手這個時候我也是被它裡面有如此多的爛程式碼所震驚:2萬行程式碼的函式、大量重複的程式碼、大量的巨集定義(包括許多無用的巨集)、大量的全域性變數、與介面綁死的介面、大量不知所云的區域性變數。專案經歷過不同的維護人員、不同的維護人員不同的程式碼風格全在裡面,而且沒有文件(不是沒有詳細的文件、而是壓根沒有文件)。就靠面對面的口述來進行交接。

這是面臨的主要問題,當時我想過進行重構,但是專案程式碼實在太多了,程式碼裡面的很多邏輯我還沒搞明白,而且只有我一個人,重構肯定是不現實的。後來我自己採取折中的措施,將我自己能看懂的部分進行重構,但是很多地方關聯的太緊密,經常就是改了這塊測的沒有問題,結果臨近釋出新版本了,發現另外一個原先沒有的問題,每次大改必定會帶來新的bug,這樣搞了幾次我實在是身心俱疲,放棄了。轉而向之前的維護人員那樣,慢慢加功能就好了,其他的不管了。這樣做之後,好像一切都正常了,再也不挨批了,偶爾還能得到辦事能力強,能迅速完成老闆要求的這麼一個好評。

既然不能重構、那麼寫寫文件吧,把之前沒有的文件都補起來,這個想法是我在6月份想起來的,但是後來經歷了一系列的事,一直沒有時間實踐。

我在自己的另一份年中總結上寫過,公司很多老員工都走了,我也從小X轉變為了X哥了,慢慢的手下也有幾個人,開始帶一些人接手新專案。在10月份我開始帶著幾個新人開始新的專案。開始時我想按照軟體工程上的方式,從需求到分析、到設計、再到編碼實現與測試、當時也強調過要手下的人學會寫單元測試,這是我帶隊的第一個專案,自然希望將它做好,但是我發現時間是真的不允許,專案總工的時間是1個半月,我發現從我開始調研需求到形成原型圖、開會討論需求、到最後生成需求文件這一系列就用了兩週,還有一個月還沒開始編碼。這個時候我有點慌了,將最重要的設計工作的時間壓縮到一週,白天維護掃描器,晚上加班加點進行對應的設計工作。一週結束之後我發現我完成了對應的架構設計,知道系統應該分為幾個模組,每個模組該實現什麼功能,至於如何實現具體功能、如何進行模組間通訊與管理,這些根本沒有時間,只有讓手下幾個人倉皇上陣。最後的結果可想而知,很多早期設想由於手下的人沒有時間做最後砍掉了,最後一遍遍精簡,形成了一個最簡單的系統。由於編碼時間有限我後續沒有要求進行單元測試,只進行了最後的內部統一測試,測試時問題百出,有少數bug在短時間內無法解決,最後在不影響系統功能的情況下作了相應的精簡。而且專案不得不延期。

總體來說,我第一次帶的這個專案是失敗的,雖然我早期對它的設想很明確,先需求分析、再概要設計、然後詳細設計、編碼的同時進行單元測試、每個功能模組完成後有對應的功能測試與程式碼的review、並在最終完成之後進行對應的統一測試。並最終形成對應的需求分析文件、概要設計文、詳細設計文件、資料庫文件、測試文件、驗收報告等等。並制定了相應的編碼規範,前期甚至計劃每天按照規範review他們提交的程式碼。但是最終並沒有按照這條路走。針對這個專案我總結出來大概有這麼幾個原因:

  1. 自己的維護工作與帶隊工作沒有規劃好,經常就是忙於處理掃描器bug、而無法兼顧這個新專案,這個問題公司中有人已經警告過我,讓我盯緊、但是被我以維護工作忙等原因給忽略了
  2. 自己水平問題,我不知道一般專業的專案經理或者團隊的架構師在做需求和設計大概需要多久,我總體進行需求分析與概要設計大概花了有3周時間,從專案的時間週期來看我感覺這個時間偏長
  3. 自己管理問題,前期雖然指定了一些列的編碼規範、搭建了gitlab作為專案管理的工具,但是後期我基本沒看過他們提交的程式碼,也沒有做到每天檢視進度,甚至在後期編碼的時候已經沒有進度計劃了。我發現我自己在給自己制定計劃的時候很從容,而且後續也基本能夠按照進度走,而為團隊制定計劃的時候,我總會考慮團隊成員的水平,總擔心他們水平不行,能不能在工作時間內做完,如果逼的太緊會不會影響他們的正常作息,一直沒法給出一個合適的計劃表。當然這也跟後續詳細設計沒好好做有關,當時設計上有4個模組,按照每週一個的進度簡單的定了一個計劃,但是後續並沒有嚴格執行,沒周最後我詢問進度時,下面總反應有難度,然後就延期。當然也有未延期的,但是我沒有時刻緊盯進度,所以具體啥時候完成了模組我也不太清楚。
  4. 手下水平問題,這次專案中我感覺明顯有部分人是在拖後腿的,由於是實習生,我本來沒對他們報太大的希望,只希望他們能完成打雜的工作就好,寫寫前端頁面、幫忙弄弄資料庫、搭測試環境啥的。但是我發現有的連這些都完成不了,還得團隊其他成員幫忙完成這些。有的實習生好像是抱著來學習的態度在做事,有問題了直接問,自己從來不搜尋,不嘗試自己解決問題。當時招進來的時候確實也感覺到能力不怎麼樣,但是看著還未畢業,想著可以來慢慢培養。通過這次我發現,招實習生也得招那些能做事的,培不培養另說,至少要能做事。

總說理想很豐滿,現實很骨感。專案剛剛接過來我跟領導信誓旦旦的保證完成,但是後續在實施過程中遇到許多困難。從這次專案中我學到了許多、知道程式設計師沒有想象中那麼輕鬆,那些管理崗位並不是只要發號施令就OK、還得要合理的進行相應的規劃、合理的發號施令。而且還要盯緊下面的人,有的人只有盯緊了才能發揮全部能力,否則總會缺斤少兩,總想偷懶。自己需要擺脫老好人的思維方式,多為專案考慮,而不要過分考慮團隊中其他人的感受。適當基於壓力不一定是壞事。

當然在工作中最成功的還是自己獨立寫出來一個facebook爬蟲,專案的細節我已經在我另外一篇部落格中詳細的寫了出來。這個專案中使用了新的JS解析工具、並且翻譯了它的中文文件。在這個專案中,被許多人叫做大神,甚至有人給我打賞,請求幫忙解決一些問題。這些都讓我的虛榮心得到滿足。而且也拿到了專案獎金。或許這個專案是今年最成功的專案。

學習總結

在學習上好像之前也立過不少flag,但是執行的都不怎麼樣。當時總是信誓旦旦的說要學習網路原理,要看完TCP/IP協議這本書。但是後來慢慢的就將它拋之腦後。後續腦袋裡面冒出過很多想法,有很多要學的東西,但是很多都做到一半就結束了。這年的狀態經常是這樣的:

  • 這個技術好,我要好好學學,用它寫一個XX程式出來
  • 然後是找視訊或者看書
  • 前面的好像很簡單,不用細看了,快速閱讀吧
  • 基本語法我都會了,開始寫專案吧
  • 這個東西好像沒有什麼好的介面庫,還是用B/S架構把
  • 前端技術好像不怎麼會,學學這個吧
  • HTML 標籤我都知道,直接學CSS吧
  • CSS 這些都很簡單,看看JS吧
  • JS的語法跟C很像,不看了,用的時候再查吧
  • 網上找一個前端介面,自己從頭開始寫
  • 這個JS程式碼我看不懂,還是轉回去學學JS吧
  • 最近看了一下這個前端框架,先用上吧
  • 這個框架好像要求懂HTML + CSS + JS,還是好好學一下這些吧
  • 從頭折回去學那些東西
  • 最後正式開始寫的時候又發現,好像用另一門技術或者語音更容易寫類似的程式,先學一下新技術吧

這一年似乎都是這麼一個死迴圈,結果專業術語瞭解不少,但是程式碼明顯寫的少,很多書買了一堆、各種線上教育平臺的課程買了一堆,後續因為看上了另外的技術而放棄了前面的內容。結果時間花出去了,錢花出去了。但是仍然一事無成。看似很努力,但是沒有什麼結果。最近看到一篇微博上寫的大意是這樣的:在學習上有真正使你進步的,還有就是讓你以為你進步了的。我感覺我這一年應該屬於第二類。感覺很努力應該比那些天天刷抖音、快手的強。但是仔細想想可能還不如這些人,畢竟我時間也花出去了,結果與這些人水平無異。

在學習上我完成的只有之前定下的,VC的高階程式設計與Windows驅動程式設計的內容,我想我能完成這些在於這些是當時剛立下flag的時候進行的,那個時候還是很有毅力的,還有就是這些我手上的資料比較少,只能看那個。而且沒有什麼要完成專案的想法,僅僅只是學習防止日後有用。

我發現對我自己而言很多別人很好的建議在我面前都沒有什麼很好的效果,比如說很多人建議的,在學習過程中以結果為驅動,以完成某個專案作為驅動,但是在實踐中我發現,我自己在寫專案的時候容易發現自己的不足,轉而去學習另外的東西,結果導致什麼都沒學會,專案也沒有完成。還比如很多人建議的,廣泛閱讀資料,在這條我會發現自己很多不會,轉而又去關注不會的東西,而把原來的任務拋之腦後。

針對這些問題,我想今後的解決方案是這樣的:

  1. 在寫專案的過程中,只關注那些與具體技術相關的內容,而像介面這些東西,能直接拿來用就行,不用太關注。
  2. 在學習新技術的時候,不要看某些東西簡單就挑過,也不要因為某些東西看不懂就轉而去研究這些看不懂的,而是在所有內容看完後在回過頭來,關注那些不懂的。有時候不懂的那些是因為另外的技術不懂,這時候可以把不懂的新技術作為下一階段的學習目標

總結與flag

不管怎麼說2018已經過去了,在怎麼追悔都無濟於事,我想做總結的目的不在於一件件的數那些成績,然後沾沾自喜,也不在於一遍遍數落自己的缺點大罵自己沒用。總結的意義在於發現自己的好,來年繼續堅持。發現自己的不足,來年爭取改正。在這裡我給自己再立一下flag:

  1. 讀書(20本)
  2. 寫部落格(一週一篇)
  3. 學習計算機的基礎內容(演算法、資料結構、編譯原理、網路協議)
  4. 學習新語言(GO、JavaScript、PHP)
  5. 學習Web安全的基礎內容(XSS、SQL注入等等)

這次學聰明瞭點,flag不能立太多,我覺得能把這些完成就算不虛度年華了。

最後祝所有朋友在新的一年越來越好、單身的早日脫單。。。。。