這段程式是幹嘛滴?

2021-06-26 22:37:03 字數 1449 閱讀 8397

在scipy 2010大會上,一位發言人給我們展示了幾段簡短的**,並且問我們每段**都是做什麼用的。**寫的很明了,但沒有提供上下文的註解。下面的就是這最後一段**:

def what( x, n ):

if n < 0:

n = -n

x = 1.0 / x

z = 1.0

while n > 0:

if n % 2 == 1:

z *= x

x *= x

n /= 2

return z

這個測試是在這天快要結束時進行的,我有些累了。我說不出這段**是幹什麼用的。可後來我發現自己處於很尷尬的境地,其實這段**所實現的演算法我是十分熟悉的。我曾經寫過相同的**,而且還寫在了部落格裡。

這個事件使我改變了對「自我註解」程式的理解。沒有上下文的提示,你很難理解一段**是幹什麼用的,即使是很小一段。

有意義的變數名稱和函式名能給理解程式帶來很大幫助,但一句簡單的注釋帶來的幫助更大。我們不需要那些冗餘的注釋,就像解釋這行**x = 1.0 / x是取乙個數的倒數,我們要的注釋是能解釋這段**是來解決什麼問題的。

這還有個例子,你認為這段**是幹什麼的?

uint what()

很明顯這段**是處理底層問題的 — 它只有一些操作 — 但我們完全不知道它是幹什麼的。

在繼續往下讀之前你最好盡力思考一下這段**。如果你放棄了,那我告訴你,上面的第一段**是來自這裡的,第二段**是來自這裡的

在通常我們的面對面交流中,有很多的資訊是來自口頭表達之外的。我們通常會認為我們的語言表達是最重要的,但是我們的語調,面部表情,肢體語言等傳遞了更多的資訊。程式源**跟這些很相似,我們通常會在裡面隱含著大量的其它資訊。

假設你的同事sam請你幫他審查一下他的**。工作中發生這種情況一般你能得到大量的上下文語境幫助;它們並不是網上的某個隨機的**片段。更特殊的是,你還對sam所工作的專案有相當的了解。你知道sam為什麼希望你幫他看一下他的**。也許他想炫耀一下他引以為豪的傑作,或者他希望你幫他找出乙個bug。你在看他的**之前已經有了相當的了解。

但如果你是個接手人。sam不幸被車撞了,你被要求在sam出院之前維護他寫的**。你很可能會向他的同事抱怨,說他寫的**是如此的糟糕,但他的同事卻不理解你為什麼要這樣說。他的同事會認為sam的**非常的清晰易懂。

再假設你是sam接手人,而且在世界的另一端。你不能跟他的同事很好的交流,你只知道很少的上下文語境。在痛苦的折磨後,你把你修改的程式發回sam的公司。你把你的程式注釋的非常充分,但sam的同事卻抱怨你的**亂極了,你並沒把問題真正的解決。

共事共識比源**注釋更有價值。所以說替換乙個程式設計師的代價是巨大的,即使是他走時留下的是注釋很好的程式。

[英文原文:

link ]

實施是幹嘛的

本人也是乙個面臨就業的菜雞,到處找各個工作是幹嘛的,有什麼前景,今天在查軟體實施是幹嘛的時候,偶遇一帖,我看了之後感覺太有意思了,所以偷過來跟大家分享下,都小聲點 對自己公司產品的了解,如果你自己不了解怎麼去教客戶使用。學習能力,這個我感覺是個人就應該具備,關鍵還是用什麼樣的學習方法。溝通能力,實施...

實施是幹嘛的

本人也是乙個面臨就業的菜雞,到處找各個工作是幹嘛的,有什麼前景,今天在查軟體實施是幹嘛的時候,偶遇一帖,我看了之後感覺太有意思了,所以偷過來跟大家分享下,都小聲點 8軟體實施的任職要求?對自己公司產品的了解,如果你自己不了解怎麼去教客戶使用。學習能力,這個我感覺是個人就應該具備,關鍵還是用什麼樣的學...

實施是幹嘛的

本人也是乙個面臨就業的菜雞,到處找各個工作是幹嘛的,有什麼前景,今天在查軟體實施是幹嘛的時候,偶遇一帖,我看了之後感覺太有意思了,所以偷過來跟大家分享下,都小聲點 8軟體實施的任職要求?對自己公司產品的了解,如果你自己不了解怎麼去教客戶使用。學習能力,這個我感覺是個人就應該具備,關鍵還是用什麼樣的學...