我的程式設計之路:從好玩到玩好

weixin_33766168發表於2016-03-31

先解釋下標題吧:好玩 指的是愛好、覺得有趣,玩好 指的是把事情搞定、讓事物變得更好。

第一次接觸電腦

我最早接觸電腦是小學四年級的時候,一九九幾年,那是一個秋天,有一位老人在中國的南海邊寫下詩篇,我坐在學校機房的386電腦前照著一張A4紙上的程式碼敲入一連串的命令,經過若干次失敗、重啟後,成功進入了DOS系統並開啟一個練習軟體 —— 開始五筆打字練習。雖然教電腦的女老師很美,那時候上電腦課對我來說是個負擔,可能是因為我覺得更快地用五筆打字對我來說沒有什麼卵用。如果我生在美國,那會兒應該玩的是 Apple II 吧,完全不是一個檔次啊有木有。

不過我始終記得一個有趣的事情:那個練習軟體會統計打字速度,女副班長學得最快打得也最快,每次數值都是最高。有個女生表示不服,說一定是副班長的電腦時鐘走得比較慢。於是副班長做了一個我們這種所謂的”少年藝術學校“的學生才會乾的事情來證明她們倆的時鐘速度是一樣的 —— 副班長對照她自己電腦的時鐘用手打節拍,一秒一個節拍,保持打節拍,走到那個女生電腦前,一對照,發現節奏是一樣的。於是,那個女生竟然馬上相信了他們倆的時鐘速度是一樣一樣的...

第一次程式設計:VB

在有自己的電腦之前我經常混跡於市區唯一的一家網咖,一家在裡面看黃色照片會被制止的網咖。2001年初三畢業的時候,暑假,家裡給買了臺電腦。

和其他騷年一樣,我開始混跡於本地的盜版光碟一條街。5塊錢一張的光碟,一兩年下來家裡就屯了一百多張遊戲光碟。

和其他騷年不一樣的是,我會和盜版光碟店老闆交流,顯然老闆是見過世面的,他們推薦我玩 Flash、Dreamweaver、Fireworks 所謂網路三劍客。後來我順藤摸瓜,在新華書店發現了一本《少年學Visual Basic》(大體是這個名字吧),圖文並茂很好玩,於是裡面跑去盜版光碟店買了張VB6.0的安裝盤。那個暑假,把那本書學完了,期間也學了Flash和Action Script,可以自己做個小軟體。電腦裡的東西是按照自己的意思去計算、去運動、去反應的,那時候的我覺得這個很好玩。當然,這個好玩也僅限我自己,周圍沒人知道、沒人理解。

後來,在另外一家賣電腦器材的店裡,老闆給我推薦了一本更高階的VB的書,說是他店裡最後一本了,我花25塊錢買下來。有一次在學校廁所上大號,書掉下去了...掉下去了...。考慮到,這可能是我們這個小縣城裡最後一本了,我把書拿去洗了洗,再用剪刀剪掉一部分,曬了曬,接著看了...

Pascal 和 文曲星

高一的時候,學校有個班級網頁製作大賽,我代表我們班拿了第一名,用 FrontPage + Flash 做的靜態網站。電腦老師跟我說可以參加學校裡的Pascal程式設計課,將來參加全國比賽,拿獎的話高考加20分,說不定還能保送浙大。於是我跑去買了本Pascal的書,晚自習的時候都在看,回家也練練。自然,我在程式設計課上表現很好,老師都是讓大家來圍觀我的程式碼來著。然而,不知道為啥,程式設計課沒開幾節就不了了之了,有一種白折騰了的感覺。唉,“保送浙大”啊,至今耿耿於懷呢。

高二的時候,經常一起交流遊戲心得的小夥伴告訴我他在網上看到文曲星可以程式設計。於是,我開始鼓搗這個,實際上文曲星自帶Basic編譯器(對,就是比爾蓋茲發明的那個)。我利用金山遊俠的原理找到了系統密碼和遊戲密碼的儲存地址、可以檢視和修改別人文曲星的密碼、可以修改俄羅斯方塊的難度值到更高階別、可以改掉很多系統預設文案,後來還在文曲星裡寫了點小動畫。提這個不是為了說自己多厲害,而是想表達:那會兒純屬是覺得好玩而Coding的。事實上,我們班上一個同學看了我程式碼後,現學現用,回家閉關一天,回來後給我們展示了他自己用文曲星寫的有開頭、有情節、有結尾的動畫——《老吳傳說》(老吳是我們班主任)。

金山遊俠的原理:金山遊俠是一款可以修改遊戲引數的軟體,原理是這樣的:假設你遊戲裡生命值是10000,那麼遍歷所有儲存空間,找出值是10000的地址,記下來,然後想辦法讓生命值變一下,假設9500,再遍歷一遍,就可以找到這個地址了,然後就可以直接改它了。

大學

2004年,高考考得不是很理想,進了一個三流院校,讀計算機專業。因為有老底子,在學校裡成績還行,尤其是專業課。不過期間除了課程作業要求,就沒怎麼寫過其他的程式碼了。青春的荷爾蒙全部用在了《魔獸世界》上了。直到《魔獸世界》一直停留在60級,不能更新資料片,讓我很失望。大三下學期,在拿到最後一個我想要的裝備後,我長期AFK去考研了。考研其實是個體力活兒,很辛苦的,我基本上每天都是那棟樓裡最後一個離開的。不過,期間系統地複習了一遍計算機專業的主要課程,極大地提升了英語能力,這兩項一直受用至今。

I pronounce Linux as Linux

這句話是Linux的作者Linus回答Linux到底怎麼唸的時候說的:連結

08年如願進入浙大計算機學院,在實驗室裡乾的主要是跟linux有關的專案。簡單點說,就是在Fedora的基礎上,給某軍區定製一款以安全為特色的Linux作業系統。老闆(我導師)作為產品經理給我們提出了各種奇葩的需求,比如:開機介面要改成和 windows xp 一樣...

雖然產品經理比較噁心,但總的來說研究生第一年還是很輕鬆的。除了上課,都得在實驗室待著。在實驗室裡,1/4的時間是和實驗室師兄弟們玩遊戲,1/4的時間看看電影、電視劇,1/4的時間上網、讀RSS,剩下1/4的時間才是做專案。期間系統地學了Shell、用GTK+Glade做了幾個GUI軟體、讀了點Linux原始碼。總得來說,混日子吧,沒啥追求。

自由

友情提示:高潮來了

我們老闆除了做專案外包生意,也做勞務輸出。他和幾個軟體公司有合作:他把手下的研究生、博士生派到他們那兒實習一年多,那個軟體公司給相應的好處。當然,被派去的學生也是包食宿有點工資的。研一那個暑假,我估摸著也要被這麼“賣”掉了。於是,在和一個同樣被賣到杭州某公司的師兄商量過後,到有了個計劃...

我找了個也是浙大畢業的在外面開公司的師兄,讓他找我們老闆說:久聞x老師您的大名呀,我讀書的時候就上過您的課,我們需要一個實習生,我們有個和聯通合作的專案(專案書是我事先做的)需要你們實驗室的研究生幫忙,能不能合作一下。老闆同意了,也談妥了價錢。然後我們幾個下學期馬上研二的學生被叫過去做了一場筆試和麵試(筆試題是我事先出的)。我自然是“脫穎而出”啦。於是,我自己花錢買了自由,開始找實習...

實習

淘寶

因為比較主動,基本功還算紮實,09年9月份很在淘寶搜尋中心找到了實習。開始做的事情比較簡單,配配正則之類的。後來在師傅的帶領下寫爬蟲,偶爾也幫運營同事寫些指令碼做資料處理,算是把Java、Python給入門了吧。淘寶真是把實習生當正事員工用啊,感覺很被重視,能感覺到自己做的事情能產生價值的,所以幹活兒也很賣力,經常深夜騎車從創業大廈返回玉泉校區。所以,在這兒跟在實驗室裡幹活的感受是完全不一樣的。

Intel & eBay

在淘寶實習了半年,我聽信一個師兄的建議做了一個現在看了極其錯誤的決定:換個公司實習。理由是體驗體驗不同的城市、不同的公司,這樣才能清楚自己將來適合在哪裡、幹什麼。嚴格來說,目的是達到了,但失去了繼續呆在淘寶,讓自己技術更精進的機會。

先去了Intel,在上海閔行,做 Meego(Intel和Nokia搞的針對上網本和平板的作業系統)測試工具相關的事情。然而,很閒,沒啥事兒做。2個月後,10年暑假申請到eBay暑期實習計劃,去他們在上海的運維部門的 Unix Team 實習了,所在部門的TL現在應該是某知名公司的CTO了。eBay對實習生安排還是很的:硬性的活兒不多,安排了很多培訓和活動,比如:職業規劃、如何發工作郵件、英文話劇、TMC(Toastmaster Club)等等。不過我還是做了些事情的 :)。這期間用 Django 做了個 VMware 虛擬機器叢集的管理介面。為了讓介面好看點,開始自學CSS、JS,感覺前端這塊挺好玩的,似乎找回來小時候 Coding 做小軟體、做動畫的快感。這為後來的職業選擇埋下了伏筆。

eBay 有個企業文化我覺得非常好:公司選擇信任你,但如果你被發現一次誠信有問題馬上開除。比如發票報銷,稽核是很寬鬆的,但只要你被發現亂報,馬上開除。

畢業、工作

臨近畢業,我陷入了迷茫。按說,從技能上來說,最適合我乾的是運維,事實上也拿到了阿里運維部門的offer。然而,我想幹前端。但,10年、11年的時候,前端的地位還不像現在這樣高、那麼有挑戰,很多人覺得前端其實很low,沒啥技術含量。我在矛盾中掙扎了很久,最後還是去了天貓寫Java。

然而,並不開心,

我辭職在家裡待了半年想自己創業,用Flask + Backbone,基於百度地圖做了個旅遊規劃相關的網站,雖然最終沒把這個事情做大(現在想想,當初自己很不成熟嘛~~),但系統學習了前端、積累了很多前端方面的知識,12年我進入了網易杭州研究院,如願成為一個前端工程師。

在網易參與了網易雲音樂官網、PC端的開發。這兩個專案都是基於網易自己的 NEJ 框架的,雖然語法有點詭異、入門有點難,但讓我收穫非常非常大的。我前端層面的大局觀、模組化思維基本上都來自這裡,至今受用。尤其PC端,是 chrome 的殼子套一個單頁面的HTML頁面,整個架構是網易首席前端技術專家蔡劍飛做的。裡面體現的思路和現如今很火的 webpack、react redux 單向資料流如出一轍。我剛開始做這個的時候也是懵懵懂懂,很難跟大牛統一思維啊,無數次找他請教。反正問題到了他那裡,總是很快定位,輕鬆解決。這個過程中,我學到很多,成長很快。

其實,管理上如果更接地氣一點、工資能稍微正常點給漲一漲,我應該蠻喜歡在網易長期待著的。

有贊

14年初,我辭掉網易的工作,加入了現在的公司:有贊,那會兒還叫口袋通。這次換工作,我就投了這一家,比較篤定,就覺得這家公司有前途...

過去兩年,是我最辛苦的兩年,也是收穫最大最開心的兩年。

  • 我從一個騷年成長為前端技術TL

  • 我們梳理了前端架構,形成了比較完善的持續迭代更新擴充套件的UI框架和JS元件庫

  • 我們形成了一套還不錯的開發工具:線上打包、資料Mock、UI測試

  • 我們將移動頁面效能提升了一個臺階,開啟速度比原先減少了一半多

  • 我們針對全站做了 https + spdy

  • 我們至少兩週一次的技術分享

  • 我們在React、Node方面做了大量的探索和應用

  • 我們積極有擔當

嗯,文章寫到這兒,不加一個招聘廣告太說不過去了,畢竟這篇文章是HR姐姐鼓勵我寫的,歡迎優秀的工程師 加入我們

把前端玩好

”以工程師的方式把事情做好“

這句話是我最近我自己對碼農這個職業最大的體會。作為一個前端工程師我越來越強烈地感覺到我們不應該強調自己是個前端,而是要去強調自己是個工程師。工程師是幹嘛的呢?工程師就是創造東西、解決問題的。我們應該利用設計、前端、後端、運維等各方面的優勢來解決我們遇到的問題,而不是陷入以前端的方式解決任何問題的思維牢籠。在做效能優化的時候,我就強烈地感受到:好前端必須得是半個好運維。所以,我們前端團隊的群里長期有三個運維同學駐紮,我們把他們當爺供奉來著。

同時,我們應該追求以最優雅的方式來解決問題——不單單是把問題解決了,而且解決問題的過程和手段是優雅的、有技術產出的、能對其他工程師有幫助的。或者說,我們的智慧成果應該是可累積的,尤其是一個團隊內部。

"前端同學應該多去看看藝術展提升自己的美學修養"

這是我一直想在團隊裡倡導的,但還沒付諸實踐。“打造面向未來的有戰鬥力的團隊” 是我給自己定的今年的OKRs的目標之一,前端作為承前啟後的工種,就應該是很全面的。

"基礎真的很重要"

前端技術日新月異,翻看應聘者的簡歷,我總能看到不認識的新名詞。前端工程師的知識圖譜裡,變得快的其實只是其中一小部分,還有很多變得並不快的知識我們是不是都掌握地很好了呢?比如:http協議、瀏覽器原理、網路安全、設計模式等等...

圖片描述

圖題:做木工和碼程式碼是一樣一樣的,都需要工匠精神思密達。

本文參與了 SegmentFault「我的程式設計之路」計劃,歡迎正在閱讀的你也加入,一起分享。

相關文章