Re: [問題] 何謂寫得漂亮?
※ 引述《Savate (二郎不是餓狼更不是惡狼)》之銘言:
: 我記得我在修數值方法時
: 老師第堂課就說
: 程式要寫出來沒什麼
: 要寫得好就是要多看人家的程式
: 要寫得漂亮就要靠天份了
: 天份? 什麼天份啊?
: 何謂寫得漂亮呢?
你的老師顯然還活在舊時代,
在過去 programming 的技術是曾經被視為一種藝術沒錯,
但後來已經被視為是一種工程,
根據特定的工程方法就可以實作出易讀易懂易維護的軟體系統,
把 programming 視為 art 的舊時代早就結束很久了,
現在都單純是 engineering 而已,
根本沒有什麼天分問題,
學過相關的工程方法論就算是阿貓阿狗也寫得出人模人樣的程式來,
差別就在於你有沒有學過和願不願意學。
現在的軟體架構也早就膨脹到不是光看別人寫的程式就能學到東西的,
除非他們有附上完整的技術文件跟工程圖給你,
而且運氣不好還會學到一堆錯誤的知識和觀念,
早期是因為 C 語言本身的機制太簡單卻又什麼都能做,
導致各種奇奇怪怪的旁門左道技術被不同人發明出來寫 code,
當時想學遍或看懂這些 code 是真的要多看別人的程式沒錯,
把一個想法以最奇怪最難懂的 coding 方法寫出來的人成被供奉為神,
但隨著支援抽象概念的更高階語言普及,
實現那些概念的方式都有了語言機制的支援,
能夠以更簡單明瞭的方式去實現,
那些艱澀難懂的舊時代程式碼早就變成垃圾和毒瘤了,
常見概念的實現方法也漸漸的被收集成一些 pattern 並記載在書上,
實在沒有必要去 trace 人家寫好的程式來重新發現這些 pattern,
這裡講的 pattern 可不僅侷限於廣為人知的 design pattern,
架構分析甚至商業邏輯事實上都有 pattern 存在,
國內知道 GoF 那些 pattern 的人已經不在少數了,
但見過 PEAA 甚至加以運用的人卻不是那麼的多:
Patterns of Enterprise Application Architecture
http://martinfowler.com/eaaCatalog/
把 pattern 跟 GoF Design Patterns 劃上等號並認為它根本沒用其實也是很大的誤解;
總而言之 trace 別人寫的 code 才會把程式寫得漂亮的時代已經過去了,
因為現在對「漂亮」的定義不再是「奇怪」。
事實上那些「奇怪」的程式早在 10 年前就開始陸陸續續受到報應,
C99 的 strict aliasing 幾乎讓那些程式全部爆光光了,
要不是 gcc 還有提供什麼 -fno-strict-aliasing 的選項,
我看世界上大概沒幾個 C 寫的軟體還活得下來,
就算活下來了效能也是被跑在 server mode 的 Java 程式打得趴在地上;
不過 strict aliaing 又是另一個故事了
(它跟 restrict pointer 這兩項機制可以建構出真正高速的 C 程式),
在這邊提出來只是要說在過去很多「奇怪到被認為很優美」的程式,
在現代看來不但醜陋骯髒,
甚至執行的效率還有可能比較差,
現在 open source 的程式碼幾乎都還大量殘留這些糟糕的遺跡,
多看了反而也只會學壞而已,
時代早就不一樣了。
: 事實上我也在科技業板看過這類推文
: "寫程式需要天份"
只要努力就可以了,
要天分的說法是把 programming 視為 art 的舊時代才在講的。
: 我個人自己的解讀是
: "如何把一個構想用程式實現出來"的思考過程
可以去學一些搭 UML 的軟體開發流程來用用,
譬如學術界常見的 UP 跟現在「軟體工業界」很愛用的 EssUP
(我強調軟體工業界的意思...應該不用說了),
哪個步驟該用哪些圖都會告訴你,
包括如何分析畫出來的圖決定要撰寫哪些類別跟方法,
哪些類別應該合併或分解等等,
最後按圖施工自然就會從架構上看起來都很漂亮,
即使是分工交給一些只懂 coding 的人去寫末端的東西,
整個大格局也不會很輕易的就被他們搞得亂七八糟。
最後要說的是,
如果你有心成為新舊時代之間的橋樑,
打算把舊時代的程式慢慢做苦工把它們翻新的話,
我倒是不反對你把去多看舊時代裡被稱為寫得很好的程式,
但是並不是現在就去看,
要做這種工作的必須是同時熟稔過去年代裡各種奇門異術和現代工程方法的人,
先習慣了現代的工程方法並深知舊時代藝術的缺點後才有辦法翻修,
不然只會做得亂七八糟看起來不三不四而已,
抗壓性等等的能力可能也需要具備,
因為在學術界和工業界都幾乎沒有人會支持你做這件事,
可稱得上是非常寂寞又苦悶的工作,
而且這種事情一般也不適合太張揚所以很難激發成就感,
畢竟去公司面試的時候讓人知道你重寫過一堆東西,
人家還怕你什麼都要重寫一遍拖慢整個 project 的進度。
--
Ling-hua Tseng (uranus@tinlans.org)
Department of Computer Science, National Tsing-Hua University
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Software pipelining for VLIW architectures
Homepage: http://www.tinlans.org
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.199.45
※ 編輯: tinlans 來自: 220.133.199.45 (01/17 05:40)
→
01/17 06:33, , 1F
01/17 06:33, 1F
→
01/17 06:51, , 2F
01/17 06:51, 2F
推
01/17 08:26, , 3F
01/17 08:26, 3F
→
01/17 09:02, , 4F
01/17 09:02, 4F
→
01/17 09:46, , 5F
01/17 09:46, 5F
→
01/17 10:03, , 6F
01/17 10:03, 6F
→
01/17 10:03, , 7F
01/17 10:03, 7F
→
01/17 10:04, , 8F
01/17 10:04, 8F
推
01/17 11:08, , 9F
01/17 11:08, 9F
推
01/17 11:26, , 10F
01/17 11:26, 10F
推
01/17 11:28, , 11F
01/17 11:28, 11F
推
01/17 11:30, , 12F
01/17 11:30, 12F
→
01/17 11:59, , 13F
01/17 11:59, 13F
→
01/17 12:00, , 14F
01/17 12:00, 14F
推
01/17 13:05, , 15F
01/17 13:05, 15F
→
01/17 13:06, , 16F
01/17 13:06, 16F
→
01/17 13:07, , 17F
01/17 13:07, 17F
推
01/17 13:17, , 18F
01/17 13:17, 18F
推
01/17 14:05, , 19F
01/17 14:05, 19F
→
01/17 14:09, , 20F
01/17 14:09, 20F
→
01/17 14:10, , 21F
01/17 14:10, 21F
→
01/17 17:41, , 22F
01/17 17:41, 22F
推
01/17 19:41, , 23F
01/17 19:41, 23F
→
01/17 19:52, , 24F
01/17 19:52, 24F
→
01/17 19:52, , 25F
01/17 19:52, 25F
→
01/17 19:53, , 26F
01/17 19:53, 26F
→
01/17 19:53, , 27F
01/17 19:53, 27F
→
01/17 19:54, , 28F
01/17 19:54, 28F
→
01/17 21:27, , 29F
01/17 21:27, 29F
→
01/17 22:08, , 30F
01/17 22:08, 30F
→
01/17 22:08, , 31F
01/17 22:08, 31F
→
01/17 22:09, , 32F
01/17 22:09, 32F
→
01/17 22:09, , 33F
01/17 22:09, 33F
→
01/17 22:09, , 34F
01/17 22:09, 34F
→
01/17 22:09, , 35F
01/17 22:09, 35F
→
01/17 22:10, , 36F
01/17 22:10, 36F
→
01/17 22:13, , 37F
01/17 22:13, 37F
→
01/17 22:14, , 38F
01/17 22:14, 38F
→
01/17 22:17, , 39F
01/17 22:17, 39F
→
01/17 22:17, , 40F
01/17 22:17, 40F
→
01/17 22:18, , 41F
01/17 22:18, 41F
→
01/17 22:18, , 42F
01/17 22:18, 42F
→
01/17 22:19, , 43F
01/17 22:19, 43F
→
01/17 22:20, , 44F
01/17 22:20, 44F
→
01/17 22:20, , 45F
01/17 22:20, 45F
→
01/17 22:21, , 46F
01/17 22:21, 46F
→
01/17 22:21, , 47F
01/17 22:21, 47F
→
01/17 22:24, , 48F
01/17 22:24, 48F
→
01/17 22:25, , 49F
01/17 22:25, 49F
→
01/17 22:27, , 50F
01/17 22:27, 50F
→
01/17 22:28, , 51F
01/17 22:28, 51F
→
01/17 22:28, , 52F
01/17 22:28, 52F
→
01/17 22:28, , 53F
01/17 22:28, 53F
→
01/17 22:28, , 54F
01/17 22:28, 54F
→
01/17 22:29, , 55F
01/17 22:29, 55F
→
01/17 22:31, , 56F
01/17 22:31, 56F
→
01/17 22:31, , 57F
01/17 22:31, 57F
→
01/17 22:32, , 58F
01/17 22:32, 58F
→
01/17 22:33, , 59F
01/17 22:33, 59F
→
01/17 22:33, , 60F
01/17 22:33, 60F
→
01/17 22:45, , 61F
01/17 22:45, 61F
→
01/17 22:45, , 62F
01/17 22:45, 62F
→
01/17 22:46, , 63F
01/17 22:46, 63F
→
01/17 22:46, , 64F
01/17 22:46, 64F
→
01/17 22:47, , 65F
01/17 22:47, 65F
→
01/17 22:55, , 66F
01/17 22:55, 66F
→
01/17 22:56, , 67F
01/17 22:56, 67F
→
01/17 22:56, , 68F
01/17 22:56, 68F
→
01/17 22:57, , 69F
01/17 22:57, 69F
→
01/17 22:57, , 70F
01/17 22:57, 70F
→
01/17 22:59, , 71F
01/17 22:59, 71F
→
01/17 23:02, , 72F
01/17 23:02, 72F
→
01/17 23:02, , 73F
01/17 23:02, 73F
→
01/17 23:13, , 74F
01/17 23:13, 74F
→
01/17 23:14, , 75F
01/17 23:14, 75F
→
01/17 23:14, , 76F
01/17 23:14, 76F
→
01/17 23:28, , 77F
01/17 23:28, 77F
→
01/17 23:28, , 78F
01/17 23:28, 78F
→
01/17 23:29, , 79F
01/17 23:29, 79F
推
01/20 13:15, , 80F
01/20 13:15, 80F
討論串 (同標題文章)
本文引述了以下文章的的內容:
12
32
以下文章回應了本文:
7
26
完整討論串 (本文為第 5 之 9 篇):
5
11
1
1
7
26
21
93
10
80
6
26
1
6
1
3
12
32
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章