顯示廣告
隱藏 ✕
※ 本文轉寄自 ptt.cc 更新時間: 2024-10-27 16:51:15
看板 Tech_Job
作者 KanzakiHAria (神崎・H・アリア)
標題 Re: [討論] 有沒有讀工程的覺得學python很難/煩的呢
時間 Sat Oct 26 13:13:18 2024


※ 引述《champdessert (朱安)》之銘言:
: 如題
: 小弟唸工程的,之前學C++拿來處理實驗數據、玩arduino或用matlab都覺得還不錯用,因為就那幾個指令,只要靠邏輯就可以慢慢土法煉鋼拼湊出來要的東西。
: 但最近碰到大家說很好學的python,卻覺得它東西都過度包裝所以不好用,正因為都是人「定義」包裝好的東西,一定要照著他的方法寫,反而用起來覺得煩。如果遇到bug因為都是包裝好的指令所以無法用直觀的邏輯去debug或推論,還要上網查一堆資料,還不一定有解。而且這樣就會變成case by case,在不同的應用就要學一系列不同的函式定義,情境稍有不同可能就無法套用,沒辦法用最基礎的一套解決。
: 為什麼大家都說c++比較難python簡單,而我的感覺卻相反呢?是我之前都用得太淺了嗎?
: --------------------------------
: 更:感謝大家的回覆,看來真的是我學得太基礎的關係才會這麼覺得。要來努力學習了~

你肯定是不會C++  C++是一個高度需要理解編譯器運作的語言  隨便舉個例子

template <typename T, typename... Args>
constexpr auto add(T&& first, Args&&... rest) {
    return std::forward<T>(first) + add(std::forward<Args>(rest)...);
}

template <typename T>
constexpr T add(T&& value) {
    return std::forward<T>(value);
}


這是C++11/14 template使用可變參數(...)來處理多個不同型態參數

所以需要遞歸終點<>,確保模板遞歸能正常結束

constexpr就是編譯時期決定

std::forward跟std::move是C++11的 move symantec  是compiler優化的概念


到了C++17 多了摺疊表達式(Variadic Template)可以簡化每次需要定義遞迴終點

template <typename... Args>
constexpr auto add(Args&&... args) {
    return (std::forward<Args>(args) + ...);
}

現實情況兩種都要會  不能只會Variadic Template的版本 因為最廣泛是C++11

然後因為早期(C++20以前) 會造成噴大量的compiler error又很難找問題

所以這段C++20會再升級先定義concept來讓compile error問題更明確在哪

template<typename T, typename U>

concept Addable = requires(T a, U b) {
    { a + b } -> std::same_as<decltype(a + b)>;
};

template <typename... Args>
requires (Addable<Args, Args> && ...)
constexpr auto add(Args&&... args) {
    return (std::forward<Args>(args) + ...);
}

以上只是C++少量編譯器針對的feature

其他還有很多是針對編譯時期優化的工具 std::less<> 編譯時期比大小腦包工具

有專門給編譯器看的[[fallthrough]] 強制要求編譯器跳過的神經病Attribute


<=>(三向比較運算符或太空船運算符)這也是針對編譯器後端的的智障語法

--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.99.2 (臺灣)
※ 作者: KanzakiHAria 2024-10-26 13:13:18
※ 文章代碼(AID): #1d77fmkp (Tech_Job)
※ 文章網址: https://www.ptt.cc/bbs/Tech_Job/M.1729919600.A.BB3.html
Dracarys    : 推這篇1F 10/26 13:16
ejnfu       : 光lvalue rvalue reference和move semantics 就很煩2F 10/26 14:02
ejnfu       : 了,再加上template metaprogramming 讓我想起不好
ejnfu       : 的回憶了
giantwinter : 他把c當成c++5F 10/26 14:18
ian41360    : 跟我想的差不多,樓下碼農幫我judge一下6F 10/26 14:21
JustBecauseU: 只能說雖然很難 但是比python酷7F 10/26 14:25
JustBecauseU: 不然這年頭隨便一個人都說自己會python
johnjohnlin : 所以後來才有if constexpr讓事情沒有那麼糟糕 XD9F 10/26 14:27
C++白爛之處  還要知道哪些寫法是存活在哪些C++版本......

甚至還有 (since C++17)(deprecated in C++20) 這種只存活一版的鬼東西=.=

https://i.imgur.com/U2lxAXe.png 有圖有真相 std::variant_alternative
[圖]
qwe78971    : 寫C++很想大聲說我看懂了 但實際上不懂10F 10/26 14:28
teddy       : 嗯對 跟我想的一樣11F 10/26 14:33
furnaceh    : 好難 我第一次看到c++就知道要放棄了12F 10/26 15:01
bigbite     : metaprogramming真的走偏了我個人覺得13F 10/26 15:02
NexusPrime  : C++語法太繁雜啦,加上很多把c++當c用的,浪費c++14F 10/26 15:19
NexusPrime  : 的OOP特性
NexusPrime  : 單純資料處理用python即可,甚至c#都可以
donkilu     : 完全看不懂 我果然不會寫C++...17F 10/26 15:38
abccbaandy  : 好奇deprecated會怎樣? 下版移除?18F 10/26 15:59
可以看編譯器警告未來不支援  然後看哪時move
到了move的版本就是compile error
gn01705529  : 身為C++ 10年+開發者,只能說C++走到有點偏了19F 10/26 16:08
gn01705529  : 開發反應速度完全比不上python
gn01705529  : 你還在debug template,人家產品都快上線了
真的  開發要快都是要用有package mamanger的現代語言
js還支援熱插拔就地改code看結果  Hot Module Replacement (HMR)
C++還要先等compile......
ko27tye     : 我只覺得近幾年的c++一直往python的方向靠22F 10/26 16:11
gn01705529  : 更別說一些奇妙的語法,你係。一個90%的人看不懂的23F 10/26 16:14
gn01705529  : 東西是要搞誰
gn01705529  : *你寫
真的  所以主要還是C++11最為廣泛
profiles    : 還是C直覺,所見code即所執行code26F 10/26 16:24
zaiter 
zaiter      : 全世界應該統一一種語言 那就是python27F 10/26 17:03
Lipraxde    : 原 po 就比錯東西啦,把程式語言本身的複雜性,和28F 10/26 17:09
Lipraxde    : 外掛 package / 程式庫的複雜性混為一談,他就不是
C++ package更是地獄  現在比較好的用CMake 去build
更古老的還要用automake之類的 很難搞
現代語言都有套件管理 加上Dockrefile馬上就可以搬家了
Lipraxde    : 嫌語法難,是覺得看人家程式、文件麻煩30F 10/26 17:09
Lipraxde    : 喔對了,原來 concept 是這樣用啊...說真的覺得他
Lipraxde    : 有點多餘,template error 就 CRTP 寫比較複雜的時
Lipraxde    : 候比較難看懂,所以一直沒想去學 concept
wei115      : https://i.imgur.com/NDhMBE7.jpeg34F 10/26 17:16
[圖]
HGD1021     : 什麼啦,亂打一串英文跟數字,害我都看不懂35F 10/26 17:18
比perl好  perl是號稱加密前後看起來一樣的語言
dildoe      : cxx 就是永遠都有 modern XD36F 10/26 17:49
笑死 c++11 modern c++,  c++17 more modern,   c++20 more more modern
wulouise    : concept出問題的時候好查很多37F 10/26 18:29
jhengME     : 剛學時光virtual就頭暈,結果後面還有C09、C11、C38F 10/26 18:30
jhengME     : 17、C21 ,到底
jimjim951357: 樓上,還有23、2640F 10/26 18:34
youarefat   : 真的開發時,絕大多數那些新東西都用不到41F 10/26 18:48
一個語言開發一堆大部分使用者不使用的功能幹嘛....
所以我說enum to string哪時要完成
pig2014     : 媽的還一堆人說戰語言沒意義。cpp就是王者,其他人42F 10/26 18:50
pig2014     : 慢慢去旁邊嘴戰語言沒意義,真正了解metaprogrammi
pig2014     : ng的人誰敢把其他語言跟cpp放同一個等級。py那個me
pig2014     : taclass是三小,強者隨便看30分鐘doc就能重載__new
pig2014     : __瞎改行為了。cpp得先花30天K完effective modern
pig2014     : c++,後面還想成佛還有C++ Templates 2/e可以讓你
pig2014     : 用半年慢慢細品
從入門到放棄
pig2014     : 原po立場太簡單了,就是一個perfect forwarding小49F 10/26 18:53
pig2014     : 品而已,其實還能用CRTP為例來強暴台積板的鄉民
dou0228     : 這就是torvalds批評C++原因啊51F 10/26 18:53
重點是還很不穩  三不五時就改版  C++11還做到向下相容  C++17開始採破壞式不相容

pig2014     : *例子52F 10/26 18:54
labbat      : 開公司是要賺錢,誰有那個時間慢慢學新東西當然是53F 10/26 18:55
labbat      : 拿asci c語言硬幹下去
johnjohnlin : CRTP也是難用,很多子型別的東西不能access55F 10/26 19:33
peter98     : template metaprogramming真的地獄  但我的C++停留56F 10/26 19:35
peter98     : 在C++13就是~
peter98     : 但說實話啦~ 我最喜歡的語言是Scala跟Kotlin
peter98     : 雖然跟c++比  這兩個語言都小眾就是。。。
id41030     : 我硬體都看無60F 10/26 19:43
CoNsTaR     : python 難是難在沒有 static typing,C++ 大部分人61F 10/26 20:46
CoNsTaR     : 覺得難卻也是因為它的 static typing
CoNsTaR     : 個人認為如果把 python 拿來寫產品,它根本神難,連
我都用js寫產品 可寫前後端 可用docker打包  舒服
CoNsTaR     : 參數的 type 是什麼都不知道,傳回來是什麼東西也64F 10/26 20:46
CoNsTaR     : 不知道
CoNsTaR     : 但如果把 C++ 拿來當腳本語言寫,也是神難,明明就
CoNsTaR     : 簡單直覺只跑一次的垃圾程式也要在那邊搞旁支末節
CoNsTaR     : 的 type checking
CoNsTaR     : 但我個人是很 appreciate C++ 的 template metaprog
CoNsTaR     : ramming 的,讓你不需要用到 coq, idris, agda 之
CoNsTaR     : 類的語言也有類似 dependent types 可以用,雖然只
CoNsTaR     : 有 compile time
※ 編輯: KanzakiHAria (36.231.99.2 臺灣), 10/26/2024 21:41:56
ccode       : python static typing有pyright或mypy可用吧73F 10/26 21:42
shooter555  : 還好我都寫C9974F 10/26 21:47
搞到現在連C也要喊版號XD  C11開始也學C++那樣經常新版
※ 編輯: KanzakiHAria (36.231.99.2 臺灣), 10/26/2024 21:52:55
shooter555  : C的生態就是一堆專案還是用舊的std compile 還要指75F 10/26 21:55
shooter555  : 定舊版
shooter555  : 還好 不用跟太勤
shooter555  : 台積版怎麼討論C++ 當然是討論VBA
晶片當然是要談Verilog
※ 編輯: KanzakiHAria (36.231.99.2 臺灣), 10/26/2024 22:02:10
saxontai    : 寫慣C99 or later後,用到有在維護更新卻只堅定支持79F 10/26 22:02
saxontai    : C89/C90 的 compiler 真的很想罵髒話…
profiles    : 程度語言是用來開發專案 ,解決現實問題,寫出來像81F 10/26 22:14
profiles    : 藝術品的程式語言,只適用於給大神用,然後只有大
profiles    : 神能維護,最後就是慢慢用的人越來越少
gozule      : 放棄cpp改寫rust快樂很多,性能差不多84F 10/26 22:38
MTKer5566   : 想問一句,是賺多少啦85F 10/26 23:29
MTKer5566   : (開玩笑的。。。
blanka      : 其實Intel內部是用Python在Debug IC了87F 10/27 00:35
sustainer123: 新手入門CPP要從那版開始R 學過C 熟悉Python88F 10/27 01:01
leviathen   : Python 這麼好寫還能靠北也是奇葩89F 10/27 01:16
ejnfu       : my professional life is so much better since I h90F 10/27 01:37
ejnfu       : ave abandoned C++
BigCockman  : 這語言就是歷史共業啦 這種處處是leaky abstracti92F 10/27 01:58
BigCockman  : on的東西 除了拖垮開發速度之外實在沒什麼好的
leviathen   : c++樓主說的這類東西真的很麻煩94F 10/27 03:29
wankel      : 把C++當C用 code才看的懂....95F 10/27 06:33
b0920075    : 西家家又沒逼每個寫西家家的人都要深入了解 metapr96F 10/27 06:39
b0920075    : ogramming ,你不會用到的話簡單知道下概念就好了
schemer     : 果然要害一個人就是叫他去學c++98F 10/27 08:04
kaltu       : 所以上篇我才會說嫌C++不夠難的通通去寫一次C++的co99F 10/27 08:11
kaltu       : mpiler frontend
kaltu       : 不會compiler根本寫不了C++,太多東西是為了compile
kaltu       : r存在的了
kaltu       : 不過話說回來我覺得Rust學的後面要玩procedural mac
kaltu       : ro其實也沒有比C++的template好到哪裡去
kaltu       : 但如果要從這個角度來看的話,寫Python的寫到這個程
kaltu       : 度也都不是在寫Python了而是Cython
pot1234     : 剛摸c++的人基本上不會自己寫template, move這些。107F 10/27 09:18
pot1234     : 第一次用python的感覺是資料不好查,會return什麼
pot1234     : 都不寫…
dannyer     : c的宣告和定義就會讓你感覺python的自主性有多好110F 10/27 09:57
wulouise    : gdb也是都用Python輔助script111F 10/27 10:26
chobit199685: 現在直接上Rust/Go即可,頂多補個assembly112F 10/27 12:44

--
※ 看板: Tech_Job 文章推薦值: 0 目前人氣: 0 累積人氣: 402 
作者 KanzakiHAria 的最新發文:
點此顯示更多發文記錄
分享網址: 複製 已複製
1樓 時間: 2024-10-26 21:54:35 (台灣)
  10-26 21:54 TW
上個世代IC業設計出軟體可惜你已經吃不到飽和
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇