半年的時間,辦公室裡的人已經走馬燈似的換了一個又一個,除了兩個領導和幾個老資格的員工外,其它的座位似乎都已經至少換了一次主人了。
這是我心中難以思議的景象,在我的認知裡,我們這個行業是世界上最依賴於無形資產的行業之一,這些無形資產,就是程式員腦袋裡裝著的那些有關公司產品的各種知識以及在工作過程中所積累的專業技能。
一個更加顯然的事實則是,多半的企業,並沒有將這些無形資產固化沉澱在公司的能力。人來人往,除了產品的原始碼增加或變動了一些,公司依然還是那個公司,並沒有任何變化。就如同學校一般,學生一茬一茬的換,而校園,除了今天打破塊玻璃明天換了個廣播喇叭之類的,不會有任何改變。
我已經在三家半大不小的企業工作過,這些企業給我的印象,無一例外地都是如此。雖然每個公司都會說,我們通過過了ISO900X,我們有產品周期各個階段的標準化文檔。但你若認真的去考察一下,就會發現,它們雖然個個都有幾百K甚至數M的大小,從幾十頁到幾百頁不等,但其中只是塞滿了、代碼片斷、零星的UML圖片以及只有標題的留空段落而已,間或有一些言簡意賅的文字。如果想要瞭解某個“別緻”的邏輯的由來,或為什麼某個資料不用另一個看起來明顯更方便的方式統計出來,最好還是去問專案經理或實施人員,文檔一般不會告訴你答案的。
與這種情況相呼應的則是產品的代碼。在第一個企業,我曾驚詫於那些混亂冗長一條龍的代碼的生命力,它們似乎好多好多年前就已經存在,曆史可以追溯到我還沒上大學還分不清主機和顯示器的時代。它們看起來卻甚至比小孩一年級寫的第一篇作文還要糟糕,我一直都無法明白什麼樣的程式員能寫出這樣的代碼,也不明白經理為什麼會縱容這樣的代碼存在。不過後來我逐漸熟悉這樣的代碼出世的情境了:
1.
我怒道:“蟲哥,你們那個函數能不能不要產生 _2、_3之類的版本啊,你讓我用哪一個啊?用多態改寫一下會死啊?”
蟲哥:“我也沒辦法啊,李哥說就這麼改,我們沒時間啊”
2.
甲:“經理,你看這個模組的開發時間...?”
經理:“儘快吧,承德的版本裡有個類似的模組,你可以參考參考。”
甲:“那我是重新開發還是...?”
經理:“你拿過來改扒改扒就好了,先出個能用的版本,等項目上線後再完善”
情境1是我最鬱悶的時候。
情境2則是皆大歡喜,至少在下一任程式員上任前,所有人的都很滿意。程式員不用煞費苦心地設計介面,不用小翼翼地寫SQL,只要像農民整地那樣,用鋤頭改扒改扒就好了,Oh!完全不用加班。專案經理也可以按時甚至提前交付程式。領導彷彿已經看見了客戶的回款。簡單是太棒了!
關於專案經理,在我剛開始工作時,我曾一度認為那就是產品的姆媽,技術的上帝。直到我看了溫伯格的《程式員心理學》,我才恍然大悟,其中第四章中寫道:
現在對軟體開發主管們的考評,很大程度上仍然是根據其已有的成果多少,而不是看其是否有能力建立能夠創造出更多成果的團隊,或是看他們的成果品質。在這樣的壓力下,主管們就會極盡其能事,編造種種相互矛盾的甜言蜜語去哄騙其屬下,以期得到更多成果——當然,這些成果大多是短期的。他們的一些下屬也可能領悟出這個遊戲的原理,於是也會效仿起這種伎倆,去欺騙他們的下屬……;這樣一直下去,直到他們也成為這樣的主管。這種主管根本不屑於去建立團隊,也開發不出什麼高品質的成果,而只會再帶出更多像他一樣的下屬——有朝一日這些人又將成為下一代被這樣誤導的主管。
雖然事實並非全都如此,但不可否認,有很多經理人也確實是這樣的。在我之前的環境中,人們在考慮職業規劃時,一般那種實際上對編程沒有什麼興趣甚至是厭惡的人才會把第一目標定為專案經理,而那些熱愛寫代碼熱愛技術的人則傾向於技術專家或設計師之類的定位。再加上大部分的老闆也並不關心代碼的情況,因此出現這種情況並不為奇。現在,我已經絲毫不會為了從經理那裡聽到諸如“改扒”這類詞而感到驚訝了。雖然這個詞聽起來讓我感覺有那麼一點點不舒服,但後來我就發現它是多麼的形象和貼切了。
我曾一直單純地認為程式員都是具有叱吒風雲的氣度的,他們能用0和1把客戶的balabalab神奇地變成現實,翻手為雲,覆手為雨。我也曾一直認為程式員是最幸福的藝術家,他們不用受制於材料和已經成為現實的遺憾,他們可以隨意揮灑,隨時重來,直至完美。
當然,事實證明,我從來都是在以已之心,度他人之腹。後來我才發現大多數程式員絕對不會為自己的工作不會有任何創造性上的限制而感到幸福,因為人們壓根就不想成為什麼藝術家,或許大部分人們壓根就就沒有思考過這個問題。對這個行業裡的大部分人而言,寫程式、出產品只是一個營生,它們只是用來賣錢的東西,與設計和藝術無關。若基於這樣的定位,則一切都變得理所當然。
我可以肯定,在大多數規模中等及以下的企業中,普遍存在著這種狀況。你感受不到太多的熱情、活力,以及對卓越的追求(嗯,卓越這個詞太遙遠了,事情上連靠譜都未必能達到)。許多其中的程式員也意識到了這個問題並為此而困惑,然而,我所見到的大部分程式員大多半對這種困惑無法抱以積極的面對態度和處理方式。很多人選擇融入這個環境,得過且過,開始生產一樣的代碼,一樣的敷衍客戶和領導。另外有少數人則選擇逃避,立即辭職考研或試圖尋找一家符合自己預期的企業。第二種選擇一般難以奏效,小單位總是有之所以是小單位的理由,頂多換個不一樣的缺點而已。
迄今為止,我所工作過的單位基本上都可以歸為這一類,它們未必技術水平很爛,然而,它們出的產品卻總是離一流水準有很大差距。這有多方面的原因,從程式員、經理、技術儲備、管理甚至客戶等各個角度都可以找到。不過,關於我對於企業的思考,我需要用另外的篇幅來寫。在這裡我想說的是我對於自己職業發展的一些想法和精神支撐。
前面說到大部分程式員無法在沉悶或消極的工作環境中保持積極的工作心態。我很慶幸我能夠在這方面做得比一般人要稍微好些。
我一直不能理解的一件事情是,大多數人們在做選擇時,左右他們決定的,往往不是道德、喜好或是理想之類,而是別人的選擇。這樣的標準在我看來非常荒謬,但這是實情,人們總是試圖讓自己與大家保持一致和相同,他們對離群和成為異類的恐懼超乎我的想象。我不知道這是否與社會的進化有關,也許平庸真的是安全的代名詞吧。而我有一點值得自豪的是,倘若周圍的環境或人物不為我的欣賞,那我並不介意成為一個特立獨行的人。我不喜歡自稱出淤泥而不染之類的——嗯,我不是神棍。任何時候,我願意身先士卒,我從不指望有誰給我樹立一個標杆或給我一條康庄大道,我會用自己的腳印踏出自己的路。
在我這幾年裡,我自認為一直保持著較高的學習效率和一流的工作成果。除了對技術的本能愛好外,還有其它一些主觀或客觀的原因。
對於價值所在,我有自己的理解。我會把我的工作做到我能做的最好,因為我相信那正是我的價值所在。即使是在這房子遙不可及的時代,我也從未想過只為了生存而工作,我無法放下那份驕傲。或許有點可笑,在我上初中的時候,有老師曾說我有點驕傲,自那以後便時常前瞻後顧地反省自己有沒有驕傲。然而從上大學至今,我的所謂理想和嚮往,卻只能深植於這份驕傲之上。
除此之外,回頭再考慮一下我們所處的環境,它們又真的是否如我們所抱怨的那樣不可救藥和一無是處呢?即便在那個被稱為“有一流的市場營銷,末流的程式員”的單位,在我所在的部門中,我認為也至少有五六個人完全算得上是真正的程式員。另外,你又真的完全沒有空間來完成優秀的作品嗎?在我第二個單位的時候,第一個開發獨立模組的任務就是延期完成的,然而看到效果後,經理基本上就不在接下來的工作中過問我的進度了。我也渴望一流的團隊,激動人心的工作內容。但我一直謹記一句話,在黑暗中,點滴星光足以指引我們前進。大部分在中小企業中廢掉的人,都缺乏將責任歸咎於他人和企業的足夠理由。
最後,我是一個危機感很重的人,年少的時候既然是在為十年乃至二十年之後打基礎,那我就無法得過且過。從第一家單位離職的時候,技術總監把我抓去聊天。我對他說,我們目前的優勢來自於總部的品牌優勢和規範的資料庫平台,但我們的前端落後太多,我們那些剛剛開始使用電腦的客戶(機關裡的大嬸大姐們)或許現在能夠接受我們的軟體,但當他們對電腦駕輕就熟之後,或是我們的客戶換成年輕一代時,以我們的使用者體驗,能留住多少使用者?這不僅僅是我那時對企業的擔憂,也是對自己的擔憂。如果數年後,我能做出來的東西會被使用者鄙視,那我該何去何從?就算我放棄對卓越程式員的嚮往,我也無論如何都不會讓自己毫無退路。在坐以待斃和經濟危機下的前路未知之間,我寧可面對後者。
曆數數年來所工作過的單位,在問心無愧之餘,我亦慶幸自己能夠一直有勇氣做出選擇。雖然我的選擇並非總是於自己的職業生涯有利,但畢竟人的一生並非僅僅一份工作而已,用同學中混得最好的小樂同學的話說,就是“我們這剛進入社會的,先要學的是做人做事”。小樂平素愛瞎扯忽悠,但也偶有靠譜之語。我不愛扯淡,但總算是有原則的人。所謂為人當俯仰無愧,在TX、Baidu等大樹下無風無雨的同學自然無此顧慮,但在萬般皆下品,唯有公僕高的當下,多數人卻不得不時刻在著生活的考驗中,小心翼翼的維護心中那分微薄的理想與坦然。
此致!用小子婁的話說,我這叫“腳踩西瓜皮,滑到哪裡是哪裡”,請勿介意這段毫無頭緒的我為數不多的扯淡。其實這主要是前三年的一些困惑與焦慮,現在的心態早已平和,也瞭解就算一線企業,也未必那麼理想。只是心中依然有些不甘平庸而已。