從抄書到開源之巔:章亦春的程式人生
轉載自https://www.ituring.com.cn/article/504549。果然興趣是最好的老師。此境界我是身不能至,心嚮往之。
春哥的程式設計之旅起於抄書,就算如今已是罕見的程式設計高手,春哥依然逢人大力推薦他的抄書學程式設計之法。春哥先後在中國雅虎、淘寶、Cloudflare 就職,但開源世界是他如一的眷念。如今,春哥已全身心投入 OpenResty 的嶄新藍圖,期待 OpenResty 未來能在工業界、網際網路行業引領“機器程式設計”革命。很榮幸這次圖靈訪談可以對話春哥,讓我們來一起了解一下春哥的快意程式人生。
春哥,本名章亦春,開源專案 OpenResty 建立者和推動者。
春哥的時間線(畢業之後)
2007 年 也就是我大學一畢業,加入中國雅虎搜尋技術部。當時的中國雅虎已經是阿里旗下的一家公司了。那次工作機會源於我在畢業前夕受邀在 PerlChina 北京大會上作的開源分享,而那次大會正好是在中國雅虎總部舉行的,當時有幸認識了中國雅虎的搜尋團隊(又稱 4E 團隊)。
2009 年 被調到淘寶資料產品與平臺部,集中力量和同事們一起基於 OpenResty 開發淘寶量子統計這款產品,主要面向淘寶賣家。
2011 年 我離開阿里,和夫人(當時還是我的女朋友)一同前往一個陌生的南方小城福州,過了一年所謂的“田園生活”,在家裡全心從事 OpenResty 等開源專案的工作。
2012 年 我受 Cloudflare 公司邀請,舉家來到美國灣區,全職從事 OpenResty 開源開發,以及基於 OpenResty 的全球 CDN 網路的軟體系統的研發和完善。
2016 年 晚些時候我離開了 Cloudflare,並於 2017 年初在美國創辦了 OpenResty Inc. 公司。
母親、賽揚與抄書,我的程式設計起點
我最早和程式設計結緣,說起來還是託我媽的福。上初中那會兒,記得是 1999 年的時候,她正在準備計算機二級自考,於是家裡買了一臺賽揚 330MHz CPU 的機器,裝的 Windows 98。她也弄了一本譚浩強的《C 語言程式設計》教材,經常放在家裡。自然,我經常去玩機器,系統裡唯一一個開啟來不知道該幹嘛的應用程式,就是那個奇怪的 Turbo C 程式設計環境。雙擊開啟後,藍色的螢幕上游標一閃一閃的,我完全不知道該幹嘛。這激發了我強烈的好奇心,一心想著也能把它玩轉,就像使用 MS Word、AutoCAD 這些不用人教就能熟悉的應用程式那樣。
初中畢業之後,我就“偷”走了那本《C 語言程式設計》,仔細研讀起來。我媽當時是強烈反對我學習程式設計的,她認為我這是“不務正業”。當時,身邊除了我媽沒有人懂程式設計,我便只能靠自學。由於完全沒有程式設計的概念,即使從第一頁開始一個字一個字地手抄,也還是一頭霧水,不知所云,感覺很鬱悶。2000 年,我剛剛高一開學,當時我所在的高中——鎮江一中,發給我們的一本《計算機基礎》教材,裡面有講解 Visual Basic(VB)的章節。我覺得貌似比 C 語言容易很多,於是又開始手抄這本教材裡的 VB 章節。我每抄完一段,就反覆研讀。這樣折騰了幾周,終於明朗起來,有了程式設計的基本概念。於是,又回過頭來繼續手抄那本 C 語言教材,抄到一半左右的時候,我終於感覺到可以不用繼續手抄了。然後,我就陷入琢磨如何用 C 實現各種連結串列和其他複雜資料結構的細節中去了。高一寒假的時候,我又開始手抄 Thinking in C++。寒假結束時,我對 C++ 語言算是比較熟悉了,也就不再滿足於 Turbo C,開始玩更高階的 IDE,像 Borland C++ 和 Visual C++ 。
回過頭看,抄書是我自學程式設計的法寶。話說抄書這種學習方法是我意外間發現的。初三時,我酷愛化學,總是纏著當時的初中化學老師提各種奇怪的問題,老師拗不過,借給我一本他當年大學時用的課本《分析化學》。我如獲至寶,愛不釋手,但借的書總要還,但又不能立馬消化,於是我便抄書,抄了整個暑假,結果意外地發現了抄書的奧妙——那就是延緩閱讀速度,不至遺漏每一個重要的細節:眼到,手到,心到。
其實不僅書抄得,程式碼也抄得。記得我剛進入淘寶時,想學習 Nginx 原始碼。於是白天上班就對著 Kindle 抄 C 源,同時就已暗記於心;晚上回家在房子裡來回踱步,在腦海中反覆回放白天抄過的原始碼,直至融會貫通,深得其奧妙。這段日子持續了一兩個月後,便大徹大悟了。
教機器解題,程式設計和高考之間的平衡木
入門以後,我就對程式設計越來越有興趣。只要不上課,我就會跑到新華書店去看一些程式設計類的書。整個高中三年,那裡都是我最愛待的地方。同時,以高考為目的的學校教育也愈發讓我反感,我覺得完全是在浪費時間。雖然我上的是當地的重點高中,學校也倡導所謂的“研究性學習”和“素質教育“,但高考的壓力從高一就開始了。一方面是程式設計的巨大樂趣,另一方面是高考為指向的應試教育,這讓我非常痛苦,甚至都動過輟學的念頭。
我於是和爺爺討論解決的辦法,因為我倆既是祖孫也是朋友。他當時幫我出了個主意,就是想辦法把程式設計和高中學習結合起來。具體怎麼結合,只能我自己去想了,我爺爺也完全不懂計算機。認真想了很久,我決定親自教機器去解答各科的高考題。而要教機器解題,我自己首先得學會如何解題。這給了我繼續應試教育的理由。
當然,教機器解高考題對於一個沒有人指點的高中生而言,顯然是一個很大的挑戰。那些高考題即使對於人類也是很有難度的。我不得不拼命自學了很多艱深的計算機專業的課程,像編譯理論、自動機理論、專家系統、人工智慧,還閱讀了一些論文,比如定性推理之類的研究成果。
機器解題與人類解題的一大區別是,機器不能運用人類直觀來輔助解題。比如幾何題裡作輔助線,或者其他基於視覺的解題方法,這些對於機器都是不適宜的。機器需要精確的推理方式,需要把一切都形式化。我不得不研究了很多反常規的解題方法,因為其中一些方法運用了高等數學的知識,在真正的高考中也是不宜使用的。記得高三時,我還自己定義了一種簡單的數學系統,可以漂亮地證明任意立體幾何的定性證明問題,而不依賴於任何人類直觀或輔助線。可惜的是,以當年的數學素養,我只能證明數學系統的內部相容性,卻無法證明完備性。不過,當時蒐集到的高考題都可以用那個自動證明系統證明。(上了大學,我才有時間完成證明系統的程式碼實現)。
高中三年對我來說是極為豐富的三年,也是非常辛苦的三年。當然,高考成績並沒有那麼理想,我想,是因為追求的深度和廣度無法很好的兼顧吧。幸運的是,高考分數還是超過了本一線,應該也是當時班上的倒數了吧。我在江蘇大學的四年也是非常充實和享受的,自認為真正實踐了高中母校“研究性學習”的口號,走出了一條適合自己的路。
我非常感謝爺爺當年的鼓勵和啟發,讓我堅持完成了學校的教育,也從人工智慧和機器解題的角度發掘了學校教育動人的一面,優美的一面。這是我最初無論如何也無法預見的。
大學,步入開源世界
大學時代,最成功的事情有兩件。
一件是繼續高中時的學習方式,教機器自動求解和證明大學課程的各種題目和問題,比如非線性電路的自動分析、離散系統的模擬引擎、實現 x86 CPU 指令集的指令譯碼器的硬體設計、計算機程式的自動形式化證明,等等。另外,在計算機上編碼並測試那些高中時設計好但一直沒空實現的高考題求解系統。
另一件事情是,接觸並融入到開源世界。直到現在,我還記得第一次給一個開源網站寫電子郵件時的激動心情。雖然只是報告了一處筆誤,沒想到網站的維護者很快回復了並感謝我的報告,一下子整個人都欣喜若狂了。大三時,我開始關注 Perl 6 這個開源專案,每天都要仔細翻看他們在 freenode 伺服器上的 IRC 頻道上的聊天記錄。我發現這些“老外”說話的方式和從前在英語課本上看到的有很大不同。有非常多的習慣表達方式,也有一些網際網路上專用的俚語。就這麼通過聊天記錄,我掌握了開源世界的口語,也熟悉了頻道里經常說話的大牛的脾氣和說話方式。認真“潛水”了一年之後,我開始在那個頻道里說話,漸漸融入了社群。
隨後,我也積極地做了不少有趣的開原始碼專案,貢獻給了 Perl 6 社群。大四時做了一個Perl 6 語法分析過程的視覺化除錯工具,居然得到了Perl 的發明人 Larry Wall 的讚揚,這是莫大的鼓勵!Larry 在 IRC 頻道里是這麼評論我的工具的:“agentzh: please allow me to say I’m amazed!”聊天頻道里有各種各樣的人,有的是美國某大學的博士研究生,有的是西方某藝術學校畢業改行做程式設計師的,有的是像 Larry Wall 這樣的重量級宗師,擁有各種性格、背景、文化的人在一起相互碰撞,相互交融。這種體驗讓我沉醉其中,無法自拔。開源社群和 IRC 把我和整個世界緊緊地聯絡在一起。
大學的歲月比高中自由了很多,輕鬆了許多,身心得到了前所未有的解放,下面這些瞬間讓我印象深刻。
- 白天在江蘇大學藏書豐富的圖書館裡淘書,面對著各個學科的英文版教材,心中充滿敬畏與喜悅之情;
- 晚上在網上和開源社群跟分佈在世界各地的黑客一起做各種有趣的開源專案;
- 夜裡回到男生宿舍熄燈後,又跑到對門宿舍和志同道合的同學海闊天空,熱烈地討論我的一些有趣的新想法——當然,一般是和科學或技術相關的了,經常被查房的大爺打斷。即使後來我不再住學校宿舍,也會經常去那間宿舍坐坐;
- 累的時候在江蘇大學那優美寬廣的校園裡一圈一圈地漫步,心中思考著一個又一個有趣的科學或技術問題,有種“天高任鳥飛,海闊憑魚躍”的豪邁感。
英語,聯結全世界優秀的程式設計師
英語是國際化的前提之一。前面提到,第一次通過電子郵件和國際開源世界發生聯結時,我才真心體會到熟練使用英語的巨大力量。如果程式語言讓我們和機器聯結,英語則讓我們和全世界優秀的程式設計師聯結在一起。
高中時,我還主要看中文版的技術書和科學書,步入大學,我就只看英文版圖書了。必須承認的是,最先進的技術通常源自中國以外,以英語書寫。所以中譯本會大大滯後原英文版,很多比較生僻的領域,甚至都找不到中譯本;另外可能是譯者專業水平和語言功力的原因,中譯本的錯誤也比較多。舉一個例子,裘宗燕老師曾經翻譯過《程式設計實踐》一書,高一時買來反覆精讀了好幾遍。上了大學以後,我在圖書館裡竟意外地看到了英文原版,不得不感慨原版還是要清晰和流暢許多。
出於國際化的考慮,從大學開始我做的開源專案也都用英文寫文件,只有極少數情況下我會加上中文譯文,因為翻譯對我來說確實是很無趣的工作。英語是和世界溝通的橋樑,OpenResty 後來的國際化也得益於此。
工作,最難得的是:跟對人
參加工作之後的這些年,經常收到一些關於工作與實習的諮詢。我個人的觀點是:只要有機會跟著牛人幹,不論具體做什麼,都是會有很多收穫的。工作內容不重要,跟對人最重要。如果能有機會和自己景仰的人一起工作,不給錢我都願意。當然,這個確實要看機緣,是非常難得的事情。
畢業後,剛加入中國雅虎的時候,我做的工作經常被一位比較資深的後端工程師批評,最狠的一次算是“垃圾批量製造”這樣的話。但我從他那裡零零碎碎地學到了很多高效能網際網路應用系統的實現方法和設計思路。再後來加入淘寶以後,我拜了一位當時看來很“神”的工程師為師。他也經常把我罵得狗血淋頭,在他的指導下我們一起建立了第二代 OpenResty 平臺,我也學到了很多基於 C 的系統程式設計技術。
不過話說回來,開源世界確實沒有什麼門檻,只要自己努力、有意願,就完全有機會和不同的世界級牛人一起協作,不必拘泥於同一家公司共事的形式。從另一個角度看,公司的工作環境一般會比較複雜,也遠沒有開源社群那麼簡單和純粹(當然,開源社群也有政治鬥爭,敬而遠之便是了)。
所以,我建議還在學校的同學多擁抱開源,最好是參與國際性的開源專案,加入對應的國際性開源社群。以我自己的親身經歷來看,開源世界的工作是最好的簡歷。大學畢業之後,我基本上沒有主動找過工作。阿里的工作機會也好,美國 Cloudflare 的工作機會也好,都是工作找過來的。我在阿里待了 4 年,在 Cloudflare 工作了 4 年半。
身邊的牛人,欣賞、學習與超越
經常有人問我,崇拜技術界哪些大牛?我不喜歡“崇拜”這個詞,因為我並不想去崇拜任何人,崇拜本身就是非理性的。欣賞的牛人倒是非常多,我把他們當作老師想盡量從他們那兒多學習一些精華,然後超越他們。隨便舉幾位老師作為例子吧。
高三時,我非常欣賞 Perl 的祖師爺 Larry Wall 老師。和其他過程式語言相比,Perl 在風格和性質上都展現了獨特的一面,因為 Larry 把語言學和哲學的思想也融入了 Perl 當中。我喜歡 Perl 展現出的文化和哲學,直到今天,它依然是我在程式設計世界的“母語”。
2012 年初,我著迷於 Brendan Gregg 老師在動態追蹤領域的開創性工作,就精讀了很多他的技術部落格文章,也買了他的書來閱讀。到美國以後,終於有機會在 Cloudflare 的全球網路中實踐了他的很多方法和思想,快速定位了不計其數的線上“詭異問題”,有時甚至還有意外的發現。基於 Brendan 的工作,我也做了進一步地探索和創新,在一些方面還實現了超越,比如把火焰圖技術延展到了記憶體洩漏檢測和 off-CPU 時間分析等全新的維度。Brendan 在他的一次技術分享中,還專門用一張幻燈片介紹了我在這個領域的工作。
最近幾年,我也非常欣賞 LuaJIT 的作者 Mike Pall。針對 Lua 程式語言的 Just-in-Time 編譯器——LuaJIT,在設計方面十分精巧,精巧到我都開始懷疑他究竟是不是人類(笑)。和 Mike 的郵件溝通給我很多啟發,所以每次收到郵件後我都會反覆研讀每一句文字,生怕遺漏重要的提示。有時候,Mike 甚至會推薦他認為不錯的論文給我參考。
程式碼之外,閱讀、游泳與漫步
除了寫程式碼,我喜歡讀書,包括電腦科學、技術、數學,還有佛教研究方面的。在灣區這幾年,我很喜歡在山林湖泊中漫步,思考一些艱深卻有趣的技術問題。對我來說,這是一種很大的享受。此外,幾乎每天都會去游泳,晚上會修習佛教早期的經典禪法,以清淨內心獲得奇妙的寧靜和喜悅。在我看來,最本初的佛學其實是一門哲學,這與後世在中國傳播的大乘佛教有著極大的差別,後者真的是一門宗教,是神學了(當然,慧能之後的禪宗倒是有很多相似之處)。
灣區的生活,非常接近我理想中的“田園生活”。我對“田園生活”的願景起源於初中語文課本里的一篇散文,題目是《釣勝於魚》。文中講一位美國大學的老教授經常乘著一條小船,在湖光山色中一邊釣魚一邊研究學術問題。釣上來的魚又經常被他放回湖中。從少年時代起,這樣的生活就根植於我心中,成為我理想的生活和工作狀態。
OpenResty,機器程式設計革命“魂器”
OpenResty 是一個開源的 Web 平臺,用於開發高效能和高動態的 Web 閘道器或者 Web 應用。OpenResty 最早是為了支援全網搜尋引擎周邊的相關搜尋的 API 介面,後來我們基於 Nginx 和 LuaJIT 重寫了 OpenResty,用於支援淘寶量子統計這款產品的所有資料 API,再後來,我加入美國的 CDN 公司 Cloudflare,使用 OpenResty 驅動 Cloudflare 全球 CDN 網路的動態 http 和 https 代理系統。
從出生的第一天起,OpenResty 就是開源的。這些年來,OpenResty 社群嘗試把它用於各種不同的業務場景,有些場景甚至是我們完全無法想象的。比如有的公司使用它構建分散式網路儲存系統的前端和後端(比如網盤應用);有的用它來構建完整的 Web 應用,像電商平臺的商品詳情頁的生成和大型體育賽事的 Web 管理系統;也有的公司基於它構建大型的網際網路廣告平臺,或者更復雜的 Web API 管理系統;還有的公司拿它來驅動小流量排程的硬體盒子,或者驅動家居陪伴型機器人;當然,更多的還是用於實現那些流量非常龐大的 Web API。[似乎和流量相關的工作都有機會用到 OpenResty,我們也有使用者使用完全基於 OpenResty 的權威 DNS 伺服器。]
OpenResty 的優勢在於小巧靈活、高性動態。基於 Nginx 事件模型和 Lua 的協程,我們實現了基於 I/O多路複用的高效 I/O 排程器,引入了“輕量級執行緒”和“協程 socket“(又稱cosocket)等強大的抽象。Lua 的動態性使得程式碼在請求和連線級別的按需載入和熱替換、熱解除安裝變得非常容易和安全。這種能力在動態 CDN 場景下顯得尤為關鍵,因為那裡經常需要處理幾十萬乃至上百萬不同站點的配置,而且這些配置可能一直都處於動態變化中,需要很高的生效速度,即使是全球網路的規模也是一樣。
我們正在開發中的 OpenResty 新版本將包含很多重要的新功能,比如新建的後端連線遇到連線池滿了的狀況會自動排隊和等待 ,協程 socket 在 Lua 級別主動進行listen() 和 accept() 的功能,在 Lua 中以非阻塞管道方式與新建的其他系統命令的子程式的標準輸入輸出裝置進行高效通訊。另外,在效能方面,Lua 處理程式的固有開銷會顯著下降,最簡單的 hello world 介面在整體效能上會有百分之幾十的提升。
我對於 OpenResty 一直有著巨集偉的願景:希望 OpenResty 未來能在工業界、網際網路行業引領“機器程式設計”革命。人類只需要向機器輸入行業知識和意圖,機器就能自己編寫高效可靠的實現程式碼,自行測試,進而生成人類可讀的文件,最後毫無差錯地佈署在大規模的計算機系統上。就像現在的製造業裡,機器人流水線大批取代工人一樣,未來的程式設計師也可以從業務編碼中解放出來,去做更有趣、更富創造性的工作。
使用者給予動力,不斷推進 OpenResty
OpenResty 的發展比較迅速,動力來自 OpenResty 的廣大使用者。這其中既包括我之前的僱主,也包括開源社群的廣大個人使用者和企業使用者。我曾經收到使用者的電子郵件,專門為我在 OpenResty 專案上的工作表示感謝;也經常收到中國和海外使用者的捐款,也許大部分的捐款並不多,但每次都讓我心裡暖暖的。每年的 OpenResty 大會上,我都有機會見到OpenResty 的使用者,還有社群貢獻者和開發者。大家的分享激勵我去不斷地開發新玩法和新功能。OpenResty 社群就像一個溫暖的大家庭,世界範圍的大家庭。廣泛連線產生的幸福感和大學時每天泡在 #perl 6 IRC 聊天頻道的感受很類似,只不過我成了曾經 IRC 頻道里的“教主”角色!
最近兩年,我們在香港專門成立了一家非盈利機構——OpenResty 軟體基金會,負責接收捐款處理、OpenResty 大會支援,以及社群貢獻者和開發者的獎勵工作。OpenResty 軟體基金會和 OpenResty Inc 商業公司是平行的關係,彼此獨立運作。
商業級別技術支援和解決方案,成立 OpenResty Inc
我對 OpenResty 一直都抱有很高的期望。如果一直為其他公司工作,出賣時間的話,我就不能完全專注於 OpenResty 藍圖的實現。雖然之前的幾位老闆都很支援我在 OpenResty 上的工作,但畢竟拿人工資,還是要優先保證僱主的業務需求,這是基本的職業操守。
另外,隨著 OpenResty 滲透到越來越多的公司和行業,社群卻無力提供商業級別的技術支援和理想的解決方案。這也是開源專案運作上普遍存在的侷限。
在淘寶工作的時候,我曾成功地實踐了一種構造複雜業務軟體系統的方式,即教機器寫程式的方式,極大提高了複雜業務系統的構造速度,同時改善了系統在可理解性和執行效率方面的質量。所以,一直以來我都想著能有機會在工業界推廣這種“機器程式設計”的革命。顯然,教機器寫程式的靈感源自我高中時教機器解高考題的有趣經歷。這些經歷又以我們不曾意料到的方式啟發、推進成長。
於是 2016 年的一個晚上,我突然有了要把 OpenResty 商業化的想法,藉助商業的力量召集 OpenResty 開源社群的志同道合者組建一個屬於我們自己的團隊。當然,OpenResty 的開源性是絕對不會變的。公司主要基於 OpenResty 構造上層的商業產品和商業解決方案,面向需求較高、挑戰較大的企業使用者。雖然商業版的 OpenResty 可能會有一些開源版所不具有的高階功能,但隨著技術的不斷創新,也會有越來越多的商業版特性被陸續移植到開源版中來,供全世界自由享用。
OpenResty Inc 的定位是一家面向企業的軟體服務公司,希望探索未來 Web 系統構建和優化的新方式。我們主要銷售企業級的伺服器端軟體和服務,為企業客戶提供基於 OpenResty 和 Linux 的技術解決方案,藉助“機器程式設計”的全新思路和方法,OpenResty Inc 極大地提高了複雜應用軟體的開發速度和質量。網際網路行業的工作經歷讓我清楚地認識到傳統的軟體工程方式已經越來越不能滿足日益增長的複雜業務軟體系統的需求。讓機器來自動處理業務軟體的複雜性,才是出路!
“機器程式設計”是一個龐大的世界,我們目前的入手點選得比較小:使用“機器程式設計”的方式構造和銷售高度靈活的分散式流量管理軟體——OpenResty Edge。我們目前的商業客戶有較大規模的 CDN 廠商,也有自建 CDN 的大型網站,還有把我們的軟體用於網站流量入口,即跑在 CDN 網路的後面,把流量分發到後端各個不同的業務線系統。我們在產品中提供了類似文件說明書的“小語言”方便客戶直接用業務語言,而不是程式語言,來表達各種複雜的業務需求和業務邏輯,然後我們的產品會自動生成各種不同型別的高度優化的程式碼,執行在較大的叢集網路之上。
我們公司今年也計劃推出分散式的動態追蹤平臺,叫做 OpenResty Trace,可以對大規模的分散式網際網路系統進行各種有趣的效能分析和 Bug 追蹤,而無需應用系統的任何配合,也不用下線或重啟任何線上服務。相當於給線上軟體系統拍活體 X 光片,或者核磁共振片,可以隨時隨地看到從作業系統核心到應用軟體的指令碼語言程式碼的方方面面,把整個軟體棧作為一個隨時間動態變化的整體來看待。自然地,這裡也會大量用到“機器程式設計”和“機器推理”的方法和技術。
創業難題之多少
創業過程中的困難不少。首先是角色上的巨大轉變,我從一個僱員變成了僱主,從一個打工者變成了一個老闆。這在思維方式和做事方式上,都需要進行非常大的調整。我還需要學習很多不曾接觸過的東西,比如融資、公司股權結構、公司財務、稅務、法務、智慧財產權、銷售與商務,等等。
其次,OpenResty Inc 從成立起就是一家“跨國公司”,跨越了中美兩個國家,所以會涉及資金的跨境流動、智慧財產權的地域性設定與分配、不同國家的稅法要求等很多方面的問題。
再次,雖然我們在美國灣區和珠海各有一間辦公室,但大部分員工還是遠端工作的。如何讓團隊緊密協作和高效運作,就成了一個較大的挑戰。反過來講,這對於我們也是一大優勢,可以吸收世界上任意地點的人才加入團隊,而不用擔心新員工的搬遷和移民問題。另外,遠端工作的巨大自由度也可以吸引到那些喜歡有獨立工作空間的黑客。
最後這個小主題是個特別版塊,我們邀請春哥對初學程式設計的朋友們,講幾句掏心窩子的話。
勇敢地走自己的路
對初學程式設計的朋友們,我只想鼓勵大家勇敢地走自己的路!我相信每個人都有最適合自己的成長道路,而主流的教育和培訓總想著趨同化,流程化,我最反感這種學習和教育。就該不拘一格,自己認準的路就值得堅持。主流的技術和思想總在快速變化中,像趕時髦那般一味地追逐是沒有意義的。希望大家能不忘初心,始終保護好最初對程式設計的好奇和興趣。
如果時光倒流,我能回到最初學程式設計的歲月,我希望自己能及早地給我所有的機器都安裝上定時強制休息軟體。另外,能早點做到經常去游泳,這樣今天的我就不會有程式設計師的那些個職業病(比如脖子疼)。另外,我希望高中時的我能少花些時間在琢磨某些大軟體廠商的私有技術上面,比如微軟當年的 OLE、COM、COM+ 這些技術(估計今天很多年輕一代的程式設計師都很少聽說這些名詞了),能早點擁抱開源世界和開源技術。最後,希望當年的我能更加深入理論電腦科學及周邊數學分支的學習和研究。進入工業界之後,我才發現這些基礎理論研究才是追求“極致程式設計”和解決最難的工業問題的根基,而這些是最容易被普通工程師所輕視和忽略的。
相關文章
- 效能之巔讀書筆記--第一章緒論筆記
- 浪潮之巔讀書筆記筆記
- 漸凍人馮錦源的“遊戲人生”:從翻譯到開發遊戲,學無止境開發遊戲
- 從做遊戲到開發VR,FPS之父的“彪悍”人生遊戲VR
- 程式的一生:從源程式到程式的辛苦歷程
- 《書單分享》小程式開源
- 《碼農翻身》之浪潮之巔的WebWeb
- 微信小程式開發之https從無到有微信小程式HTTP
- 從開源軟體開發中體會到的心得
- 上海:開始我的程式人生!
- 程式設計師修煉之路 從小工到專家 第二章讀書筆記程式設計師筆記
- 實踐心得:從讀論文到復現到為開源貢獻程式碼
- 鴻蒙開發從開源進入到閉源(Harmony OS)開發主流鴻蒙
- 策略書之V:開源經濟學
- 《Linux 開源網路全棧詳解:從DPDK 到 OpenFlow》之 Linux 開源網路Linux全棧
- 程式設計師修煉之路 從小工到專家 第一章讀書筆記程式設計師筆記
- 程式設計師修煉之道——從小工到專家第四章讀書筆記程式設計師筆記
- 《程式設計人生》書評--一本值得讀兩遍的書程式設計
- 從.NET的開源到納徳拉時代的「新微軟」微軟
- 從“化學家”到開發者,從甲骨文到TDengine,我人生的兩次重要抉擇
- 從百度投資開源中國,到中國開源事業的飛馳年代
- WebSocket 從入門到寫出開源庫Web
- 從應用側到基礎軟體,國內開源生態之變
- 程式人生|從網癮少年到微軟、BAT、位元組offer收割機逆襲之路微軟BAT
- 小程式從入門到開發
- 從一個開源專案到龐大的開源矩陣,他是怎麼做到的?矩陣
- 浪潮之巔,程式設計師如何擁抱新技術?程式設計師
- 開源重啟2020年創新之勢:從AI開發者到AI源創評論AI
- 中國首位00後CEO公然抄襲、複製我的開源作品
- 《從程式設計師到領導者之間的微妙之處》程式設計師
- 小程式雲開發之資源的管理
- 開源新生代的成長之路:從校園到開源,需要邁過哪些挑戰?
- 敏捷史話(七):從程式設計師、作家到搖滾樂手——Andy Hunt的多面人生敏捷程式設計師
- 從 SQL Server 到 MySQL (三):愚公移山 – 開源力量ServerMySql
- 從 SQL Server 到 MySQL (三):愚公移山 - 開源力量ServerMySql
- 《網路黑白》一書所抄襲的文章列表
- [書呆子]聽聽前輩的話——《MacTalk:人生超程式設計》Mac程式設計
- 程式人生