沒有人會教你的10條編碼原則

2021-10-20 22:45:28 字數 2521 閱讀 3620

目前大多數開發者對於編碼有一種固有印象,認為編碼就是利用計算機語言實現一些複雜邏輯或者數學公式,讓計算機能夠按照我們的指令去完成相應的工作。

誠然,這樣理解沒有任何問題。

但是,真正的編碼技術是不僅寫出機器能夠理解的語言,還要讓人類能夠輕鬆閱讀和理解。

換個角度來看,寫好**就相當於寫乙個好故事。

首先,你需要正確的命名你的變數,就如同故事中的任務一樣。

其次,需要用到一些或深奧、或淺顯易懂的詞彙來讓你的故事表下的更加透徹。

同樣,僅僅在**中使用高階演算法並不能讓你成為乙個好的編碼者!

當我們在現實世界的專案中,與不同團隊和業務部門合作時,需要寫出乾淨可維護的**,甚至,還需要寫出更加優秀的**,使得能夠跨功能工作。

在這篇文章中,我們將看到一些概念和編碼實踐,這些概念和實踐一定能夠長期幫助到你。

今天,我們生活在乙個對技術的依賴性成倍增加的世界裡,各行各業都在自動化、優化和擴大業務規模。

特別是當下工作環境中,資料驅動解決方案的必要性是不可避免的,我們需要考慮用物件導向的程式設計方式來解決業務問題。需要適當的抽象和封裝,向不同層次的業務展示不同層次的可見性。

在商業領域通常講:「客戶只關心結果,不關心演算法!

這裡的客戶是廣義的,任何直接/間接使用你的解決方案的人都是你的客戶,或者內部的、或者外部的。

它可以是合作開發者,專案經理,專案經理,測試團隊,或者實際的客戶本身,這取決於你做什麼。

舉乙個例子,乙個客戶到一杯奶茶店買一杯奶茶,他並不想知道牛奶和水的比例是多少,他想看到的只是乙個結果。

把你的**放在模組中。

與其給乙個很長的指令碼/jupyter筆記本作為你的解決方案,利用import匯入模組。

它的優點是:

如果你對建立自己的python包感興趣,請檢視官方文件。

先建立乙個基本的解決方案。

這將使我們能夠展示一些進展並開始討論,這將有助於你獲得客戶的早期反饋。

一開始就錯,總比最後錯好。

當你作為乙個團隊工作時,對git等版本控制系統有一定的了解是必須的。

這將確保:

另外,有乙個日誌檔案來跟蹤你的進度和錯誤,將大大減少除錯工作。

建立乙個配置檔案,用於啟用/停用解決方案的各種功能,這可以在很多方面幫助我們。

如果我們對同乙個問題有多種可能的解決方案,並且需要測試所有的可能性。

你需要在乙個子模組中除錯乙個問題,它不需要很多其他模組。

如果有乙個即插即用的功能,你可以簡單地停用它們,避免執行那些不需要的模組所花費的時間。

在現實世界的編碼中,最重要的技能之一就是防禦性編碼。

防禦性編碼是一種以**可能的失敗點為目的的程式設計方式。

當你是乙個大型專案的一部分時,你將會和很多其他的開發者合作,你將不得不建立具有外部輸入的模組,這些外部輸入將是原始資料本身或其他模組的處理輸出。

我們需要預料到人為錯誤和現實世界噪音的可能性,並嘗試處理它們。

我們的想法是,我們的解決方案不應該崩潰,如果你的模組無法執行,你應該記錄錯誤並繼續。

特別是當我們在處理ai專案時,由於false positives,一些模組的失敗是意料之中的,這並不意味著**應該終止,這時候就需要你對這些報錯點進行預估,然後做出適當的處理。

因此,做好異常處理是非常關鍵的一部分。

這個不用多說,我們是人,人是容易犯錯的。

無論你是多麼優秀的編碼員,都要時刻接受自己犯錯的可能性。

一旦你完成了乙個模組,休息一下。做一些別的事情,然後回來看看你的**。

你會驚奇地發現,你可以很容易地找到剛才從未想到的錯誤和優化。

因此,這也體現到**評審的重要性。

我一直踐行乙個原則:

提公升**質量最有效的途徑就是:多看別人的**,多讓別人看自己的**!

當你花了大量的時間進行頭腦風暴,學習新技術,解決大量的問題之後,你往往會對它產生感情,因為它是由你的創造力和智慧型創造出來的東西。

誠然,這種激情和創造力會讓你寫出更好的**,解決複雜的挑戰,但也有一些弊端。

你去向你的客戶過度解釋你的演算法之美,而客戶並不真正關心這些。

在乙個不斷發展的商業場景中,任何事情都可能在一天之內發生變化。你會被要求放棄過去一年的一切工作,開始著手乙個新的專案,而對你的**產生感情會讓這一切變得困難。

這聽起來可能很傻,但這是實實在在的事情,即使在這個行業工作了三年多,我有時還是會因為這個問題而掙扎。

最後,要接受這樣乙個事實:完美是無法實現的,只能追求。

無論你覺得今天寫的**有多好,如果你會在乙個月後看它,你可以想到很多方法讓它變得更好。

但只要你追求完美,就會達到卓越的境界。

我在這篇文章中討論的大部分觀點不僅適用於編碼,也適用於生活。

就像賈伯斯說的那樣:

每個人都應該學習電腦程式設計,因為它教你如何思考。

3600 沒有人的算術

time limit 20 sec memory limit 128 mb submit 616 solved 280 submit status discuss 湖北省隊互測 week1 submit status discuss 可以發現,每時每刻新增的元素加入之前元素組成的集合中,新集合內的元...

3600 沒有人的算術

vfk太強了。題目大意 維護一段由集合組成的序列,集合分左右,支援合併操作,求區間內字典序最大的的位置。還有wjmzbmr的 重量平衡樹和字尾平衡樹在資訊學奧賽中的應用 好像是2013年的 思路大致是用平衡樹維護這些集合的相對大小,然後給它乙個實數值表示大小。用平衡樹查詢可以做到logn。最後再用線...

bzoj3600 沒有人的算術

time limit 20 sec memory limit 128 mb submit 1118 solved 452 submit status discuss 湖北省隊互測 week1 submit status discuss 神。神題。具體過程太抽象了。我們考慮如果能有一種方法能快速得到排...