《高效程序員的45個習慣》-之二

請您在閱讀本文之前,先了解《高效程序員的45個習慣》-之一

每一期都會涉及15個話題,用3期來列出這45個習慣,每次不貪多,貪精,大家如果有空,一定要細細品味這15個習慣。

注意:每一個好的習慣,開頭都會相應有一個唱反調的句子哦。

?

1 做事

“出了問題,第一重要的是確定元兇,找到那個人!一旦證實了是他的錯誤,就可以保證這樣的問題永遠也不會再發生了。”

指責不會修復bug,把矛頭對準問題的解決辦法,而不是人。這是真正有用處的正面效應。

也許你不相信,但確實有些人常常不把解決問題放在最高優先級上。也許你也沒有。先自我反省一下,當有問題出現時,“第一”反應究竟是什么?

一個重大的錯誤應該被當作是一次學習而不是指責他人的機會。

團隊成員們在一起工作,應互相幫助,而不是互相指責。

如果你沒有犯過任何錯誤,就說明你可能沒有努力去工作。

?

2 欲訴則不達

“你不需要真正地理解那塊代碼,它只要能夠工作就可以了。哦,它需要一個小小的調整。只要在結果中再加上幾行代碼,它就可以工作了。干吧!就把那幾行代碼加進去,它應該可以工作。”

拙劣的代碼工人會這樣不假思索地改完代碼,然后快速轉向下一個問題;而優秀的程序員會挖掘更深一層,盡力去理解為什么這里需要加1,更重要的是,他會想明白會產生什么其他影響。

千里之堤,潰于蟻穴,大災難是逐步演化而來的。一次又一次的快速修復,每一次都不探究問題的根源,久而久之就形成了一個危險的沼澤地,最終會吞噬整個項目的生命。

如果有一位團隊成員宣布,有一塊代碼其他人都很難看懂,這就意味著任何人(包括原作者)都很難維護它。請讓它變得簡單些。

?

3 對事不對人

“當L先生在做一個新方案介紹時,下面有人會說‘這樣設計很蠢!都沒有考慮線程安全!’(這也暗示著L先生很蠢)。”

事實上,最適合并且最有效的表達方式應該是“謝謝,L先生。但是我想知道,如果兩個用戶同時登錄會發生什么情況?”

盡力貢獻自己的好想法,如果你的想法沒有被采納也無需生氣;不要因為只是想體現自己的想法而對擬定的好思路畫蛇添足。

?

4 排除萬難,奮勇前進

“老鼠們打算在貓的脖子上系一個鈴鐺,這樣貓巡邏靠近時,就能預先得到警報。每只老鼠都點頭,認為這是一個絕妙的想法。這時一個年老的老鼠站出來說道’那么,誰愿意挺身而出去系鈴鐺呢?’毫無疑問,沒有一只老鼠站出來。當然,這個絕妙的計劃也就這樣泡湯了。”

有時,絕妙的計劃會因為勇氣不足而最終失敗。盡管前方很危險,但你必須有勇氣向前沖鋒,做你認為對的事情。

當你勇敢地站出來時,如果受到了缺乏背景知識的抉擇者的抵制,你需要用他們能夠聽懂的話語表達。“更清晰的代碼”是無法打動生意人的。節約資金、獲得更好的投資回報,避免訴訟以及增加用戶利益,會讓論點更有說服力。

?

5 跟蹤變化

“軟件技術的變化如此之快,勢不可擋,這是它的本性。繼續用你熟悉的語言做你的老本行吧,你不可能跟上技術變化的腳步。”

如果只是掌握了工作中需要的技術并不夠。那樣的工作也許幾年之后就不再有了—它會被外包或者會過時,那么你就將會出局。

迭代和增量式的學習;了解最新行情;參加本地的用戶組活動;參加研討會議;如饑似渴地閱讀。

?

6 對團隊投資

“不要和別人分享你的知識—自己留著。你是因為這些知識才成為團隊中的佼佼者,只要自己聰明就可以了,不用管其他失敗者。”

團隊中的開發者們各有不同的能力、經驗和技術。每個人都各有所長。不同才能和背景的人混在一起,是一個非常理想的學習環境。

一個學習型的團隊才是較好的團隊。

每周,要求團隊中的一個人主持講座。他會給大家介紹一些概念,演示工具,或者做團隊感興趣的任何一件事。你可以挑一本書,給大家說說其中一些特別內容、項目或者實踐,無論什么主題都可以。

?

7 懂得丟棄

“那就是你一貫的工作方法,并且是有原因的。這個方法也很好地為你所用。開始你就掌握了這個方法,很明顯它是最好的方法。真的,從那以后就不要再改變了。”

打破舊習慣很難,更難的是自己還沒有意識到這個問題。丟棄的第一步,就是要意識到你還在使用過時的方法,這也是最難的部分。另一個難點就是要做到真正的丟棄舊習慣。 畢竟,汽車要比馬車車廂強多了。

不是完全忘記舊的習慣,而是只在使用適當的技術時才使用它。

?

8 打破砂鍋問到底

“接受別人給你的解釋,別人告訴你問題出在了什么地方,你就去看什么地方。不需要再浪費時間去追根究底”

要不停的問“為什么”。不能只滿足于別人告訴你的表面現象,要不停的提問直到你明白問題的根源。

問“為什么”,但是要問到點子上。

當你問“為什么”的時候,也許你會被反問:“為什么你問這個問題?”。在提問之前,想好你提問的理由,這會有助于你問出恰當的問題。

?

9 把握開發節奏

“我們很長時間沒有進行代碼復審,所以這周會復審所有的代碼。”

在許多不成功的項目中,基本上都是隨意安排工作計劃,沒有任何規律。那么樣的隨機安排很難處理。你根本不知道明天將會發生什么。

但是,敏捷項目會有一個節奏和循環,讓開發變得更加輕松。Scrum約定了30天之內不應該發生需求變化,這樣可以確保團隊有一個良性的開發節奏。(Scrum是一種迭代式增量軟件開發過程,通常用于敏捷軟件開發。包括了一系列實踐和預定義角色的過程骨架。)

站立會議最好每天在固定的時間和地點舉行,比如說上午10點左右。要養成這樣的習慣,在那時就準備好一切參加站立會議。

?

10 讓客戶做決定

“開發者兼具創新和智慧,最了解應用程序。因此,所有關鍵決定都應該由開發者定奪。每次業務人員介入的時候,都會弄得一團糟,他們無法理解我們做事的邏輯。”

在設計方面,做決定的時候必須有開發者參與。可是,在一個項目中,他們不應該做所有的決定,特別是業務方面的決定。

記錄客戶做出的決定,并注明原因。好記性不如爛筆頭。

?

11 讓設計指導而不是操縱開發

“設計文檔應該盡可能詳細,這樣,低級的代碼工人只要敲入代碼就可以了。編寫代碼的時候,無論你發現什么,絕不能偏離了設計文檔。”

設計滿足實現即可,不必過于詳細。

即使之前已經提交了設計文檔,也還會有一些意料之外的情況出現。時刻謹記,此階段提出的設計只是基于你目前對需求的理解而已。一旦開始了編碼,一切都會改變。設計及其代碼實現會不停地發展和變化。

設計可以分為兩層:戰略和戰術。前期的設計屬于戰略,通常只有在沒有深入理解需求的時候需要這樣的設計。更確切的說,它應該只描述總體戰略,不應深入到具體的細節。

?

12 合理地使用技術

“你開始了一個新的項目,在你面前有一長串關于新技術和應用框架的列表。這些都是好東西,你真的需要使用列表中所有的技術。想一想,你的簡歷上將留下漂亮的一筆,用那些偉大的框架,你的新應用將具有極高的技術含量。”

這個技術框架真能解決這個問題么?(如果需要,先做一個小的原型)

你將會被它拴住么?(一些技術是賊船,一旦你使用了它,就會被它套牢,再也不可能回頭了。我們需要考慮它是開放技術還是專利技術)

維護成本是多少?(維護成本昂貴。我們聽說,有個項目的合同是支持一個規則引擎,引擎一年的維護費用是5萬美元,但是,這個數據庫只有30條規則)

不需開發你能下載到的東西。

新技術就應該像是新的工具,可以幫助你更好地工作,它自己不應該成為你的工作。

?

13 保持可發布

“我們剛試用的時候發現了一個問題,你需要立即修復它,放下你手頭的工作,去修復那個剛發現的問題。不用告訴其他任何人—趕快讓它工作就行了。”

已提交的代碼應該隨時可以行動。

在本地運行測試;檢出最新的代碼;提交代碼。

?

14 提早集成,頻繁集成

“只要沒有到開發的末尾階段,就不要過早地浪費時間去想如何集成你的代碼,至少也要等開發差不多的時候,才可以考慮它。”

敏捷的一個主要特點就是持續開發,而不是三天打魚兩天曬網地工作。特別是在幾個人一起開發同一個功能時,更應該頻繁地集成代碼。

絕不要做大爆炸似的集成。

代碼集成是主要的風險來源。要想規避這個風險,只有提早集成,持續而有規律地進行集成。

?

15 提早實現自動化部署

“沒問題,可以手動安裝產品,尤其是給質量保證人員安裝。”

系統能在你的機器上運行,或者能在開發者和測試人員的機器上運行,當然很好,但是,它同時也需要能夠部署在用戶的機器上。

質量保證人員應該測試部署過程。

從第一天起就開始交付,一開始就實現自動化部署應用。

如果維護安裝腳本變得很困難,那很可能是一個早期警告,預示著—很高的維護成本。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254596.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254596.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254596.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MIME Type的介紹

轉載自: http://www.cnblogs.com/jsean/articles/1610265.html 一、 首先,我們要了解瀏覽器是如何處理內容的。在瀏覽器中顯示的內容有 HTML、有 XML、有 GIF、還有 Flash ……那么,瀏覽器是如何區分它們,決定什么內容用什么形式來…

spring boot之從零開始開發自己的網站

概述 首先要感謝兩位大神,該項目的想法來源自tale和MyBlog。 做了一些改造,增加了一些功能和一些代碼的重構,并且更換了博客主題。 關于項目,對于開發的練手項目,能夠工程化,嚴謹一些。 關于文檔&#x…

halcon深度學習算子,持續更新

目錄Deep Learning 深度學習Classification:分類apply_dl_classifierclear_dl_classifierclear_dl_classifier_resultclear_dl_classifier_train_resultdeserialize_dl_classifierget_dl_classifier_paramget_dl_classifier_resultget_dl_classifier_train_resultre…

python day5--正則表達式

#----正則表達式 import re elink <a href"(.*)">(.*)</a> info <a href"http://www.baidu.com">baidu</a> cinfo re.findall(elink,info) print (cinfo) import re print(re.search (r^a,abc\neee)) #預期結果 ^匹配字符開…

WCF系列教程之WCF客戶端調用服務

1、創建WCF客戶端應用程序需要執行下列步驟 (1)、獲取服務終結點的服務協定、綁定以及地址信息 (2)、使用該信息創建WCF客戶端 (3)、調用操作 (4)、關閉WCF客戶端對象 二、操作實例 1、WCF服務層搭建:新建契約層、服務層、和WCF宿主,添加必須的引用(這里不會的參考本人前面的隨…

《高效程序員的45個習慣》-之三

請您在閱讀本文之前&#xff0c;先了解《高效程序員的45個習慣》-之二。 每一期都會涉及15個話題&#xff0c;用3期來列出這45個習慣&#xff0c;每次不貪多&#xff0c;貪精&#xff0c;大家如果有空&#xff0c;一定要細細品味這15個習慣。 注意&#xff1a;每一個好的習…

負載均衡的那些事?

什么是負載均衡&#xff1f;1、負載&#xff1a;就是后端系統的承載能力。比如同等條件下&#xff0c;一個1核cpu-1G內存的機器的承載能力一般會比8核cpu-8G內存的機器要差&#xff1b;相同配置下&#xff0c;一個cpu利用率為80%的機器比30%的承載能力一般要差等等。2、均衡&am…

Develop內部函數,持續更新

Develop內部函數 目錄Develop內部函數dev_clear_objdev_clear_windowdev_close_inspect_ctrldev_close_tooldev_close_windowdev_disp_textdev_displaydev_error_vardev_get_exception_datadev_get_preferencesdev_get_systemdev_get_windowdev_inspect_ctrldev_map_pardev_map…

短信認證方案,用手機短信進行上網認證如何實現?

WFilter NGF的“Web認證”模塊&#xff0c;提供了一系列的上網認證解決方案。包括如下認證方式&#xff1a;本地用戶名密碼認證AD域用戶名密碼認證企業郵箱用戶名密碼認證Radius用戶名密碼認證微信WiFi認證Facebook Wifi認證除此&#xff0c;WFilter NGF還有一個“其他”的選項…

《高效程序員的45個習慣》-末篇

請您在閱讀本文之前&#xff0c;先了解《高效程序員的45個習慣》-之三。 每一期都會涉及15個話題&#xff0c;用3期來列出這45個習慣&#xff0c;每次不貪多&#xff0c;貪精&#xff0c;大家如果有空&#xff0c;一定要細細品味這15個習慣。 注意&#xff1a;每一個好的習…

【Qt開發】V4L2 API詳解 Buffer的準備和數據讀取

前面主要介紹的是&#xff1a;V4L2 的一些設置接口&#xff0c;如亮度&#xff0c;飽和度&#xff0c;曝光時間&#xff0c;幀數&#xff0c;增益&#xff0c;白平衡等。今天看看V4L2 得到數據的幾個關鍵ioctl&#xff0c;Buffer的申請和數據的抓取。1. 初始化 Memory Mapping …

halcon File文件算子,持續更新

目錄File文件Images圖像read_imageread_sequencewrite_imagedeserialize_imageserialize_imagelist_image_fileparse_filenameMisc混合體copy_filedelete_filefile_existsget_current_dirlist_filesmake_dirread_world_fileremove_dirset_current_dirObject對象deserialize_obj…

Nginx 之一:編譯安裝nginx 1.8.1 及配置

轉http://www.cnblogs.com/zhang-shijie/p/5294162.html 一&#xff1a;基介紹 官網地址www.nginx.org&#xff0c;nginx是由1994年畢業于俄羅斯國立莫斯科鮑曼科技大學的同學為俄羅斯rambler.ru公司開發的&#xff0c;開發工作最早從2002年開始&#xff0c;第一次公開發布時間…

PI校正環節的程序實現推導過程

PI校正環節在經典控制論中非常有用&#xff0c;特別是對負反饋控制系統&#xff0c;基本上都有PI校正環節。1.下面分別說明比例環節和積分環節的作用&#xff0c;以階躍信號為例。①比例環節單獨作用以上分析說明&#xff0c;若只有比例環節的控制系統&#xff0c;階躍響應也是…

XML文檔注釋(C#)

目錄XML文檔編譯器識別的標記添加XLM注釋的方法添加XLM注釋的例子XML文檔 C#可以根據特定的注釋自動創建XML格式的文檔說明。 這些注釋都是單行注釋&#xff0c;但都以三條斜杠開頭 編譯器識別的標記 標記說明<C>把行中的文本標記為代碼&#xff0c;例如<c>int …

vs里根據json快速創建對應類的方法

有時候,我們在調用別人接口的時候,服務端返回了一個json格式的字符串,我們要獲取json里面的數據的話一般有兩種方式: 1.通過正則 2.反序列化成一個對象 第一種方式這里不再多說,主要說一下第二種,(為什么呢&#xff0c;你看到后面 你也會喜歡上第二種) 有人肯定會說, json字符串…

德魯克的《卓有成效的管理者》

是一本很好的書&#xff0c;對我有諸多的啟發&#xff0c;這本書我在短期內連看兩遍呢。 現將一些我覺得有啟發性的句子發給大家分享。 1. 一個人的有效性&#xff0c;與他的智力、想象力或知識之間&#xff0c;幾乎沒有太大的關聯。有才能的人往往最為無效&#xff0c;因為他們…

人工智能之基于face_recognition的人臉檢測與識別

不久乘高鐵出行&#xff0c;看見高鐵火車站已經實現了“刷臉進站”&#xff0c;而且效率很高&#xff0c;很感興趣&#xff0c;今天抽時間研究一下&#xff0c;其實沒那么復雜。 我基本上是基于https://github.com/ageitgey/face_recognition上的資料和源碼做一些嘗試和試驗。 …

iOS 升級https的方案選擇

我的選擇是將UIWebView統一替換為WKWebView WKWebView AFN SDWebImage https的支持之前的博客都有涉及轉載于:https://www.cnblogs.com/Jusive/p/6867531.html

預處理指令(C#)

目錄預處理指令簡介#define、#undef#if、#elif、#else、#endif#warning、#error#region、#endregion#line、#line default#pragma預處理指令簡介 微軟對預處理指令解釋鏈接 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/preprocessor-directives/index…