有一種至關流行的軟件方法學要求對一個項目分配35種不一樣的角色,包括架構師、設計人員、編碼人員、文檔管理者等。敏捷方法卻背道而馳,只需一個角色:軟件開發者,也就是你。項目須要什麼你就作什麼,你的任務就是與客戶緊密協做,一塊兒開發軟件。敏捷依賴人,而不是依賴於項目的甘特圖和里程錶。程序員
這大概是全棧工程師吧,哈哈哈~算法
惡魔:「出了問題,第一重要的是肯定元兇。找到那個白癡!一旦證明了是他的錯誤,就能夠保證這樣的問題永遠不會再發生了。」架構
在敏捷的團隊中,你們的重點是作事。你應該把重點放到解決問題上,而不是指責犯錯者上面糾纏。單元測試
你能夠從本身先作起。若是一個開發者帶着抱怨或問題來找你,你要了解具體的問題,詢問他你能提供什麼樣的幫助。這樣簡單的一個行爲就清晰地代表你的目的是解決問題,而不是追究責任,這樣就會消除他的顧慮。你是給他們幫忙的。這樣,他們會知道每次走近你的時候,你會真心幫助他們解決。他們能夠來找你把問題解決了,固然還能夠繼續去別處求助。學習
若是你找人幫忙,卻沒有人積極響應,那麼你應該主動引導對話。解釋清楚你想要什麼,並清晰地代表你的目的是解決問題,而不是指責他人或者進行爭辯。測試
天使:把矛頭對準解決問題的辦法,而不是人。這是真正由用處的正面效應。編碼
惡魔:「你不須要真正地理解那塊代碼,它只要可以工做就能夠了。哦,它須要一個小小的調整。只要再結果中再加上幾行代碼,它就能夠工做了。開工吧!就把那幾行代碼加進去,它應該能夠工做。」設計
咱們常常會遇到這種狀況,出現一個Bug而且時間緊迫。快速修復確實能夠解決它——只要新加一行代碼或者忽略那個列表上的最後一個條目,它就能夠工做了。拙劣的代碼工人會不假思索地改完代碼,而後快速轉向下一個問題。優秀的程序員會挖掘更深一層,盡力去理解爲何這裏必需要加一,更重要的是,他會想明白會產生什麼其餘影響。開發
Beware of land mines文檔
在工做壓力之下,不去深刻了解真正的問題以及可能的後果,就快速修改代碼,這樣只是解決表面問題,最終會引起大問題。短時間看,它彷佛是有效的。但從長遠來看,經過幾年的積累,代碼裏有着成千上萬的補丁修復,在這樣髒亂的代碼中添加新的功能或修復Bug,會讓開發者難逃脫髮的噩運。
Don't Code in isolation
孤立很是危險,不要讓開發人員徹底孤立地編寫代碼。若是團隊成員花些時間閱讀其餘同事寫的代碼,他們就能確保代碼是可讀和可理解的,而且不會隨意打補丁的代碼。實行代碼評審,不只有助於代碼更好理解,並且是發現bug最有效的方法之一。
Use unit tests
另外一種防止代碼難懂的重要技術就是單元測試。單元測試幫助你很天然地把代碼分層,分紅不少可管理的小塊,這樣就會獲得設計更好、更清晰的代碼。更深刻項目的時候,你能夠直接閱讀單元測試——它們是一種可執行的文檔。有了單元測試,你會看到更小、更易於理解的代碼模塊,運行和使用代碼,可以幫助你完全理解這些代碼。
天使:「不要墜入快速的簡單修復之中。要投入時間和精力保持代碼的整潔、敞亮。」
惡魔:「你在這個設計上投入了不少精力,爲它付出不少心血。你堅信它比其餘任何人的設計都棒。別聽他們的,他們只會把問題變得更糟糕。」
你極可能見過,對方案設計的討論失控變成了情緒化的指責——作決定是基於誰提出了這個觀點,而不是權衡觀點自己的利弊。咱們來看看對一個明顯的錯誤有哪些常見的反應。
第一種方法是不可能成功的。你那樣指出問題根本不會對他的水平有任何提升,反而會致使他之後不再會提出本身的任何想法了。第二種方法至少觀點明確,但也不會給多少幫助,甚至遭來反駁致使被打臉。而第三種方法,沒有譴責,沒有評判,只是簡單地表達本身的觀點。
在一個須要緊密合做的開發團隊中,若是能稍加註意禮貌對待他人,將會有益於整個團隊關注真正有價值的問題,而不是勾心鬥角,誤入歧途。咱們每一個人都能有一些極好的創新想法,一樣也會萌生一些很愚蠢的想法。
Negativity kills innovation
負面的評論和態度扼殺了創新。咱們每一個人都會有好的想法,也會有不對的想法,團隊中的每一個人都須要自由地表達觀點。即便你的建議不被全盤接受,也能對最終解決問題有所幫助。不要懼怕受到批評。記住,任何一個專家都是從這裏開始的。
你不須要很出色才能起步,可是你必須起步才能變得很出色。
集體決策確實很是有效,但也有一些最好的創新源於頗有見地的我的的獨立思考。若是你是一個有遠見的人,就必定要特別尊重別人的意見。咱們並非建議你限制會議決策,只是你不該該成爲獨斷獨行的首席架構師的傀儡。
能欣賞本身並不接受的想法,代表你的頭腦足夠有學識。
下面是一些有效的特殊技術:
天使:「對事不對人。讓咱們驕傲的應該是解決了問題,而不是比較誰的主意更好。」
惡魔:「若是你發現其餘人的代碼有問題,只要你本身內心知道就能夠了。畢竟,你不想傷害它們,或者惹來麻煩。若是他說你的老闆,更要格外謹慎,只要按照他的命令執行就能夠了。」
假如要你修復其餘人編寫的代碼,而代碼很難理解也很差使用。你說應該繼續修復工做,保留這些髒亂的代碼呢,仍是應該告訴你的老闆,這些代碼太爛了,應該通通扔掉呢?
也許你會跳起來告訴周圍的人,那些代碼說多麼糟糕,但那只是抱怨和發泄,並不能解決問題。相反,你應該重寫這些代碼,並比較重寫先後的優缺點。動手證實(不要只是嚷嚷)最有效的方式,是把糟糕的代碼放到一邊,馬上重寫。列出重寫的理解,會有助於你的老闆(以及同事)認清當前形勢,幫助他們獲得正確的解決方案。
當發現問題時,不要試圖掩蓋這些問題。而要有勇氣站起來,說:「我如今知道了,我過去使用的方法不對。我想到了一些方法,能夠解決這個問題——若是你有更好的想法,我也很樂意聽一聽——但可能會花多些時間。」你已經把全部對問題的負面情緒哦愛豬腦後,你的意圖很清楚,就是尋找解決方案。既然你提出你們努力來解決問題,那就不會有任何爭辯的餘地。這樣會促進你們去解決問題。也許,他們就會主動走近,提供幫助。更重要的是,這顯示出了你的真誠和勇氣,同事你也贏得了他們的信任。
天使:「作正確的事。要誠實,要有勇氣去說出實情。有時,這樣作很困難,因此咱們要求足夠的勇氣。」
鼓起勇氣,能讓你從恐懼中解脫出來
若是你在壓力下要對代碼質量做出妥協,你能夠指出,做爲一名開發者,你沒有職權毀壞公司的資產(全部代碼)。