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