[爆卦]C語言 小 專題是什麼?優點缺點精華區懶人包

為什麼這篇C語言 小 專題鄉民發文收入到精華區:因為在C語言 小 專題這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者Matz (イラマチオ研究員)看板C_and_CPP標題[討論] 該學習C++嗎?時間Wed J...


本魯一個弱弱的資工本科生。

在學校學過C、Java、javascript。

但後面兩個課上完後就沒碰過了(幾乎忘光)。

平常都是寫C(一些小遊戲、刷題)

專題也是用C語言。

想問如果單純專攻C語言,對未來就業好嗎?

還是需要搭配別的語言會比較好?


--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.171.72.222 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1594206803.A.5F9.html
james732: 把你學過的這三個摸到精熟的話就非常厲害了 07/08 19:44
Schottky: 光靠精通 C 語言就能賺飽飽了 07/08 19:56
Schottky: 要不要學其他的語言看你自己高興,並不是必要的 07/08 19:59
Killercat: C要精通很難 要靠這精通賺飽更難 可以看看硬體廠薪資 07/08 22:32
Killercat: C++機會還大一點 憑良心說 XD 07/08 22:33
Clangpp: c++才比較難學吧... 07/09 01:02
Schottky: 如果你看到可以拿 C 刷題的人說自己弱,千萬別相信他。 07/09 02:08
expiate: 刷題用 c那幾乎資料結構都是手刻的阿!神! 07/09 06:12
Feis: 用 C 寫 LeetCode 的話,如果不要求一次過的話,個人經驗是 07/09 07:37
Feis: 不會特別難。只是看目的 07/09 07:37
Feis: 比較麻煩的主要是 I/O 處理 07/09 07:38
Feis: 但剛好 LeetCode 比較少這問題 07/09 07:39
Killercat: 不過以就業來講 台灣C除非頂尖 不然就是吃不飽餓不死 07/09 09:32
Killercat: 為了就業而想多學的語言來講 我個人比較推java跟go 可 07/09 09:46
Killercat: 以試試看這兩個 07/09 09:46
lc85301: 不用,學 rust(欸 07/09 10:25
MartinJ40: 愛惜生命遠離java/c++ 要也是python rust這些新興語言 07/09 10:38
MartinJ40: 想走前後端js 07/09 10:39
MartinJ40: C++擁有所有paradigm 怎麼可能比C簡單 07/09 10:41
MartinJ40: 光template就是一個語言的難度 07/09 10:42
Killercat: er..我說的C++機會大一點 是說「賺飽的機會」不是說好 07/09 11:22
Killercat: 學。java是滿藍海的說真的,但是position目前來看還是 07/09 11:23
Killercat: 很多,go的話是真的不錯,rust也讚但是目前機會較少 07/09 11:23
cphe: 用C刷光是刻資料結構就飽了,刻完才是真正開始解題 07/09 12:42
感謝各位大大的建議了。
※ 編輯: Matz (122.116.159.149 臺灣), 07/09/2020 16:35:04
aecho: 啊嗚…就業的話…資料結構與演算法要學好呀 -.- 07/09 16:54
aecho: 如果有教資料庫的話,那個ACID也要好好搞懂呀 Orz 07/09 16:56
aecho: 進職後被丟去學MFC, C#, Obj-C 都是一堆學校沒教過的 07/09 16:57
Schottky: 平常好像不會聽到有人勸開戰鬥機的去開計程車就好 07/09 19:01
CoNsTaR: 系統語言 rust 最讚沒有之一 07/10 00:44
KanzakiHAria: 不會有人想特地學戰鬥機目的是找工作啊 07/10 08:42
KanzakiHAria: 想就業最多也是民航飛機 怎麼樣都不會是戰鬥機 07/10 08:42
Schottky: 如果還沒學,我同意。但人家已經開著戰鬥機飛來飛去了 07/10 11:13
Schottky: 然後你跟他說計程車的職缺比較多去學開計程車 07/10 11:13
Killercat: C...戰鬥機喔... 好吧,只能說我尊重你的看法 XD 07/10 14:55
Killercat: 人家就是問就業問題 當然就以市場來回答啊... 07/10 14:55
Killercat: C在就業市場的確「相對沒那麼強勢」也是事實吧 07/10 14:57
petercoin: 台灣高薪的軟體相關職缺還是IC廠韌體居多吧? 07/11 00:08
Dracarys: S大描述的真傳神XD 07/11 00:08
loveme00835: 人活得好好地為什麼要學希佳佳呢 Q_Q 07/11 01:53
alex70266: 看就業的方向是哪種吧,往韌體/嵌入式走的話 07/11 16:09
alex70266: 不太會C還是很痛苦的 07/11 16:10
alex70266: 不過去摸點C++不是什麼壞事啦 07/11 16:14
flarehunter: 我覺得不用執著語言,學點不同思考的方法,像是FP, 07/11 21:36
flarehunter: OOP, 設計模式, 軟體工程,推薦看clean code系列書 07/11 21:36
flarehunter: 反正出社會工作八成是沒學過的事,練基礎功總是有用 07/11 21:40
flarehunter: M大說C++有所有範式,所以用C++學這些範式也不錯 07/11 21:48
ddavid: 就算C真的是戰鬥機好了,你也要真的開得好才會賺得來,只 07/11 23:36
ddavid: 是會開的話,升空也就是被打下來的分 07/11 23:37
bben900911: 看起來對C頗有心得。 去IC廠當韌體寫C,薪水不錯吧? 07/12 00:09
CoNsTaR: C++ 有所有範式反對一票,光是 fp 就沒有了 07/13 07:06
flarehunter: 有c++11開始有lambda也可以傳來傳去 可以算有fp吧? 07/13 08:45
CoNsTaR: 這和 fp 說他們有 first class module(或 record)存 co 07/13 08:59
CoNsTaR: ntext,可以算 OOP 有什麼不同 XD 07/13 08:59
ray2501: 不就有 lambda calculus,然後可以函式輸出和輸入,就算 07/13 10:23
ray2501: 有初步支援了嗎? 從定義上來看,C++ 是有支援啊 07/13 10:23
flarehunter: 如果可以支援多型來達到依賴反轉,我就覺得算是OOP吧 07/13 10:52
loveme00835: 用 OOP/SOLID 來考慮學 C++ 是否搞錯什麼 xD C++ 的 07/13 10:59
loveme00835: 特色又不是 OO 07/13 10:59
flarehunter: 我也是覺得語言不重要 重要的是那些概念 07/13 11:03
Killercat: 事實上C++的OO還滿薄弱的 不過因為有template,所以 07/13 11:04
Killercat: metaprogramming下的彈性簡直是作弊 07/13 11:04
Killercat: 沒interface 沒object 說真的要當真正的OO還有段路XD 07/13 11:04
Killercat: 拿來學一些當infrastructure library的東西倒是讚 07/13 11:05
Killercat: 看看那個Loki::SingletonHolder寫得多彈性 XD 07/13 11:06
Killercat: 重點是還真的易用 超易用 07/13 11:06
Killercat: 目前還沒看過哪種別的語言(可能除了C的macro外)可以把 07/13 11:07
Killercat: infrastructure library做得那麼有彈性且好用的 07/13 11:07
CoNsTaR: @ray2501 有 lambda calculus 是個什麼說法 orz 07/13 11:07
CoNsTaR: 可以函數輸入輸出又是什麼說法 orz 07/13 11:07
CoNsTaR: 你的定義怎麼好像跟別人都不太一樣 XD 07/13 11:08
CoNsTaR: @Killercat Agda 呢?連 reflection 都是用自己寫的 07/13 11:13
Killercat: 好吧那應該是我看過的語言不夠多 :P 07/13 11:16
Killercat: 不過我想主流語言裡面應該C++這點是近乎無敵了 07/13 11:16
flarehunter: @CoNsTaR 你認為的FP應該有哪些概念啊? 07/13 11:20
CoNsTaR: 如果要“成為”一個 FP 語言,最重要的前提是必須是 decl 07/13 11:36
CoNsTaR: arative 吧,或至少在某些範圍內是 declarative,或者就 07/13 11:36
CoNsTaR: 算做不到也要有一些 compromise 的產物,例如 rust 的 mu 07/13 11:36
CoNsTaR: table 之類的 07/13 11:36
CoNsTaR: 如果只是想要“支援 FP”最重要的就是要有 GADT 去配合某 07/13 11:36
CoNsTaR: 種 exhaustive check(例如 pattern matching in terms o 07/13 11:37
CoNsTaR: f pattern calculus,或是 Scott、Church encoding in te 07/13 11:37
CoNsTaR: rms of lambda calculus),和 first class function 07/13 11:37
CoNsTaR: *某種類似 GADT 去配合某種 exhaustive check 07/13 11:39
ray2501: 第一步是 First-class and higher-order functions,可以 07/13 11:53
ray2501: 接受函式當作輸入輸出,這 c++ 早就有了,你的定義才奇怪 07/13 11:54
CoNsTaR: 我不是故意要在 c/cpp 版討論 fp(你可以去 PLT 版開一篇 07/13 12:04
CoNsTaR: ,我或其他大大可以在那裡回你),只是如果真的是 first 07/13 12:04
CoNsTaR: class,有可能會不是 higher order 嗎?為什麼要分成兩 07/13 12:04
CoNsTaR: 個條件? 07/13 12:04
CoNsTaR: 然後既然是 first class,為什麼 c++ 不能有 flip 和 par 07/13 12:04
CoNsTaR: tial application?(我知道有 bind) 07/13 12:04
CoNsTaR: 解釋一下,我說的「類似 GADT 去配合某種 exhaustive che 07/13 12:15
CoNsTaR: ck」是打造 first class 函數的其中一種方法,只有用這 07/13 12:15
CoNsTaR: 種方法產生函數的語言才能算是某種 FP 07/13 12:15
flarehunter: 我理解的範式是指如何思考程式架構的方法,像是結構化 07/13 12:36
flarehunter: 能夠divide and conquer, OOP可以用多型控制依賴方向 07/13 12:38
flarehunter: FP我就不熟,只有理解到可以用小函式組合出大函式和 07/13 12:42
flarehunter: 分離有side effect的部份讓平行化順利一點 07/13 12:43
flarehunter: 感覺你提的都有點像是語言特性,不是FP範式必要功能? 07/13 12:44
flarehunter: pattern matching和if else在程式架構上有什麼差異? 07/13 12:47
CoNsTaR: 我也是啊(程式架構的方法),所以我開頭就說了必須是 de 07/13 12:51
CoNsTaR: clarative 07/13 12:51
CoNsTaR: 後來提的 GADT,pattern matching,和 first class funct 07/13 12:51
CoNsTaR: ion 都是讓你能夠用「fp 的方法」建構程式的要素,缺一 07/13 12:51
CoNsTaR: 個就無法獨立運作 07/13 12:51
CoNsTaR: 所以我才會說 c++ 不支援 fp(不能用 fp 的方法建構程式 07/13 12:51
CoNsTaR: ),因為三個裡面根本沒有一個支援,最接近 fp 的也只有 07/13 12:52
CoNsTaR: higher order function 而已 07/13 12:52
CoNsTaR: if else 是對 boolean 做 induction(elimination),pat 07/13 12:57
CoNsTaR: tern matching 是對任何 type 的 induction,意思是只要 07/13 12:57
CoNsTaR: 是 type,就能夠被使用 07/13 12:57
CoNsTaR: 因為 c++ 的 bool 來歷不明(你找不到 bool 這個 type 07/13 13:12
CoNsTaR: 的 definition),if else 也來歷不明,你找不到 if els 07/13 13:12
CoNsTaR: e 的 definition(形式化 if else 的方法),但在 fp,這 07/13 13:12
CoNsTaR: 些都是可以用程式寫出來的(不是說寫一個編譯器,而是你 07/13 13:12
CoNsTaR: 要用 bool 你可以自己寫一個 bool,你要 pattern matchin 07/13 13:12
CoNsTaR: g,你可以自己用 Scott encoding),這個算是 if else 和 07/13 13:12
CoNsTaR: pattern matching 最大的差別 07/13 13:12
CoNsTaR: *應該要說「寫出來的 bool 直接可以 pattern matching」 07/13 13:32
CoNsTaR: (不需要編譯器,你在紙筆上也可以做),這樣講比較好傳 07/13 13:32
CoNsTaR: 達 GADT 和 pattern matching 之間的關係 07/13 13:32
MartinJ40: functional programming跟CFG是等價 07/13 15:13
MartinJ40: C++ template跟turning是等價 07/13 15:14
MartinJ40: 怎麼可能Type-3做不出來Type-2文法..... 07/13 15:16
CoNsTaR: ...... 我不知道要講什麼了 orz 07/13 16:35
CoNsTaR: 你真的知道你講的那些名詞是什麼意思嗎? 07/13 16:35
CoNsTaR: 關於那個 library,等到它不用 macro 的時候再來嘴吧 07/13 16:35
MartinJ40: 我的意思是 你提的那些特性 是能先用template刻出來 07/13 17:01
MartinJ40: 只基於這些刻出來的物件去寫程式的話 不就相當於 07/13 17:01
MartinJ40: FP 07/13 17:01
MartinJ40: 用刻出來的這些元件再去作 BOOL IF ELSE 07/13 17:02
MartinJ40: 而非使用原本c++的關鍵字 07/13 17:02
CoNsTaR: 問題是 TMP 做不到這樣啊,TMP 自己都做不到 FP 很多事 07/13 17:12
CoNsTaR: 情了,你怎麼會期待用它寫出來的元件可以 magically 把你 07/13 17:12
CoNsTaR: 的程式“變成” FP 07/13 17:12
flarehunter: 雖然已經偏離原來問題很遠了,不過難得在C++版有FP 07/13 17:55
flarehunter: 討論串XD 我想繼續問以FP的角度會怎麼架構一個系統? 07/13 17:55
flarehunter: GADT和pattern matching為什麼會是必要功能? Lisp 07/13 17:55
flarehunter: 是不是沒有這些功能啊? 07/13 17:55
loveme00835: 以為走錯板, 原來是在討論 Ancient C++ 07/13 18:37
CoNsTaR: 如果能接受英文的話可以看這個 07/13 18:39
CoNsTaR: https://youtu.be/PLFl95c-IiU 07/13 18:39
CoNsTaR: 它標題雖然寫 DDD 可是其實是在講 FP 07/13 18:39
CoNsTaR: lisp 我不會,但不一定非得 GADT,GADT 和 pattern match 07/13 18:39
CoNsTaR: ing 也都只是語法糖而已,別的類似的東西也可以 07/13 18:39
CoNsTaR: 如果你接受 untyped 的程式,你也可以完全不要任何類似 G 07/13 18:39
CoNsTaR: ADT 或 pattern matching 的東西,就完全的 function 也 07/13 18:39
CoNsTaR: 是可以,但我認為大部分人說的 FP 不是那樣的東西 07/13 18:39
CoNsTaR: 那要請教一下 L 大 How modern C++ looks like 07/13 18:48
loveme00835: 要嘴 @MartinJ40 的連結跟 macro 也先看一下 [P1371] 07/13 19:05
loveme00835: 跟 [P1221] 的狀態, C++ 也是 community driven lang 07/13 19:07
loveme00835: 還要經過 ISO commitee review, 除了相容性要顧最重 07/13 19:09
loveme00835: 要的是 "標準化" 這件事. 你喜歡其他語言是你的自由, 07/13 19:10
loveme00835: 但是在說 "某語言都沒有什麼特性" 前先搞清楚自己是 07/13 19:11
loveme00835: 不是真的熟悉它, 然後如果覺得什麼特性很缺, 你可以 07/13 19:12
loveme00835: 發提案, 這就是 how modern C++ looks like 07/13 19:12
loveme00835: 看討論還以為是考古學有什麼重要發現 07/13 19:13
loveme00835: 簡單的說, 不需要標準化的語言你想要什麼特性都很容 07/13 19:15
loveme00835: 易 07/13 19:15
CoNsTaR: 整理了一下: 07/13 19:42
CoNsTaR: 1. C++ 是地表最強語言,因為不論什麼功能沒有都只是目前 07/13 19:42
CoNsTaR: 沒有,什麼功能不好都只是目前不好,以後還是都會有,都 07/13 19:42
CoNsTaR: 會變好的 07/13 19:42
CoNsTaR: 2. 要是真的不能有,也是因為相容性和標準化,才不是因 07/13 19:42
CoNsTaR: 為 C++ 不支援 07/13 19:42
CoNsTaR: 我是不知道把語言的“狀況”寫在紙上叫它“標準”有什麼 07/13 19:42
CoNsTaR: 神奇的效果,但就我所知,所有的社群語言誰不是經過很多 07/13 19:42
CoNsTaR: 年的討論才會讓實作成為語言的一部分,語言的發展哪個沒 07/13 19:43
CoNsTaR: 有目標和提案,哪個不會考慮相容性 07/13 19:43
CoNsTaR: 如果有一個人跑來跟你說 Haskell 有 dependent types,沒 07/13 19:43
CoNsTaR: 有 dependent types 的都是 ancient Haskell 你覺得如何 07/13 19:43
CoNsTaR: ? 07/13 19:43
flarehunter: 影片講得滿簡單清楚,有稍微理解FP的實際用處,謝謝 07/13 19:54
flarehunter: 影片裡的例子用C++的struct+enum也可以兜出來吧 07/13 19:55
CoNsTaR: enum 的確在有些狀況下可以做 sum type 07/13 20:01
CoNsTaR: 可以用 struct(product type,and)和 inheritance(sum 07/13 20:01
CoNsTaR: type,or)兜出來 07/13 20:01
CoNsTaR: 雖然這兩個東西本意應該也不是給你這樣用的就是了 XD 07/13 20:01
CoNsTaR: 然後那個影片只是在講用 FP 做 typing 的方法,還是有很 07/13 20:04
CoNsTaR: 多其他東西是沒有講到的,所以真的用 FPL 寫程式的時候可 07/13 20:04
CoNsTaR: 能還是會有點陌生 07/13 20:04
loveme00835: 你已經幫我回答大部分的問題了. 語言標準化尤其是 IS 07/13 20:06
loveme00835: O 標準, 最終都是為了服務業界. 所以有關 functional 07/13 20:06
loveme00835: language 的提案被 reject 是常有的事情, 能用舊特 07/13 20:06
loveme00835: 性達成的功能, 除非新特性可以做得更好更有 "效率", 07/13 20:07
loveme00835: 否則它不會變成語言的一部分. 標準化圍繞在軟體開發 07/13 20:07
loveme00835: 議題上; 而不是發掘語言的可能性. 所以前面才會說道 07/13 20:07
loveme00835: 先熟悉這個語言再來評論比較好 07/13 20:07
loveme00835: 這就好像討論為什麼魚沒有腳, 所以和雞比牠絕對跑不 07/13 20:09
loveme00835: 快一樣. 07/13 20:09
loveme00835: 你來魚板不去了解為什麼魚不長腳, 然後推廣雞有腳多 07/13 20:11
loveme00835: 棒不是很奇怪嗎? 而且我從來沒有說過魚是最棒的生物, 07/13 20:11
loveme00835: 你的自然語言可能也有待加強. 07/13 20:11
CoNsTaR: 我會在這邊回是因為有人宣揚 c++ 支援 FP,你可能漏看前 07/13 20:14
CoNsTaR: 因後果了 07/13 20:14
CoNsTaR: 我不會沒事跑去跟不認識的人說某個語言沒有某個特性/功 07/13 20:14
CoNsTaR: 能,目前沒那麼無聊,謝謝 07/13 20:14
CoNsTaR: 而且 fyi,就算你講的那兩個提案都通過了,c++ 仍然離支 07/13 20:16
CoNsTaR: 援 FP 非常遙遠 07/13 20:16
CoNsTaR: 至少我想不出有什麼提案的組合能夠讓 c++ 支援 FP 又向 07/13 20:19
CoNsTaR: 後相容啦,可能我廢 07/13 20:19
yoco: 不該 08/15 23:38

你可能也想看看

搜尋相關網站