我看到了舊時的C語言疤痕……
一個月前,我正在寫一個簡單的應用,是用ruby去讀pdf檔案,不知道為什麼,檔案指標跑到了檔案開始地址的前面。我不明白為什麼會這樣。於是,像往常一樣,我到stackoverflow上發帖求助。得到的第一條回覆是:
“你的程式碼有C語言的味道….”
有什麼??進一步的閱讀,我發現在ruby裡有一個很方便的IO操作包,根本不需要使用getc(這是我的習慣用法)——除非在一些特殊情況下。
我想說的是,用一種新語言程式設計,在學會這種語言的正確語法前,你需要了解它的基本原理。當你說“我會XXX語言”時,你的意思並不是指知道它的語法。而是知道這種語言裡有更好的演算法實現方法和問題解決方案,否則,你學習這種新語言的意義在哪裡呢?!
讓我們來分析一個問題,假設我們需要找到一個檔案的最後一行的開始處(這是我以前做過的一個任務)。
像我這樣懂得一點C語言的人會這樣寫:
fseek(fp,-1,SEEK_END); do { fseek(fp,-2,SEEK_CUR); }while(fgetc(fp)!='\n');
用ruby也能寫出類似的程式碼,讓你一個新學習ruby的C程式設計師來寫,他就會寫出這樣:
i) file.seek(-1,IO::SEEK_END) while file.getc != "\n" file.seek(-2,IO::SEEK_CUR) end
但是,一個熟練的ruby程式設計師則會寫成這樣:
ii) buff = file.readlines file.seek(-(buff.pop).length,IO::SEEK_END) 或 iii) lastline = Elif.open("file.txt") { |f| f.gets } file.seek(-lastline.length, IO::SEEK_END)
對我來說,iii)是最好的實現方法,它能處理大型檔案,不管日後它增長到多大。這個Elif工具包把檔案切割成了很小的片段,把它們放到小的緩衝池裡,分析完後從緩衝裡清除掉。你可以看一下它的gem原始檔。如果你研究原始檔,你會發現,任何一個需要使用到的字串物件方法都使用的非常聰明。
這只是一個簡單的例子,來說明改變思維習慣是如何能巨大的提高你的程式碼效率。我知道,作為一個新語言學習者,學會用新的語言風格和思維習慣程式設計是很困難的。我記得當老師在課堂上教我們組合語言時,很多人會先把作業用C語言寫成,然後再寫出彙編程式碼,因為他們更熟悉C語言。但是,如果你有了一定經驗,而你的程式中仍然有一些老的語言的痕跡,這說明你遇到了麻煩。
所以,如果我學習一種新語言,過程會是:
基本原理 –> 語法 –> Library/APIs
相關文章
- 我的C語言學習之路C語言
- 12天學好C語言——記錄我的C語言學習之路(Day 4)C語言
- C語言時間函式C語言函式
- 如何用最短的時間學會C語言,並掌握C語言的精髓所在?C語言
- C語言 C語言野指標C語言指標
- C語言---“C語言 誰與爭鋒?”C語言
- C語言與嵌入式C語言的區別C語言
- C語言的本質(32)——C語言與彙編之C語言內聯彙編C語言
- C語言的HelloWorldC語言
- go語言與c語言的相互呼叫GoC語言
- 爆肝10小時後,我看到了疊紙的“無限”
- C語言C語言
- 曾經我認為C語言就是個弟弟C語言
- 老公,我應該好好學習C語言了C語言
- 我想立刻辭職,然後閉關學習程式語言,我給自己3個月時間學習C語言!這樣行的通嗎...C語言
- Go是Google的語言,而不是我們的語言Go
- C51-------時鐘程式(C語言編寫的微控制器時鐘)C語言
- 聊聊C語言/C++—程式和程式語言C語言C++
- 奇怪的C語言——C51程式設計C語言注意事項C語言程式設計
- c語言巨集的使用C語言
- c語言的陣列C語言陣列
- C語言#error的作用C語言Error
- 有用的C語言工具C語言
- C語言的學習C語言
- C語言的謎題C語言
- 很酷的 C 語言技巧
- c語言extern的用法C語言
- c語言的基礎C語言
- C語言的函式C語言函式
- 我不懂 Swift 語言Swift
- C語言:一種高效、易學的程式語言C語言
- C語言的角落——這些C語言不常用的特性你知道嗎?C語言
- C語言字串C語言字串
- C語言: returnC語言
- C語言(一)C語言
- C語言概述C語言
- c語言 %pC語言
- 字串(C語言)字串C語言