怎樣才算是大神級代碼?
這是知乎上的一個問題,我的回答。怎樣才算是大神級代碼?
我不知道什麼才算是大神級的代碼,我只能談談我對所謂「好代碼」的一些個人認知。
我眼中的好代碼,應該是體現兩個關鍵字:「合理」與「實效」,與之對立的是「抖機靈」。
- 合理
所謂合理,主要是指代碼結構合理,這通常會涉及一些設計模式和最佳實踐的應用,因為遵循這些思路的代碼,其結構往往是比較清晰的。代碼結構的範圍頗廣,也包括代碼風格。比如以下這段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去了……
我的知乎專欄:https://zhuanlan.zhihu.com/guagua
我的個人博客:http://www.2gua.info/
推薦閱讀:
※如何利用python登錄知乎頁面?
※有沒有什麼值得推薦的輕量級Python IDE?
※如何開發Python第三方庫?
※Python的類定義有沒有建立新的作用域?