工匠情懷

老羅的Smartisan T1手機發佈會很多人應該都看了,發佈會的最後老羅凝視着自己的工匠自畫像,半晌沒說話,隨後轉過身,慢慢離開舞臺,屏幕下方只留下一句話:

我不是爲了輸贏,我就是認真。

這一瞬間讓我想起93年「獅城舌戰」的主角蔣昌建,在「人性本善還是人性本惡」的總結陳詞最後,以顧城的名句,「黑夜給了我黑色的眼睛,我卻用它尋找光明」,把整個辯論賽的氛圍推向高潮。

而老羅的這句話,和這句話背後的工匠背景,卻以另外一種無聲的卻震人心魄的力量,敲打着每一個在場的,或是觀看着整個發佈會的觀衆的心緒。

「工匠情懷」,我深有體會,就像我在 面向GC的Java編程 一文中所提到的:

優秀程序員的價值,不在於其所掌握的幾招屠龍之術,而是在細節中見真著。

如果我們可以一次把事情做對,並且做好,在允許的範圍內儘可能追求卓越,爲什麼不去做呢?

追求卓越,追求完美,追求細節的極致。小時候看到那些修表匠,握着一個小螺絲刀,或是看着電工,用烙鐵沾着錫和松香,在那一小寸的世界裏,把壞了的地方修好,那種專注的眼神,覺得很厲害。

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

一、技術人的執着

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

做產品需求評審,有的人善於快速提供技術解決方案,在最短的時間內解決問題。

但我見過的很多牛人,他們除了能在腦海裏最快地形成方案原型,並且更深入地考慮各種細節點,最終能給出一個更趨於完善的技術方案。

在他們身上,我看到了對這項職業的自我尊重,對自我價值的追求,也有對「卓越」的理解和渴求

《精通正則表達式》的譯者餘晟老師寫過他和正則表達式的 緣起 。只是因爲項目經理讓他「多用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編程的思想。

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

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

我們是被這個時代推上浪潮之巔的人,是去做一個見證者,或是一個衝在最前面也不怕被拍死的傻瓜,是我們每個人選擇的權利。

只是不要忘記,那些傻瓜,不是真的不怕死,他們只是認真


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章