---
tags: C/C++
---
[toc]
# C++ STUDY GROUP Rules
## 目的
- 增進大家 C++ 程式設計的技巧, 透過每個人實作, 討論與分享寫的好的地方, 或參考有更好的設計寫法
- 預計 2~4 個星期設定一個題目, 讓大家不斷去練習
- 原則上會議2小時, 前1.5小時兩兩一對, 依次序說明對方寫的 code, 最後半小時, 總結一下今天的會議優缺點的地方, 以及分享大家在寫程式時有發現好用的任何tool, 技巧交流或任何心得皆可
- 從無到有自己寫, 會進步較多, 不要上網找答案, 會失去自己進步的機會
- 建議使用 ==TDD== 方式寫程式 - 使用 GoogleTest 工具
- Clean Coder
- 老闆的職責不包括避免員工的技術落伍以及替員工打造一份好看的履歷。
- 身為專業程式設計師必須用自己的時間來練習,關心自己能做到怎樣的最好結果並且保持自己的技能不落伍。
- 雖然練習是賺不到錢的,但是練習之後,你將會獲得回報。
- 專業人士都要借助專門的訓練來提升自己的技能,音樂家練習音階,醫生練習縫針和動手術,專業人士就會選擇『練習(practice)』
## Uva Online Judge
- [Uva Online Judge](https://onlinejudge.org/index.php?option=com_frontpage&Itemid=1)
- UVa 是一個線上解題系統 (online judge system),.它是西班牙瓦雅多利大學教授Miguel Ángel Revilla在1995年所創建的一個自動化線上的評測系統。
- UVa 目前收錄了數千多道題目,大部分都需要一點演算法基礎才能解得出來。網站上提供了 C/C++,Java,Pascal 以及 Python 的評測環境。UVa 目前收錄了許多國際賽 ICPC 的題目。是個適合練功的好所在
- UVa 會記錄你的解題歷史,這部分的資料可以當成日後求職時,證明自己程式設計能力的佐證資料。這跟矽谷那兒很多工程師在刷 LeetCode 是同樣的意思。
- 練習分解問題。要能順利地解出 UVa 的題目,通常要做一些「大問題拆小問題」的工作。而大問題拆小問題的技巧,也正好是軟體工程師最難精通的技巧。
## 輔助解題
- [Lucky貓的 UVA(ACM)園地](http://web.kshs.kh.edu.tw/academy/luckycat/index.htm) 翻譯題目的網站
- [uDebug](https://www.udebug.com/UVa/) 提供Test case, 突破 Submit 後 Wrong Answer 困境
- [uHunt](https://uhunt.onlinejudge.org/) 查詢UVa Online Judge的解題進度、世界排名。列出題目難易清單,適合初學者循序練習。輸入使用者名稱就會出現。
## VSCODE with GDB/LLDB debug 教學
- 範例與教學影片 [Template](https://github.com/ourarash/gcc_debug_template.git) + [Video1](https://www.youtube.com/watch?v=-TUogVOs1Qg)
- 教學影片 [Video2](https://www.youtube.com/watch?v=G9gnSGKYIg4) [Video3](https://www.youtube.com/watch?v=rgCJbsCSARM)
- 實測LLDB debug 解譯的變數struct member 比 GDB 好
- 在 PC 上 debug 時==不要再用 cout/printf 的方式==, 效率會非常差, 一定要使用 ==GDB/LLDB== 來作debug
- [VSCODE 快捷鍵](https://summer10920.github.io/2020/10-23/article-vscode/#%E5%BF%AB%E6%8D%B7%E9%8D%B5%E7%AF%87)
## Github/Gist/Cacher
- [Github Gist](https://gist.github.com/) Gist 是 Github 的一個子服務, Gist 可以只分享專案中的某一個小檔案中的程式碼,且擁有私人的選項,讓別人不會搜尋到你的 Gist. [使用說明](https://ithelp.ithome.com.tw/articles/10206233)
- 使用 GistBox 和 [Cacher](https://app.cacher.io/library/personal) 就可以讓 Gist 變成程式碼收藏夾,甚至可以加上標注或標籤讓以後能夠更容易的找到它們
## Environment
- cmake
- googletest