计算机知识太多了,计算机基础知识对程序员来说有多重要?
原標題:計算機基礎知識對程序員來說有多重要?
科班和培訓生同比于自學者的優勢就在于這些計算機專業的核心課程(數據結構與算法這種不管科班培訓都要學的不算):離散數學、編譯原理、計算機組成原理、操作與系統——乃至圖形學和數字圖像處理。
如果覺得太抽象學不進去,要么是經驗不夠寫的代碼太少,要么就是教材或者老師不給力——后者可以用csapp代替。
哪怕你考完就忘了,哪怕你畢業后寫代碼時還是要現場搜博客看怎么處理多線程問題,但至少,你對這些概念心里面是有印象的,遇到了問題,你心里有桿尺子——
1、如何從這個問題提煉關鍵字,上網搜索或詢問;
2、這個問題對應哪個領域的知識,我應該直接去查“多線程 互斥鎖”而不是查“為什么這個程序跑不對?為什么count不等于100?”
3、讀代碼、寫代碼時,起碼知道,這里該用多線程組織生產者消費者關系,那堆數據應該用一個樹來組織——這方面和設計模式很相似,為我們提供了在更高層面看問題的可能性。
4、分得清工具鏈中各個部分的區別,不至于說mfc、qt、vc、c語言、c++傻傻分不清楚,都在參與幾十幾百萬的項目了,還在到處問人“qt里能不能用FILE*指針?”
舉個比較實在的例子,非科班的人,遇到問題是這么問的:
codeblocks 下載的是mingw.setup的,但是還是提示沒有編譯器??
www.zhihu.comVC++6.0用MFC編譯有一個問題。??
www.zhihu.com如何使用Dev C十十畫拋物線??
www.zhihu.com
這樣的問題,有的讓人根本無從回答,有的問題一字不改百度一下都能搜到答案,有的完全是不會提煉關鍵字的結果……
而如下面這些問題,就充分體現了提問者自己的思考,他們是有明確的方向和目的去思索、去詢問、去查詢的,哪怕沒人回答,這個過程都能有所收獲。
(1)C語言如何實現面向對象功能?
其實,我對科班優勢的這些描述,也適用于理工類專業——培養符合科學哲學的思辨能力。在遇到問題后,能夠知道如何抽象問題,如何提煉關鍵,如何分析問題,然后基于抽象/提煉/分析得到的各個角度,去解決問題。
對于答復,小音是認同加佩服的和一些直接想甩baidu.apphb.com鏈接的問題,他都能從科學思辨的角度上,深入淺出地去分析,去解答,而且在讓小白如各類題主能看懂的前提下,還能讓我等圍觀群眾有所收益。
理想的程序員
1、能跑
2、代碼符號規范,使用工具確保符號規范
3、設計需要可擴展,確保設計能令某些情況下沒用的部分不會做成額外的性能開銷。
4、設計需要可測試,用單元測試保證基本沒有BUG,使用幫助驗證正確性的工具。
5、找出各種解決方案的時間復雜度和空間復雜度,過程可能需要查找文獻及做組合燈工作。
6、考慮數據在內存中存儲方式及訪問特性,如對齊問題、時間和空間的連貫性,怎樣減少存儲量的系統及增加緩存一致性。
7、盡量跨平臺,并且如需使用操作系統提供的功能(文件、網絡、線程、進程等),選取最優解。
8、關注底層性能,是否適合用一些CPU指令(包括SIMD)、GPU或其他硬件解決。做性能剖析,看核心部分的匯編結果,再做實驗改成優化。返回搜狐,查看更多
責任編輯:
總結
以上是生活随笔為你收集整理的计算机知识太多了,计算机基础知识对程序员来说有多重要?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 同包类 和 其他类 java_关于继承:
- 下一篇: sql 百分号_SQL思维导图和代码分享