1. 程式人生 > >談談程式設計習慣

談談程式設計習慣

在2018年12月份的時候,看到一些微信公眾號發了《python八宗罪》之類的文章,大家不知從哪裡得到的稿子,內容完全一樣,也就是換了換題目,一些我覺得還不錯的科技公眾號竟然爭相發表。

來自“新智元”的文章:https://baijiahao.baidu.com/s?id=1620256692823955322&wfr=spider&for=pc

來自“機器之心”的文章:http://www.sohu.com/a/282908451_129720

那幾天網友對這些文章的評論褒貶不一,不過大多數還是持反對態度的,認為作者沒有足夠的程式設計經驗就在這裡大談特談python

以為也就這麼罵罵就過去了,誰知道,在2019年1月份的時候,竟然有個後知後覺的公眾號給這篇文章加上了劇情,看似順理成章地引出了python的八大缺點,然後再換一個題目,繼續發表。面對這樣的公眾號,讀者看了只能呵呵噠

來自“AI科技大本營”的文章:https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/86066022

我在這裡就不說各家公眾號互相抄襲吧,這種事情我也不關心的,我是想借著這篇文章說一說作為一名工程師,應該有哪些好的程式設計習慣。

大家看一下“機器之心”的文章,裡面第三點提到了句法,說python強制使用縮排來區分層次,不像其他語言那樣使用{...},這害的作者要搞一大堆的縮排,降低了程式碼的可閱讀性。作者早就習慣了寫程式不縮排,看到縮排甚是痛苦!

這,是,我,最,無,法,認,同,的,觀,點!

從這個觀點就可以看出,作者其實並沒有什麼程式設計經驗,不知道從哪裡學的幾句程式語言,就在這裡吐槽python,真是欲加之罪,何患無辭啊……

/*******************************說完了我對這些文章的看法,接下來說一說我認為好的程式設計習慣****************************************/

首先,談一談對程式設計的理解吧。

程式設計的首要目的是要實現一個功能,在能實現功能的基礎上,還要追求書寫的規範,甚至要有詳盡的註釋。這個就好比文學創作,不能只是把作者的思想表達出來就完事了,還要該優雅的地方優雅,該通俗的地方通俗。讓別人覺得,這是一件藝術品,而不只是一個功能作品,醜陋的不想多看它一眼。程式設計又何嘗不是一個藝術創作呢!嚴謹的邏輯是基礎,就像大樹的根和樹幹,規範的程式碼以及合理的結構就像那枝和葉,枝繁葉茂了,大樹才能有活力。

接下來,從細節上說一說程式設計的規範吧

1.命名習慣。對於變數和函式的命名,儘量使用英文,完整的英文單詞還是英文縮寫,這個要考慮整體的名稱長度和個人喜好。我一般是混合著用的,在單詞之間有時候會用下劃線當作空格(一般是縮寫和完整單詞之間的區分),有時候會用首字母大寫來區分不同的單詞(一般是一個片語內的單詞)。有一些不好的習慣在這裡也說一下:

(1)我是比較反對使用漢語拼音命名的,因為首先咱們的程式碼有可能會被外國友人看到,或是和你合作的人裡有外國人,總要考慮到國際通用性吧,如果別人看不懂,你程式碼的可讀性豈不是很低了?其次呀,逼格啊!你用漢語拼音命名,別人會認為你不會英語的,會首先想到你可能也就小學畢業,英語詞彙量匱乏還懶得學習,這種不好的印象還是不要有的好。如果你就是碰上自己不會的單詞了,你就查字典嘛,或是看一下相關文獻,看看外國人一般都怎麼說。

(2)比漢語拼音還讓人抓狂的,是用abcdefg這種單個的字母或是毫無意義的字母組合(aa,bb,cc)……漢語拼音最起碼咱們中國人能看懂,那abcdefg是什麼鬼,鬼能看懂啊!在程式碼中,一般只有一些特定的地方才用這樣的命名。比如說尤拉空間的座標軸一般用xyz,for迴圈裡一般用ijk來計數,或是一些物理量大家一眼就能明白的,可以用單個字母來命名。在其他地方,不要使用這種弱智的命名方法。不要說這種命名簡單省事,等你自己過兩個月再看你寫的程式碼的時候,你就知道什麼叫弱智了。

2.縮排習慣。縮排,是能體現程式碼結構層次的一種方法。有的人縮排2個空格,有的人縮排4個空格,也有的人喜歡用Tab鍵,這個就不在這討論了,個人愛好而已。但是你說你不縮排,還覺得看縮排難受,這種人如果搞專案合作的話,分分鐘叫隊友打死。我們在寫程式碼的過程中,難免會有各種巢狀,if,for,while各種混著巢狀,這時候你如果再不縮排,你自己怎麼能看出來哪句話嵌在哪句話裡面?有人說,經過幾次巢狀之後,我感覺自己的螢幕不夠寬了……那這你可不能怪縮排有問題,而是你自己的邏輯有問題。正常寫程式碼一般都是三四個巢狀,或四五個巢狀,如果再多,那你就要考慮一下是不是可以優化一下,邏輯能不能更好一些。

雖說我是反對上文中作者硬說不縮排才是正確的,但對於python的縮排,我也是要吐槽一下的。python將縮排作為語法,放棄了{...},這確實不知道是怎麼考慮的。因為在縮排的時候,我們可以使用空格,也可以使用Tab鍵,但是當在一個專案裡既使用空格鍵又使用Tab鍵,則很有可能造成語法錯誤。這對開發者來說是有一定的困擾的。

3.註釋習慣。這個真是太重要了。這裡的註釋不止是對程式碼中的變數、函式進行註釋說明,甚至對整個專案也要有一定的說明,就像類似ReadMe的一份說明。一份好的註釋,可以讓別人不怎麼費力地看懂你的程式碼,明白想要做什麼,這也會讓你在很久以後回頭看自己參與的專案的時候,能快速回憶起當時的想法。註釋是增強程式碼可讀性的重要一環。我的習慣是在一份程式碼檔案的最上方,寫一段話,說明這份檔案的作用,然後用註釋將這份程式碼分開層次,就像分隔符一樣,很明顯,細長的一行。對於裡面的函式,一般會寫這個函式的功能,輸入引數和返回值,這樣在使用函式的時候便會更方便。對於那些變數,也不是所有的都註釋,因為變數一般都是用英文寫的,看著名稱就能猜到大概是做什麼的了,所以對於一些需要特別說明的變數,才會有註釋。要不然註釋太多,會讓自己找程式碼便得麻煩,全篇註釋比程式碼還多,有點喧賓奪主的感覺。

4.子函式習慣。對於一些有完整功能的程式碼,要儘量寫成子函式的形式。這樣可以有效避免程式碼的冗長,也能讓程式碼看起來簡潔。子函式不止可以增強程式碼的可讀性,還可以減少程式碼所佔的程式空間,這是一件一舉兩得的事情。很多初學者會喜歡一個主函式一步到底,對於幾十行程式碼的小程式而言,這樣做隨便吧,不在這裡討論了。

/**********************************************************大概就說這些吧******************************************************************/

今天,我只是挑了幾個程式設計習慣來說的,不是在這裡讓大家都按照我的建議去做,而是讓大家對自己的程式設計習慣有所思考。畢竟習慣這種事,是自己的事情,每個人都有自己不同的習慣,而且習慣與習慣之間,有的無法分辨好壞,只是選擇不同而已。但是在能分清楚好壞的時候,我們還是要選擇好習慣的,因為這不僅是對我們自己的嚴格要求,也是對他人,對閱讀你程式碼的人的一種善意。

 

如果大家覺得還有什麼壞習慣是無法忍受的,歡迎在部落格下方留言討論