1、版本控制系統(vcs)
vcs也許是計算機課程最大的疏漏。這些課程光記得教如何寫**,但卻往往忘記教學生如何去管理**。每乙個程式設計師都應該懂得利用git或subversion有效地建立repository(倉庫),編輯與提交**,進行分支與合併,了解專案工作流。
2、學會寫作
身為程式設計師要寫的不只有**。你還要寫專案的發布說明,給版本控制寫提交訊息,在系統裡面寫漏洞報告。這些和許多地方都需要清晰有效的文字交流—但這個技能電腦科學卻很少強調。
3、正規表示式
正規表示式本身就是一門語言,每乙個現代程式設計師都要擅長。每一門現代語言都支援正規表示式或者有相關標準庫。如果**需要校驗某字串是否含有5個字元、1個破折號和1個數字,你應該馬上就能寫出/^[a-z]-\d$/。
4、庫的使用
現在已經是2023年,所以沒人需要用正規表示式從url析取主機名了。因為每一門現代程式語言都有執行常用功能的標準庫。
程式設計師需要明白,那些經過開發、測試和除錯的**通常要比自己重新寫的**更好。更重要的是,無需編寫的**實現起來要快得多。
5、sql
很多人的sql都是在工作中學會的。資料庫怎麼會是選修課呢?有不用資料庫的嗎?
把資料存進平面檔案的時代已經結束了。一切東西都要進出資料庫,而sql則是訪問資料的語言。這是一門說明性語言,不是程式語言,所以用它來解決問題時需要新的思考方式。每乙個程式設計師都應該了解資料庫標準化基礎,能夠執行select(及inner、outer join)、insert、update和delete。
6、會用ide、編輯器及cli工具
只懂用鋸子的木匠永遠也無法出師,所以計算機專業畢業的人只懂notepad或pico令人驚詫。程式設計工具幫助操縱**及其他資料,令程式設計師生活變得容易。所以每乙個程式設計師都應該知道命令列、shell指令碼、find、grep及sed的使用。
7、除錯
每乙個程式設計師都應該知道利用互動式偵錯程式或在**中點綴一些輸出語句來除錯程式。通過逐步求精來跟蹤問題的能力實在是太重要了。
8、防錯性程式設計
錯誤總是難免的,哪怕是明星程式設計師也不例外。失控是世界的常態,出錯毫不奇怪。防錯性程式設計正是理解了這個事實。如果東西不會不出錯,我們就不會檢查檔案開啟成功與否,不會檢查客戶id是否合法數字,不用測試**是否允許正確。
程式設計師需要知道,編譯器告警是有用的工具,可讓我們生活得更舒適,而不是要避而遠之的麻煩事。每乙個程式設計師都應該知道為什麼每乙個php程式都要這樣開頭:
set_error_reporting(e_all)
每乙個perl程式都要寫上這些語句:
use strict; use warnings;
9、團隊協作
很少程式設計工作會讓你自己乙個人完成,如果你經常這麼做,智力會受損,表現會變弱。你的**必須與別人的互動或者混合。再有才的程式設計師,如果無法與別人協作,都會給專案造成負面影響,並迅速成為組織的負擔。
10、利用現有**
在學校的時候,每一次作業都是乙個新專案。但現實世界不是這樣的。對於剛工作的人來說,所接到的第一項任務往往是修改**漏洞。然後,再在現有**庫的基礎上為現有系統增加乙個小功能。設計新**那是幾個月後的事情,如果幸運的話。
優秀程式設計師必須知道的32個演算法
1 a 搜尋演算法 圖形搜尋演算法,從給定起點到給定終點計算出路徑。其中使用了一種啟發式的估算,為每個節點估算通過該節點的最佳路徑,並以之為各個地點排定次序。演算法以得到的次序訪問這些節點。因此,a 搜尋演算法是最佳優先搜尋的範例。2 集束搜尋 又名定向搜尋,beam search 最佳優先搜尋演算...
程式設計師必須知道的10大基礎實用演算法
詳細介紹 廣度優先搜尋 戴克斯特拉演算法 dijkstra s algorithm 是由荷蘭計算機科學家艾茲赫爾 戴克斯特拉提出。迪科斯徹演算法使用了廣度優先搜尋解決非負權有向圖的單源最短路徑問題,演算法最終得到乙個最短路徑樹。該演算法常用於路由演算法或者作為其他圖演算法的乙個子模組。該演算法的輸入...
程式設計師必須知道的延遲時間
l1快取 0.5ns 轉移 分支 5ns l2快取 7ns 14倍l1快取 加鎖 解鎖 25ns 訪問記憶體 100ns 20倍l2快取,200倍l1快取 1k位元組壓縮 zippy 3ns 前兆網絡卡上傳送1k位元組 10us ssd隨機讀4k資料 150us 從記憶體順序讀1mb資料 250us...