码迷,mamicode.com
首页 > 其他好文 > 详细

计算机编程技术蓝图

时间:2015-06-18 11:26:20      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

目录:

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 全文措辞微调

 

 
 

 

计算机编程技术蓝图

标签:

原文地址:http://www.cnblogs.com/lixunguang/p/4585240.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!