學國文,最起碼要準備字典;學英文,可能除了字典以外,還要準備文法句型、範例大全.......等等等。 37Please respect copyright.PENANApRz0fRK1s5
37Please respect copyright.PENANA41nxMT9KKM
沒理由學程式設計只要仰賴某個網站/部落格,和某個願意花時間分享自己知識的好心呆瓜。 37Please respect copyright.PENANAg3SStmCvvD
37Please respect copyright.PENANAcqzgDhStCk
擁有一本、甚至多本參考書,畢竟才是正途。 37Please respect copyright.PENANADZw4ieHWgi
37Please respect copyright.PENANAGut4nQnqGF
但一本程式設計的書籍,要價動不動就四五百、五六百,甚至逼近千元大關,而且不像繪圖教學書籍,光是擺在書架上的某個地方也可以很賞心悅目,拿下來翻一翻、看看高手們的作品讓自己心曠神怡一下也不錯。程式設計的書籍大部分都很硬很重、外觀很死板,拿在手上就讓旁人覺得「這是宅男/女」、「這人將來就是爆肝命」.......的感覺。 37Please respect copyright.PENANAqeQEQm5Tgp
37Please respect copyright.PENANAfnePWRtVJL
而且真的很貴! 37Please respect copyright.PENANAaYuasbkh2L
37Please respect copyright.PENANAgaIuV0yQn1
如果這還是一本濫到不行、根本一點用也沒有的書,看完之後什麼狗屁程式都寫不出來,那該怎麼辦? 37Please respect copyright.PENANAj6EYF4RwRF
37Please respect copyright.PENANAhJtinyySeK
不怎麼辦!連涼拌都免了。走到電子街大賣場,經常看到一本99元跳樓大拍賣的教學書籍,大致上就是屬於這類的書。因為台灣的出版社傾向「版權買斷制」,所以原作者寫再好、銷售量再大,基本上他們能賺到的錢僅限於簽約、交稿瞬間能夠領到的那張支票,偏偏在台灣出一本書很容易,印刷成本不高、通路成本也低,所以只要有「賺」......出版社就可以繼續出書,與其去出版一本可以長銷百月的書,不如挖掘一個新作者、新名字,搭配一個好像有點噱頭、俏皮的新書名,然後繼續欺騙無知的讀者/用書人,無止盡的循環、賺那蠅頭小利...... 37Please respect copyright.PENANASgEe5PKV2g
37Please respect copyright.PENANACbp49tDcAS
身為一個非科班出身、土法煉鋼的程式設計,早些年深受這種文化/風俗的毒害,所以寫下上面的這段文字,──並不是我仇恨這些出版社,就好像我不會仇恨蚊子、蟑螂、老鼠一樣,但這並不表示我會跟蚊子、蟑螂、老鼠和平共處,只是我在打他們的時候,心中並不帶有一絲仇恨,而是想著「打死你們,會讓這個世界變的更好」,同理,消滅這些出版垃圾書、浪費讀者/用書人時間與金錢的出版社,也是在讓這個事件變更好。 37Please respect copyright.PENANAwOdfhLjy6n
37Please respect copyright.PENANA6CnLcmm1Ys
這篇文章的基礎點就是告訴大家「該挑什麼樣的書」,或「哪些書不該挑」。 37Please respect copyright.PENANAh298uKg5Ae
37Please respect copyright.PENANAzNYQMB8YMT
其實這兩個問題就好像銅板一樣,「該挑什麼樣的書」並沒有標準答案,以java來說,如果要製作遊戲,「Swing」類別的講解就是首要課題,但如果是製作資料庫,基礎I/O應用的知識才是王道,可是在這些書名和內容之下,更重要的是作者講解各種知識技巧的方法,是否讓讀者/用書人可以理解?閱讀是否輕鬆?不要有太多過時、不合宜、甚至錯誤的內容? 37Please respect copyright.PENANANDn9IVpLyz
37Please respect copyright.PENANAcKSgX0UEaX
寫書,並不存在著最好的方法,但肯定有最遭、或至少絕對要避免的方法存在。因此「哪些書不該挑」相較之下就很具體、也絕對有標準答案。 37Please respect copyright.PENANAPZM50TQjeL
37Please respect copyright.PENANAmUjIsVeXKR
一排書擺在眼前,如果能夠輕易的辨識出哪些是不該挑的書,剩下的書之中,也許各位讀者/用書人不會挑到最適合自己的書,但至少閱讀後也能夠有適當的收穫。 37Please respect copyright.PENANAlgH1Zoegoo
37Please respect copyright.PENANAFBMQLxCr1K
所以,什麼樣的書不該挑? 37Please respect copyright.PENANAbzsvjFVHaI
37Please respect copyright.PENANALx60rPODXl
第一類,就是告訴讀者「寫程式很簡單」的書。 37Please respect copyright.PENANAhqfnHOtdiY
37Please respect copyright.PENANAVFNsVuweZc
寫程式一點都不簡單,畢竟程式是種違反人類思維直覺的東西,除此之外,寫程式其實跟其他所有學問並沒有什麼不同,學數學要從加減乘除開始、進入高等代數/幾何、進入微積分/商用數學的領域......,那些主張寫程式很簡單的書,大部分都只會帶領讀者/用書人走玩加減乘除而已,剩下的內容大多打混、摸魚、亂亂寫一通。 37Please respect copyright.PENANAn2aLjb69OA
37Please respect copyright.PENANAVC9KhCA23K
這樣的書能買/用/讀嗎? 37Please respect copyright.PENANAFXldImrDGk
37Please respect copyright.PENANAnTt0yu4sFm
第二類,就是標榜作者的經歷、名氣、學歷的書。 37Please respect copyright.PENANAQUx6OMOT5X
37Please respect copyright.PENANArkQJQEhRYo
我就曾買過一本C++的教學書,作者是個在微軟內主導新一代軟體開發的工程師,......說實話,要不是那本書很貴,我現在寧可把它拿來當杯墊。 37Please respect copyright.PENANAKsvrPGMbPy
37Please respect copyright.PENANAcJUW5bzumo
主題空洞散漫毫無張法,全篇充斥著作者自以為是很重要的經驗談,但偏偏連個主題都沒有。 37Please respect copyright.PENANA0X74YJuOVY
37Please respect copyright.PENANAjxcHEk7Uza
這種書,就是典型的出版社/作者用來撈錢的工具。所以不再多分析。 37Please respect copyright.PENANArPkgsaGT8s
37Please respect copyright.PENANAfoyUWOQrjK
第三類,是我個人的心得,也可以說是最快最有效的方法。 37Please respect copyright.PENANAmvHduFuG9K
37Please respect copyright.PENANAieMctMLn1I
凡是標榜著入門書籍的,都會以如何在螢幕上輸出「Hello」這個字樣為第一個範例程式。 37Please respect copyright.PENANAfUbh5yPON2
37Please respect copyright.PENANAIqEDa2xg9a
但同樣是範例程式,也有各種不同的細部樣貌,下面這段程式碼就是最糟糕的一種: 37Please respect copyright.PENANAfyDEauFp2Z
37Please respect copyright.PENANAaLmhE7AKbe
[ 37Please respect copyright.PENANAi3P5uQxFdE
37Please respect copyright.PENANASCTPx4qw6S
package com.java.Hello; 37Please respect copyright.PENANAT0oT3JTCAp
37Please respect copyright.PENANAY9RqntK3Dh
public class Hello { 37Please respect copyright.PENANAMv7VmAbWJg
public static int gvar; 37Please respect copyright.PENANArtUinTMq8W
public static void say(String s) { 37Please respect copyright.PENANAeUmgBtqwQI
int x = 10; 37Please respect copyright.PENANAMchPPpOp6t
System.out.print(s+x); 37Please respect copyright.PENANA2lh3TjEhXF
} 37Please respect copyright.PENANAf9yE2WcCjJ
public static void main(String[] argv) { 37Please respect copyright.PENANA4w3xXgDqr3
float y = 0; 37Please respect copyright.PENANArnD9Sl8wAy
say("Hello, world\n"); 37Please respect copyright.PENANAgALjBl2tQe
} 37Please respect copyright.PENANARTS6xWjats
} 37Please respect copyright.PENANAf1YfEQ1VXq
37Please respect copyright.PENANAZCpyKdsbAf
] 37Please respect copyright.PENANAWDZyI0acYu
37Please respect copyright.PENANAR6VTsXkYIW
凡是被我打上底線的地方,都是「遠遠超出讀者能夠理解」範圍的程式碼。 37Please respect copyright.PENANAEFMzCXnzJw
37Please respect copyright.PENANArZe5f6wYVD
作者可能在學了三五年的程式以後,早已經忘了這些程式碼當年也是花了自己無數心力之後才能理解箇中奧秘,只是現在覺得很理所當然、很習慣,所以就把它拿來用在一個「最最最最最簡單的程式」中。 37Please respect copyright.PENANAmMtuBdUYiV
37Please respect copyright.PENANA7RjiMs5poC
這段程式到底出了什麼問題?首先,它的目的只是想讓大家知道java成式的寫法跟用法,就類似於「打開繪圖軟體、點選畫筆、製作兩個圖層、在某個圖層上劃一條線、將這兩個圖層結合並輸出成jpg檔、關閉軟體」這樣的過程而已。(更精確的說,是點選畫筆、製作兩個圖層、在某個圖層上劃一條線這樣的層度。 37Please respect copyright.PENANAsODPAluPsM
37Please respect copyright.PENANAcmbVPVRHWu
這麼簡單的範例,如果其中夾雜著「幫圖層命名」、「設定透明度」、「筆刷特效」的步驟,請問使用起來感覺會如何? 37Please respect copyright.PENANAXO7WiX4FWP
37Please respect copyright.PENANAbnsjhcZvbJ
修正一下引述的這段程式碼,其實完全可以修改成如下: 37Please respect copyright.PENANAf4Zkc1o4dS
37Please respect copyright.PENANAYxrhYmUFTX
「 37Please respect copyright.PENANA6o1k4IHRPY
class Hello { 37Please respect copyright.PENANAy0uLaihMsi
37Please respect copyright.PENANAHFLdVLH6h4
public static void main() { 37Please respect copyright.PENANA060aPFU2q6
System.out.print("Hello, world"); 37Please respect copyright.PENANAvuNUwaaEOU
37Please respect copyright.PENANAx6FVzN75Uo
} 37Please respect copyright.PENANAzQxu9G6Cnu
} 37Please respect copyright.PENANAGIK9XT6itR
37Please respect copyright.PENANAXCYpHO02gm
」 37Please respect copyright.PENANAg7djJN5yHB
37Please respect copyright.PENANAutmsGyI8t5
如何?夠簡單吧!接下來作者只要跟大家解釋「class Hello」與「public static void main()」的意義即可。光是這兩個項目就夠解釋個大半天。 37Please respect copyright.PENANAQ7XyJ1dzXA
37Please respect copyright.PENANA8XI9R98EPc
如果夠好心,還可以解釋一下「System.out.print("Hello, world");」的意義。 37Please respect copyright.PENANARy0S8Hl8Ps
37Please respect copyright.PENANAOhdpoVRF48
結果寫這段原始程式碼的人不肯,他要在第一個程式碼中就應用到「函數」的使用和製作,而且還是牽涉到「引數」(括弧中的文字)的導入概念,在main那一行的引數,還牽涉到reference和number的差異比較...... 37Please respect copyright.PENANAfGEkSTb3o7
37Please respect copyright.PENANAfL8xSjsEki
這樣的書怎麼能夠看呢?作者完全只考慮到自己寫書的方便,從沒顧慮到其他條件,拿起那些「99元大清倉」的書籍,清一色都會犯下這個錯誤,那些還沒淪落到99元區、但也犯下這些錯誤的書......遲早而已。 37Please respect copyright.PENANAdAGx0Upc9m
37Please respect copyright.PENANAVCTSq26wxK
以上。 37Please respect copyright.PENANAxGmDTBuyrZ
37Please respect copyright.PENANAV0txFMpoS7
閱讀完,其實大家就可以準備出發,去書店裡挑選一本適合自己的參考書了。37Please respect copyright.PENANAHkMEreiSNe
ns216.73.216.33da2 37Please respect copyright.PENANA41nxMT9KKM
沒理由學程式設計只要仰賴某個網站/部落格,和某個願意花時間分享自己知識的好心呆瓜。 37Please respect copyright.PENANAg3SStmCvvD
37Please respect copyright.PENANAcqzgDhStCk
擁有一本、甚至多本參考書,畢竟才是正途。 37Please respect copyright.PENANADZw4ieHWgi
37Please respect copyright.PENANAGut4nQnqGF
但一本程式設計的書籍,要價動不動就四五百、五六百,甚至逼近千元大關,而且不像繪圖教學書籍,光是擺在書架上的某個地方也可以很賞心悅目,拿下來翻一翻、看看高手們的作品讓自己心曠神怡一下也不錯。程式設計的書籍大部分都很硬很重、外觀很死板,拿在手上就讓旁人覺得「這是宅男/女」、「這人將來就是爆肝命」.......的感覺。 37Please respect copyright.PENANAqeQEQm5Tgp
37Please respect copyright.PENANAfnePWRtVJL
而且真的很貴! 37Please respect copyright.PENANAaYuasbkh2L
37Please respect copyright.PENANAgaIuV0yQn1
如果這還是一本濫到不行、根本一點用也沒有的書,看完之後什麼狗屁程式都寫不出來,那該怎麼辦? 37Please respect copyright.PENANAj6EYF4RwRF
37Please respect copyright.PENANAhJtinyySeK
不怎麼辦!連涼拌都免了。走到電子街大賣場,經常看到一本99元跳樓大拍賣的教學書籍,大致上就是屬於這類的書。因為台灣的出版社傾向「版權買斷制」,所以原作者寫再好、銷售量再大,基本上他們能賺到的錢僅限於簽約、交稿瞬間能夠領到的那張支票,偏偏在台灣出一本書很容易,印刷成本不高、通路成本也低,所以只要有「賺」......出版社就可以繼續出書,與其去出版一本可以長銷百月的書,不如挖掘一個新作者、新名字,搭配一個好像有點噱頭、俏皮的新書名,然後繼續欺騙無知的讀者/用書人,無止盡的循環、賺那蠅頭小利...... 37Please respect copyright.PENANASgEe5PKV2g
37Please respect copyright.PENANACbp49tDcAS
身為一個非科班出身、土法煉鋼的程式設計,早些年深受這種文化/風俗的毒害,所以寫下上面的這段文字,──並不是我仇恨這些出版社,就好像我不會仇恨蚊子、蟑螂、老鼠一樣,但這並不表示我會跟蚊子、蟑螂、老鼠和平共處,只是我在打他們的時候,心中並不帶有一絲仇恨,而是想著「打死你們,會讓這個世界變的更好」,同理,消滅這些出版垃圾書、浪費讀者/用書人時間與金錢的出版社,也是在讓這個事件變更好。 37Please respect copyright.PENANAwOdfhLjy6n
37Please respect copyright.PENANA6CnLcmm1Ys
這篇文章的基礎點就是告訴大家「該挑什麼樣的書」,或「哪些書不該挑」。 37Please respect copyright.PENANAh298uKg5Ae
37Please respect copyright.PENANAzNYQMB8YMT
其實這兩個問題就好像銅板一樣,「該挑什麼樣的書」並沒有標準答案,以java來說,如果要製作遊戲,「Swing」類別的講解就是首要課題,但如果是製作資料庫,基礎I/O應用的知識才是王道,可是在這些書名和內容之下,更重要的是作者講解各種知識技巧的方法,是否讓讀者/用書人可以理解?閱讀是否輕鬆?不要有太多過時、不合宜、甚至錯誤的內容? 37Please respect copyright.PENANANDn9IVpLyz
37Please respect copyright.PENANAcKSgX0UEaX
寫書,並不存在著最好的方法,但肯定有最遭、或至少絕對要避免的方法存在。因此「哪些書不該挑」相較之下就很具體、也絕對有標準答案。 37Please respect copyright.PENANAPZM50TQjeL
37Please respect copyright.PENANAmUjIsVeXKR
一排書擺在眼前,如果能夠輕易的辨識出哪些是不該挑的書,剩下的書之中,也許各位讀者/用書人不會挑到最適合自己的書,但至少閱讀後也能夠有適當的收穫。 37Please respect copyright.PENANAlgH1Zoegoo
37Please respect copyright.PENANAFBMQLxCr1K
所以,什麼樣的書不該挑? 37Please respect copyright.PENANAbzsvjFVHaI
37Please respect copyright.PENANALx60rPODXl
第一類,就是告訴讀者「寫程式很簡單」的書。 37Please respect copyright.PENANAhqfnHOtdiY
37Please respect copyright.PENANAVFNsVuweZc
寫程式一點都不簡單,畢竟程式是種違反人類思維直覺的東西,除此之外,寫程式其實跟其他所有學問並沒有什麼不同,學數學要從加減乘除開始、進入高等代數/幾何、進入微積分/商用數學的領域......,那些主張寫程式很簡單的書,大部分都只會帶領讀者/用書人走玩加減乘除而已,剩下的內容大多打混、摸魚、亂亂寫一通。 37Please respect copyright.PENANAn2aLjb69OA
37Please respect copyright.PENANAVC9KhCA23K
這樣的書能買/用/讀嗎? 37Please respect copyright.PENANAFXldImrDGk
37Please respect copyright.PENANAnTt0yu4sFm
第二類,就是標榜作者的經歷、名氣、學歷的書。 37Please respect copyright.PENANAQUx6OMOT5X
37Please respect copyright.PENANArkQJQEhRYo
我就曾買過一本C++的教學書,作者是個在微軟內主導新一代軟體開發的工程師,......說實話,要不是那本書很貴,我現在寧可把它拿來當杯墊。 37Please respect copyright.PENANAKsvrPGMbPy
37Please respect copyright.PENANAcJUW5bzumo
主題空洞散漫毫無張法,全篇充斥著作者自以為是很重要的經驗談,但偏偏連個主題都沒有。 37Please respect copyright.PENANA0X74YJuOVY
37Please respect copyright.PENANAjxcHEk7Uza
這種書,就是典型的出版社/作者用來撈錢的工具。所以不再多分析。 37Please respect copyright.PENANArPkgsaGT8s
37Please respect copyright.PENANAfoyUWOQrjK
第三類,是我個人的心得,也可以說是最快最有效的方法。 37Please respect copyright.PENANAmvHduFuG9K
37Please respect copyright.PENANAieMctMLn1I
凡是標榜著入門書籍的,都會以如何在螢幕上輸出「Hello」這個字樣為第一個範例程式。 37Please respect copyright.PENANAfUbh5yPON2
37Please respect copyright.PENANAIqEDa2xg9a
但同樣是範例程式,也有各種不同的細部樣貌,下面這段程式碼就是最糟糕的一種: 37Please respect copyright.PENANAfyDEauFp2Z
37Please respect copyright.PENANAaLmhE7AKbe
[ 37Please respect copyright.PENANAi3P5uQxFdE
37Please respect copyright.PENANASCTPx4qw6S
package com.java.Hello; 37Please respect copyright.PENANAT0oT3JTCAp
37Please respect copyright.PENANAY9RqntK3Dh
public class Hello { 37Please respect copyright.PENANAMv7VmAbWJg
public static int gvar; 37Please respect copyright.PENANArtUinTMq8W
public static void say(String s) { 37Please respect copyright.PENANAeUmgBtqwQI
int x = 10; 37Please respect copyright.PENANAMchPPpOp6t
System.out.print(s+x); 37Please respect copyright.PENANA2lh3TjEhXF
} 37Please respect copyright.PENANAf9yE2WcCjJ
public static void main(String[] argv) { 37Please respect copyright.PENANA4w3xXgDqr3
float y = 0; 37Please respect copyright.PENANArnD9Sl8wAy
say("Hello, world\n"); 37Please respect copyright.PENANAgALjBl2tQe
} 37Please respect copyright.PENANARTS6xWjats
} 37Please respect copyright.PENANAf1YfEQ1VXq
37Please respect copyright.PENANAZCpyKdsbAf
] 37Please respect copyright.PENANAWDZyI0acYu
37Please respect copyright.PENANAR6VTsXkYIW
凡是被我打上底線的地方,都是「遠遠超出讀者能夠理解」範圍的程式碼。 37Please respect copyright.PENANAEFMzCXnzJw
37Please respect copyright.PENANArZe5f6wYVD
作者可能在學了三五年的程式以後,早已經忘了這些程式碼當年也是花了自己無數心力之後才能理解箇中奧秘,只是現在覺得很理所當然、很習慣,所以就把它拿來用在一個「最最最最最簡單的程式」中。 37Please respect copyright.PENANAmMtuBdUYiV
37Please respect copyright.PENANA7RjiMs5poC
這段程式到底出了什麼問題?首先,它的目的只是想讓大家知道java成式的寫法跟用法,就類似於「打開繪圖軟體、點選畫筆、製作兩個圖層、在某個圖層上劃一條線、將這兩個圖層結合並輸出成jpg檔、關閉軟體」這樣的過程而已。(更精確的說,是點選畫筆、製作兩個圖層、在某個圖層上劃一條線這樣的層度。 37Please respect copyright.PENANAsODPAluPsM
37Please respect copyright.PENANAcmbVPVRHWu
這麼簡單的範例,如果其中夾雜著「幫圖層命名」、「設定透明度」、「筆刷特效」的步驟,請問使用起來感覺會如何? 37Please respect copyright.PENANAXO7WiX4FWP
37Please respect copyright.PENANAbnsjhcZvbJ
修正一下引述的這段程式碼,其實完全可以修改成如下: 37Please respect copyright.PENANAf4Zkc1o4dS
37Please respect copyright.PENANAYxrhYmUFTX
「 37Please respect copyright.PENANA6o1k4IHRPY
class Hello { 37Please respect copyright.PENANAy0uLaihMsi
37Please respect copyright.PENANAHFLdVLH6h4
public static void main() { 37Please respect copyright.PENANA060aPFU2q6
System.out.print("Hello, world"); 37Please respect copyright.PENANAvuNUwaaEOU
37Please respect copyright.PENANAx6FVzN75Uo
} 37Please respect copyright.PENANAzQxu9G6Cnu
} 37Please respect copyright.PENANAGIK9XT6itR
37Please respect copyright.PENANAXCYpHO02gm
」 37Please respect copyright.PENANAg7djJN5yHB
37Please respect copyright.PENANAutmsGyI8t5
如何?夠簡單吧!接下來作者只要跟大家解釋「class Hello」與「public static void main()」的意義即可。光是這兩個項目就夠解釋個大半天。 37Please respect copyright.PENANAQ7XyJ1dzXA
37Please respect copyright.PENANA8XI9R98EPc
如果夠好心,還可以解釋一下「System.out.print("Hello, world");」的意義。 37Please respect copyright.PENANARy0S8Hl8Ps
37Please respect copyright.PENANAOhdpoVRF48
結果寫這段原始程式碼的人不肯,他要在第一個程式碼中就應用到「函數」的使用和製作,而且還是牽涉到「引數」(括弧中的文字)的導入概念,在main那一行的引數,還牽涉到reference和number的差異比較...... 37Please respect copyright.PENANAfGEkSTb3o7
37Please respect copyright.PENANAfL8xSjsEki
這樣的書怎麼能夠看呢?作者完全只考慮到自己寫書的方便,從沒顧慮到其他條件,拿起那些「99元大清倉」的書籍,清一色都會犯下這個錯誤,那些還沒淪落到99元區、但也犯下這些錯誤的書......遲早而已。 37Please respect copyright.PENANAdAGx0Upc9m
37Please respect copyright.PENANAVCTSq26wxK
以上。 37Please respect copyright.PENANAxGmDTBuyrZ
37Please respect copyright.PENANAV0txFMpoS7
閱讀完,其實大家就可以準備出發,去書店裡挑選一本適合自己的參考書了。37Please respect copyright.PENANAHkMEreiSNe