[熱門文章] 程式設計、重構、與其它任何東西的終極問答
"The Ultimate Question of Programming, Refactoring, and Everything"
網頁版: http://goo.gl/6jIcIp
PDF 版: https://yadi.sk/i/pBZqebxsr5Wyg
#Craftmanships #SoftwareEngineering #CPP #Refactoring #ProgrammingSkills
好的!遲交比不交好,今天的推薦文來了(笑)~
今天介紹這篇,是過去一個禮拜在國外鄉民聚集地 Reddit 程式設計版瘋傳的文章。標題很臭屁「The Ultimate Question of Programming, Refactoring, and Everything」(沒錯!我就在意它最後一個字 "Everything"。咬我啊! XD)。因為轉載的人實在太多,讓我不禁努力地把它看完了。
其實這篇文章講的是 C/C++ 程式寫作者應該注意、或建議遵守的 42 個小訣竅。既不「Ultimate(終極)」,也不是涵蓋「Everthing」。不過裡面還是有不少中肯的建議,所以我還是將它介紹給大家。
為了讓英文苦手的朋友也能稍微感受一下這篇文章在講什麼,所以我不負責任地快速翻譯了每個標題一下。如果對哪個主題有興趣的,就麻煩大家直接對照標題號碼去看原文解說。原文有些標題用「戲謔」或「隱晦」寫法,我若直接翻譯,大家可能不知道原作者想表達什麼。所以我會將某些標題,用比較易懂的中文重新表達。一切以「標題編號(1~42)」為準。
接下來就請享用我這個不負責任的翻譯了。有會錯原文意思的,還請各位留言在下方、然後鞭小力一點 XD。我會馬上修正的:
1. 不要去做編譯器會做的事情
如:用迴圈能存取 a[0] ~ a[9],就不要用「拷貝貼上」a[0], a[1], a[2]..., a[9] 來存取裡面的內容值。
2. 大於 0 不代表它等於 1
若文件告訴你某函數執行成功會傳回「大於0」的值、但目前這個大於0的值是「1」。請你寫程式的時候不要自作聰明地偵測「傳回值 == 1」當成成功,請乖乖遵照規格書用「傳回值 > 0」等於成功。因為將來的版本有可能還會傳回 2, 3...等其他值。
3. 當你拷貝貼上一段程式碼,記得檢查它的副本兩遍
有時候你拷貝貼上一段程式碼,會忘了去修改裡面一些不同的小數字,導致花了大把時間去檢查錯誤到底出現在哪裡。
4. 小心使用「? :」運算子。並記得多加括號
「? :」是 C/C++ 內常用的運算子。若您寫了一段這樣的原始碼「a - b?0:1」,您可能以為它是這樣運作的「a - (b?0:1)」,事實上,它是這樣運作的「(a-b)?0:1」。結論是,多加括號保平安。
5. 多用市面上有的工具來分析您的原始碼
市面上有些工具,如:原始碼靜態分析工具、原始碼排列工具...可以幫您在把原始碼送入編譯器前,就抓到錯誤。不過作者也提到,別以為倚賴這些工具,錯誤就不會發生。真正要減少錯誤還是得靠多讀規格書,增加程式寫作經驗才辦得到。
6. 確認您所有的指標,都已經轉型成整數型態
作者擔心,某些使用 64 bits 當成指標變數寬度的系統,到 32 bits 的機器內重新編譯時,會產生高位元組被截斷的慘劇。某些編譯器提供「uintptr_t」這個專門給指標變數使用的型態,會隨著編譯器所在的環境,自動調整指標寬度。
7. 別在迴圈內呼叫「alloca()」這個函數
萬一迴圈失控,alloca() 函數會霸佔大量記憶體無法釋放。建議事先在迴圈外霸佔一大塊足夠的記憶體,然後在迴圈內慢慢蠶食之。
8. 在「解構函數(Destructor)」內使用「例外處理(Exception)」是很危險的!
作者認為,在負責釋放記憶體、收尾等工作的解構函數,還去霸佔新記憶體作事情是不好的。若真的發生例外(Exception),直接「吃掉(Supress)」不要讓它出現在使用者面前可能還比較好。
9. 若你要比對字串結尾,請用 '\0' 代表
有些程式設計師因為 '\0' 其實就是數字 0,而在比對字串結尾時,直接使用 0 來比對字串結尾。作者認為這個習慣不好。
10. 請勿濫用 # ifdef
# ifdef 很好用,但很容易讓原始碼雜亂難讀。作者不會建議大家不要用,但他反對連可以用 if ~ else 解決的場合,都濫用 # ifdef。
11. 別把一堆運算子全都擠在同一列
多分成幾列,Debugger 可以比較容易指出發生錯誤的是在哪個環節。
12. 當你「拷貝貼上」程式碼時,特別注意「最後一列效應」
作者還是不太建議濫用拷貝貼上,他認為需要重複使用一段程式碼,不如好好考慮寫成稍有彈性的函數,然後重複叫用。此外,他建議大家去看「最後一列效應」這篇文章(連結在本文),並了解最後一列效應在拷貝貼上程式碼內,所扮演的角色。
13. 程式碼若很長,盡量多折幾列,然後排成像表格般一樣整齊(Table-style)
14. 好編譯器 + 好的寫碼習慣是不夠的
內文舉了個後括號「)」括錯位置,但編譯器抓不出來的例子。
15. 若有一堆意義相關的常數,請用 enum 括住它們
16. 「看我能把程式碼寫得這麼屌!」的炫耀寫碼心態不可取
寫程式碼要以「穩」「易讀」為主,不是把一些剛學不久,覺得很酷,但三個月後會忘個精光的技術用進程式碼內。
17. 想用程式碼把一塊資料清乾淨,最好把清除程式碼獨立拉出來成一個專屬函數
18. 你在一個語言行得通的方法,在另一個語言不一定行得通
19. 盡量用技巧避免在同一個類別內,建構函數彼此呼叫的情況
20. 讀檔時,只檢查有沒有讀到檔尾(EOF)似乎是不夠的
21. 正確檢查 EOF 的方法
22. 有比使用 # pragma warning(...) 來印錯誤訊息更好的方法,勿濫用
23. 如果你想取得字串長度,用函數自動幫你算,別用手算然後硬填數字上去
24. 請多使用 "override" 與 "final",它們會是你的好朋友
25. 別再把 "this" 指標跟 "nullptr"(空指標)拿來作比較
26. 小心使用 VARIANT_BOOL 這個陰險狡猾的東西
27. BSTR(Binary STRing)這個用於微軟 COM/Automation 技術中的資料型態,請小心使用
28. 能用函數把一段程式碼包起來重複用,就別用巨集包它(使用巨集函數的缺點多於優點)
29. 在迴圈或迭代程式碼間,使用 ++i,來取代 i++(i++ 編譯後的執行效能稍微差那麼一點)
30. wprintf() 函數的使用陷阱:Win32 印寬字元字串要用 %S(大寫),Win64 要用 %s(小寫)。
31. 陣列在 C/C++ 傳給函數時,並非是「傳值呼叫」(Call by Value)
32. 要把檔案內的文字直接印在螢幕上時,請不要直接使用 printf() (怕檔案內夾雜 % 開頭的字,這些字對 printf 是有特殊意義的)
33. 想對一個指標取值(亦即:*p),記得檢查它是否為 NULL。否則你對 NULL 取值會導致系統出錯的
34. 別以為 int 的上限 21億+ 很多,在 64 bits 系統中,這個數字很容易爆掉
35. 若您把 enum 常數與 switch~case 連用,增加新元素進 enum 時也別忘了加新 case 進 switch
36. 如果有怎麼抓都抓不出來的 bugs,記得往「記憶體」的方向去思考(32bits vs. 64bits 之類的問題)
37. 在 do~while() 內用 continue 指令要小心,有可能會跳過你放在底部的「更新條件」,導致無窮迴圈
38. 對於指標,請用 nullptr 代替 NULL,這是新的 C++ 規格書希望您遵循的
39. 試著別把一列式子搞得太複雜,這樣比較不會有「咦?為何這段寫錯的程式碼居然可以運作」的問題出現
40. 開始使用「原始碼靜態分析工具」吧!
41. 別為了要使用某函式庫的一個函式,而引進整個函式庫。如果只用了一個函式,建議自己寫比較容易維護。
42. 別再用 empty 這個曖昧的字眼當函數名稱了。用 erase(), clear() 都比 empty() 好。
如果您覺得小弟翻譯了這麼多,沒有功勞也有苦勞,那就麻煩按個讚犒賞小弟一下吧!當然歡迎轉發給您 Facebook 的朋友共同討論。最後提醒一句,上述 42 點別把它們全都當聖旨,親身體會驗證才是最重要的喔!
祝福大家假期愉快!
同時也有3部Youtube影片,追蹤數超過4萬的網紅吳老師教學部落格,也在其Youtube影片中提到,從EXCEL VBA到Python開發第1次上課(問卷結果&課程綱要與下載懶人包&ECLIPSE連結PYTHON與建立專案&修改語系與轉型與環境設定&年齡邏輯判斷) 01_課前問卷與下載懶人包 02_課程說明與開啟ECLIPSE 03_在ECLIPSE中設定PYTHON路徑 04_建立專案與模組並...
「c函式庫pdf」的推薦目錄:
- 關於c函式庫pdf 在 紀老師程式教學網 Facebook 的最讚貼文
- 關於c函式庫pdf 在 紀老師程式教學網 Facebook 的精選貼文
- 關於c函式庫pdf 在 紀老師程式教學網 Facebook 的精選貼文
- 關於c函式庫pdf 在 吳老師教學部落格 Youtube 的最讚貼文
- 關於c函式庫pdf 在 吳老師教學部落格 Youtube 的精選貼文
- 關於c函式庫pdf 在 吳老師教學部落格 Youtube 的最佳貼文
- 關於c函式庫pdf 在 你所不知道的C語言:指標篇 - GitHub 的評價
- 關於c函式庫pdf 在 library程式2023-在Facebook/IG/Youtube上的焦點新聞和熱門 ... 的評價
- 關於c函式庫pdf 在 library程式2023-在Facebook/IG/Youtube上的焦點新聞和熱門 ... 的評價
- 關於c函式庫pdf 在 C++ STL 學習總結(全面) | Jason note 的評價
c函式庫pdf 在 紀老師程式教學網 Facebook 的精選貼文
四本 Python 入門電子書免費看!
常逛本版的朋友,應該知道我很推崇完全沒基礎的初學者,把 Python 當第一個語言(事實上我的大本命是 C 語言啊~~個人偏好... XD)。今天就要介紹一個網站稱為「Invent with Python」(用 Python 來發明創造之意),裡面就提供了很棒的四本 Python 書。網址如下:
http://inventwithpython.com/
裡面的四本書讓我來介紹一下吧!
1. Automate the Boring Stuff with Python
很棒的一本入門書!雖然該書著眼於如何把繁瑣的工作,用 Python 一次完成,不過它的 Python 簡介淺顯易懂,所以不少國外論壇非常推薦這本書。很可惜這本書沒有 PDF 離線版本供您下載,只好線上慢慢看囉!
2. Invent Your Own Computer Games with Python
一本介紹如何用 Python 撰寫遊戲的書。如果您看完前一本,且對遊戲製作有興趣的話,不妨翻閱一下這本書。這本書開始,就有離線的 PDF 版可以下載了。請看「Buy the Book on Amazon.com」下方,是否有個小小的「Book PDF」的連結呢?點下去就對啦!
3. Make Games with Python & PyGame
這本教您如何使用「PyGame」這個函式庫,撰寫遊戲。由於使用 PyGame,比不使用它強大多了!因此這本會教你做比較難的 Game 喔!有興趣可以看看第七章,它教您作一個完整的「俄羅斯方塊」呢!這本書也有 PDF 檔可以下載,就在「Buy the Book」按鈕的下方。
4. Hacking Secret Ciphers with Python
這本比較偏「資訊安全」。它教您各種加密法的原理,然後教您可能的破解方法。對此有興趣的朋友,看完不要去做壞事喔!一樣在「Buy the Book」下方有 PDF 版的連結可供下載。
今天介紹的這幾本大家還喜歡嗎?別忘了按讚鼓勵一下,或者是分享給您的 Facebook 好友喔!
c函式庫pdf 在 紀老師程式教學網 Facebook 的精選貼文
[iOS] 超補的 Core Graphics 函式庫範例五連發,一次送給你!
這五篇是我在網路上收集了一陣子、一口氣幫各位整理刊出的文章。內容是關於 iOS 程式設計中,Core Graphics 這個函式庫的五個範例:「陰影創造」、「弧線繪製」、「玻璃材質感的按鈕」、與「紋理製作」。Core Graphics 是個用 C 語言寫成、提供 2D 圖形繪製相關函數的函式庫。包含弧線繪製、形變、色彩管理、紋理、漸層、光影、圖形繪製、甚至於還能...建造、顯示、分析 PDF 檔!
剛好國外的一個 iOS 程式設計網站,刊出一系列的 Core Graphics 文章。本來我想馬上貼給大家的,但想想現在資訊那麼發達,我看得見的、大家也應該看得見。只是貼出來實在沒有多大效益。所以就等了一兩週,一次把這些文章刊出。
這五篇都很營養,很適合找個時間好好坐下來,把程式碼打一遍跑跑看,順便理解原理與語法。相信對大家很有幫助的:
1. 陰影與光澤:http://www.raywenderlich.com/32925/core-graphics-tutorial-shadows-and-gloss
2. 弧線與路徑繪製:http://www.raywenderlich.com/33193/core-graphics-tutorial-arcs-and-paths
3. 玻璃質感按鈕:http://www.raywenderlich.com/33330/core-graphics-tutorial-glossy-buttons
4. 紋理製作:http://www.raywenderlich.com/33496/core-graphics-tutorial-patterns
5. 曲線與圖層:http://www.raywenderlich.com/34003/core-graphics-tutorial-curves-and-layers
c函式庫pdf 在 吳老師教學部落格 Youtube 的最讚貼文
從EXCEL VBA到Python開發第1次上課(問卷結果&課程綱要與下載懶人包&ECLIPSE連結PYTHON與建立專案&修改語系與轉型與環境設定&年齡邏輯判斷)
01_課前問卷與下載懶人包
02_課程說明與開啟ECLIPSE
03_在ECLIPSE中設定PYTHON路徑
04_建立專案與模組並撰寫程式
05_編輯器字型放大縮小與算術運算子
06_修改編碼為UTF8與轉型為字串
07_下載PYTHON與ECLISPE手動建立環境與變數型態
08_型別轉換與串列與脫逸字元
09_流程控制撰寫年齡判斷程式
完整教學
http://goo.gl/aQTMFS
吳老師教學論壇
http://www.tqc.idv.tw/
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/#!forum/scu_python109
懶人包:
EXCEL函數與VBA http://terry28853669.pixnet.net/blog/category/list/1384521
EXCEL VBA自動化教學 http://terry28853669.pixnet.net/blog/category/list/1384524
課程簡介:入門
建置Python開發環境
基本語法與結構控制
迴圈、資料結構及函式
VBA重要函數到Python
檔案處理
資料庫處理
課程簡介:進階
網頁資料擷取與分析、Python網頁測試自動化、YouTube影片下載器
處理 Excel 試算表、處理 PDF 與 Word 文件、處理 CSV 檔和 JSON 資料
實戰:PM2.5即時監測顯示器、Email 和文字簡訊、處理影像圖片、以 GUI 自動化來控制鍵盤和滑鼠
上課用書:
參考書目
Python初學特訓班(附250分鐘影音教學/範例程式)
作者: 鄧文淵/總監製, 文淵閣工作室/編著?
出版社:碁峰? 出版日期:2016/11/29
Python程式設計入門
作者:葉難
ISBN:9789864340057
出版社:博碩文化
出版日期:2015/04/02
吳老師 109/2/11
EXCEL,VBA,Python,自強工業基金會,EXCEL,VBA,函數,程式設計,線上教學,PYTHON安裝環境
c函式庫pdf 在 吳老師教學部落格 Youtube 的精選貼文
文大Python程式入門或證照第1次課程介紹與安裝環境&下載ECLIPSE&設定工作區&安裝PYTHON外掛&編輯環境自行放大與修改編碼方式與轉型&輸出資料型別與型別轉換練習&變數的型別與轉換&證照考題
上課內容:
01_課程介紹與安裝環境
02_下載ECLIPSE說明
03_解壓縮ECLIPSE與設定工作區
04_安裝PYTHON外掛
05_設定PYTHON實體路徑與建立專案
06_編輯環境自行放大與修改編碼方式與轉型
07_輸出資料型別與型別轉換練習
08_變數的型別與轉換
09_證照考題題型說明
完整影音
http://goo.gl/aQTMFS
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/#!forum/pccu_python_2018_2
懶人包:
EXCEL函數與VBA http://terry28853669.pixnet.net/blog/category/list/1384521
EXCEL VBA自動化教學 http://terry28853669.pixnet.net/blog/category/list/1384524
TQC+Python證照目錄:
Python 第1類:基本程式設計
技能內容:變數與常數、指定敘述、標準輸入輸出、運算式、算術運算子、數學函式的應用、格式化的輸出Python 第2類:選擇敘述
技能內容:if、if...else、if…elif
Python 第3類:迴圈敘述
技能內容:while、for…in
Python 第4類:進階控制流程
技能內容:常用的控制結構、條件判斷、迴圈
Python 第5類:函式(Function)
技能內容:函式使用、傳遞參數、回傳資料、內建函式、區域變數與全域變數
Python 第6類:串列(List)的運作(一維、二維以及多維)
技能內容:串列的建立、串列的函式、串列參數傳遞、串列應用
Python 第7類:數組(Tuple)、集合(Set)以及詞典(Dictionary)
技能內容:數組、集合、詞典的建立、運作及應用
Python 第8類:字串(String)的運作
技能內容:字串的建立、字串的庫存函式、字串的應用
Python 第9類:檔案與異常處理
技能內容:文字I/O、檔案的建立、寫入資料與讀取資料、二進位I/O、編碼(Encoding)、異常處理
課程簡介:入門
建置Python開發環境
基本語法與結構控制
迴圈、資料結構及函式
VBA重要函數到Python
檔案處理
資料庫處理
課程簡介:進階
網頁資料擷取與分析、Python網頁測試自動化、YouTube影片下載器
處理 Excel 試算表、處理 PDF 與 Word 文件、處理 CSV 檔和 JSON 資料
實戰:PM2.5即時監測顯示器、Email 和文字簡訊、處理影像圖片、以 GUI 自動化來控制鍵盤和滑鼠
上課用書:
參考書目
Python初學特訓班(附250分鐘影音教學/範例程式)
作者: 鄧文淵/總監製, 文淵閣工作室/編著
出版社:碁峰? 出版日期:2016/11/29
吳老師 107/12/3
EXCEL,VBA,Python,文化推廣部,EXCEL,VBA,函數,程式設計,線上教學,PYTHON安裝環境
c函式庫pdf 在 吳老師教學部落格 Youtube 的最佳貼文
從VBA到Python程式開發2班第4次上課(MONTHCAI範例用亂數與串列與迴圈&練習題猜數字遊戲程式&改為FOR迴圈與用VBS改寫&練習題猜拳小遊戲程式&除錯模式使用與自訂函數&串列練習題輸入成績&輸入成績檔案讀取到串列)
01_重點回顧與MONTHCAI範例
02_MONTHCAI範例用亂數與串列與迴圈
03_練習題猜數字遊戲程式說明
04_猜數字遊戲改為FOR迴圈與用VBS改寫
05_練習題猜拳小遊戲程式說明
06_除錯模式使用與自訂函數
07_自訂函數練習攝氏轉華氏
08_串列練習題輸入成績
09_輸入成績檔案讀取到串列
完整影音
http://goo.gl/aQTMFS
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/#!forum/tcfst_python_2018_2
懶人包:
EXCEL函數與VBA http://terry28853669.pixnet.net/blog/category/list/1384521
EXCEL VBA自動化教學 http://terry28853669.pixnet.net/blog/category/list/1384524
課程簡介:入門
建置Python開發環境
基本語法與結構控制
迴圈、資料結構及函式
VBA重要函數到Python
檔案處理
資料庫處理
課程簡介:進階
網頁資料擷取與分析、Python網頁測試自動化、YouTube影片下載器
處理 Excel 試算表、處理 PDF 與 Word 文件、處理 CSV 檔和 JSON 資料
實戰:PM2.5即時監測顯示器、Email 和文字簡訊、處理影像圖片、以 GUI 自動化來控制鍵盤和滑鼠
上課用書:
參考書目
Python初學特訓班(附250分鐘影音教學/範例程式)
作者: 鄧文淵/總監製, 文淵閣工作室/編著?
出版社:碁峰? 出版日期:2016/11/29
Python程式設計入門
作者:葉難
ISBN:9789864340057
出版社:博碩文化
出版日期:2015/04/02
吳老師 107/6/27
EXCEL,VBA,Python,自強工業基金會,EXCEL,VBA,函數,程式設計,線上教學,PYTHON安裝環境
c函式庫pdf 在 library程式2023-在Facebook/IG/Youtube上的焦點新聞和熱門 ... 的推薦與評價
C 語言對於函式庫(library) 的概念相對簡單,C 函式庫是由標頭檔(.h) 和二進位檔(靜態函式庫: .a, .lib ,動態函式庫: .so, .dylib, .dll) 所組成。使用C 函式庫時不 ... ... <看更多>
c函式庫pdf 在 library程式2023-在Facebook/IG/Youtube上的焦點新聞和熱門 ... 的推薦與評價
C 語言對於函式庫(library) 的概念相對簡單,C 函式庫是由標頭檔(.h) 和二進位檔(靜態函式庫: .a, .lib ,動態函式庫: .so, .dylib, .dll) 所組成。使用C 函式庫時不 ... ... <看更多>
c函式庫pdf 在 你所不知道的C語言:指標篇 - GitHub 的推薦與評價
新增函式庫不是一個正確的方向; 需要從新思考整個架構來開發新的程式語言. 在實做層面,pointer 和struct 往往是成雙成對存在( 下方會解釋) ... ... <看更多>