怎樣才算是大神級代碼?

這是知乎上的一個問題,我的回答。怎樣才算是大神級代碼?

我不知道什麼才算是大神級的代碼,我只能談談我對所謂「好代碼」的一些個人認知。

我眼中的好代碼,應該是體現兩個關鍵字:「合理」與「實效」,與之對立的是「抖機靈」。

  • 合理

所謂合理,主要是指代碼結構合理,這通常會涉及一些設計模式和最佳實踐的應用,因為遵循這些思路的代碼,其結構往往是比較清晰的。代碼結構的範圍頗廣,也包括代碼風格。比如以下這段Python代碼:

def __init__(self, x, y, angle, radius, circumference, area):n self.x = xn self.y = yn self.angle = anglen self.radius = radiusn self.circumference = circumferencen self.area_of_a_circle = arean

是不是很多人就是要排成這樣才滿足呢?但這有什麼意義呢?如果你要修改個別單詞、添加個別屬性,你得調整多少空格按鍵啊?我寧願採取相對較小的代價,即臨近的才適當考慮對齊,即兼顧美觀又兼顧效率(甚至我就不多加一個空格):

def __init__(self, x, y, angle, radius, circumference, area):n self.x = xn self.y = yn self.angle = anglen self.radius = radiusn self.circumference = circumferencen self.area_of_a_circle = arean

反正我覺得這樣才比較合理了。

再看一個Python的Lambda的例子:

l = map(lambda x: x * 10,n filter(lambda x: x%2 != 0, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))n

這一眼頓時眼花,如果再多兩個Lambda,那就更暈了。可以適度改一改:

def seek_nums(nl):n return [x for x in nl if x%2 != 0]nnl = map(lambda x: x * 10,n seek_nums([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))n

這就清楚多啦。難怪Guido對Python的Lambda特性多不感冒。

合理的代碼,不僅能持續保持自己的編碼舒適度及熱情,還能對別人好一點。

  • 實效

實效需要考量語言特性、演算法複雜度、並發等,同時還不耽誤穩定性,脆弱的代碼是談不上「實效」的。

比如以下代碼:

在這裡,你必須懂得語言的多種處理方式的一般規律,也就是各種長短特點等,才能採取合適的處理方式。一位大神,首先必須對某門語言特別嫻熟,當然,演算法、數據結構等知識、經驗,同樣重要啦。

  • 最後

大神的代碼絕不是用「抖機靈」來衡量,什麼最古怪、最驚世駭俗、最極客的一行代碼,當然是有點水平,但娛樂娛樂就好,我想大神是不會在意這些的。大神的代碼,精髓在於思路,體現出異於常人且優於常人的思路。

而且,大神在寫代碼的過程中,沒有一個是直奔「成為大神」去的,而是不斷地解決問題(業務特長領域),學習知識(知識深度和廣度),久而久之就成了那位傳說中的「賣油翁」……

隨便寫了點,思路略凌亂,總覺得還有千頭萬緒。寫Python去了……

我的知乎專欄:zhuanlan.zhihu.com/guag

我的個人博客:2gua.info/


推薦閱讀:

如何利用python登錄知乎頁面?
有沒有什麼值得推薦的輕量級Python IDE?
如何開發Python第三方庫?
Python的類定義有沒有建立新的作用域?

TAG:Python | Python开发 | 编程 |