顯示廣告
隱藏 ✕
※ 本文為 ChiChi7.bbs. 轉寄自 ptt.cc 更新時間: 2014-12-14 17:56:30
看板 Gossiping
作者 snaketsai (林納斯依絲顧德)
標題 Re: [問卦] C++練到超強,學任何其他語言都超快嗎?
時間 Sat Dec 13 16:31:22 2014


敝人在下阿魯一枚,人微言輕還請見諒。
看了板上的回應,有幾點想要補充。

CS院裡面通常會有一門課,專門在講程式語言的設計與本質;
敝校這門課就直接叫做「程式語言」。(雖然這門課消失了,詳情去問那群教授,煙)

這門課會提到,程式語言可以用一些方式來「描述」他們。
這裡會用「描述」二字,是因為評論語言對魯蛇我們來說,就像鄉民評論正妹一樣。
有些人看起來像熟女的,搞不好對別人來說是蘿莉。(?)



扯遠了拉回來。

其中一種很概括的方式,我們稱作"Programming Paradigm"

Paradigm這個字原意是「典範」,所以大致上可以想成一些程式語言非常強烈的特色。

譬如說,很多programming心目中的聖杯:LISP家族,
即是「具有functional programming風格」的語言。

為什麼我會用「具有OO風格」這樣的說詞?

因為現代的語言多半都是multi-paradigm,會混雜許多paradigm於一身。

舉例而言:
C++/Java多半以object-oriented這個特性著稱,
但是他們在近年也加入了很多functional programming的特色;
如C++11有curry

詳細想知道有哪些programming paradigm,可以參考wiki:
http://goo.gl/8ZCq74
Comparison of programming paradigms - Wikipedia, the free encyclopedia
This article attempts to set out the various similarities and differences between the various programming paradigms as a summary in both graphical and tabular format with links to the separate discussions concerning these similarities and differences in extant Wikipedia articles. ...
 



另外很常見的一種描述方式,是依照語言的型別系統。

如C/C++/JAVA,是static type(靜態型別)的語言,

一個變數的型別一但在宣告時決定,基本上很難再改變。

(我知道有C有libffcall可以trick,但那太深了)

但是像scripting language的大咖們,基本上都是dynamic type(動態型別)的語言。
像在Python當中的變數,基本上都是obect reference,隨著assign改變。

但以上的說法,其實是站在編譯器、直譯器做型態檢查的角度來看;
也因此,還有一種更怪誕的東西,被稱做duck typing(鴨型別)。

其概念上大概是,

假如有一個函數叫做「飼養」,傳進來的參數是豬,有一個Method叫做「吃餿水」。
今天呼叫時,傳進來的是「豬」,這個function可以正常執行;
但要是今天傳進來的是「交大學生」......恩,這函數在鴨型別當中其實是不會報錯的。


因為交大學生在學餐荼毒中,已經進化出吃餿水的能力,既然可以執行「吃餿水的method」,

編譯器或直譯器也就把人當一種豬看了。
(以上純屬博君一笑,魯蛇我自己也是對交大學餐很絕望)


其他還有比較多瑣碎的特徵,
譬如說function call的參數、回傳值傳遞方式,(學名稱作Evaluation Stragedy)
有pass by reference , pass by value ,pass by name ...... etc

這些我想一時三刻說不完,有興趣請詳見wiki:
http://goo.gl/c1bYn
Evaluation strategy - Wikipedia, the free encyclopedia
A programming language uses an evaluation strategy to determine when to evaluate the argument(s) of a function call (for function, also read: operation, method, or relation) and what kind of value to pass to the function. For example, call-by-value/pass-by-reference specifies that a function applica ...
 

- - - - - - - - - -

好啦,為什麼要說這麼多?
原因就跟我開頭說得一樣,評斷語言就像評論正妹。
程式語言的分類不是非黑即白,就像我們會把不同的屬性標籤,標示在正妹上一樣。
例如:眼鏡熟女,碳酸系......
(我沒有物化女性的意思,這邊只是想舉好懂的例子闡明概念)


所以,回到原題目:「C++超強能不能因此學別的語言學超快?」
我覺得答案是,「可能可以,也可能不可以」。

因為這題目跟答案本來就是因人而異的問答。

C++漫長的歲月,從沒標準的黑暗時代,到C++98,C++03,c++11,C++14
規範一直在演進,STL中途加入、thread safe的問題浮現......
我怎麼知道所謂「C++超強」是怎麼個強法?

就算這些規範背後的原理都瞭若指掌,
那麼不屬於C++語言的特性是否又能觸類旁通,又是別的事情。
很多寫C/C++的人最後會跑去寫LISP,因為他們覺得它有世界上最美的型別系統;
但也有非常多C/Cpp coder很懼怕functional lang。



最後再跑題一下,我覺得一般社會大眾想學語言,
其實不見得(我甚至不建議)得學C/CPP。

我更傾向於讓初學者學scripting lang,如Python,Ruby,Perl......
因為一般人要用語言的目的不外乎解決日常或工作瑣事,
例如爬正妹塗鴉牆、想dump中華電信的網路直播、
想把老闆給的data爬出來換格式......etc

這些東西,真的沒什麼performance需求,與其讓他們撞上極高的學習曲線之牆;
給他們一個可以真正解決日常生活的工具,我覺得是比較有用的。

之前有人在轉貼所謂的「程式設計師鄙視傳遞鍊」,
就有很經典的一段描述:
C/CPP用戶互相看不起,又都看不起JAVA,
他們又都一起看不起Scripting Lang,而他們都極度鄙視Visual Basic。
最後,所有程式設計師都很討厭「把HTML當程式語言的人」。

這段話除了最後一句有點道理外;
(你用HTML寫個funcion給我再說,ColdFusion ML這種自嗨語言就算了)
其他的說詞我基本上都覺得是基本教義派在互相troll罷了。
而要互鬥在圈內鬥就好了,不要把自己的價值強加在初學者的身上。

===============================================

順便友情廣告一下,PTT有個討論板叫做PLT,
一些程式語言相關的問題想討論,那邊其實比較適合
(大S搜尋,打PLT就可以了)

===============================================


以上廢文騙P幣 :-P

--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.235.153
※ 文章網址: http://www.ptt.cc/bbs/Gossiping/M.1418459484.A.973.html
ivorysoap 
ivorysoap: 講話可以不要夾英文嗎1F 12/13 16:32
翻譯問題有電腦書翻譯巨擘,侯捷老大戰過了
http://goo.gl/XEaEnN
小弟我魯蛇就不多言了

ayabrea74012: 互相看不起 …自古宅宅相輕……2F 12/13 16:34
surrealstar: 學有專精給你推3F 12/13 16:34
Refa: 嗯嗯,跟我想的一樣4F 12/13 16:35
Mozar: 推一個;另專有名詞用英文,其實想深究的人好查,這些很難翻.5F 12/13 16:35
andy199113 
andy199113: 看得懂給脫!噓文的很無聊耶6F 12/13 16:35
JJ1622: 同校給推~7F 12/13 16:36
T3T: 看文章內容就知道你沒馬子(光速逃)8F 12/13 16:36
交大有女朋友的男生大概低於30%吧......
UmeiU: 還看的懂9F 12/13 16:36
sea35: 完全看不懂,到底在工殺小XD10F 12/13 16:36
jayfeng: 推11F 12/13 16:36
abcd5566: 推12F 12/13 16:37
gn01748120: 我……看得懂!!orz13F 12/13 16:38
jackervator: 我是覺得   台灣資工系有些東西不夠扎實  然後又相輕14F 12/13 16:38
jaid: 這行都用英文的 有些翻成中文反而彆扭15F 12/13 16:38
jackervator: 讓我覺得同樣CS出來  國外跟台灣程度會有落差16F 12/13 16:39
jackervator: 尤其是理論部分...........
抱歉我是比較黑手派的,但是我必須承認台灣CS院(至少交大)真的很四不像
敝校軟工老師只有一個,真的不知道該哭還是該笑
現在學校還把專題報告廢除了,嗚呼哀哉,好啦,至少不用聽到有人說:
「我用程式把BIG5轉成JSON」這種聽到會想跳窗的話
Bencrie: 講術語用原文很正常18F 12/13 16:42
kiii210: 恩恩 跟我想得一樣19F 12/13 16:46
jason830301: 140.113.23520F 12/13 16:46
用工作站掛tmux上ptt臭惹嗎QQ
pizza12345: 推21F 12/13 16:54
※ 編輯: snaketsai (140.113.235.153), 12/13/2014 17:09:41
chris1281: html搭function真的崩潰  ...22F 12/13 16:57
ckvir: 閉包跟fp有什麼關係?23F 12/13 17:08
sorryandbye: 不講英文那你C++怎麼翻?      吸袈袈??24F 12/13 17:10
※ 編輯: snaketsai (140.113.235.153), 12/13/2014 17:12:31
summerleaves: 推優文25F 12/13 17:13
wuyuiwei: 直接END26F 12/13 17:28
YYL00: 美食沙漠沒那麼嚴重啦@@27F 12/13 17:30
a032100: 看不懂推28F 12/13 17:36
Williamette: 好專業 給個推29F 12/13 17:47
※ 編輯: snaketsai (27.241.170.49), 12/13/2014 17:48:22
CLANNAD: 能寫出self-hosting compiler才能算是精通30F 12/13 17:52
CLANNAD: c++ grandmaster certification目標也是這個
CLANNAD: 有這種程度的人 學什麼語言絕對都超快
assassinzero: 這篇寫得不錯啊33F 12/13 17:57
slow1235: 好專業 QQ34F 12/13 17:59
winken2004: 推35F 12/13 18:02
iamten: 怎麼沒有c#36F 12/13 19:38
stiles: 優文37F 12/13 19:48
jhtsai0825: 推 tmux38F 12/13 20:32
GA389434 
GA389434: 程式語言宅很快啊 但你就是沒女友啊39F 12/13 20:33
seanvan: 推好文~40F 12/13 21:25
duckfly: 能解決問題的程式都是好程式,真的遇到非C/C++不可的再談41F 12/13 22:58
nitero: 優文42F 12/14 01:06
k170j34xy: 不懂一樓在噓什麼 英文差就認了吧43F 12/14 02:37
k940545: 宅推44F 12/14 02:52

--
※ 看板: Gossiping 文章推薦值: 3 目前人氣: 0 累積人氣: 6554 
※ 本文也出現在看板: PttHot
分享網址: 複製 已複製
( ̄︶ ̄)b goest101, neetarashi, Erdingercat 說讚!
1樓 時間: 2014-12-14 19:44:44 (台灣)
  12-14 19:44 TW
Python對初學者來說真的比較親切,大部分語言和英文差沒多少。本魯自學C的時候痛苦的想放棄,學python就比較沒遇到這種問題,當然有時候還是會卡住,尻兩槍回來想就想通了。
2樓 時間: 2014-12-14 21:50:19 (台灣)
  12-14 21:50 TW
我兒子在堅若磐石擔任軟體工程師,同事禿頭一堆,整天擔心禿頭,頭髮保養品買了一大堆
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇