作為一名程序員狈谊,我渴望我加入的應該要是一支“30%的時間在寫代碼,而70%的時間在喝著咖啡討論著如何將產(chǎn)品做好”的團隊沟沙。我覺得軟件工作應該成為一項技術和藝術融合的高智力活動河劝,我們的項目經(jīng)理應該是一個高度理解質(zhì)量、范圍和進度客觀規(guī)律的明白人矛紫,“高效工作赎瞎,快樂生活”才應該是我們的座右銘。
可現(xiàn)實情況卻是颊咬,團隊在一邊超負荷的做著需求务甥,一邊改著沒完沒了的Bug。過點前夕喳篇,項目經(jīng)理熬著通紅通紅的眼睛盯著我們整晚整晚的加班敞临,質(zhì)量專員一遍一遍的催促質(zhì)量數(shù)據(jù)還不夠,軟件工作已經(jīng)無可挽回的淪落成了體力勞動麸澜,別說快樂生活挺尿,生活都沒了。
好吧炊邦,以上可能都對编矾,項目經(jīng)理和質(zhì)量專員是一個不懂客觀規(guī)律并且毫無同情之心的大魔頭,讓我們程序員們毫無尊嚴卑賤的活著馁害。
只是窄俏,有句話憋了很久了:“醒醒吧,所有的這些碘菜,都是因為你的代碼寫的太爛凹蜈,你制造了太多的Bug限寞!”。你可能會抱怨這分明是需求變更太快踪区,領導計劃太緊導致的昆烁。嗯,聽著挺有道理缎岗,但是要知道需求變更本身就是軟件的客觀規(guī)律静尼,而領導要求進度,呵呵传泊,你也可以認為是客觀規(guī)律鼠渺。
這不是一篇證明誰導致程序員加班太多的論證文,也不想給大家灌雞湯眷细,讓大家一夜之間都變成編程高手拦盹,但是至少說一些實實在在的經(jīng)驗和方法∠担總之讓大家多看一點就多獲得一點實際的價值普舆。
01?不要一上來就開始寫代碼
你可能性子急,也可能早已按耐不住躍躍欲試昨天剛學會的一個編程小技巧校读,我想要告訴你的是沼侣,不急,收起你那磨刀霍霍的表情歉秫,在你拿到需求準備寫出你第一行代碼之前還有更重要的事情要做蛾洛。我想怎么強調(diào)這件事情的重要性都不為過,在我以前寫的自己非常滿意的代碼經(jīng)歷中雁芙,我都采用了這個方法轧膘,它能消滅原來可能會被測試提的90%的Bug單,甚至做到零缺陷兔甘,當然做到這點可能需要一個過程谎碍。
拿到需求之后你首先要問下自己對需求是不是已經(jīng)充分理解了,得到肯定的回答之后洞焙,我們就可以開始了:
1)先在你忙碌的工作中椿浓,找出你能完全掌控的一個小時時間段,這一個小時完全屬于你自己闽晦,保證這一個小時不會有任何打擾扳碍,或者任何能影響到你執(zhí)行不下去這個方法的打擾。要記住這一個小時非常重要仙蛉,比你后面要執(zhí)行的所有活動的時間都重要笋敞,它絕對值得。
2)在第一張白紙的上方寫下“該需求特性的正常流程和影響范圍”荠瘪,然后在白紙下方逐條開始寫下該需求特性正常流程包含的內(nèi)容夯巷,大概會使用到哪些庫函數(shù)赛惩,會提供出哪些接口,是否會影響版本升級趁餐,是否影響資源文件喷兼,是否影響原有的接口等等。
3)在第二張白紙上方寫下“該需求特性所有的異常場景和本人以往經(jīng)常會犯的一些錯誤點”后雷,然后在白紙下方一條一條的開始往下寫季惯。
4)不斷重復第2)、3)步臀突。
你可能會覺得這不就跟寫的需求澄清材料差不多嗎勉抓,我要告訴你的是這是兩回事,它不是一項質(zhì)量專員要求你做的質(zhì)量過程活動候学,這是你自己和自己之間的一次深層次對話藕筋,這不需要告訴任何人,不需要向其他領域輸出任何交付物梳码,這是對自己要寫出優(yōu)秀代碼的一次自我驅(qū)動隐圾。
一開始你可能會覺得很難,寫幾條就寫不出來了掰茶,或者閃過“這玩意兒是不是真的有用”的念頭翎承,不用著急,起身去窗戶邊呼吸一口新鮮空氣或者去打杯水喝符匾,總之不要中斷,除非辦公室著火了不要去干讓這件事繼續(xù)不下去的事情瘩例。當你慢慢往下寫到第20或者第30條答案的時候啊胶,你可能突然會有一種“這么隱晦的一個異常點都被我發(fā)現(xiàn)了,簡直太牛了垛贤!”的情感涌出焰坪,這個時候你會暗暗驚呼有點難以抑制自己的興奮,這說明你快要接近成功完成了聘惦,后面每寫出來的一條都會讓自己感動某饰。記住,中間不要放棄善绎,你堅持下去的決定會將這一個小時變成你整個需求實現(xiàn)當中最重要的一個小時黔漂。
02?忘掉后面還有該死的質(zhì)量活動
所有編碼之外的質(zhì)量活動,都是基于公司對于你寫代碼水平的不信任產(chǎn)生的禀酱。也就是說公司花了大量的錢招來質(zhì)量專員炬守、網(wǎng)元測試、解決方案測試這些人都是因為你沒把代碼寫好造成的浪費剂跟。
常見一些開發(fā)人員减途,剛來的時候?qū)|(zhì)量專員安排的質(zhì)量活動頗有微詞酣藻,“我以前公司做項目根本不需要做這些東西還不是一樣能把項目做完”,“這些質(zhì)量活動鳍置,簡直就是對編碼時間的侵占”辽剧。說這些都沒問題,但是你一邊說著這些一邊寫完代碼后Bug就烏泱烏泱上來税产,是不是有點不要臉怕轿?質(zhì)量專員設計的這些活動,就是為了不讓你的爛代碼一瀉千里的沖到客戶面前設計的一個個檢查站砖第,當你對于“寫出好代碼”什么事都沒做撤卢,只想著取消這些質(zhì)量活動的話,就只能理解為耍流氓了梧兼。
那么放吩,做好質(zhì)量活動就能“寫出好代碼”嗎? 答案是不能。質(zhì)量活動只是質(zhì)量專員的監(jiān)管手段羽杰,它既不是目標甚至也不是方法渡紫,你寫代碼的目標不是要滿足質(zhì)量活動標準,而是要追求零缺陷考赛,也不會因為你Wbit測試做的好就能寫出好代碼惕澎。你要做的一個是“不要一上來就開始寫代碼”,另外一個就是掌握盡量多的重構方法,重構思維方式颜骤,掌握重構并不一定是要對原來代碼的重構唧喉,而是下筆之前就知道好代碼該怎么寫。
我讓大家忘記質(zhì)量活動忍抽,不是讓大家不聽質(zhì)量專員的話八孝,而是大家在寫代碼的時候要心中存有敬畏,代碼寫完之后所有的活動都是你造成的浪費鸠项,你要為消除這些浪費而竭盡全力干跛。
03?記住,你寫的代碼是給人看的
我之前聽一位同事講他上一家公司的一件聽來十分驚悚的故事祟绊,他原來公司的一位同事離職了楼入,留下的是一堆十分復雜,看了會讓人神經(jīng)錯亂的C++代碼牧抽,他走了之后嘉熊,發(fā)現(xiàn)整個項目組的人沒有一個人能接手得了他的模塊,項目經(jīng)理不得不高價加請客吃飯的方式讓他過來給全項目組的人講兩天他的代碼扬舒。 這個家伙大有“看吧记舆,只有我才能搞定”的“衣錦還鄉(xiāng)”姿態(tài)。我好奇的是這個項目經(jīng)理為什么沒有盡早的開除他呼巴,簡直就應該報警啊泽腮。
好的代碼是讓人看來賞心悅目的御蒲,任何能力不夠或者炫技成分的增加人的閱讀障礙的行為都需要被改進,你能不能三兩句話就能說清楚你自己寫出來的代碼的脈絡诊赊,當然這同樣涉及到你要掌握盡量多的重構方法和重構思維方式厚满。
另外還有一個自我評判的標準,就是你捫心自問一下碧磅,“你寫了這么多代碼碘箍,你曾經(jīng)為之動心過嗎?”你是否寫完之后會忍不住的反復閱讀自己寫完的代碼鲸郊,并連連暗暗驚嘆代碼之美丰榴?
作為一名程序員,希望在你某天離開公司后回想起的若干個開心時刻中秆撮,有一個會是因為你面對自己剛剛出爐了一份讓自己心動的代碼的那份感動四濒,而不要成為上面提到的那個“離開后,公司才知道他有多么重要”的家伙职辨。
04 現(xiàn)在開始盗蟆,刻意練習
你是否發(fā)現(xiàn)自己長期維持著“剛剛好能完成story”的代碼水平,寫了好幾年代碼仍然會被測試人員追著屁股提單舒裤?種種疑惑是因為代碼能力的提高跟你寫了多少年代碼沒有直接關系喳资,你需要做的是刻意練習。
比如把我前面提到的01腾供、02仆邓、03中提到的方法反復練習,或者把你自己琢磨出來的方法分解成一項項的環(huán)節(jié)伴鳖,刻意的去練習节值,從測試那里得到反饋,然后不斷加以改進黎侈,慢慢你就會從一個整天被測試人員追著跑的人,變成發(fā)現(xiàn)自己很容易就能達到質(zhì)量過程標準的人闷游,再慢慢就會發(fā)現(xiàn)你寫出來的代碼測試人員越來越難發(fā)現(xiàn)問題峻汉,最后只要你狀態(tài)好點就能經(jīng)常性的寫出零缺陷的代碼。
其實有些道理我們貌似都知道脐往,但是我覺得離真正懂得還差了兩步休吠,第一就是你需要親身去經(jīng)歷、踐行這些道理和方法业簿,第二就是你要能夠轉(zhuǎn)述并讓其他人也能夠明白瘤礁。所以最好的學習方式就是親身經(jīng)歷,然后寫下來分享給大家梅尤,這樣才能讓你真正懂得那些你原來認為懂得了其實未必懂得的道理柜思。