※ 本文為 ChiChi7.bbs. 轉寄自 ptt.cc 更新時間: 2014-12-14 17:56:30
看板 Gossiping
作者 標題 Re: [問卦] C++練到超強,學任何其他語言都超快嗎?
時間 Sat Dec 13 16:31:22 2014
敝人在下阿魯一枚,人微言輕還請見諒。
看了板上的回應,有幾點想要補充。
CS院裡面通常會有一門課,專門在講程式語言的設計與本質;
敝校這門課就直接叫做「程式語言」。(雖然這門課消失了,詳情去問那群教授,煙)
這門課會提到,程式語言可以用一些方式來「描述」他們。
這裡會用「描述」二字,是因為評論語言對魯蛇我們來說,就像鄉民評論正妹一樣。
有些人看起來像熟女的,搞不好對別人來說是蘿莉。(?)
扯遠了拉回來。
其中一種很概括的方式,我們稱作"Programming Paradigm"
Paradigm這個字原意是「典範」,所以大致上可以想成一些程式語言非常強烈的特色。
譬如說,很多programming心目中的聖杯:LISP家族,
即是「具有functional programming風格」的語言。
為什麼我會用「具有OO風格」這樣的說詞?
即是「具有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. ...
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/C++/JAVA,是static type(靜態型別)的語言,
一個變數的型別一但在宣告時決定,基本上很難再改變。
(我知道有C有libffcall可以trick,但那太深了)
但是像scripting language的大咖們,基本上都是dynamic type(動態型別)的語言。
像在Python當中的變數,基本上都是obect reference,隨著assign改變。
但以上的說法,其實是站在編譯器、直譯器做型態檢查的角度來看;
也因此,還有一種更怪誕的東西,被稱做duck typing(鴨型別)。
其概念上大概是,
也因此,還有一種更怪誕的東西,被稱做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 ...
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 …
http://goo.gl/XEaEnN
小弟我魯蛇就不多言了
噓 : 互相看不起 …自古宅宅相輕……2F 12/13 16:34
推 : 學有專精給你推3F 12/13 16:34
推 : 嗯嗯,跟我想的一樣4F 12/13 16:35
推 : 推一個;另專有名詞用英文,其實想深究的人好查,這些很難翻.5F 12/13 16:35
→ andy199113 …
推 : 同校給推~7F 12/13 16:36
推 : 看文章內容就知道你沒馬子(光速逃)8F 12/13 16:36
交大有女朋友的男生大概低於30%吧......推 : 還看的懂9F 12/13 16:36
推 : 完全看不懂,到底在工殺小XD10F 12/13 16:36
推 : 推11F 12/13 16:36
推 : 推12F 12/13 16:37
推 : 我……看得懂!!orz13F 12/13 16:38
→ : 我是覺得 台灣資工系有些東西不夠扎實 然後又相輕14F 12/13 16:38
→ : 這行都用英文的 有些翻成中文反而彆扭15F 12/13 16:38
→ : 讓我覺得同樣CS出來 國外跟台灣程度會有落差16F 12/13 16:39
→ : 尤其是理論部分...........
抱歉我是比較黑手派的,但是我必須承認台灣CS院(至少交大)真的很四不像→ : 尤其是理論部分...........
敝校軟工老師只有一個,真的不知道該哭還是該笑
現在學校還把專題報告廢除了,嗚呼哀哉,好啦,至少不用聽到有人說:
「我用程式把BIG5轉成JSON」這種聽到會想跳窗的話
推 : 講術語用原文很正常18F 12/13 16:42
推 : 恩恩 跟我想得一樣19F 12/13 16:46
噓 : 140.113.23520F 12/13 16:46
用工作站掛tmux上ptt臭惹嗎QQ推 : 推21F 12/13 16:54
※ 編輯: snaketsai (140.113.235.153), 12/13/2014 17:09:41→ : html搭function真的崩潰 ...22F 12/13 16:57
→ : 閉包跟fp有什麼關係?23F 12/13 17:08
噓 : 不講英文那你C++怎麼翻? 吸袈袈??24F 12/13 17:10
※ 編輯: snaketsai (140.113.235.153), 12/13/2014 17:12:31→ : 推優文25F 12/13 17:13
推 : 直接END26F 12/13 17:28
推 : 美食沙漠沒那麼嚴重啦@@27F 12/13 17:30
推 : 看不懂推28F 12/13 17:36
推 : 好專業 給個推29F 12/13 17:47
※ 編輯: snaketsai (27.241.170.49), 12/13/2014 17:48:22推 : 能寫出self-hosting compiler才能算是精通30F 12/13 17:52
推 : c++ grandmaster certification目標也是這個
→ : 有這種程度的人 學什麼語言絕對都超快
推 : c++ grandmaster certification目標也是這個
→ : 有這種程度的人 學什麼語言絕對都超快
推 : 這篇寫得不錯啊33F 12/13 17:57
推 : 好專業 QQ34F 12/13 17:59
推 : 推35F 12/13 18:02
推 : 怎麼沒有c#36F 12/13 19:38
推 : 優文37F 12/13 19:48
推 : 推 tmux38F 12/13 20:32
→ GA389434 …
推 : 推好文~40F 12/13 21:25
→ : 能解決問題的程式都是好程式,真的遇到非C/C++不可的再談41F 12/13 22:58
推 : 優文42F 12/14 01:06
推 : 不懂一樓在噓什麼 英文差就認了吧43F 12/14 02:37
推 : 宅推44F 12/14 02:52
--
( ̄︶ ̄)b goest101, neetarashi, Erdingercat 說讚!
1樓 時間: 2014-12-14 19:44:44 (台灣)
→
12-14 19:44 TW
Python對初學者來說真的比較親切,大部分語言和英文差沒多少。本魯自學C的時候痛苦的想放棄,學python就比較沒遇到這種問題,當然有時候還是會卡住,尻兩槍回來想就想通了。
回列表(←)
分享