熊寫代碼這三年:閱讀寫作與技術成長
本文是非技術向的隨筆,慎點!
熊寫代碼這三年:閱讀寫作與技術成長 從屬於 程序熊的自我修養系列。臨近畢業,隨手寫了篇隨筆,聊以紀念我過去研究生三年間的技術之路,感謝陪伴我這三年的家人,感謝所有陪我一起打拚過的戰友,感謝所有閱讀過我文章的陌生人。
本文是一篇種田流水文,希望以平淡的筆觸記錄筆者這三年的成長。本文整體大概會包括自我定位、閱讀、寫作、知識殿堂這幾個部分,為了避免過於正式就不分章節了。
筆者的第一份工作從大三開始,在南京某家安全公司從事安全培訓與滲透平台開發,兼職做做講師;老實說肚子里沒幾滴墨水卻要對著台下數百聽眾,搜腸刮肚地忽悠他們,很鍛煉麵皮啊。後來某個來頭不小的二代找我說一起創業吧,他想顛覆世界,問我敢不敢一起。於是我就拉著身邊的兄弟走了出來,很感謝我的兩個舍友那些年裡給我的支持與包容,容忍了我做的那些傻逼的事情。現在想起來,我還挺佩服 CEO 勇氣的,竟敢找我來創業,真的是年輕啊。那個時候經常逛的是以 DZone 為代表的這類網站,並非說它們不好,不過確實太多的標題黨,動輒新一代產品或者性能提升 100%。那時的我太過年輕,才從農村出來尚不知城市套路深,輕信了這些標題黨,當然根本原因還是我們毫無經驗,結果兩個月的時間開發出來的 Hybrid APP 啟動時間 20 多秒;當時我還一臉無法理解為什麼 CEO 會露出絕望的眼神,畢竟之前參加某軟體大賽的作品啟動要將近兩分鐘還得到了好評。經歷了技術波折之後我們老老實實回到了原生開發,接下來的一年多時間我技術上不一定成長多少,市面卻是見了不少,充分認識到關係不是萬能的、產品經理是必須的、需求是不能隨便變的、領導的話是不能輕易相信的等等等等。後來,公司黃了,一分錢沒賺到。後來,我參與到其他的創業當中,滿懷熱情,也看著那些年的冬日裡熄滅的火苗。次數多了,也就不會痛了,印象比較深刻地還參與過某在線婚慶創業,某 3D 列印創業等等,直至現在有時候會去妹子所在的某建築行業軟體服務公司幫幫忙。如今公司招人,我引以為豪地能拿出來講誇公司的一大優點就是,我們公司有穩定收入,不會吃了上頓沒下頓,不會一朝入冬。想想走過的路,有兩個自己打自己臉啪啪響的典型,一個是大二的時候推崇底層開發,裸寫機器碼,覺得 Web 不過是套模板的毫無前途的活計;另一個是跟運營商接觸多了覺得傳統軟體行業里都是觀念陳舊的老技術、毫無創新理念與創新動力。然後我現在主要依託於 Web 技術棧,在於政府合作的建築投標軟體行業里混飯吃。這三年走過大江南北,到過萬里之外,見過異域風情,寫過數百萬字,賺到數十萬元。印象最深的是愛人相伴,友人相隨,笑過哭過,也有後悔。
筆者啰啰嗦嗦這麼多,想表述的不過是認識你自己。天地不仁,萬物芻狗,我們要相信勤奮是會有回報的;念念不忘,必有迴響,連機器都能通過大量學習優化模型,何況智人乎?筆者是早產兒,七個月的時候出生,差一點就不能跟這個世界說你好。從小略顯愚笨,弱於常人,就像筆者對於數學心有畏懼,這麼些年一直沒學好演算法結構與機器學習。筆者也沒有過人的毅力與執著的態度,到現在也沒能真正的好好鍛煉過,也沒能如預期般學完一個課程或者看完一本書。更多的時候我是想著怎麼跟自己妥協,尋找到真正能夠完成的,精神與肉體上都能接受的方案。另外在將技術相關的東西之前,筆者還是希望讀者能認清自己的定位,不是說一定要懷著莫大的熱情才能進入 IT 領域,而是儘可能地找到自己的定位。我覺得很好的例子就是我夫人,當年也是在某外包公司做嵌入式碼農,每天工作都是痛苦萬分;後來慢慢地摸索,發掘了她某個最大的優勢:以輕微的強迫症去做產品經理,女生特有的細心與品質決定了她能更好地去催促程序員趕進度。現在她同時實現了自我價值與集體價值,成為了公司運轉的核心之一。知前路之漫漫,敢披荊而斬棘,相信大家都能找到合適自己的位置。
化學中的放射性元素往往有所謂半衰期的概念,即某種特定物質的濃度經過某種反應降低到剩下初始時一半所消耗的時間。同理,知識的半衰期則是用于衡量知識的價值隨著時間流逝它消失的速度。相對變更較慢的醫學知識的半衰期約45年,物理學知識的半衰期是10年,而計算機知識的半衰期可能只有兩年,一直在激烈變化的互聯網領域知識可能只有幾個月。沉舟側畔千帆過,就像筆者在懷著被拋棄的恐懼在奮鬥中前行描述的,魚與熊掌不可兼得,放棄安逸的鐵飯碗而進入競爭激烈的 IT 行業,勢必會被後來者超越的,我們只有不斷修修打打自己,才能不被這個時代所拋棄。古語有云,開卷有益,對於筆者的閱讀相關可以參考某熊的閱讀與寫作日常 ,這裡不作贅述。不過回望自己的閱讀流程,我最初是從刷推酷的每日推薦開始,大概每天能看數百篇,選出有價值的放到 Pocket 裡面留待後看。後來慢慢的發現每天刷的列表裡面僅有兩三篇會被留存下來,慢慢的就轉向了 Reddit、HackerNews、Medium 這些;老實說筆者並非崇洋媚外,不過目前來看中國的社區相對整個世界還是一汪淺水,所以我默默地把公司默認搜索引擎設置成了 Google。在成長之初碎片化的閱讀很有益處,雖然會感覺很痛苦,彷彿被強行填食的鴨子,但是如破繭而出,幫你打開廣闊的世界。筆者現在逐步的有強迫自己去看書,雖然有時候跟看文章一樣一目十行,蜻蜓點水,但是不得不承認書和論文里成體系的描述介紹不是碎片化的文章所能給予的。這裡推薦筆者前一陣子收集的追求技術之上的進階閱讀學習索引與機器學習、深度學習與自然語言處理領域推薦的書籍列表。
文以載道,歌以詠志。當我們閱讀積累到了,自然就會形成自己的想法,並且想對這個世界說出來。筆者的寫作分為兩步,首先是做筆記,而後是寫文章,厚積薄發,切不能強求。筆者最初做筆記的時候,很多朋友會質疑,記錄的筆記真的會去看嗎?是不是記錄之後就能記住了?答案自然是否定的,筆者一直以來鼓勵自己做筆記的動力並不是讓自己不會遺忘,而是希望在下一次需要的時候能夠以最快的速度學習讓自己回憶起之前的東西。筆者發現身邊很多人的學習能力並不弱,但是技術能力難以進步突破的問題卻是在於永遠都在重複學習,譬如筆者團隊中秉持崗位輪換的原則,可能做幾個月的服務端再輪換做一些簡單的前端,但是每次都需要重新學習,看不出什麼進步。羅曼羅蘭說過,多數人二十或三十多歲已經死了,他們變成自己的影子,不斷重複以前的自己。有時候我們的筆記會是我們生命存在的痕迹,讓你能夠記得自己走過的路,踩過的坑。筆者現在大概分門別類地有兩千多篇筆記,斷斷續續地寫了二百多篇文章;並不是說沒有積累就不能寫作,而是你沒有積累很難去進行長時間的持續地寫作。寫文章本身不僅是讓你的思想曝光於世,讓別人幫你發現自己的不足;還是很好的打造個人品牌,增加自己社區影響力的好方法。
如果你是前端新人或者技術新人,很建議從嘗試翻譯開始;InfoQ 網站包括其架構師月刊等一直是我認為國內質量比較高的資訊來源之一,年後也有幸成為了其社區編輯。我發現他們有個很不錯的任務領取與報酬機制,如果你希望相互督促,也能轉點零花錢,那麼可以嘗試加入這個大社區,跟著大家一起前行。
記得包法利夫人裡面有一句總結,淺薄且不甘平庸是最大的原罪;而在技術之路上,在沒有知識體系的情況下,學習的知識都是相互獨立,難以互相借鑒,舉一反三,閱讀也不過是春風拂面,一掠而過,不留痕迹,知識也就難以真正的沉澱下來。筆者非常支持認可碎片化學習的思想,但是否定在沒有知識體系的情況下盲目的碎片化學習。特別是對於尚未建立基礎知識體系與認知能力的同學,如果突發性地吸收過多的知識,反而會摧毀自己的認知能力。就好像傳說中的吸星大法,亂吸的後果就是體內真氣斑駁不堪,最終走火入魔,爆體而亡。因此我們必須要建立自己的知識體系與思維宮殿,梭羅在《瓦爾登湖》中寫道:知道自己知道什麼,也知道自己不知道什麼,這就是真正的知識。知我所知是對於自己能力的正確認識,知我所不知則能為自己未來的路明確些方向。筆者關於自己的對於軟體世界的認知寫在了2016-我的技術之路:編程知識體系結構圖裡。Program into Your Language, Not in It.
前端工程化這個詞一直很火,筆者在 2016-我的前端之路:工具化與工程化、2015-我的前端之路:數據流驅動的界面 這兩篇年度總結里都有詳細的不成熟的自我思想的介紹。記得面試騰訊的時候面試官問道你這麼激進地使用現代語法,使用 Babel 然後導致包體增倍怎麼能兼顧老舊瀏覽器或者帶寬上不是很好的地方的用戶呢?我默默想起了現在公司碰到的一個有趣的事件,我們做的某個投標工具(Web & Electron)對於瀏覽器或者系統有較高要求,但是政府客戶典型的標配 XP 與 IE。我們思考了好久如何去達成兼容性,最後歐了一波筆記本電腦跟軟體產品打包發售,還額外賺了一筆的說。工程做久了,有時候會發現自己陷入到某種瓶頸。本節可能過於主觀了,對於我們所熟知的雲計算與大數據、服務端應用程序架構(API、微服務與高可用等)、基礎架構(數據存儲、虛擬化、分散式系統與集群計算等)等等偏工程的進階之路,老實說並不是螺絲釘們所能輕易實踐的。筆者之前一直感慨於混跡在小公司之間,所謂大數據不過鏡花水月,很難真正有實踐的場景。除了工程向的進階之外,筆者個人主觀感覺還有兩個偏理論的進階向,即使不能有所實際成就也能提升個人品味的方向,一個是偏向於數據學科與人工智慧,包括機器學習、深度學習、自然語言處理等等;另一個是偏向編程語言原理、計算機系統基礎理論、資料庫系統基礎理論的方向。筆者本科的時候發了四五篇文章,遺憾的是在南大的三年未能投身學術,一文未發,愧對師長。有時候看著其他同學仰望星空,自己只能默默在沼澤地里蹣跚前行。
本文最後,筆者還是想對於所有閱讀過我的文章的朋友說聲謝謝,你們的支持是我前行的動力,希望在未來的歲月里我能夠繼續完善我的知識體系中的內容,也希望能夠幫助到所有花時間閱讀我文章的人。誠如羅胖所說,未來的世界是時間的戰場,願意花時間閱讀的朋友本身也是一種付出。筆者這些年來一直筆耕不綴,不過寫的絕大部分都是屬於某個領域中某個技術細節的介紹與實踐總結,借這篇隨筆之際,筆者也是打算以隨筆的方式,描述自己對於編程的認知、感悟、猜想,因為這個系列更多的是非技術性的思考,希望能得到真正的大家指導,與其他人思維碰撞。筆者不敢取名為程序員的自我修養,畢竟筆者自己都不知道自己是否稱得上合格的程序員,因此取名為程序熊的自我修養。【程序熊的自我修養】系列擬會包含以下部分:
【程序熊的自我修養】知識體系與自我定位
【程序熊的自我修養】閱讀與積累
【程序熊的自我修養】工具與實戰
【程序熊的自我修養】產品與工程化
【程序熊的自我修養】編程之道:編程語言、數據結構與演算法、編程範式
【程序熊的自我修養】Web 前端
【程序熊的自我修養】服務端應用程序架構
【程序熊的自我修養】數據科學與人工智慧
推薦閱讀: