目录:
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 |
带宽/延迟 |
程序设计基础 |
存储 |
硬盘/U盘/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操作系统/浏览器术语 |
进程 线程 链接库 虚拟内存 窗口 事件消息 堆栈 堆 内存映射 异常 |
文件系统 文件 console ssh |
浏览器 |
|
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) 代码管理
svn
git
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笔记本
搜狗输入法
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 全文措辞微调