「我只是認(rèn)真」——聊聊工匠情懷
老羅的Smartisan T1手機(jī)發(fā)布會(huì)很多人應(yīng)該都看了,發(fā)布會(huì)的最后老羅凝視著自己的工匠自畫像,半晌沒說話,隨后轉(zhuǎn)過身,慢慢離開舞臺(tái),屏幕下方只留下一句話:
我不是為了輸贏,我就是認(rèn)真。
這一瞬間讓我想起93年「獅城舌戰(zhàn)」的主角蔣昌建,在「人性本善還是人性本惡」的總結(jié)陳詞最后,以顧城的名句,「黑夜給了我黑色的眼睛,我卻用它尋找光明」,把整個(gè)辯論賽的氛圍推向高潮。
而老羅的這句話,和這句話背后的工匠背景,卻以另外一種無聲的卻震人心魄的力量,敲打著每一個(gè)在場的,或是觀看著整個(gè)發(fā)布會(huì)的觀眾的心緒。
「工匠情懷」,我深有體會(huì),就像我在 面向GC的Java編程 一文中所提到的:
優(yōu)秀程序員的價(jià)值,不在于其所掌握的幾招屠龍之術(shù),而是在細(xì)節(jié)中見真著。
如果我們可以一次把事情做對(duì),并且做好,在允許的范圍內(nèi)盡可能追求卓越,為什么不去做呢?
追求卓越,追求完美,追求細(xì)節(jié)的極致。小時(shí)候看到那些修表匠,握著一個(gè)小螺絲刀,或是看著電工,用烙鐵沾著錫和松香,在那一小寸的世界里,把壞了的地方修好,那種專注的眼神,覺得很厲害。
現(xiàn)在再去回想那些工匠工作的場景,越發(fā)覺得欽佩。在我老家有一家刻章的店,在我上幼兒園的時(shí)候就已經(jīng)在那開了很多年了。前段時(shí)間需要刻一個(gè)章,發(fā)現(xiàn)那家店還在,于是走進(jìn)去,門口坐著一個(gè)老人,我確實(shí)記不得當(dāng)年是不是他,不過看這歲數(shù)八九不離十。我以前在別的地方刻的章,都是在電腦里設(shè)計(jì)完圖案后,激光刻蝕。但那次老人卻是用的手刻,我著實(shí)驚呆了。只看他拿出一塊紅色的印底,右手持著刻刀,開始一下一下地刻著。雖然老人連話都不怎么說得清了,但是工作時(shí)那專注的神情,和精湛的手藝,以及最后成品那比機(jī)器更完美的效果,著實(shí)讓我心里非常動(dòng)容。
一、技術(shù)人的執(zhí)著
我見過很多人,也見過很多程序員,都有如此的「工匠情懷」。
做產(chǎn)品需求評(píng)審,有的人善于快速提供技術(shù)解決方案,在最短的時(shí)間內(nèi)解決問題。
但我見過的很多牛人,他們除了能在腦海里最快地形成方案原型,并且更深入地考慮各種細(xì)節(jié)點(diǎn),最終能給出一個(gè)更趨于完善的技術(shù)方案。
在他們身上,我看到了對(duì)這項(xiàng)職業(yè)的自我尊重,對(duì)自我價(jià)值的追求,也有對(duì)「卓越」的理解和渴求。
《精通正則表達(dá)式》的譯者余晟老師寫過他和正則表達(dá)式的 緣起 。只是因?yàn)轫?xiàng)目經(jīng)理讓他「多用Google,查查正則表達(dá)式的資料」,余老師打開了正則的大門,讀完了英文原版的《Mastering Regular Expression》,如今成為了國內(nèi)最了解正則表達(dá)式的人之一。
看完那篇文章其實(shí)我想起了我的實(shí)習(xí)經(jīng)歷。那時(shí)候我剛?cè)ス緝扇?,有一天我老板找我讓我研究一下如何用Java里的MappedByteBuffer做文件內(nèi)存映射來讀取大文件。盡管我們當(dāng)時(shí)要處理的文件很大,以我在學(xué)校編碼的經(jīng)驗(yàn)看,用普通的Reader也是可以很好地解決的。
于是我說,「這個(gè)其實(shí)用Reader也能做,更簡單一些,沒那么麻煩?!?/p>
老板反問我,「什么叫沒那么麻煩,這是一個(gè)做技術(shù)的人的態(tài)度嗎?」
那幾天我花了很多時(shí)間,去從Linux一直到JVM,去了解什么是內(nèi)存映射,底層原理是什么,和其它技術(shù)的比較、優(yōu)缺點(diǎn),并和其它幾種讀文件的技術(shù)做了性能對(duì)比。
雖然最后項(xiàng)目沒有采用這個(gè)方案,但是那句反問直到現(xiàn)在一直在我腦海里,時(shí)時(shí)地提醒我:「做技術(shù)的人,對(duì)待技術(shù),應(yīng)該擁有什么樣的態(tài)度?」
所以其實(shí)我很感謝我的老板,以前他教我們這些新人優(yōu)秀的職場習(xí)慣,有一條是每天的郵件必須沒有未讀數(shù),即便是不需要閱讀的郵件,也要一鍵置為已讀,不要留一個(gè)未讀的數(shù)字在那?,F(xiàn)在想起來,有點(diǎn)像iOS App右上角那個(gè)提醒數(shù)的角標(biāo),有些強(qiáng)迫癥的人怎么也忍受不了有個(gè)紅圈圈在那。開個(gè)玩笑,雖然有些習(xí)慣看起來可有可無,無關(guān)緊要,但這確實(shí)映射了一種態(tài)度和思維習(xí)慣。
完美有多遠(yuǎn)?我不知道,但我愿意多往前走一步。
二、拾起初衷
我們的生活,每天很忙碌。有時(shí)候忙得自己都忘記了為什么在此處,有時(shí)候忙得只能不斷地用直覺、用以往的經(jīng)驗(yàn)去設(shè)計(jì)一個(gè)解決方案,而沒有時(shí)間去思考需求是不是合理,方案是不是最佳,我們以為自己設(shè)計(jì)的是最佳實(shí)踐,誰知道呢?
這個(gè)社會(huì),這個(gè)世界,處在一個(gè)以不可思議的速度向前直奔的時(shí)間線上,我們處在這個(gè)時(shí)代的浪潮之上,每個(gè)人都感到了那種令人窒息的緊迫感。
父母都是不希望孩子太累的,我們見過很多這樣的話:
差不多就行了。
糊弄糊弄就完事了。
不要與眾不同。
順其自然。
但是你應(yīng)該問問自己,是不是真的要 順其自然 ?
我記得在上大二的時(shí)候,聽一個(gè)叫端木恒的人說過一句話,大意是,這個(gè)世界上,政治可以改變很多事情,而科技,可以通過促進(jìn)信息的流通,最終去推動(dòng)政治的變革,去改變整個(gè)世界。
當(dāng)時(shí)覺得這事兒太酷了,是的,所以我當(dāng)時(shí)的想法是,要去一個(gè)技術(shù)足夠強(qiáng)大,并且對(duì)人們的生活有實(shí)質(zhì)影響的公司。希望用技術(shù)的力量去讓更多人生活地更好。
這當(dāng)然是一種不自量力,但又如何呢?只是一個(gè)普通人小小的想法,不斷追求卓越,愿意比別人多往前走一步而已。
就像馮大輝說的:
所有人都說你做不成,都告訴你不要去做,不靠譜,嘲諷你,而你最后真的把事情做起來了,這就是牛逼。
做成了,其實(shí)牛不牛逼對(duì)你自己而言已經(jīng)不重要了。
沒做成,所有人都笑你是傻逼,但起碼也對(duì)得起自己的內(nèi)心。
再說,如果 青年人 想的都是養(yǎng)老和退休,那做事的人在哪?
三、發(fā)現(xiàn)更好的自己
老羅最后的一個(gè)問題是:
在一個(gè)完美主義者的眼里,這是一個(gè)怎樣的世界?
這個(gè)社會(huì)上很多人在生活上追求更高的品質(zhì),但愿意對(duì)自己手頭所做的事情堅(jiān)持高標(biāo)準(zhǔn)堅(jiān)持卓越理念的人已經(jīng)不多見了,以至于我們發(fā)現(xiàn)花再多的錢也買不到安全的食品了,花了一輩子的積蓄買的房子卻有各種質(zhì)量問題。捫心自問自己在工作中是否能堅(jiān)持某些東西,大部分人的態(tài)度都差不多,只是你糊弄一下不會(huì)怎樣,而他馬虎一點(diǎn)就會(huì)死人,區(qū)別僅僅在于這里。
M·斯科特·派克說過一句話:
規(guī)避問題和逃避問題的趨向,是人類心理疾病的根源。
很多人把隨大流把妥協(xié)作為一種「成熟」的標(biāo)志,小時(shí)候敢想敢說可能也敢做,長大以后懂得了人情世故,懂得向現(xiàn)實(shí)妥協(xié),45度角仰望天空說自己終于長大了。再看身邊那些「冥頑不靈」、「認(rèn)死理」的所謂完美主義者,認(rèn)為這些人才是不正常的群體,把這些人要么當(dāng)做傻逼要么當(dāng)做裝逼。
天哪,我都想問,「這是一個(gè)怎樣的世界?」
肯定有人會(huì)說,站著說話不腰疼。誠然,在生活中,有的人是為了活下去,有的人是為了活得更好,有的人是為了幫助別人活得更好。這是不同的人生階段,每個(gè)人的情況不一樣,但這并不影響每個(gè)人內(nèi)心的精神寄托和對(duì)信念的追求。
我從不指望去改變別人,但我相信我可以改變自己,雖然也很難。
學(xué)生都喜歡問,如何最快地告訴自己的能力。說實(shí)話,我真的不知道什么是捷徑,我的經(jīng)驗(yàn)就是和比你優(yōu)秀的人一起工作,經(jīng)常請(qǐng)教比你資深的人,不斷挑戰(zhàn)過去的自己(每天審視自己太緊張了,只要比前段時(shí)間的自己更好就可以了)。
四、細(xì)節(jié)是魔鬼
Devils are in the details,細(xì)節(jié)是魔鬼,這句話很多人都聽過,但要在工作中時(shí)時(shí)刻刻注意?難。
前幾天給同事做Code Review,就幾行代碼,發(fā)現(xiàn)了一個(gè)問題。
場景是我們發(fā)現(xiàn)某個(gè)系統(tǒng)中存在占用內(nèi)存超大的HTML字符串,需要統(tǒng)計(jì)HTML字符串的長度,于是為了獲得準(zhǔn)確的字節(jié)長度,這段代碼調(diào)用的是String.getBytes().length,一眼看起來并沒有什么大問題。
但是考慮到本身這個(gè)字符串就比較大,聯(lián)想到Java內(nèi)部是用UTF-16存儲(chǔ)字符串的,而getBytes()會(huì)轉(zhuǎn)換為系統(tǒng)默認(rèn)編碼(GBK或是UTF-8等等),這里必然存在底層字符數(shù)組的拷貝(可以去參考String.getBytes()的源代碼證實(shí)),一個(gè)本身就很大的字符串,經(jīng)過拷貝,將會(huì)占用更多的內(nèi)存,加劇這個(gè)問題,而在HTML中,中文其實(shí)只占了非常小的一部分,所以直接用String.length(),雖然會(huì)少數(shù)幾個(gè)字符,但對(duì)統(tǒng)計(jì)結(jié)果影響其實(shí)并不大,并且這里不存在任何數(shù)組分配的開銷。
另外建議所有調(diào)用String.getBytes()的地方通通顯式傳入編碼,這是個(gè)大坑。(陳皓注:用String.length代替getBytes().length,也是在給未來挖坑——如果未來有人要用len來干別的事,那么這個(gè)不精確的len可能就是一個(gè)大坑)
另外一個(gè)案例,也是在Code Review的時(shí)候發(fā)現(xiàn)的。
某個(gè)調(diào)用場景下,每次都會(huì)新建一個(gè)解析器對(duì)象去解析結(jié)果,盡管解析器沒有任何實(shí)例變量不會(huì)產(chǎn)生線程安全問題,創(chuàng)建的開銷也并不大,但我還是堅(jiān)持要改成單例,使用同一個(gè)實(shí)例去處理,這也符合面向GC編程的思想。
這些場景,每天我們都在遇到,也許我們會(huì)說這些都是很小的問題,無傷大雅,差不多就行了。但就像前面說的,這是一種態(tài)度,一種思維習(xí)慣,當(dāng)你堅(jiān)持用最高的標(biāo)準(zhǔn)去要求自己,去要求自己的工作時(shí),你才有可能漸漸接近卓越。細(xì)節(jié)是魔鬼,它會(huì)在完全察覺不到的時(shí)刻,把人拉回平庸。
「我不是為了輸贏,我就是認(rèn)真?!惯@不代表我們不在乎輸贏,從頭至尾我都堅(jiān)信,只有堅(jiān)持完美,堅(jiān)持品質(zhì),堅(jiān)持那些我們曾經(jīng)了解現(xiàn)在可能已經(jīng)放棄了的美好的東西,像一個(gè)老工匠,把一種專注、追求極致的情懷融入我們的作品里,也許有一天,就有人,追尋著 夢想 ,發(fā)現(xiàn)了 生活更多的可能性 ,像喬布斯、像貝索斯,改變整個(gè)行業(yè),改變?nèi)澜纭?/p>
我們是被這個(gè)時(shí)代推上浪潮之巔的人,是去做一個(gè)見證者,或是一個(gè)沖在最前面也不怕被拍死的傻瓜,是我們每個(gè)人選擇的權(quán)利。
只是不要忘記,那些傻瓜,不是真的不怕死,他們只是認(rèn)真。
原文鏈接:http://blog.hesey.net/2014/05/im-just-conscientious-talking-about-feelings-of-artisans.html