精華區beta Gossiping 關於我們 聯絡資訊
路過賺點P幣 分幾個層面來講 資工領域太廣,自己實做編譯器的經驗 對於某些領域的學生來說是必要 而對其他領域來說,可能就不是如此必然 譬如說一個弄系統程式/電腦架構的人, 我覺得對編譯器/直譯器運作是要有概念的 例如說,某種code的寫法會不會造成- - branch predictor誤判率增加? 有變數被optimized掉導致有不正常行為? struct大小或著array的寬度導致false sharing? ABI不相容? ...... etc 所以根本之道還是需要落實學分學程制 讓真正需要洗頭的人乖乖洗頭 不用碰的人就去碰他們領域需要克服的難關 (當然啦,上述那些很雜的坑可能不用寫過compiler也聽過) 另外,還是想吐嘈一下某些學校什麼都丟主修 好像學生修完之後就可以了 以某校來說,就算是列為必修 也是開成一學期的課而已 會用flex+bison寫出lexer+parser,到codegen成asm通常已經是極限了 很多東西都還沒教 而光parser能玩的東西跟理論就很多了 (都可以夠人專門寫一本書講了 推這本: https://goo.gl/yTTA9L ) 現在多數學校寫作業用的flex+bison,基本上只在一些早期專案會看到 近代的compiler專案多半傾向自己刻recursive descent parser clang是、GCC也是 其一是flex/bison要客製化需求很麻煩 用parser generator的壞處是只能在它開放API的地方操作 假如說要做容錯、或著吐出額外的除錯資訊給使用者看 變成要去hack這parser generator的code 其二是就算要用parser generator,也有更好整合進撰寫語言的選擇 像是Boost的PEG,或著Java的AntLR 不像flex/bison這樣有自己的模板語言/macro magic 而是很好的重載了邏輯語言的operator跟其他syntax AntLR甚至就直接長一顆AST給你,traverse就能做事了 我想表達的是: 如果是要訓練學生手刻能力, 那還不如讓學生真的hand-written,仿效現在大專案的強度下去訓練 如果是要學生熟練既有工具, 那也有更現代、更符合現代軟體工程思維的事物可以挑選 現在的教學模式就像卡在時代裂縫一樣 然而,要教深就要多給時間 還有多給助教人力和錢來改教材 老美一些這領域有名的名校有些會開到三個學期來教 強度實在差太多 不過我一段時間前好像有看到某校作業codegen那段, 助教的tutorial教人怎麼接llvm IRBuilder 好像還有教怎麼寫llvm pass來寫optimizer 可惜我這邊硬碟壞掉過現在資料撈不回來 如果是那位很猛的助教(算算時間現在應該已經在工作了?)看到, 還求大大重新公開一下當初的教材 拯救一下其他蒼生(compiler 助教) m(_ _)m 最後私心哭腰一下,我到現在還是覺得: 一個資工人就算修完所有必修, 多半對於「程式怎麼被跑起來」沒一個透徹的概念實在很可怕 另外像OS的loader、還有Libc dynamic loader這塊幾乎是空白的, 我好像真的沒看過有哪門課會談這件事 實在有種像是:「水龍頭轉開就會有水跑出來」的既視感啊(苦笑) -- Linux is the bone of my world. Kernel is mybody, and initramfs is myblood, have created over a thousand Distros. Unknown to impossibility. Nor known to limitation. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.167.181 ※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1496277713.A.A8E.html
ke5566: 我也想學學, 有沒有推薦的書? 06/01 08:45
aaagang: 要學的好不容易,我覺得學生資質跟的上的太少了,業界需求 06/01 08:46
KimJongUn: 簽名檔偷渡fate 06/01 08:46
aaagang: 在台灣又更少了 06/01 08:46