Re: [討論] 怎樣算是一個合格的junior cpp programme
※ 引述《musashi023 (太陽魚)》之銘言:
: 諸位資工大神好,我本身是EE背景的
: 因為想脫離design house的生活
: 一直有在刷題+補充Cpp, oop 相關知識
: 之前有幸找到一份junior寫Cpp的工作
: 想了解對各位來說,有沒有一個對於qualified cpp programmer的具體標準
: 我的理解:
: Junior:
: 1. 熟練STL, 能解決被交付的工作
STL 之外 boost (https://www.boost.org/) 也要會用一點,
有餘裕的話這兩個也稍微看一下:
https://abseil.io/
https://github.com/facebook/folly
如果確定公司偏好用哪一套的話可以指向性學習。
不需要盲目去學整套,至少要有從裡面選東西來解決問題的能力即可。
: 2. 熟練應用資料結構
: 3. 熟練使用template (之類的
你能把 STL 用得熟其實就包含這兩者了。
所謂 template 的使用其實有區分,一個是像使用 STL 那樣人家寫好的來用,
一個是用 template 設計函式庫,後者不是一定需要,實際上常用不太到。
: 4. oop
這對於寫出容易交接、容易合作、容易讓人看得懂的程式碼有幫助。
也有公司完全不用 OOP 在寫 C++,這很看你進的公司是幹嘛的。
總之先學好不是壞事,確定上面有 seinor 帶你的話可以進去邊被罵邊學。
這個臉皮可能需要厚一點乖乖被罵,每個人都有這時期,有人帶比自己亂學得好。
另外我覺得最重要的還有幾個:
5. 編譯、連結錯誤的訊息要看得懂,連這個都卡住還要問人的話很容易變累贅
6. 懂得使用除錯工具,以 Linux 環境來說就 gdb、valgrind、address sanitizer 等。 包括程式不小心掉進無窮迴圈,你要知道怎麼讓除錯工具攔截下來看到底在幹嘛。
7. 特定作業系統的開發工具組,我知道要寫 C++ 的有不少是 Linux 環境開發,
如果連基礎 Linux 指令都不會下,g++ 和 clang++ 指令都還要問人的話就有點慘
8. 寫出讓別人容易看懂的程式,不要炫技,寫每一行之前都先考慮別人看不看得懂
9. 會用 git 之類的版本控制軟體
: Senior:
: 1. 能設計軟體架構
如果上面沒有系統分析師或系統設計師也沒架構師在,這兩個也不能說不對。
只是這跟 C++ 比較沒有關係,它比較偏跨語言的泛用知識。
把 C++ 學得超級好也未必能修得這類技能,這技能樹的起點和 C++ 算是平行。
: 2. 活用design pattern
先假設你指的是物件導向的 design patterns,
如果你的想法是 C++ 先學好,然後就直接跑去學 design patterns 並靈活運用,
那麼我要以一個寫 25 年 OOP 程式的過來人告訴你:此路不通。
還好不像十年前一樣,現在講這個已經有網路文章能參考了,可以讀一下這兩篇:
先學物件導向還是先學設計模式?
http://teddy-chen-tw.blogspot.com/2014/03/blog-post_26.html
Top-down和Bottom-up設計方法
http://teddy-chen-tw.blogspot.com/2014/03/top-downbottom-up.html
更精確來說,物件導向整個領域除了 OOP 之外還有 OOA 跟 OOD。
傳統軟體開發流程一定會看到的就是需求、分析、設計、實作幾個階段,
design patterns 是 OOD 階段的函式庫,你光會套用函式庫和你會設計是兩碼子事。
如果你壓根不知道軟體開發是怎麼從需求走到設計,
design patterns 直接啃下去然後拿來用,幾乎可以說 100% 會出大事。
就像有人 20 年前用 Borland C++ Builder 寫得一手好 GUI 軟體,
VCL 元件庫沒有一個他不知道怎麼用的,
但是他 C++ 底子可能爛到不堪入目,
連自己實際上在寫什麼東西都不知道。
程式不但很難讀懂,別人接手他的程式碼每個都會想砍掉重練。
話題有點扯遠了,比起上面的兩個能力,我會比較注重這些:
1. 程式碼重構能力 (refactoring),比起預先設計,我更喜歡先照直覺寫再重構
2. 懂測試驅動開發 (test-driven development),盡量以測試程式代替死版的技術文件。 這個和程式碼重構通常是搭配在一起的東西,能確保你每次重構都沒改壞。
測試框架如 Boost.Test 或 Google Test 等等的能熟悉一兩種最好。
3. 有辦法 review junior 的程式碼並給予正確指導,人帶不好你一個人寫還比較快。
公司有引入 Phabricator 或 Gerrit 的話,要熟悉怎麼善用它。
4. 完備的 OOP 知識,有少許 OOA 和 OOD 概念,寫出的程式可以應對需求快速變化,
不要遇到需求改來改去就只會想著揍主管、揍客戶或是辭職把鍋甩給別人
5. 完備的多執行緒和非同步程式開發能力,並知道如何除錯
6. 廣泛涉獵各種框架和函式庫,如 Qt、C++ REST SDK、redis-cpp 等等,
當然允許混用不同程式語言開發的話,可以在非效能關鍵部分結合別的語言,
然後搭配 SWIG、gRPC 等工具把不同語言開發出來的程式連接起來
7. 能快速評估第三方函式庫是否適用於自己的專案,有辦法 trace、修正問題並擴充
8. 隨時跟上 C++ 最新標準,最近十幾年 C++ 標準也開始飆車了,不要輕易被甩下車
9. git flow、github flow、gitlab flow 這些也要熟悉到一個程度,能指導 junior
在 4. 我並不強調 design patterns,有興趣碰自然是更好,但相關基礎先打穩再說。
如果你團隊裡 senior 之上就沒有人統籌規劃架構,那可以再進階以圖自立自強。
這顆技能樹完全長在跟 C++ 不同地方,不是你 C++ 學到極致就能跨過去。
你要點亮它的話可能要先知道怎麼從需求走到 OOA,然後再從 OOA 走到 OOD。
這部分有個概觀就好了,後續是搭配現代的各種敏捷開發法一起使用。
上面給的連結也會告訴你就是需要混合 bottom-up 和 top-down 東戳一點西戳一點,
硬用線性學習法你只會覺得自己像在讀國文課本一樣,很難靠自己吸收到真髓。
所以與其說它是技能樹,實際上是可以跳著點的,沒有先練好什麼才能練什麼這種事。
C++ 也是同理,整個學習方式幾乎都是先零散學習最後才連起來。
這語言複雜歸複雜,實際上不用全學好還是能拿來工作,等全學完再上你都變老人了。
: 因為一直擔心自己刷題或是學習的方式太零碎, 侷限
: 故認真發問
: 歡迎各種補充
--
Ling-hua Tseng
Architect
Research & Development Department
Stranity Technology Co., Ltd.
--
推推
重構這件事要考慮公司是否允許上版後才重構,如果不允許
那要盡量在上版前就整理好
Agree. 謹記在絕大時候寫code 是engineering 而非scien
ce.
Thx. 受益良多
推這篇
推大大分享
推
推,需求到設計,我也是學習中
推,感謝分享
幾霸分
推
有些人連compile error都要問 看到這種真的臉貓
推
推
推 收穫很多
不想讓 doc 過時可以用 asciidoctor ,他可以讓說明文
字下的 example block 指向 testing code
讚!
好文 推 每次講C++似乎都可以釣到大大
我最近遇到一個障礙,前人寫的C++太過艱澀難懂
我時常解一個小小的bug就要花數倍於前人的時間
有時候追code追一天,90%的時間都在罵髒話
如果不能重構,我實在是已經快hold不住
現在只期待我可以撐到有人接走
推個
推這個
1
關於 TDD 個人一點看法 我覺得 TDD 最大的用處是讓你 "做一下,想一下", 這件事本身就很有用,相信有不少人有類似經驗, 很快想到一個版本,在幾個循環後陸續想到 3~5 個改版, 其中則有某個版本特別好實作,可以用初版 1/5 以下的時間完成,3
剛好看到這個影片 觀摩資深人員是怎麼深入原始碼把 wasm64 轉成 wasm32 還能正常執行 他有一些直覺解臭蟲的作法讓人感受到真不愧是資深人員,而且猜函式名稱的準度有夠 高8
我提一個好像沒有人討論的點 一個合格的junior/entry-level C++ programmer應該要良好的trace code技能 這個也不是只有C++適用 而是所有語言都適用 在學校除非個人興去的關係碰過open source code 否則很難碰超過1萬行的code23
針對關於 TDD 的討論另外回一篇好了 覺得用推文太長了 XD : 推 stupidlove0: 朝聖!重要的真的是unit test 08/23 18:47 : → HZYSoft: 回樓上 TDD 問題,TDD 不只要測試,還要先寫測試才寫code 08/23 21:33 : → HZYSoft: 很多人無法習慣這種順序,是否一定要 TDD 這有爭議 08/23 21:344
推文看到有人問前端. 我個人是做客戶端所以很多傳統的測試方法論對介面其實效用很低. 上述段落讓我想起以前寫作的經驗.單純分享. 我在2018~2020年在阿布達比UB維護手機線上遊戲Growtopia. 當時的案子有很多駭客想要破解我們的遊戲的攻擊行為.38
個人淺見,這點不見得是必要的,template 的 code 常常不好讀不好除錯 正確使用能寫出高彈性高效能的程式,但用過多維護跟閱讀起來會很痛苦 即便不用 template,日常大多數的事情都還是可以完成的, 如果是多人一起維護程式,有時為了提升可讀性,反而會避免太炫麗的 template 技巧 新人的話推薦不妨投資點時間,學習如何改善可讀性和與別人協作6
先說 我不會寫C++ 但是關於軟體架構和Design Pattern我可以補充一下 軟體架構實際上在台灣多數職場裡的狀況 大概可以用一句話來形容18
首Po諸位資工大神好,我本身是EE背景的 因為想脫離design house的生活 一直有在刷題+補充Cpp, oop 相關知識 之前有幸找到一份junior寫Cpp的工作 想了解對各位來說,有沒有一個對於qualified cpp programmer的具體標準1
錢很多,人難找。 : 2.維護legacy code 錢不錯到很多,公司賺錢有一些是爽缺。 : 1.的話重點是一堆效能增進的技巧 : 像是如何提高cache hit rate 或是multi threading的技術9
現在語言這麼多 你想學c++的目的是什麼 其實個人感覺你提的點以c++來說都不是重點 這年頭如果還有公司有c++的職缺 通常分兩大類 1.高效能運算
爆
Re: [問卦] 欸 柬埔寨金邊是一個什麼樣的地方看到最近這個新聞,然後PTT上面一如以往的再檢討被害人 像是什麼怎麼會被這種騙,會信這個的都是哪種人、哪種水準之類的 問題的重點根本不是這些受騙上當的人的程度如何 而是台灣黑道已經非常明目張膽的用合法媒體渠道去做這些事情,連掩護都不掩護 竟然FB、大品牌求職網站上面都看的到,這些可是人口販運耶,2022的台灣耶爆
[閒聊]遊戲開發者抱怨現在程式碼誇張膨脹「可能有99%的內容都是垃遊戲開發者Cliffski抱怨現在程式碼誇張膨脹「可能有99%的內容都是垃圾」 作為一名從事獨立遊戲設計和程式業務的開發者,克裡夫斯基(Cliffski)在一篇文章中 吐槽道 —— 這年頭的「程式碼膨脹」,已經到了令人髮指的地步。 他以自己常使用的一個雲端備份服務為例來說明,這個由某個大公司提供的雲端備份工具爆
Re: [討論] 「遊戲翻譯」是怎樣的工作啊?原文恕刪 大家好,我是遊戲翻譯資歷大概8年,不算資淺但也不敢說資深的譯者。 先前在西洽PO過幾次文,但主要是和配音有關,但其實遊戲文本翻譯才是主要收入。 之前在台灣暴雪待過快五年,做過在地化、配音和發行的職務,現在自己出來開公司 「牛灣娛樂」,主要也是接遊戲在地化的工作,然後有用在地化賺來的錢開發獨立遊戲41
[問卦] 是不是有人不知道只要1000內就可以拿到駕大家想要考駕照大部分都想到去駕訓班 花大錢拿一張駕照 但大家知道其實只要有駕駛學習證一樣可以考駕照嘛 首先去體檢200 申請駕照學習證10091
[閒聊] 你行你上 木木完整版 講評逐字稿給沒時間的人看 (賽前訪問) 00:00:00 Q1:有想過自己能進總決賽嗎? 沒有,因為我當初最一開始預想只是想說來試試看而已,可以過海選就已經很萬幸了,所62
Re: [心情] 為什麼每次有喜歡的感覺都是單戀?單戀聽起來比較淒美浪漫 比較貼近現實(卻又殘忍)的說法就是:你沒能吸引到她 小小悸動被察覺不是問題,沒能吸引到對方才是問題 若原先你們的互動,讓她對你印象不錯,那你的悸動有可能也勾起她的悸動。 主動是好事,但要用對地方。40
[問卦] 程式能寫if 就不要用for loop?以前寫程式覺得要看起來厲害 明明能用if的 我會先建一個table 然後再用for loop尋找 好處是數量增加時增加的程式碼少 壞處是寫的時候和以後回來看的時候比較麻煩22
Re: [討論] 科技業其實也不需要寫過碩論的人才推這篇。 我是覺得論文或學位絕對不是必要的。 但是正常的碩士,博士經歷,在工作風格就是有很明確的差異,而且很多人因為沒接受過完整的碩博訓練,根本永遠發現不了問題在哪。 拿簡單例子來說好了: 最近各公司工廠很流行:建立知識庫,讓重複的問題能快速得到答案。有些部門的做法:不斷的用"人工整理" Excel知識問題與答案。然後寫程式,去用關鍵字搜問題與答案。16
Re: [討論] 要進入產業界,職前訓練是必要的?「我想轉職做軟體業,是不是該{條件A}跟{條件B}...?」 一直覺得這種提問有個很基本的誤會。 所謂「軟體業」不是單一個業界,而是一堆用上同樣技能的不同業界。 不會有哪個放眼全台軟體業皆通用的標準或必要條件。 好比說 Excel,他是個非常強大的萬能工具