標籤:
目錄:
0 硬體
1 基本概念
2 作業系統
3 編程技術
4 軟體工程
5 高效的程式員
6 編程實踐
自己主要關注2個方面,硬體方向的
單片機(如何與各種硬體外設互動)和軟體方向的
電腦圖形學(專註於圖形映像的產生).其他還關心linux,網路. 從0開始 :)
0 硬體對於一個電腦硬體,我們需要從哪些方面瞭解呢?以下是個列表(連結待整理).
模組 |
硬體 |
編程方面 |
介面方式 |
衡量指標 |
研究方向 |
處理器 |
pc,notebook,phone |
線程 |
intel: Socket 478 ,LGA775,LGA 1150等amd: Socket 939 Socket FM2等 |
多核/主頻 工藝 |
程式設計基礎 |
記憶體 |
記憶體 |
變數,地址 |
ddr3/4 |
頻寬/延遲 |
程式設計基礎 |
儲存 |
硬碟/隨身碟/sd |
檔案 讀取的方式:同步,非同步 |
(ata)ide,sata3(串列ata)usb |
頻寬 容量 |
資料庫 |
網路 |
網卡/路由器/網線 |
socket |
|
頻寬,延遲 |
電腦網路 |
聲音 |
音效卡 |
|
|
|
|
顯示 |
gpu, 顯卡/顯示器/印表機 |
讀寫顯示器 視窗 |
對外:vga,dvi,hdmi,dp;內部:AGP,pci |
解析度 色域 色彩準確度回應時間 可視角度 清晰度 亮度 對比 功耗 發熱 |
電腦圖形學 |
滑鼠/鍵盤 |
鍵盤,滑鼠 |
訊息/事件/中斷 |
usb,ps2 |
解析度 |
程式設計基礎 |
|
1 基本概念 在硬體向軟體過渡過程中,或者說在使用硬體的過程中,理解基本概念是在最堅實,最困難的一步.這部分內容在 知識整理--基本概念中.(連結待整理),這些概念下面聯絡著硬體,上面聯絡著軟體,起到承上啟下的作用.每個概念的後面即有理論又有實踐.理論是唯一的,實踐卻可以從不同的地方擷取,比如不同的庫(gdi,opengl)都不可以擷取圖形學的一些知識,也可以是不同的作業系統(win/linux/mac)都可以擷取進程線程的一些知識.windows/mfc/qt都可以擷取訊息系統的一些知識.win/mac/android/ios都可以擷取一些圖形介面的一些知識.**都可以擷取網路的一些知識,**都可以擷取檔案系統的一些知識. 對這些概念整理,分類如下
c&cpp |
c:變數函數類結構體指標數組 |
cpp:對象模版虛函數建構函式解構函式重載繼承封裝 |
|
|
os作業系統/瀏覽器術語 |
進程線程連結庫虛擬記憶體視窗事件訊息堆棧堆記憶體映射異常 |
檔案系統檔案 緩衝 重新導向 定時器consolessh |
瀏覽器 字型 編碼 |
|
gdi/ opengl圖形學術語 |
ps: 透明/半透明 向量 動畫 調色盤 |
gdi:位元影像(bitmap)畫刷(brush)畫筆(pen)顏色(color)路徑(path)地區(region)調色盤 |
opengl: 圖片 渲染 紋理 點陣 解析度 蒙版 |
|
qt術語 |
訊號/槽 mvc |
|
|
|
網路 |
tcp/ip協議連接埠路由 |
|
|
|
軟體工程術語 |
瀑布模型 |
|
|
|
2 作業系統逐步瞭解作業系統是我們工作的基礎.在這個地球上常用的作業系統有windows和*nix(linux,unix,mac os),其它還有手機/嵌入式硬體的作業系統android ,ios, wp,symbian,meego,blackberry,webos.他們展現給使用者的或許千差萬別,但是對程式員來說區別不像看起來那麼大(越底層越是這樣). a)系統使用/管理/探索工具windows下面常用圖形組態工具或者批處理命令來管理配置作業系統*nix下面有一系列的工具(基於命令列)來配置,探索系統1)如何管理軟體(更新 卸載,產生)?2)如何查看硬體資訊? b)自動化語言:自動化可以更高效的使用電腦系統(作業系統)包括windows下面的批處理,*nix下面的指令碼
3 編程技術
為了使用上面的硬體,就需要使用編程技術,即使用作業系統提供的介面來控制硬體.
a)編程基礎
此部分屬於程式員的個人修養,可能不能直接用於編程,但是可以直接用於深入編程.不一定需要知道具體怎麼做,但是要明白電腦如何做一些事情(一個是機制,一個是實現細節)
什麼是進程,檔案,線程,記憶體,定時器,網路,重新導向等基本概念,這些都是電腦提供給我們的解決問題的工具
比如理解軟體的運行過程
比如理解c與彙編的關係
比如理解指令碼的工作方式
比如一個可執行檔的格式(windows下的pe,*nix下的coff,mac下的mech-o)
比如理解作業系統的工作方式
比如理解設計模式(裡麵包含了經過實踐的,好的編程準則)
如何高效的處理大量物體,如何處理動畫
b)程式設計語言電腦程式設計語言有很多種,共同的基礎是系統api,原理即是函數調用,再往下就是堆棧儲存,跳轉執行:通用程式設計語言 c c++ vc c# java objc等泛型指令碼語言 python瀏覽器指令碼語言 js, html, css,其中html專註於結構化文檔 css專註於介面展現,js相當於瀏覽器的指令碼語言,主要是對瀏覽器的控制.系統指令碼語言:批處理,shell其它還有專註於程式封包的nsis注意理解這裡的專註有2種: 專註於某一方面的語言和有一些庫專註於某一方面有交集
附:我的程式設計語言世界觀:(2014/08/07 15:46)
在windows的世界裡混 c#必須要懂的吧
一個正兒八經的程式員c c++ vc也是要懂的吧
python也是要知道的吧,橫跨windows和linux的語言
做伺服器 linux是必須要懂的吧
想做網頁 js html css 必須要懂的吧
想高效的工作,windows的批處理,linux shell也是要懂的吧
在linux下面你好意思說不會vi?
想做android程式嗎,java得懂吧
想做ios程式嗎,objc得懂吧
什麼?你問我只會一種語言行不行?
不行,絕對不行!
除了說語言,我說庫了嗎?mfc,.net,stl就不說了,這都是標配.qt,opengl,directx,jquery,tornado,還有就是每一個東西的二次開發都是一個庫.
你說其實上面的你都有所接觸,其中大部分用的還不錯,恭喜你,在編程的道路,你開始入門了!c) 庫(圖形,網路,資料庫,大資料等)庫分語言內建庫和第三方庫程式設計語言都會帶有庫,比如c標準庫,c++的stl,vc下面的mfc,c#的.net庫,python有大量的庫,還有一些各種語言第三方庫,有些庫可能在幾種語言下都可以工作,比如:專註線程的 pthread專註網路的專註介面的 qt,win32 gui專註於圖形的:dictectx,opengl,win32 gdi專註於科學計算的專註於網站背景 tornado檔案系統,資料庫:sql,mysql,hadhoop... d)應用類型,實現載體.為什麼要看上面的各種東西呢(開發什麼)可以做可以實現各種功能傳統型程式可以做網站可以做案頭/手機用戶端 e)工作中常需要處理基本方面無論使用哪種作業系統,哪種語言,甚至是哪個庫,甚至也不管你做何種開發,下面的都會常常遇到
1 網路訪問
2 壓縮解壓
3 xml json ini
4 資料庫訪問
5 檔案訪問
6 註冊表檔案
7 介面(皮膚)
8 資料結構,字串處理
9 影像處理(2012/11/1 14:26)
4 軟體工程
用工程的觀點看如何製作一個軟體.是電腦編程的總結.如何去更好的使用上面的東西來完成具體的一個軟體(系統),涉及以下活動:
需求分析和定義。
系統設計
程式設計
編寫程式
單元測試
整合測試
系統測試
系統交付/驗收
運行和維護
a)總體開發過程瀑布模型反覆式開發法螺旋開發敏捷開發 b) 代碼編輯windows下面主要使用ide(vs系列)*nix常用vi等一系列的文本工具,cmake,gcc等編譯工具鏈代碼編寫規範 c) 代碼管理svngit d)測試技術黑箱測試,白盒測試,灰盒測試代碼測試產品測試自動化測試
5 高效的程式員
1 快速鍵包括系統快速鍵和一些軟體專用的快速鍵,系統常用也就記住了,軟體專用的可以使用時查看2 好的工具工欲善其事,必先利其器.有一些日常協助工具輔助比如mspaint,everything還有一些編程專用的工具比如spy++常用軟體即為各種工具,是否常用和擷取的難易以及工具使用體驗有很大關係.比如雖然notepad並一定是一個很好的文本查看工具,但是在每一個windows系統上都會帶有,所以使用頻率還是很高的.在linux/mac下面這些工具一般是系統內建的,windows下面一般是第三方的(最出名的即為systeminternal,已經被微軟收購), 也有少部分是內建的,另外visualstudio開發工具也內建一些.可以體會一下編程實現和使用工具的異同點.
1) 文本工具
notepad 編輯查看
notepad++
ultraedit
vim
hexedit
beyondcompare 文本比較
winmerge
svn 文本版本管理工具
2) 編程/開發工具
vs ide/qt/python/js
gnu工具鏈:ldd,objdump可執行檔查看工具
vs內建工具:dumpbin,spyxx 可以查看windows視窗/訊息
systeminternal工具集合:procexp debugview
depends 靜態查看運行依賴
stud_pe
3) 效率 時間管理工具
totalcommand快速的操作檔案
everything 快速搜尋硬碟檔案
youdao筆記本
搜狗IME
4) 網路瀏覽
chrome
firefox
ie:據說微軟要拋棄ie品牌,步live,message,msn後塵
搜狗瀏覽器
5) 音視頻映像工具
audition
Premiere
photoshop 位元影像
mspaint系統內建的圖片查看工具
字型
svg是一個標準
2D3D模型工具
illustrator 向量圖 PostScript
11) 其它
fiddler 讀寫/監視網卡
wireshark
Advanced Serial Port Monitor(類似於syterminternal的 portmon ) 讀寫/監視串口
disk investigator(類似於syterminternal的diskview)硬碟工具
spacesniffer 圖形化顯示硬碟檔案
6 編程實踐(電腦應用)
1)
2009.1-2010.7開始工作,使用win32(c),mfc(c++) 2)
2010.7-2012.12 接觸了qt,python,mac/ios(object-c) 3)
2013-2--- 接觸了web用戶端編程(js,html/html5,css,),web伺服器編程(c,python,java,php),以及用戶端與伺服器互動技術.更加關注電腦映像軟硬體領域
以上是一些粗淺思考,希望交流指正-----------------------update log------------------------------------------------------------------------ 2014/07/25 09:44 建立文檔2015/02/05 11:11 添加了1 基本概念部分.2015/03/26 16:50 全文措辭微調2015/04/08 16:07 修改電腦硬體部分為一個列表2015/04/14 09:49 全文措辭微調
電腦編程技術藍圖