版權聲明:本文為博主原創文章,未經博主允許不得轉載。
從來沒有寫過年度總結,今年決心寫一次,也算是對滿是感慨的2016年做個紀念。從年前一直拖到現在,拖延症着實嚴重,Mark一下日期:2017-02-09。哈哈~~夢想和現實總是很矛盾,從我的博客名和我的性格中就能體現出來。
生活
愛情
截至今年中秋節,愛情長跑已經跑了6年,依然是異地,從早期的分分合合,到現在談婚論嫁,整體上看似乎是順順利利,然后實際有多曲折,可能只有我們倆自己清楚。能遇見已是緣分,在一起更是不容易!
不得不說,在這場愛情長跑里,她犧牲了很多很多,遠超於我。為了能在一起,結束異地生活,爭論了很久,最后她選擇了辭職來北京找我,這件事情上,我有點狠心,並且越是臨近她來北京的時間,我越覺得矛盾與愧疚。矛盾是因為2016年北京的房價,呵呵,漲了一倍,雖說年輕該闖一闖,但現在真的懷疑這些決定是否值得,但願多少年后,回首再看這篇博客時,能夠回復兩個字:值得。再說愧疚,專科學歷的她,放棄了本來舒適、穩定的工作,來北京找工作,承受的壓力可想而知。除此以外,因為我們倆學歷不對等,這么多年來自周圍的言論,也是給她帶來了巨大的壓力。然而我不僅沒有同意回合肥發展,也沒有能力幫助她,讓她來北京過上幸福、安逸的生活,至少在現在的房價下,兩、三年內沒有希望。
(PS:居然能讓房價漲了一倍,也不知道上面是干嘛的,我就不信2017年上半年你不回落一次)
因為她的犧牲,我們的愛情也前進了一大步。用行動和態度說服了雙方父母改變了心意,家長見面、領證日子、婚禮日子,習俗禮節等等,兩星期內全部敲定,萬事俱備,只欠落實。這樣的速度,連我們自己也覺得驚訝。
總結
愛情果真是一件讓人幸福、愉悅的事情,盡管工作上突發變動,心情壓抑,但每每想到談婚論嫁的事宜,總會多雲轉晴,動力十足。
工作
今年年初時,剛畢業半年,也剛工作半年。之前沒有實習過,工作經驗少的可憐,另外基礎也不扎實,所以,可以說是徹頭徹尾的新手菜鳥!盡管如此,在工作方面,今年着實收獲很多、成長很多,同時也感慨很多!
雖然這一年在項目組里做出的成績還算不錯,薪資也提升了很多,然而遺憾的是,因為公司內的各種因素,項目組即將解散,從年中就開始有領導、同事陸陸續續的被調走或離職,弄的人心惶惶,一度也把簡歷翻出來更新了,准備找下家,然而僅有一年多工作經驗最終還是迫使我繼續堅持下來。面對着各種令人壓抑的消息和謠言,我從最初的忐忑不安,慢慢的也開始平靜下來,在暴風雨來臨前的平靜里,整理自己在這個項目組里的經驗與得失,思考未來的職業發展方向。雖然最后,我自己申請了內部調崗到別的部門,但是既失去了自己積攢了一年多的在業務上的優勢,也失去了相處一年多的同事,以及給予我諸多提攜與指導的領導,希望他們都能夠平安渡過此次風波。
回首這一年,我過的還算是充實、精彩!前一年寫了2個月數據庫自動化腳本,天天加班加點的,好不容易積累了點數據庫運維技能,夯實了python、shell編程能力,准備強行當一個DBA,搞一點運維開發、數據分析。結果今年……尼瑪!依次做了批量部署、裝機自動化(what's the fuck?!)、服務端開發、系統發布與持續集成、自動化測試、系統環境運維、前端開發……唉~~莫名其妙的被領導刻上了“全棧”的印記,親身體會到了那種“什么都會做,又什么都不會做”的感受。盡管如此,“全棧”沒有白做,高的離譜的績效也沒有白拿,這一年我還是成長了很多,總結一下收獲:
1、批量部署
說起來很簡單,然而在公司幾萬台服務器上操作,所需要的可不僅僅是“怎么做”,更重要的是“要注意哪些情況”。怎么做?我用的是Ansible。要注意哪些情況?密碼文件的管理、rm等高危操作(莫名的想起了gitlab事件,可憐的管理員)、機器品牌、機器型號、操作系統版本、MegaCli版本、磁盤空間、用戶權限、性能等等,各種各樣的特殊情況。幸好有位大神罩着,不然我這個菜鳥也不會成長的這么快,這對我后續的做事風格影響很大,這也是領導比較重視我的一個原因,做事、寫程序考慮的因素、場景很全面,對於危險的操作有足夠的防護措施和回滾策略。
話說那個全自動部署的腳本寫的真是漂亮,解析文件、批量部署、分析部署結果、生成部署結果Excel,幾萬台服務器的批量部署,全部自動化,真的是很厲害,然而能體會到這一點的可能只有我和那位大神兩個真正做的人。
2、裝機自動化
從大學開始,如果遇到了“難啃的骨頭”,一般都是我上,我也不知道我身上的哪個特質導致了這樣的情況(不過我這個人好奇心比較重,做之前都比較興奮,並不抵觸,然而也只是做之前~~之前~~前~~)。難啃的事,不一定就很難,技術也不一定就很高深,關鍵在與:壓根就不想做,比如說裝機自動化。我一個計算機科學與技術專業畢業的人,硬件不怎么懂,嵌入式也沒好好學,之前也都是寫Python、Shell,再多點也就用了點MySQL、MongoDB、Ansible,領導居然讓我去做自動化裝機,這是個什么鬼?!即使做出來,對我以后有什么用處?並且這回可不像批量部署那次有個大神照顧了,什么是ILO?什么是IPMI?什么是PXE網卡?通通都不知道!腦子里的唯一的想法就是:“剛買回來的機器,都沒開機,也沒有系統,沒有人工介入,怎么裝系統?”
盡管如此,最后我居然單槍匹馬,一個星期就給出實現方案了,現在想想也是蠻自豪的。實現方案:PXE+Kickstart+DHCP+TFTP實現無人值守安裝操作系統。雖然實現方案是可行的,最后我也確實實現了,然而結果卻差強人意,純粹變成了我的技術路線的一個冷門分支,並沒有實際成果落地,因為任務起初定下的會提供給我機器的MAC地址,最后提供不了,導致整個實現方案不能覆蓋到所有機型。這是我的工作生涯中,第一個失敗的任務,盡管我自己是滿意的,因為你給我MAC地址,我就能完成自動化裝機。
3、服務端開發
系統上線后,用戶體驗並不好,Bug很多,前端、后端人手不夠,領導單獨請吃了一頓飯,1個小時的功夫就把我從底層Python開發忽悠成了后端Java開發。雖然Spring MVC、Hibernate都沒看過,但是邊學邊做,倒是很快就達到了基本開發的需求。修了2個月的Bug,又開始負責數據庫相關業務邏輯,再之后逐漸的擴展到系統大部分業務邏輯,以及多個系統相關組件的開發與運維,包括監控組件、報警組件、任務調度組件、定時任務組件等等。在這個過程中,自己的問題定位的能力、業務邏輯的理解能力、系統框架的設計思想、數據庫表結構的設計思想、團隊協作能力、開發流程的規范化、文檔的規范化、項目管理等都有不同程度的提升。總的來說,開發技能進步的很少,但是在系統的整體框架,以及業務邏輯的理解上提高了很多。
對系統整體框架的了解,對各個業務邏輯的把握,以及良好的溝通、工作方式,確立了我在項目組內的核心骨干地位,參與了一些重要功能的設計與開發。
4、系統發布與持續集成
因為Bug太多,外界給的壓力太大,領導希望每天都能看到效果提升,從而幾乎每天都要發布系統,修復Bug。剛從底層轉到后端的我,正好接手了系統發布的工作,當時還是手動發布。作為一個寫了幾個月底層代碼的人,我實在是接受不了每天心驚膽戰敲着相同的命令,生怕敲錯一個命令,就會系統崩潰。於是我寫了一個自動部署的Shell腳本,部署快了,但是打包、上傳war包還是很慢(因為是在本地打包,上傳到服務器,筆記本配置太差)。所以我又搭建了個Jenkins,花了兩天配置好了,整個跑通了。考慮到之后能將系統發布工作交接出去(實在太枯燥了),又添加了在ftp上的版本管理,與Git雙重保險,並添加了一鍵回滾策略,保證萬無一失。 一鍵部署,一鍵回滾,十分方便,搭建完使用了好多天后才知道,原來這個玩意還有個專門的名稱:持續集成。自己方便、團隊開心、領導滿意,簡直不能更好。
5、自動化測試
在2個月的Bug修復時期,出現了多次產生了新的Bug、Bug反復出現的情況,在新功能開發中,領導嚴格要求開發流程的規范化、文檔的規范化,另外,就是要引入測試來保證系統的質量。領導的這一決定,項目組的很多開發都不理解、不贊成,覺得是在浪費時間,但是我個人一直是非常贊成這個想法和理念的,尤其是測試驅動(TDD)的思想,雖然行為驅動(BDD)更加高大上,但是我覺得測試驅動更加符合當時的項目及開發者的情況。不過,僅僅是贊成想法而已,真要實現,我是反對的,各個開發在測試上想法不一致,強行推行測試,並不會得到預期的效果。個人感覺,想要落實測試,團隊成員必須都要對測試有足夠的重視,即使你不是一個測試人員。
話題說偏了,簡而言之,領導又讓我設計一套自動化測試方案。一方面,要能融入持續集成中,測試不通過就不進行構建、部署;另一方面,要能覆蓋前端代碼、后端代碼、底層代碼;最后,要能模擬用戶,進行整個流程的測試,也就是用戶驗收測試(UAT)。最后我的設計方案是:1.使用Selenium測試框架進行UAT測試,同時也能覆蓋到前端代碼的測試,該測試僅針對更新頻率較低,並且重要的頁面流程進行測試,其它測試代價太高,折中后放棄;2.使用JUnit編寫單元測試,進行后端代碼的測試,然后在Jenkins構建、打包前,通過Maven調起單元測試,測試通過才構建,否則失敗,並發送郵件通知;3.使用UnitTest等測試框架,編寫單元測試,進行底層代碼的測試,比如Python程序的測試。
慶幸的是,領導僅讓我設計了方案,搭建、配置了部分環境,並未讓我全權負責測試代碼的編寫,總算逃過一劫。作為一個好同事,我還友好的提醒了其它快要掉進這個“大坑”的同事,個別還給出了逃離理由,唉~~真是對不起領導啊,誰讓你這個真的有點坑人啊~~
6、系統環境運維
我運維了幾乎所有的系統和組件,運維真是件痛苦的活,尤其是特別重要的組件,比如報警組件、任務調度組件。盡管為了省事,我已經寫了很多組件運行狀態的監控腳本,各個組件也都有高可用腳本,但是依然有很多事情要處理,比如機器宕機、機器下線、節點遷移、添加節點等等。每個組件每個操作,會影響到哪些組件,會影響到數據庫中的哪些表。唉~不得不感慨,知道多了也很累,各種事情都會來找你。
7、前端開發
我並不懂前端開發,然而因為分工不是特別明確,經常進行后端開發或者Bug修復,會涉及到部分前端內容,總是不停的找前端開發人員,找多了自己也不好意思,畢竟人家也有自己的任務。沒辦法,索性就學了前端的基本知識:Html + CSS + JavaScript,我個人特別喜歡頁面這種所見即所得的感覺,突然發現還挺有意思的,於是乎又學習了JQuery + EasyUI,慢慢的,不僅問題不找前端了,后來干脆跟領導說我的頁面我自己畫,不用找前端人員了。就這樣,我又成了前端開發。最近又看了點BootStrap和Vue.js,MVVM還是挺不錯的,雖然還不怎么會寫,但是並不妨礙我很喜歡前端開發的感覺。
總結
在這一年里,雖然領導的管理方式不停的變化,進步與折磨同在;雖然同事們的態度總是很消極,抱怨越來越多;雖然人事斗爭精彩絕倫,初識職場的黑暗。但我還是堅定着自己的原則,在不斷變化的工作職責與工作內容中,尋找自己認為正確的行業主流的思想和理念,不斷學習和進步,保持自己積極主動的態度和濃烈的興趣。態度與興趣,是我自己非常注重的。總的來說,2016年在工作方面,首先,自己在技術上,橫向拓展了很寬,縱向嚴重落后,基礎依舊不扎實,因為面很寬,需要補的東西也很多。其次,自己在業務邏輯上,雖然馬上就要進入新的部門,原先熟悉的諸多業務再也用不上了,但是對於業務邏輯的理解能力確實提升了很多。最后,自己在團隊協作、工作方式、自主學習上,也有很明顯的進步。
2017願望清單
- 領證、結婚,一起在北京奮斗
- 關注房價動勢,攢錢買房
- 創建自己的項目
- 提升后端開發技術,深入理解線程、並發
- 看完《大話設計模式》、《深入理解Java虛擬機》
- 融入新部門,掌握並深入學習Kubernetes、Docker技術以及其它項目所需技術
- 開始寫博客