風雨20年:我所積累的20條編程經驗

 原文作者喬納森·丹尼可(Jonathan Danylko)是一位自由職業的web架構師和程序員,編程經驗已超過20年,涉足領域有電子商務、生物技術、房地產、醫療、保險和公用事業。正如喬納 森在文中所言,本文適合剛畢業的大學生和剛入門的程序員。如果你已是高級開發人員,或許你在本文中看到自己的身影。

  從11歲時,我就一直在編程,并且一直都很喜歡技術和編程。這些年來,我積累了一些艱難又容易的經驗。作為一名程序員,你或許還沒這些經驗,但我會把它們獻給那些想從中學到更多的朋友。

我會持續更新這些經驗,我可能還會有更多的感想,但就我這20年來看,我想下面這個列表中基本不需要增添額外的東西了。下面就是我至今最難忘的經驗。

1. 估算解決問題所需要的時間。不要怕,承認吧!我曾見過一些程序員為了解決一個特殊問題而坐在顯示器前面8小時。為自己定一個時間限制吧,1小時、30分鐘或甚至15分鐘。如果在這期間你不能解決問題,那就去尋求幫助,或到網上找答案,而不是嘗試去做“超級堆碼員”。

2. 編程語言是一種語言,只是一種語言。隨著時光推移,只要你理解了一種語言的原理,你會發現各種語言之間的相似之處 。你所選擇的語言,你應該覺得“舒服”,并且能夠寫出有效(而且簡潔)的代碼。最重要的,讓語言去適應項目,反之亦然。

3. 不要過于注重程序的“設計模式”。 有時候,寫一個簡單的算法,要比引入某種模式更容易。在多數情況下,程序代碼應是簡單易懂,甚至清潔工也能看懂。

4. 經常備份代碼。在我年輕時,我就有過因硬盤故障而丟了大量代碼的經歷,這經歷很恐怖的。只要你一次沒有備份,就應當像有著嚴格的期限,客戶明天就需要。此時就該源碼/版本控制軟件大顯身手了。

5. 承認自己并不是最頂尖的程序員 - 知不足。我常想,我對編程了解已足夠多,但是總有其他人比你優秀。正所謂,“一山總比一山高”。所以,向他們看齊吧!

6、學習再學習。正如第5點所說,我經常會在手里拿一本計算機或編程相關的雜志或書(不信,可以問我的朋友)。誠然,總有很多你不知道的技術,你可以從中學習以保持不落后。如果你有一種靈巧的方式來獲取你需要的新技術,那你每天都應該堅持學習。

7. 永恒的變化。你 對待技術/編程知識,就應像你對待股票一樣:多樣化。不要在某一特定技 術上自我感覺良好。如果那種技術或語言已經沒有足夠支持,那你還不如現在就開始更新你的簡歷,并啟動培訓新計劃。我能保持前行的主要原則是什么呢?至少了 解兩到三種語言,所以,如果某種語言過時了,你在學習新技術的時候還可以依靠另一種語言。

8. 提攜新人。協助并且培養初級/入門的開發人員學習優秀的編程方法和技巧。也許你還不知道,在幫助他們向更高一層前進時,你自己也在向更高一層提升,你會更加自信。

9. 簡化算法。代碼如惡魔,在你完成編碼后,應回頭并且優化它。從長遠來看,這里或那里一些的改進,會讓后來的支持人員更加輕松。

10. 編寫文檔。無 論是Web服務的API,還是一個簡單的類,你盡量編寫相應文檔。我曾經引以為豪的代碼注釋,因過度 注釋而有人指責。給三行代碼加一行注釋,只需要你幾秒時間。如果那是一個比較難以理解的技術,千萬別擔心過多注釋。如果你能很好做好自己的工作,大多數架 構師、后備程序員、支持組都會感激你。

11. 測試、測試再測試。我是一名黑盒測試粉絲。當你完成編碼后,你“被認可”的時候就開始了。如果你們公司有QA部門,如果你的代碼中有錯誤,那你得到的評論,會比項目經理還多。如果你不徹底測試自己的代碼,那恐怕你開發的就不只是代碼,可能還會聲名狼藉。

12. 慶祝每一次成功。我見過很多程序員在解決編程技術難題后,會和同伴握手、擊掌或甚至手舞足蹈。每個人在生命中都會碰到“頓悟”。如果一個程序員高興地跑來叫你去看他的非凡代碼,也許你已經看過這樣的代碼100遍了,但你也應該為了這個家伙而慶祝第101次。(編者注:《慶祝成功的九種方式》。)

13. 經常檢查代碼。 在公司,你的代碼要經常檢查(包括自查和其他同事檢查)。不要把別人的檢查,看成是對代碼風格的苛求。應該把它們看作是有建設性的批評。對個人來說,經常檢查你的代碼并且自問,“我怎樣才能寫得更好呢?” 這會讓你加速你的成長,讓你成為一個更優秀的程序員。

14. 回顧你的代碼。在 看到自己以前的代碼時,通常會有兩種方式:“難以至信,這代碼是我寫的”和“難以至信,這代碼是 我寫的”。第一種往往是厭惡的語氣,并在想如何改進它。你也許會驚嘆,舊代碼也能復活成為一種更好的程序,甚至是一個完整的產品。第二種通常帶著驚奇和成 就感。開發人員應該一到兩個自己完成的項目成果,能讓眾人不禁而立并注目而觀的項目。同樣,基于你優越的編程能力,你可以把過去的程序或項目拿出來,把它 們更新為更加優秀的產品或想法。

15. 幽默是不可缺的。在我20年的開發生涯中,我還沒有碰到哪位程序員是沒有幽默感的。實際上,干我們這行,幽默是一項必備品。

16. 謹防那些無所不知的程序員,不愿分享的程序員,還有經驗不足的程序員。當你遇到這幾種程序員時,你自己要謙虛。無所不知的程序員,更想當一個英雄而不是團隊成員;保守的程序員則是在編寫著他們獨享的代碼;而經驗不足的程序員則會每十分鐘就來問你一下,當代碼完成后,代碼已經是你的,而不是他們。

17. 任何項目都不會那么簡單。朋 友、家人和同事曾請求我倉促做一些事情,倉促做一個程序或者網站。對于這樣的事,應該 從雙方做計劃,才能做出令兩方都會滿意的東西。如果某人起初只是需要一個使用Microsoft Access的、只有有3個頁面的網站,但來就很可能變成一個有15個頁面的網站,并使用SQL Server,有一個論壇,還有一個定制的CMS(內容管理系統)。

18. 任何時候不要想當然。假如你承接一個簡單的項目,你可能會認為某個部分可以輕松完成。千萬別這樣想!除非你有一個類、組件、或者一段已經寫好的代碼,并且在現有的項目已經測試通過。不要認為這將是很容易的。

19. 沒有已經完成的軟件。曾經有一位程序員告訴我,沒有軟件是已經完成的,它只是“暫時完成了”。這是明智的忠告。如果客戶還在使用你寫的程序,并經受了時間的考驗。如果有機會,你仍在更新它,這并不是什么壞事,這讓你不斷地前行。

20. 耐心是一種美德。當 客戶、朋友或家庭成員用電腦的時候,他們也許會受挫,進而想砸電腦,或氣沖沖地離開。我一直在 告訴他們,“是你掌控電腦,不是電腦掌控你。”對于用作編程的電腦,你要有一定的耐心。一旦程序員知道問題所在后,他們就會站在電腦的角度看問題,并且說 “哦,這就是為什么它是這樣做。”


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

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

相關文章

JS跨域(ajax跨域、iframe跨域)解決方法及原理詳解(jsonp)

這里說的js跨域是指通過js在不同的域之間進行數據傳輸或通信,比如用ajax向一個不同的域請求數據,或者通過js獲取頁面中不同域的框架中(iframe)的數據。只要協議、域名、端口有任何一個不同,都被當作是不同的域。 下表給出了相對 http://store…

xenserver 安裝新硬盤_給Xenserver添加新硬盤

首先我們進入到xenserver的Console界面.然后按下enter進入命令模式,接下來.咱們先看看硬盤有沒有存在輸入fdisk -l出現如下提示:Disk /dev/sda: 500.1 GB, 500107862016 bytes255 heads, 63 sectors/track, 60801 cylindersUnits cylinders of 16065 * 512 8225280 bytesDevi…

go-study

package (包) 一個目錄下面所有的.go文件的包名必須相同. 包名一般和目錄名相同(是約定, 不是強制), 包名都小寫main包是一個特殊的包名, 在main包中, 必須包含func main()函數導入包(import)的時候, 使用的是包所在目錄的路徑, 路徑中不用包含包的名字, 在使用包的時候,直接用…

什么是系統安全狀態

指系統能按某種順序如(P1,P2,...,Pn),來為每個進程分配所需要的資源,直至最大需求,使每個進程都可以順序完成。若系統不存在這樣一個安全序列,則稱系統處于不安全狀態。

SQL零基礎學習筆記(一)

真的不知道我寫了這么多不同的的學習筆記又沒用。。開始SQL零基礎學習筆記 百度百科:SQL(Structured Query Language)結構化查詢語言,是一種數據庫查詢和程序設計語言,用于存取數據以及查詢、更新和管理關系數據庫系統。同時也是數…

WPF 列表虛擬化時的滾動方式

ListBox的滾動方式 分為像素滾動和列表項滾動 通過ListBox的附加屬性ScrollViewer.CanContentScroll來設置。因此ListBox的默認模板中&#xff0c;含有ScrollViewer&#xff0c;ScrollViewer下存放列表內容 <ScrollViewer FocusVisualStyle"{x:Null}"><Item…

python爬蟲文獻綜述_基于Python下的爬蟲綜述及應用

98 Internet Application 互聯網 應用 引言&#xff1a;如今&#xff0c;大數據已經進入我們的各個領域&#xff0c;我們的工作及應用越來越需要獲取大量的數據。我們可以想象在一張蜘蛛網上沿著我們所需的方向爬取獵物(數據)的感覺。實際上爬蟲就是通過人為的模擬瀏覽器行為&…

HelloWorld新手常見問題

1.顯示錯誤&#xff1a; HelloWorld.java:1: 錯誤: 寫入HelloWorld時出錯: C:\HelloWorld.class public class HelloWorld { ^ 1 個錯誤 解決方法&#xff1a; 將文件轉移至D盤&#xff0c;然后編譯即可。不要放在C盤&#xff01; 2.顯示錯誤&#xff1a; 錯誤: 找不…

淺談HTTPS以及Fiddler抓取HTTPS協議

原文 淺談HTTPS以及Fiddler抓取HTTPS協議 最近想嘗試基于Fiddler的錄制功能做一些接口的獲取和處理工作&#xff0c;碰到的一個問題就是簡單連接Fiddler只能抓取HTTP協議&#xff0c;關鍵的登錄請求等HTTPS協議都沒有捕捉到&#xff0c;所以想讓Fiddler能夠同時抓取到HTTPS和HT…

關于.c和.h 和定義變量的問題

最初調試的時候是因為有個錯誤在wavplay.h文件中 于是我跳到了recorderl.h中:從圖中看到引用了main.h 出現這個問題的具體原因還是不太清楚: 不過我任務是因為: wavplay.h中定義了 __WaveHeader 變量 在main.h文件中引用了wavplay.h 而在wavplay.h中試圖引用main.h里的 __Wa…

halcon中面到面的距離_halcon學習筆記——(8)由標定板得到測量平面位姿-阿里云開發者社區...

如圖&#xff1a;由標定板位姿獲取測量板位姿1.pose_to_hom_mat3d( : : Pose : HomMat3D)把三維位姿轉化為齊次變換矩陣2.hom_mat3d_translate_local( : : HomMat3D, Tx, Ty, Tz : HomMat3DTranslate)相對于新坐標系的平移變換/ 1 0 0 \ / Tx \HomMat3DTranslate HomMat3D *…

進程同步與互斥的區別

并發進程的執行會產生相互制約的關系&#xff1a;一種是進程之間競爭使用臨界資源&#xff0c;只能讓他們逐個使用&#xff0c;這種現象稱為互斥&#xff0c;是一種競爭關系。另一種是進程之間協同完成任務&#xff0c;在關鍵點上等待另一進程發來的消息&#xff0c;以便協同一…

《軟件調試分析技術》學習筆記

《軟件調試分析技術》學習筆記&#xff08;一&#xff09; 今天開始寫寫一些心得體驗。 《軟件調試分析技術》是好友Monster的處女作品。作為一直以的好伙伴&#xff0c;他是我看著長大的&#xff0c;(*^__^*) 嘻嘻……之所以有今天這樣的成績&#xff0c;是與他的努力和天賦…

new Date()時間

var myDate new Date(); myDate.toLocaleDateString()&#xff1b;可以獲取當前日期myDate.toLocaleTimeString(); 可以獲取當前時間擴展&#xff1a;myDate.getYear(); //獲取當前年份(2位)myDate.getFullYear(); //獲取完整的年份(4位,1970-????)myDate.getMonth(); //獲…

什么是對等網絡

對等網也稱工作組。在對等網絡中&#xff0c;計算機的數量通常不會超過10臺。所以對等網絡相對比較簡單。在對等網絡中&#xff0c;對等網上各臺計算機的有相同的功能&#xff0c;無主從之分&#xff0c;網上任一節臺計算機既可以作為網絡服務器&#xff0c;其資源為其它計算機…

python初中必背語法_一些python語法的合集

貼幾道自己做過的py題防止忘了&#xff0c;好像包含的語法還挺多的洛谷1018nn,mminput().split( )oint(input())nint(nn);mint(mm)a[[]];c[[]]for i in range (1,43):a.append([]);c.append([])for i in range (1,43):for j in range (1,43):a[i].append(0),c[i].append(0)b[]f…

微信 {errcode:48001,errmsg:api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]}

{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"} 聲明&#xff1a;是已認證的服務號 這個問題已解決&#xff01;&#xff01; 前置說明 網頁授權獲取用戶基本信息&#xff1a;兩種 scope 域 https://open.w…

解決ubuntu首次安裝Mysql之后,首次登錄出現ERROR 1698 (28000): Access denied for user 'root'@'localhost'的方法

解決步驟&#xff1a; 1.打開終端&#xff0c;輸入sudo vi /etc/mysql/debian.cnf 打開/etc/mysql/debian.cnf文件&#xff0c;顯示如下&#xff1a; 2.mysql -udebian-sys-maint -p 打開mysql 輸入密碼為上圖中password字段 3.修改root密碼 ALTER USER rootlocalhost IDEN…