“回望這段經(jīng)歷我依然覺得當(dāng)初的選擇沒有錯,六個月的時間收獲太多校仑,是我生涯中的一次際遇”忠售。這是幾個月前在博客中寫的一篇文章:《在傳統(tǒng)行業(yè)努力著的互聯(lián)網(wǎng)人》
兩個不錯的人,一件看著不錯的事
接到萬科物業(yè)hr的電話迄沫,有些錯覺稻扬。物業(yè)公司要做App?hr說公司要做社區(qū)o2o,基于萬科業(yè)主資源的優(yōu)勢,所以萬科做這件事有很大的優(yōu)勢羊瘩,一件看著不錯的事泰佳。于是我抱著“去看看吧”的心態(tài)去面試了盼砍。 面試一切都是很常規(guī)的流程沒有筆試,這比我想象中的好逝她,沒想到傳統(tǒng)企業(yè)的面試還挺務(wù)實的浇坐,坐下來就聊聊。技術(shù)總監(jiān):網(wǎng)易黔宛、豆瓣經(jīng)歷近刘,牛逼的全棧工程師,年輕宁昭,有情懷跌宛,聊著感覺不錯酗宋,氣場對應(yīng)积仗。 團隊負責(zé)人:十年互聯(lián)網(wǎng)老將,豆瓣產(chǎn)品蜕猫,原來他們是一伙的寂曹。他的面談方式相當(dāng)?shù)膄ree style,面試過程感覺不錯回右。
他們對我還是挺認可的隆圆,后續(xù)的電話溝通中也希望我能考慮下,希望能一起“大干一場”翔烁。經(jīng)過幾輪的糾結(jié)(當(dāng)時手頭有其他offer渺氧,獵頭推薦的,好幾次差點被獵頭說服了)蹬屹,最終選擇了“大干一場”侣背。
百廢待興
“劣幣驅(qū)逐良幣就是牛逼的人覺得和混日子人一起沒有未來,然后走了慨默;混日子的人發(fā)現(xiàn)沒有牛逼的人去攻關(guān)扛著自己也沒法混贩耐,然后也走了…”。這是我們負責(zé)人很久以前朋友圈發(fā)的一條感嘆厦取。 剛進前兩個星期潮太,相當(dāng)壓抑,團隊氣氛很消極虾攻,而我剛好深陷重災(zāi)地帶铡买。進去第一個星期開始熟悉產(chǎn)品業(yè)務(wù),首先下載代碼霎箍,當(dāng)初版本控制還是使用的svn寻狂。然后慢慢的開始發(fā)現(xiàn)了很多問題,代碼的問題入的問題朋沮,總結(jié)為歷史的問題蛇券。
一缀壤、沒有歷史的項目。
進去沒幾天纠亚,我想知道我們的app上過哪些渠道塘慕,然后找產(chǎn)品問,產(chǎn)品貌似不知道渠道包時啥意思蒂胞,然后問了項目組所有的人图呢,沒有一個能說清楚的;我想知道歷史發(fā)過哪些版本骗随,每個版本是否做記錄蛤织,我找之前的兩位Android工程師問,他們就開始翻svn的提交日志鸿染,版本沒打打tag的么指蚜?
二、工程師的技術(shù)水平和態(tài)度讓產(chǎn)品降低了標準
一次我發(fā)現(xiàn)《助這兒》首頁的“消息”小紅點顯示的未讀條是和實際未讀條數(shù)不對涨椒,經(jīng)過調(diào)試摊鸡,log后端返回的數(shù)據(jù),發(fā)現(xiàn)后端數(shù)據(jù)的問題蚕冬,我去找后端開發(fā)工程師免猾,他的回答讓我很驚訝:“在我看來這不是bug”,我問他為什么囤热,他說一直的這樣啊猎提,我當(dāng)時很絕望,我錯了么旁蔼?這讓我對這位開著轎車來萬科物業(yè)上了三年班的工程師“另眼相看”锨苏,我相信產(chǎn)品經(jīng)理也是多么的無奈。后來這位哥們也和我們的技術(shù)經(jīng)理撕過幾次牌芋,原因是后來我們使用GitHub托管代碼蚓炬,review代碼比較嚴格,估計技術(shù)總監(jiān)看了他的代碼然后叫他如何如何改正躺屁,哥們受不了了肯夏,覺得技術(shù)總監(jiān)老是針對他。
三犀暑、胡亂堆疊的結(jié)構(gòu)而后不斷沉淪與墮落的代碼
每天都能碰到奇葩代碼驯击,經(jīng)常會聽到“尼瑪,這TM誰寫的代碼耐亏?”這樣的吐槽徊都,開始覺得這樣不好,會傳遞一些負能量广辰,但是從另一個角度講這未必是壞事暇矫,我們在吐槽別人的代碼的時候同時也反思到主之,將來別人會不會吐槽我們的代碼?這就使得我們格外的注意自己的代碼設(shè)計李根,因為我們深深知道渣代碼給后來人帶來的痛苦和惡心槽奕。 關(guān)于代碼的黑歷史真是太多了,知乎上有篇文章叫做《你見過的最想笑的房轿,最奇葩的粤攒,最逗逼的代碼是什么?》囱持,看了很多人的答案夯接,我好想說,我都遇到了纷妆,太多了盔几,這里僅僅截取兩個來看看吧。這就是一位4年工作經(jīng)驗的工程師寫出來的代碼凭需,還不讓改问欠,這讓強迫癥的我們很是痛苦肝匆。誰都寫過奇葩代碼粒蜈,這些不可怕,最可怕的是旗国,抱殘守缺枯怖,不愿意接受改變,不愿意接受優(yōu)秀思維方法或者工具能曾。這位哥們度硝,讓我很傷感。某一天我又看到一段他關(guān)于連接服務(wù)器l正式環(huán)境和測試環(huán)境url的代碼:
//public static final String BASE_URL = "http://xxx.vanke.com/";
public static final String BASE_URL = "http://aaa.vanke.com/";
你能看懂哪個是正式環(huán)境那個事測試環(huán)境么寿冕?只有他看得懂蕊程,或許過一段時間以后他自己回頭看也不知道了。我問他為啥要這樣寫驼唱?他給我演示了注釋快捷鍵藻茂,然后振振有詞說:這樣注釋很方便。怪不得在他寫的很多代碼里我看到了成片成片的方法被注釋的痕跡玫恳。 不到一個星期辨赐,我開始懷疑我是不是做了一個錯誤的選擇?很是糾結(jié)京办,又想起了那句:“劣幣驅(qū)逐良幣就是牛逼的人覺得和混日子人一起沒有未來掀序,然后走了;混日子的人發(fā)現(xiàn)沒有牛逼的人去攻關(guān)扛著自己也沒法混惭婿,然后也走了…”不恭,雖然我也不是太優(yōu)秀的人叶雹,但至少我一直在追求進步,下了這么大的決心來這就是希望能能把這事兒做成换吧,這樣的情況能做好嗎浑娜?做為一個互聯(lián)網(wǎng)團隊不該是這樣的,看到不好的代碼我有努力去改變式散,但是我去很難去改變一個人的思維習(xí)慣筋遭,既然選擇了就再努力一下吧。好吧暴拄,看到問題我會告訴你漓滔,你不改我改過來,這攤事兒你搞不定我來搞乖篷,事實證明后來產(chǎn)品和設(shè)計師都喜歡來找我响驴,然后“混日子”的人被架空了(萬科有錢愿意養(yǎng)閑人就養(yǎng)著吧,我目的很明確撕蔼,來這就是希望能把這事做好豁鲤,你可以不參與,但別礙著我)鲸沮,再后來被“架空的”人走了琳骡,這是早晚的結(jié)局。后來和技術(shù)總監(jiān)交流過讼溺,畢竟我們要干實事楣号,需要有正向輸出的人,和人品道德無關(guān)怒坯,和思維方式及做事的習(xí)慣有關(guān)炫狱,我們沒能力也沒這么多精力說教,不合適的剔猿,離開對雙方都有好處视译。
四、各種老it系統(tǒng)高度依賴混陷焦油坑
也許這是很多傳統(tǒng)公司都有的問題归敬,系統(tǒng)老酷含、舊,各種數(shù)據(jù)邏輯耦合弄慰。關(guān)于老第美、舊最典型的例子就是在家開vpn還IE only(只能通過IE瀏覽器使用),這讓在家處理問題的哥們情何以堪陆爽?然后就是就是各種系統(tǒng)的交織混亂什往。比如我門App后端是A,A里面的大部分數(shù)據(jù)和邏輯分散在老系統(tǒng)B和C中(實際還有D慌闭、E别威、F…)躯舔,而B、C分別在很久很久以前由不同的外包公司開發(fā)的省古,然后A又是由不同的外包公司完成的粥庄,一錘子買賣之后又經(jīng)歷了一批平庸的團隊,在填一個坑的同時又不知不覺的創(chuàng)造了兩個坑豺妓。最后我們來了惜互,慢慢的看到了千瘡百孔系統(tǒng),我們多么希望原本就沒有A琳拭,甚至沒有B和C训堆,重鑄高塔遠比在搖搖欲墜的高塔上建筑順手得多。 或許是因為早期對技術(shù)的無知或不重視白嘁,萬科物業(yè)正在痛苦的償還著巨額技術(shù)債坑鱼,甚至在將在短時期內(nèi)無法擺脫這個困擾。好在高層擁抱互聯(lián)網(wǎng)的態(tài)度越來越堅決絮缅,對技術(shù)的態(tài)度越來越重視鲁沥。
革命
開發(fā)工具
人和動物的區(qū)分是看會不會使用工具,是工具觸發(fā)了猿人的思考耕魄,最終進化成了現(xiàn)在聰明的人類画恰。雖然現(xiàn)在我們更強調(diào)的是思維上的超越,但是在有些階段我們還是要借助先進的工具來改變我們的思維習(xí)慣屎开。
團隊溝通工具:BearyChat阐枣。在之前是用郵件溝通的马靠,很難想象在互聯(lián)網(wǎng)開發(fā)這樣的高效協(xié)作需求下是怎么溝通的奄抽。
團隊任務(wù)管理工具:Trello。可以創(chuàng)建白板甩鳄,白板上創(chuàng)建任務(wù)card逞度,并能和BearyChat互通。
代碼托管及版本控制:GitHub妙啃。這個是我的最愛档泽,程序員的書臉,同樣能互通BearyChat揖赴,最重要的是有了它我們才能更好的做代碼review馆匿,控制代碼質(zhì)量增加工程師自己的討論氛圍。
apk托管工具:fir.im燥滑。非常喜歡這類輕工具渐北,編譯、上傳铭拧、更新赃蛛、通知到BearyChat恃锉,一鍵打通任督二脈,再也不用擔(dān)心測試呕臂、產(chǎn)品人員拿著手機來喊你打包了破托。
AndroidStudio:估計很多團隊還在用Eclipse,但就做Android開發(fā)來說AndroidStudio已經(jīng)在各方已經(jīng)遠遠超越Eclipse了歧蒋。 最后站在客戶端開發(fā)的角度總結(jié)一張工具協(xié)作圖:
代碼review流程土砂。
使用GitHub協(xié)作管理,程序員要提交自己負責(zé)的代碼之前谜洽,其他相關(guān)合作人員要review他的代碼瘟芝,發(fā)現(xiàn)問題會發(fā)起討論,覺得代碼不夠好就要繼續(xù)優(yōu)化褥琐,直到大家都覺得ok為止锌俱。這個不是很復(fù)雜的一件事兒,但是相信很多團隊都沒有認真做好這個敌呈,因為我之前經(jīng)歷過的公司就很少有這個習(xí)慣贸宏,但是就程序員的提高上來說這個太有必要了,有這個流程之后寫代碼的人才會覺得不是一個人在寫磕洪,項目再忙也不能僅止于功能的實現(xiàn)吭练,代碼是要給別人看的,才會有意識去寫高質(zhì)量的代碼析显■暄剩看了很多代碼,我發(fā)現(xiàn)高質(zhì)量的代碼是渣代碼之間的差別其實相當(dāng)小谷异,究其緣由就是細微的思維意識差別分尸,所以代碼review重在改變程序員寫代碼時候的意識,當(dāng)這種強迫的意思變成一種習(xí)慣時歹嘹,也許這個程序員在開始產(chǎn)生質(zhì)的變化了箩绍。
掙扎中的收獲
三個月過去了,總算為停滯了六個月的項目帶來一點起色尺上。兩個App分別在網(wǎng)絡(luò)流量材蛛、內(nèi)存、流暢度上都得到了一定的優(yōu)化怎抛,《助這兒》擱置了幾個月的報事卑吭、搶單功能總算有了樣子,《住這兒》管家功能也提上了日程马绝。 最重要的是團隊氛圍已經(jīng)慢慢行程豆赏,工程師技術(shù)討論環(huán)境完全得益以GitHub的使用和代碼review的流程。由于豆瓣流的關(guān)系,時不時還能請來極光推送的CTO還有餓了么的架構(gòu)師這樣的牛人來做分享河绽。到目前為止整個團隊除了豆瓣流還有北郵的高材生己单、經(jīng)驗豐富的老大哥以及幾個深大的小鮮肉“沂危或許有一天我會離開纹笼,回到純互聯(lián)網(wǎng)公司中,但我希望我能留下一些東西:有我耕耘的一片土地苟跪!