機器人軟體工程師養成計劃
來自專欄小浣熊的家22 人贊了文章
機器人工程師如何寫優雅的代碼?
如何定義優雅呢?我覺得優雅的代碼要正確,省時,省地,具有可擴展性,可閱讀性,可檢測性,等等。寫一手優雅的代碼需要較強的理論基礎,較多的項目經驗,以及對技術追求的情懷,這是需要長年累月去體會和追求的。
入門: 學習語言
有人說《C++ Primer》是工程師的第一本書,隱含也表達了這這並不是學生的第一本書,因為這本書比較偏實用,需要你有一定的項目經驗。如果是學生的話,建議先看一本C++教材。我當時用的是清華大學鄭莉老師的,感覺也很不錯。等積累了更多的經驗,再回來看《C++ Primer》吧。編程語言就像咱們日常的語言一樣,是交流的工具。精通一門語言意味著, 當你用這個工具做事情時,不受限於工具本身。
代碼風格可以參考google的C++ coding style: https://google.github.io/styleguide/cppguide.html。
Editor的話就看個人的喜好了。我從工作之後開始用vim,把vim配置成自己喜歡的樣子是很有成就感的事情。附上我配置vim時參考的github: yangyangwithgnu/use_vim_as_ide。
入迷: 數據結構和演算法
數據結構和演算法可以說是計算機領域最重要的一門課了,用清華貴系鄧俊輝老師的話說,"要對複雜度以及數據結構的理解像呼吸一樣的自然"。當年我不是很理解這句話。現在明白了,就是說你在看程序,構思程序,寫程序,和debug的過程中,要不停地思考時間複雜度和空間複雜度的概念,要在保證程序正確的同時,選擇正確的數據結構去最優化時間複雜度和空間複雜度。
很幸運的是我曾經去貴系旁聽了鄧俊輝的數據結構課,鄧公把演算法,哲學,書法,茶道,人生,全部結合起來,非常high level地闡述了數據結構的美麗。當時Mooc上還有鄧公的視頻(不知道現在還能不能找到),我前前後後看了不下3-4遍,每次都有新的收穫。鄧俊輝的這本書也是強烈推薦,我是翻爛了一本又買了一本。這是配套的課件,代碼,演示等資料: DSACPP。
國外也有一些演算法相關的經典課程,比如普林斯頓的(COS 226, Fall 2015: Lectures)和MIT(https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/video-lectures/)的演算法課,都是堪稱經典。
如果是高中生就是參加信息奧賽吧,小時候學的東西不容易忘:)大學生建議去參加ACM或者其他演算法類的比賽, 刷刷POJ一類的的題庫。如果是面臨找工作了就刷leetcode吧。對數據結構的理解需要在大量的練習中內化, 去體會演算法的魅力。
入魔: 計算機系統
工程師最好了解一些計算機底層的知識。中國留學生來到CMU留學大多會去學這門課: Introduction to Computer Systems. 好像bilibili上也有視頻了(【公開課】CMU計算機必修課 15-213: Introduction to Computer Systems(2017年秋季)_嗶哩嗶哩 (゜-゜)つロ 乾杯~-bilibili).。這門課讓你對整個計算機系統有了較為全面的理解, 內容包含彙編語言,計算機網路,操作系統,內存管理等等底層計算機基礎知識。這門課的教材 CSAPP: 《Computer Systems: A Programmers Perspective》也是堪稱經典。有人說,上了這門課或者讀了這本書,你就可以說你已經入門cs領域了:)
入土: 系統設計
我在系統設計方面的經驗也比較不足,工作時間更久的工程師應該對這方面更有體會吧。隨著經驗的增長,工程師需要設計的從一個函數,到一個類,再到一個系統,scale在變大。書籍的話可以看看《head first design pattern》,還有網上的一些系統設計或者scalability的相關視頻, 更多的是在工作中有了hands on experience之後思考的。
推薦閱讀: