挨踢項目求生法則(5)——編碼篇

摘要程序員

有一句古語「少壯不努力,老大作IT」,作IT確實挺悲劇的,但最悲劇的是作碼農(程序員)!爛代碼直接產出來軟件,而爛代碼是怎樣產生的呢?是爛程序員嗎?大部分程序員是追求進步和高質量代碼的,每每是爛的管理方式、無節操的項目工期而致使程序員不知所措、疲於奔命、爲趕工而寫代碼。當加班成常態,你還跟我談什麼代碼質量呢!算法

 

什麼叫挨踢項目?

IT項目,特別是軟件開發項目,都屬於「挨踢」項目的範疇。挨踢項目的幾大特色:
1.需求不肯定。
2.技術不肯定。
3.工期限死。
4.預算限死
兩大不肯定和兩大限死,你想不「挨踢」都難!數據庫

 

「無節操」的加班編程

某公司有個加班龍虎榜,每週按照加班的總時長進行排名,加班時間最多的就是狀元,而後是榜樣、探花。其實沒有誰這麼變態要打進三強,但大部分人不想本身常常出如今榜尾,由於讓領導看見了不是很好,有可能會致使飯碗不保,因此只能「自覺」加班!因而加班成了屢見不鮮……架構

某創業公司的老闆搞了個「獎罰分明」的激勵制度,任務分派下來若是能提早完成,提早時間越多,獎勵越多;相反,若是任務推遲完成,推遲越多懲罰越多。結果你們都懂的,這些任務基本都是 mission impossible,「提早完成」須要人品大爆發,「推遲完成」是正常現象,程序員們的薪金都被扣得差很少了,再推遲的話就要倒貼公司了!框架

一我的一天當中,能高度集中精神的工做時間有多長呢?你能夠自測一下,個人答案是6小時,偶爾能夠爆發到7-8小時。數據庫設計

若是不用加班,按一天工做8小時算,若是其中有6小時能高度集中精神工做,其實已經很不錯了!ide

若是加班呢?我告訴你,本來還有6小時的高效工做時間,立刻就會減小!加班越長這6小時減小得越多,若是加班時間屢見不鮮,那麼這6小時就會變成零!工具

軟件研發不是體力活,是高強度的智力運動,但願管理者要清楚明白這個軟件研發的客觀規律,咱們不能違背這個天然規律。低效率的加班只能是一種心理安慰(這個心理安慰只對領導有效),只能帶來更多的問題。開發工具

 

「奔放」的項目管理者

領導要K人,通常會把要K的對象叫進會議室,而後關上門來K,開門後就好像沒有發生過任何事情同樣,門外的人一概不知道發生了什麼事情。(PS:這裏說的K不是指打人噢,而是批評,俗稱罵人。)

可是有些領導很「奔放」,直接當衆K人,有些郵件K,但這個郵件會抄送項目組全體甚至全體員工!我運氣比較好,尚未遇到過「奔放」老闆,但萬一你運氣好,遇到了被領導「奔放」地K了一頓,你會怎樣呢?固然你要這樣想:這個領導其實算不錯的了,在「陽光」下K你,若是他來「陰」的,豈不是更恐怖!

悶騷、靦腆、臉皮薄、心靈弱小,是程序員的特色,通常的程序員是接受不了「奔放」的管理模式的……

 

保命四招

若是你遇到「極端狀況」,後面介紹的法則都不會適用,你要用的是這保命四招。

什麼是「極端狀況」呢?

那就是相似前文提到的「無節操的加班」和「奔放的項目管理者」這些狀況,固然不限於這些狀況,由於沒有最慘只有更慘!

如下是保命四招: 

1)抱怨有益健康。

有人說抱怨沒有用,但若是不抱怨你會憋死,因此你須要宣泄,你能夠約朋友吃飯喝酒齊齊訴苦,這樣纔能有益身心。但要注意抱怨並不能解決問題,不要沉迷抱怨噢!

2)忍一時風平浪靜,退一步死無全屍。

工做中遇到不公想發做,你必定要用第二招:忍一時風平浪靜,退一步死無全屍!要忍但不要退,要用耍太極的方式來推擋一些事情,不要累死本身便宜了別人。

3)自我增值纔是硬道理。

增長你的價值就是增長你的談判籌碼,這就是第三招。我曾經和領導直接電話對罵,我竟然沒事,由於當時公司須要我完成這個項目,我有恃無恐!你能夠嘗試在公司爆發一下,測一下你的價值,若是爆發完你沒事,說明你對公司的重要性不錯。但若是出事你不要找我噢!我當年敢幹這些出格的事情,是由於我年少無知、血氣方剛,而且自覺得本身很牛B!自我增值讓你有更多選擇,能幫助你選擇更好的工做。

4)我只想將工做作好!——這不可取,由於這是你辛苦的根源。

在「極端環境」下,好的工做態度是不受歡迎的,只能變成折磨你本身!作好工做不是你一我的的事情,咱們沒有這麼強大,咱們只能順勢而爲。不少事情咱們改變不了,但咱們能改變本身。我不是鼓勵消極的工做態度噢,這是在你由於各類緣由還不能選擇更好的工做機會時的過渡方法,有好的工做環境時,你就須要從新樹立「我要將工做作好」的態度!

 

面對「極端狀況」我也沒有什麼好招,前面的內容實在是太多負能量了,實在有點「兒童不宜」!

下面將會介紹「正常狀況」,「正常狀況」固然也會存在不少問題,但這些問題都是有機會解決的,後面的內容都是正能量滴,是「老小咸宜」滴噢!

 

犧牲質量能提高進度嗎?

項目管理基礎知識中提到,項目管理主要管成本、進度和質量,咱們不可能用很低的成本、很快的進度和很高的質量來完成項目,也就算俗稱的「多快好省」地完成項目是不可能的。咱們的軟件項目成本是卡死的,進度也是很緊的,因此咱們只能稍微下降質量來保證進度,這樣的邏輯合理嗎?

實際工做中咱們其實就是進度優先,但仍然有不少加班。忽視質量其實並不能帶來更快的進度,而是更多的加班!

咱們爲何會加班?咱們的加班大部分緣由是要返工,或者是前面沒有發現問題後期問題才爆發,簡言之就是前面工做質量不過關,致使後續更大的工做量。工做質量包括需求的質量、設計的質量、代碼的質量等等。重視質量反而會加速項目進度!咱們須要定下項目的基本質量要求,想清楚才動手,一步一個腳印地作好項目。

 

代碼的重要性

我認爲項目中是兩類文檔是必須的,那就是需求和代碼!有人可能會更絕,必須的文檔只有一種,就是代碼!沒有代碼就編譯不出軟件,其餘文檔能夠不要,但代碼必須有。而程序員是寫代碼的,非程序員是寫其餘文檔的,因此除了程序員,其餘角色也能夠一概不要。其實上述說法是成立的,我曾經試過只有我和另一位程序員的狀況下,不須要其餘人就咱們兩個程序員,咱們就能作好一個軟件而且這個軟件的銷量還能夠。

代碼及代碼的質量實際上是至關重要的,但不少項目多是這樣的一種現狀:不抓代碼質量,軟件問題多多,但一抓代碼質量,項目立刻就會死翹翹! 

如何解決上述困境呢,下面的求生法則可能有用! 

 

法則1:問題根源80%在於需求

程序員的工做職責是什麼?這個是單選題,你選擇哪一個?

A)寫代碼;
B)完成領導分派的任務;
C)實現自我價值;
D)實現客戶價值;

標準答案是:D

客戶價值就是經過需求來體現的,不要扎頭就寫代碼,要弄清楚需求。需求文檔實際上是必須的,不過文檔的載體和格式是不限的。

 

法則2:拒絕需求變動

某項目原定一個月發佈某版本,但這個版本延遲大半個月仍是發不出來。原來客戶喜歡提需求變動,而且越接近發佈日期,變動的要求就越多,客戶但願這個版本包含的內容越多越好,而項目組爲了避免得客戶答應了這些要求。不要怕得罪客戶,要拒絕這樣的需求變動,我會跟客戶這樣說:歡迎需求變動,但這個版本不考慮,下個版本再考慮。

這個法則並非要你拒絕全部需求變動,而是某個一迭代中要實現的需求是穩定的,不適合再改的。盲目順從客戶最終並不會讓客戶滿意,而程序員們由於要應對這些需求變動,須要反覆改代碼,這樣是很打擊士氣的。

需求變動是不可能沒有的,咱們須要:

1)反省需求分析的工做質量,請留意法則1;
2)原則上拒絕當前版本的需求變動,下個版本再考慮;
3)萬一遇到重大的需求變動確實須要立刻實施,那能夠停掉當前版本從新規劃,必定不能用「逐步添油」的方式工做。(出現這種狀況,一般是由於需求分析工做質量不過關致使的,因此法則1很重要啊!)

 

法則3:程序員的工做須要有靈魂

咱們先看看什麼叫程序員工做「沒有靈魂」:

1)不知道本身爲何客戶服務;
2)不知道項目的遠景;
3)只有項目經理操心項目,而程序員以「打工」的心態工做;
4)程序員任何改進意見都聽不進,能寫完代碼就阿彌陀佛了!

那怎樣才能讓程序員「有靈魂」呢?

1)讓程序員理解需求,至少本身作的部分要理解;
2)讓程序員先行本身估算本身的工做,項目經理給出指導;
3)尊重程序員的實際水平,想辦法讓他引爆小宇宙,而不是靠強壓。

 

法則4:寫代碼也是在作軟件設計

程序員們會用「碼農」來自嘲本身,其實寫代碼是搞技術含量的活,寫代碼其實同時也在作軟件設計工做,包括軟件的架構設計、詳細設計甚至是數據庫設計!

當你用開發工具規劃solution、project的時候,當你在project中劃分文件夾的時候,你其實就是在作架構設計;當你新建一些類文件,思考類的職責而且有註釋寫下來,當你寫下方法的定義(暫時沒有實現的代碼)的時候,你其實就在作詳細設計;當你分析各類業務對象後,在數據庫中去創建表、字段、表關係的時候,當你在代碼中設計實體類的時候,你其實在作數據庫設計及實體類設計。

因此咱們不是碼農,優秀的程序員其實也是優秀的軟件架構師、軟件設計師以及數據庫設計師!做爲程序員來講,不要將本身定位爲碼農,你能夠站得高作得更好;做爲程序員的領導來講,不要將程序員定位爲低技術含量的工種,程序員實際上是最重要最有技術含量的工種。

 

法則5:關注程序員的須要

問:工做了這麼久,領導找過你談心沒有?

答:有啊,常常「談心」呢!談工做,談進度,談缺陷,談作完了沒有!!

我說的「談心」是指領導和員工談員工的職業發展,讓員工說出他的想法,領導在公司層面給予支持和幫助。

程序員有什麼須要?無非是如下須要:

1)薪金的須要;
2)我的職業發展的須要;
3)生活上的須要。

薪金的須要一般是不能知足的,做爲程序員領導的你可能也對本身的薪金不滿,更談不上讓你去漲程序員的薪金了。但領導是否是能夠問問程序員的職業須要呢,他想學什麼技術,作什麼類型的項目等等,在工做安排上給予必定的照顧呢?在生活上是否是能夠容許程序員稍微彈性上班呢?有些家庭生活上的事情可讓程序員先出處理一下,不用他請假更加不會扣他的工資,程序員沒有後顧之憂才能作好工做啊。程序員多是地球上最善良的一類人,他們會滴水之恩涌泉相報!

 

法則6:男女搭配效率加倍

有些公司比較「變態」:不招聘女生,若是要招聘就必定要找已婚已育的!還冠上堂而皇之的理由:女生出差不方便啊!女生加班不方便啊!

有些領導比較「歧視」女生:女孩子嘛,不適合幹什麼技術活,作一下測試或QA就行了。

女程序員原本就少,加上以上的緣由,更加是少上加少!

女生的威力特別是女程序員的威力是很強大的,不只僅是這位女程序員自身的做用,更重要的是女程序員對男程序員發生的化學做用!若是男程序員原來的戰鬥力是10,若是有女程序員一同工做,那麼男程序員們的戰鬥力至少能夠上升到15。因此那些老闆們太不會打算盤了,不要只看着女生生孩子的那段時間,請一位優秀的女程序員,絕對是一個超值的投資!

 

法則7:編碼規範不是擺設

問:大家有編碼規範嗎?

答:有!

問:誰能說出編碼規範中最有用的幾條要求?

答:……

很多公司的編碼規範是「空降」的,或者是你來到公司後就一直知道有編碼規範這回事,但一直沒有見過這份文檔,更加沒有在工做中執行過。

「空降」的意思是所謂的參考業界標準「抄」過來的一份文檔,或者從某CMMI多少級的公司中「抄」過來的文檔,「空降」文檔註定就是要被擺上神臺供奉的,不能落地的。

有效有用的編碼規範能夠很簡單,最開始的時候能夠一頁紙就搞定!咱們只須要總結出當前編碼中出現的問題,針對性地定出規範,只制定當前能執行的規範,不能執行的不要寫進去,這樣很快一頁紙的規範就能夠定出來,而且你們都願意執行。規範不在於長短,不在於參考了什麼「偉大」的標準,關鍵是能不能執行!

全部的改進都應該遵循按部就班、持續改進的原則,這樣一頁紙的規範將會逐漸添加更多的內容,這樣也代表了咱們的編程水平正在持續提高。

 

法則8:提高編程基本功

有些程序員是寫不出排序算法的,更悲劇的狀況是在一堆數中找出最大的算法也寫不出來。

兩個途徑解決編程基本功的問題:

1)把好入職關,增長編程基本功的筆試題。
2)加強代碼評審。

代碼評審應該在早期就作,高手評初手,評審主要目的不只僅爲了發現和解決問題,更重要的是提高程序員的水平。程序員水平提高後,評審就能夠減小次數甚至不須要。

 

法則9:零缺陷意識

MSF(微軟解決方案框架)提到的「零缺陷意識」很是有價值!零缺陷代碼可能真的很難寫得出來,但零缺陷意識必須有。

做爲項目管理者來講,你要知道零缺陷的代碼才能準確預測項目的進度;做爲程序員來講,你要把這個當成基本的素養,對本身提出嚴格的要求,不要盲目求快,不要說反正後面有測試,若是程序有問題,那就是測試沒有作好。

做爲程序員來講必須作到如下兩點的最基本質量要求:

1)你的程序能編譯經過;
2)你的程序能經過「冒煙測試」。

經過冒煙測試是指:

1)模擬用戶的最多見的正常操做,程序不會出錯。
2)點擊全部能點擊的按鈕、菜單等,程序不會出錯。

這個冒煙測試是程序員本身作的,程序員們要本身擦乾淨本身的屁股噢!

 

法則10:避免「外包人頭」

某些大公司大國企爲了所謂的下降研發成本,會使用一些「臨時工」,這些臨時工和正式工一同工做,一般正式工幹主要的崗位,而臨時工幹碼農的工做。這些臨時工是一些合做方公司以「外包人頭」的方式租給僱主,臨時工是合做方的正式員工,但在僱主那裏他們就是「臨時工」。

將軟件研發工做特別是編碼工做當作是低技術含量的事情,將程序員當作「工人」,這自己就是違背軟件研發特色和客觀規律的不合理作法!對於一些公司這樣的作法,我是強烈噴之的。這樣的作法其實不會下降成本,反而是增長很多成本。若是你是公司的管理層,強烈建議你不要採用這樣的作法,說得難聽一點,這是「反人類」的作法,並且這其實並非「同工同酬」,實際上是違法的作法。

試想一下,「臨時工」會有怎樣的戰鬥力?不是他能力不行,而是體制上的問題,他願意盡心盡力嗎?軟件研發是高技術含量的團隊工做,不是靠人多就搞定的。假設企業本來打算使用100名臨時工,你不如招聘20名正式員工,20人的正式員工比100人的臨時工的工做效率會更高,但總成本節省很多。企業還能夠將節省的成本拿一部分出來,用來提高你們的薪金,這樣總體效率會提高很多。

若是你的團隊中已經有「臨時工」了,你也沒法改變領導層僱傭臨時工的用工策略,你該怎樣辦呢?

相信你在工做中已經能體會到,你是很難調動「臨時工」的工做積極性的,固然會有少數「臨時工」是不錯的。你能夠參考「法則5:關注程序員的須要」,程序員是一種你對我好、我對你更好的善良物種。

 

小結

有那麼一句話:找老公就要找程序員!

這句話不太對,你當女程序員不存在啊,這句話應該是:找老公就要找男程序員!

那找老婆呢?女程序員!遇到單身女程序員,必定要儘早動手,由於她很搶手。

程序員們是可愛的羣體,編碼是高難度高技術含量的活,但願咱們的編碼工做能變成富有激情和戰鬥力的工做吧!


我是CSDN博客之星2013候選人之一,若是你喜歡個人文章,歡迎投我一票!

投票連接:

http://vote.blog.csdn.net/blogstaritem/blogstar2013/u010825142


謝謝!



做者:張傳波

創新工場創業課堂(敏捷課程)講師

軟件研發管理資深顧問

CMMI首席專家

《火球——UML大戰需求分析》做者

www.umlonline.org創辦人

相關文章
相關標籤/搜索