我記得我是15年9月21號正式參與工作的恩袱,雖然只是作為一個實習生读第,但總算完成了從學校到社會的一次跨越。然而距離那一次跨越纲岭,再過10天居然要滿一年了抹竹。翻回以前的朋友圈,隱隱約約可以還能找到第一次參加工作的清澀感止潮,焦慮感窃判,菜鳥味。一年能改變的事情真多沽翔,認真地想了這一年經(jīng)歷的事兢孝,就作為一程序員而言,少少提了幾個覺得重要的點仅偎,寫在簡書上跨蟹。
1.學習的代碼與工作的代碼
我第一份實習只干了一周,寫的是C++橘沥。當時求職非常不順利窗轩,C++讓我覺得十分沮喪。幸運的是座咆,很快接到另外一個實習offer痢艺,語言用的是Java,我那時候幾乎不怎么寫Java介陶,但考慮到行業(yè)Java的使用率很高并且后面的公司給我提供的實習工資達到“驚人的”1200人民幣(在此前的面試中堤舒,我甚至求過面試官給機會,不要工資)哺呜,于是我就跳槽了舌缤。在第二家公司一呆就是5個月,所以嚴格而言,那才是我第一家公司国撵。
此前陵吸,我一直都是在宿舍編一下算法,寫寫二叉樹的實現(xiàn)介牙、圖的遍歷壮虫、各種排序和查找,看TCP/IP的協(xié)議环础,幾乎沒寫軟件囚似,一切都很學術,很知識喳整。而因為沒寫過真實的項目谆构,上班前,我還經(jīng)常在想公司能讓我寫什么代碼框都,會有哪些代碼我會看不懂的嗎?(自己對Java教科書的語法很熟悉)
我現(xiàn)在還非常清楚地記得第一次見到公司代碼的情形呵晨,絕對是目瞪口呆魏保。我把項目導下來后,居然足足幾百M(也包含了不少jar包和前端資源)摸屠,點開每一個package都有幾十個Java文件谓罗,隨便打開一個都會有好幾百行代碼。那種感覺季二,就像在河邊住大半輩子的人第一次看到大海的樣子檩咱,明明都是水,就是被嚇得不知所粗——明明知道是Java代碼胯舷,就是不知從何看起刻蚯。那一瞬間,我徹底明白了桑嘶,為什么語言只是工具炊汹,因為工具造出來的東西是可以如此宏大,宏大到你不知所措的地步逃顶。
進入公司的前一個月都是在適應公司的代碼和堆碼規(guī)則(吐槽一句讨便,公司代碼的命名規(guī)則無比糟糕,是逼走我重要原因)以政。工作后的代碼顯得非常踏實霸褒,一點都不允許花哨,我有時候會發(fā)現(xiàn)一種新穎的實現(xiàn)方式盈蛮,需要多建幾個類废菱,結果是找不到合適的放這些類的package,咨詢導師后,導師讓我放棄新方式昙啄,原因是要保證其它同事能看懂穆役。這事讓我懊惱許久,但后面慢慢考慮起來梳凛,也不無道理耿币。學習的代碼和工作的代碼就有著最本質(zhì)的區(qū)別:一個是給自己看的,一個是需要大家一起看的韧拒。公司寫的是政府OA系統(tǒng)淹接,連具體編程都得加了非常多的規(guī)矩,我本來認為:大概上班了就這樣了叛溢,按部就班即可塑悼。后來我還是逮到了一次機會,通過運用二叉樹結構和數(shù)據(jù)庫的范式設計成功地改良了系統(tǒng)某個模塊的性能楷掉,這次表現(xiàn)讓我獲得了提前轉正的機會厢蒜。
All in all,公司的代碼總是帶有一些編程約束的烹植,但無可否認的是這些規(guī)矩一定程度上是避免了很多無謂的錯誤斑鸦,但是在面對具體問題的節(jié)點上,學術性的知識和代碼往往能讓我們“靈機一動”草雕,寫出精妙的代碼巷屿,瞬間提高代碼的性能和程序可讀性,在學校里堅持基礎學習就能在工作上給自己墩虹,甚至是公司帶來驚喜嘱巾!這也是為什么下班后最好能堅持學習基礎的原因。
2.編程是一門科學诫钓,還是一門藝術旬昭?
這是一個我大學前就反復問過自己很多遍的問題,編程是理科嗎尖坤?需要數(shù)學嗎稳懒?現(xiàn)在編程一年了,我認為慢味,只要不去設計太高深的算法场梆,編程研究的問題深到某個程度時就需要用到數(shù)學了,然而那些都是研究生或博士要考慮的問題纯路。對于普通地編程或油,我們的數(shù)學已經(jīng)完全足夠用了(數(shù)學是一種推力,而不是門檻)驰唬。我不認為編程是一門科學顶岸,而是一門藝術腔彰。
證據(jù)就在大家的口中,因為我們從來都是設計軟件辖佣,而不會研究軟件(設計物理同樣聽起來非常別扭)霹抛。編程就是一門設計的藝術。關于這個觀點卷谈,Paul Garaham寫的《黑客與畫家》就非常詳細地闡述過杯拐。我非常幸運在我真正開始編程前,自己先進入了宣傳部世蔗,我從我的部長華陽師兄身上體會到設計的美端逼,逐漸有了對丑陋設計零容忍的態(tài)度。兩年的PS海報設計讓我對設計變得異常偏執(zhí)污淋,雖然不斷重做是十分煎熬的顶滩,但是逐漸發(fā)現(xiàn),堅持追求美的過程也是一種享受寸爆。這種心態(tài)順理成章地也表現(xiàn)在我的程序上礁鲁,重構的過程就是堅持追求代碼美的過程。美麗的設計和實現(xiàn)是一種讓人非常著迷的東西而昨,這樣的代碼一目了然救氯,完美地實現(xiàn)需求的同時,還保持著足夠擴展空間歌憨,一切都恰到好處,就像一個畫家在紙上畫出一個完美的圓一般墩衙,無可挑剔务嫡。編程就是一門設計的藝術。
給同行和師弟師妹推薦一下漆改,關于什么程序是好程序心铃,我推薦《重構》這本書;關于如何設計好的程序挫剑,我推薦《設計模式》去扣。
3.快速學習編程的捷徑
在大學里,我很長一段時間都自以為自己理科思維好(高中物理成績好)樊破,所以就感覺自己的編程天賦比一般人都要好愉棱,我可以快速地學習編程。當然哲戚,事實是自己和一般的同學在所謂的天生能力上別無差異奔滑。但隨著畢業(yè)工作,我們的編程能力慢慢呈現(xiàn)了高低之分顺少。這促使我思考一個問題朋其,什么樣的方法才是好的學習編程方法呢王浴?
經(jīng)過了1年工作,兩次換公司的親身體會梅猿,我發(fā)現(xiàn)氓辣,折騰才是學習編程最快的捷徑。什么是折騰袱蚓?可以理解為:明明不需要也可以钞啸,但偏要整出來,這就是折騰癞松。我每一次換公司爽撒,就是一次折騰:第一家寫政府的公司,自己本來就不會Java响蓉,活生生折騰兩個月硕勿,最后能夠獨立開發(fā)模塊;第二家公司是游戲公司枫甲,基本上每天晚上都在折騰各種bug源武,沒試過消停。Java領域上想幻,一家公司讓我從入門到熟悉粱栖,另一家讓我從熟悉到深入。每個過程都是非常難熬的脏毯,為了各種自己不明白的錯誤焦頭爛額闹究,但一旦解決后,就會有種豁然開朗的感覺食店,并且以后會自動地免疫這種問題和錯誤渣淤。所以,一個老成的程序員吉嫩,他編程的神態(tài)總是異常平靜价认,仿佛所有的bug都不是問題一樣,你折騰好幾個小時都找不到的壞代碼自娩,他能動幾下鍵盤和鼠標就定位出來用踩,事后平靜地拍一下你的肩旁,留下一句“能重現(xiàn)的bug都不是bug”如此大氣的話忙迁,讓我等菜鳥自覺地獻上膝蓋脐彩,現(xiàn)在公司里的宇哥就是這樣的一號人物。這樣的程序員动漾,并不能看到他所謂的天賦丁屎,他身上散發(fā)的都是他在代碼上飽經(jīng)風雨的氣息。
這也是我為什么十分喜歡現(xiàn)在的公司旱眯,游戲代碼每一周都會更新一次晨川,任何自己寫得不好的代碼证九,周四更新,周五就會有人投訴出異常了共虑,快速地暴露自己的問題代碼會讓自己編程能力提升很快愧怜,而且還要有這么多的玩家來給自己的代碼檢查,作為一個菜鳥妈拌,這既是挑戰(zhàn)也是一個非常難得的機會拥坛,越是折騰,越是進步尘分。錯誤總是讓人印象深刻猜惋,生活是這樣,編程更是這樣培愁。
最后
工作一周年了著摔。不管是編程,還是為人處事定续,回想起去年今日谍咆,這一年的進步確實讓我覺得很驚喜。去年這個時候還因為找不到實習而哭過私股,幸好還是堅持下來了摹察,能從事自己喜歡的工作確實是一件很幸運的事。工作后有了收入倡鲸,有了更大的自由供嚎,無論是對自己、朋友峭状、家庭還是公司查坪,作為一個社會獨立角色的存在,慢慢開始覺得自己有了更多的責任宁炫,未來會有更多的問題和事情等著我。
作為一個市井小人氮凝,我的目標也不過是多賺一分幾毛羔巢,爭取日后富成一個廢人,躺在沙發(fā)上讓別人服侍罩阵。偶爾想像一下竿秆,感覺又有了新的動力去面對新一天的工作。
【全文完】