聊聊程序員的工匠人生

jopen 9年前發布 | 10K 次閱讀 程序員
 

聊聊程序員的工匠人生

如果我們可以一次把事情做對,并且做好,在允許的范圍內盡可能追求卓越,為什么不去做呢?追求卓越,追求完美,追求細節的極致。小時候看到那些修 表 匠,握著一個小螺絲刀,或是看著電工,用烙鐵沾著錫和松香,在那一小寸的世界里,把壞了的地方修好,那種專注的眼神,覺得很厲害。

現在再去回想那些工匠工作的場景,越發覺得欽佩。在我老家有一家刻章的店,在我上幼兒園的時候就已經在那開了很多年了。前段時間需要刻一個章,發 現 那家店還在,于是走進去,門口坐著一個老人,我確實記不得當年是不是他,不過看這歲數八九不離十。我以前在別的地方刻的章,都是在電腦里設計完圖案后,激 光刻蝕。但那次老人卻是用的手刻,我著實驚呆了。只看他拿出一塊紅色的印底,右手持著刻刀,開始一下一下地刻著。雖然老人連話都不怎么說得清了,但是工作 時那專注的神情,和精湛的手藝,以及最后成品那比機器更完美的效果,著實讓我心里非常動容。

一、技術人的執著

我見過很多人,也見過很多 程序員 ,都有如此的「工匠情懷」。

聊聊程序員的工匠人生

做產品需求評審,有的人善于快速提供技術解決方案,在最短的時間內解決問題。但我見過的很多牛人,他們除了能在腦海里最快地形成方案原型,并且更 深 入地考慮各種細節點,最終能給出一個更趨于完善的技術方案。在他們身上,我看到了對這項職業的自我尊重,對自我價值的追求,也有對「卓越」的理解和渴求。

《精通正則表達式》的譯者余晟老師寫過他和正則表達式的 緣起 。只是因為項目經理讓他「多用Google,查查正則表達式的資料」,余老師打開了正則的大門,讀完了英文原版的《Mastering Regular Expression》,如今成為了國內最了解正則表達式的人之一。

看完那篇文章其實我想起了我的實習經歷。那時候我剛去公司兩三天,有一天我老板找我讓我研究一下如何用Java里的 MappedByteBuffer做文件內存映射來讀取大文件。盡管我們當時要處理的文件很大,以我在學校編碼的經驗看,用普通的Reader也是可以很 好地解決的。

于是我說,「這個其實用Reader也能做,更簡單一些,沒那么麻煩。」老板反問我,「什么叫沒那么麻煩,這是一個做技術的人的態度嗎?」那幾天 我 花了很多時間,去從Linux一直到JVM,去了解什么是內存映射,底層原理是什么,和其它技術的比較、優缺點,并和其它幾種讀文件的技術做了性能對比。 雖然最后項目沒有采用這個方案,但是那句反問直到現在一直在我腦海里,時時地提醒我:「做技術的人,對待技術,應該擁有什么樣的態度?」

所以其實我很感謝我的老板,以前他教我們這些新人優秀的職場習慣,有一條是每天的郵件必須沒有未讀數,即便是不需要閱讀的郵件,也要一鍵置為已 讀, 不要留一個未讀的數字在那。現在想起來,有點像iOS App右上角那個提醒數的角標,有些強迫癥的人怎么也忍受不了有個紅圈圈在那。開個玩笑,雖然有些習慣看起來可有可無,無關緊要,但這確實映射了一種態度 和思維習慣。完美有多遠?我不知道,但我愿意多往前走一步。

二、拾起初衷

我們的生活,每天很忙碌。有時候忙得自己都忘記了為什么在此處,有時候忙得只能不斷地用直覺、用以往的經驗去設計一個解決方案,而沒有時間去思考需求是不是合理,方案是不是最佳,我們以為自己設計的是最佳實踐,誰知道呢?

這個社會,這個世界,處在一個以不可思議的速度向前直奔的時間線上,我們處在這個時代的浪潮之上,每個人都感到了那種令人窒息的緊迫感。父母都是 不 希望孩子太累的,我們見過很多這樣的話:差不多就行了。糊弄糊弄就完事了。不要與眾不同。順其自然。但是你應該問問自己,是不是真的要 順其自然 ?

我記得在上大二的時候,聽一個叫端木恒的人說過一句話,大意是,這個世界上,政治可以改變很多事情,而科技,可以通過促進信息的流通,最終去推動 政 治的變革,去改變整個世界。當時覺得這事兒太酷了,是的,所以我當時的想法是,要去一個技術足夠強大,并且對人們的生活有實質影響的公司。希望用技術的力 量去讓更多人生活地更好。

這當然是一種不自量力,但又如何呢?只是一個普通人小小的想法,不斷追求卓越,愿意比別人多往前走一步而已。就像馮大輝說的 :所有人都說你做不成,都告訴你不要去做,不靠譜,嘲諷你,而你最后真的把事情做起來了,這就是牛逼。

做成了,其實牛不牛逼對你自己而言已經不重要了。沒做成,所有人都笑你是傻逼,但起碼也對得起自己的內心。再說,如果 青年人 想的都是養老和退休,那做事的人在哪?

三、發現更好的自己

在一個完美主義者的眼里,這是一個怎樣的世界?

這個社會上很多人在生活上追求更高的品質,但愿意對自己手頭所做的事情堅持高標準堅持卓越理念的人已經不多見了,以至于我們發現花再多的錢也買不 到 安全的食品了,花了一輩子的積蓄買的房子卻有各種質量問題。捫心自問自己在工作中是否能堅持某些東西,大部分人的態度都差不多,只是你糊弄一下不會怎樣, 而他馬虎一點就會死人,區別僅僅在于這里。

M·斯科特·派克說過一句話: 規避問題和逃避問題的趨向,是人類心理疾病的根源 。很多人把隨大流把妥協作為一種 「成熟」的標志,小時候敢想敢說可能也敢做,長大以后懂得了人情世故,懂得向現實妥協,45度角仰望天空說自己終于長大了。再看身邊那些「冥頑不靈」、 「認死理」的所謂完美主義者,認為這些人才是不正常的群體,把這些人要么當做傻逼要么當做裝逼。

天哪,我都想問,「這是一個怎樣的世界?」

肯定有人會說,站著說話不腰疼。誠然,在生活中,有的人是為了活下去,有的人是為了活得更好,有的人是為了幫助別人活得更好。這是不同的人生階段,每個人的情況不一樣,但這并不影響每個人內心的精神寄托和對信念的追求。

我從不指望去改變別人,但我相信我可以改變自己,雖然也很難。學生都喜歡問,如何最快地告訴自己的能力。說實話,我真的不知道什么是捷徑,我的經 驗 就是和比你優秀的人一起工作,經常請教比你資深的人,不斷挑戰過去的自己(每天審視自己太緊張了,只要比前段時間的自己更好就可以了)。

四、細節是魔鬼

Devils are in the details, 細節是魔鬼 ,這句話很多人都聽過,但要在工作中時時刻刻注意?難。

聊聊程序員的工匠人生

前幾天給同事做Code Review,就幾行代碼,發現了一個問題。場景是我們發現某個系統中存在占用內存超大的HTML字符串,需要統計HTML字符串的長度,于是為了獲得準 確的字節長度,這段代碼調用的是String.getBytes().length,一眼看起來并沒有什么大問題。

但是考慮到本身這個字符串就比較大,聯想到Java內部是用UTF-16存儲字符串的,而getBytes()會轉換為系統默認編碼(GBK或是 UTF-8等等),這里必然存在底層字符數組的拷貝(可以去參考String.getBytes()的源代碼證實),一個本身就很大的字符串,經過拷貝, 將會占用更多的內存,加劇這個問題,而在HTML中,中文其實只占了非常小的一部分,所以直接用String.length(),雖然會少數幾個字符,但 對統計結果影響其實并不大,并且這里不存在任何數組分配的開銷。

另外建議所有調用String.getBytes()的地方通通顯式傳入編碼,這是個大坑。(陳皓注:用String.length代替 getBytes().length,也是在給未來挖坑——如果未來有人要用len來干別的事,那么這個不精確的len可能就是一個大坑)

另外一個案例,也是在Code Review的時候發現的。

某個調用場景下,每次都會新建一個解析器對象去解析結果,盡管解析器沒有任何實例變量不會產生線程安全問題,創建的開銷也并不大,但我還是堅持要改成單例,使用同一個實例去處理,這也符合面向GC編程的思想。

這些場景,每天我們都在遇到,也許我們會說這些都是很小的問題,無傷大雅,差不多就行了。但就像前面說的,這是一種態度,一種思維習慣,當你堅持用最高的標準去要求自己,去要求自己的工作時,你才有可能漸漸接近卓越。細節是魔鬼,它會在完全察覺不到的時刻,把人拉回平庸。

「我不是為了輸贏,我就是認真。」這不代表我們不在乎輸贏,從頭至尾我都堅信,只有堅持完美,堅持品質,堅持那些我們曾經了解現在可能已經放棄了 的 美好的東西,像一個老工匠,把一種專注、追求極致的情懷融入我們的作品里,也許有一天,就有人,追尋著 夢想 ,發現了 生活更多的可能性 ,像喬布斯、像貝索斯,改變整個行業,改變全世界。

我們是被這個時代推上浪潮之巔的人,是去做一個見證者,或是一個沖在最前面也不怕被拍死的傻瓜,是我們每個人選擇的權利。只是不要忘記,那些傻瓜,不是真的不怕死,他們只是認真。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!