这是我给公司研发部同事的一个分享培训课程,把内容大纲分享出来。
知识图谱
大学课程
- 数字逻辑
- 计算机组成原理
- 汇编语言
- 编译原理
- 操作系统
- 计算机网络
- 高级语言(C、C++、Java)
- 算法与数据结构
- 数据库
- 面向对象方法
- 软件工程
自学内容
- ARM 指令集、体系架构
- ARM 外设
- Linux 内核、驱动
- Linux 系统接口编程
- Linux 网络编程
- Qt 开发框架
- Perl、Python
- OpenCV、OpenCL
- XML、JSON 以及其他很多即学即用的知识技能
软件工具
- Ubuntu 及各种命令行工具
- Git、SVN
- Vim、Notepad++
- Gcc、Makefile
- ssh、scp
- Xshell
- VMware、VirtualBox
- QtCreator
搜索引擎
- 谷歌
- 必应(国际版、国内版)
- 百度
- 搜狗、360
- 站内搜索(site: 语法)
开发流程
常规软件开发工程
- 定义问题(problem definition)
- 需求分析(requirements development)
- 规划构建(construction planning)
- 软件架构(software architecture)
- 详细设计(detailed design)
- 编码与调试(coding and debugging)
- 单元测试(unit testing)
- 集成测试(integration testing)
- 集成(integration)
- 系统测试(system testing)
- 保障维护(correcting maintenance)
例程开发流程
- 了解硬件接口
- 了解处理器架构与硬件框图
- 了解、安装软件开发环境
- 进行例程编码开发
- 测试例程
- 整理说明文档并发布
生产测试系统开发流程
- 确定待测外设
- 确定测试方法和判断标准
- 进行测试程序开发
- 对测试程序本身进行测试验证
- 整合所有测试到自动化测试框架
- 整理测试指导文档
开发思维
模块化思维
- 一个函数只做一件事
- 一个类只实现一个功能
- *NIX 哲学:小即是美;让程序只做好一件事
- find . -name *.jpg | wc
对比思维
- Git 工具的原理与使用
- 定位问题的多种影响因素
- 找茬:http://liaojieliang.com/2013-04-18/spot-the-difference.html
隔离与分层
- 隔离与模块化相似,模块内外进行隔离
- 对系统进行分层
- 不同层次的东西不直接交互,不相提并论
抽象
- 过程抽象
- 数据抽象
迭代演化
- 里程碑式开发
- 快速推出原型
避免重复造轮子
- 使用 Linux 自带的工具
- /proc、grep、awk
- 使用众多的自由软件、开源软件
- 使用 TI 提供的资源
- 使用同事开发的成果
案例分享
外设通用例程-按键监听
- 例程功能
- 开发进程
- 确立需求、任务
- 讨论确定程序命名、使用参数、核心功能
- 驱动接口确定
- 开发编码
- 代码审查、优化
- 各平台测试与反馈
- 赏析(划掉)瞧瞧代码
自动化测试系统
- 开发进程
- 自动化测试框架开发(Python),v0.1、v0.2……v0.6.1 。
- 8148、138、138f、5728……
- 测试程序的不断完善
- 测试指导文档的不断完善
- 相关技术
- Python(OrderDict、os.system、os.popen)
- 程序退出值
- 各硬件接口的程序接口
- 输出文件
- 品质测试指导文档
- 测试框架仓库
- 测试程序仓库
- 测试程序包(测试做卡系统)
资源推荐
书籍
- 《深入理解计算机系统》
- CSAPP,Computer Systems - A Programmer's perspective
- 基础概念
- 《计算机程序的构造和解释》
- SICP
- 逻辑抽象
- 程序思维
- 《代码大全》
- CC2
- 程序构造
- 工程实践
站点
- Stack Overflow
- GitHub
- CSDN
- 博客园
- V2EX
影视
- 夸张的创作发挥,非典型
- 《IT 狂人》
- 《硅谷》
廖杰良 - 2018-12-7