software development guide map
- 6. 1.1. 光锥与学术史
? 第一枚石头被投入了
池塘
? 这块石头激起了层层
涟漪
? 一块石头引发了更多
的石头
? 更多的石头激起了更
多的涟漪
? 第一篇奠定某一学科
的论文
? 这篇论文引发了更多
的研究
? 一篇论文激发了更多
论文
? 一个学科被完整的确
立起来
- 7. 1.2. 光锥与学术史:更加复杂的情况
? 学术的发展史,是交叉影响的
? 实际上存在的并非一个光锥,而是一系列的光
锥
? 多个光锥交叉影响,会催生新兴的光锥
?
?
?
?
计算机学科最初是由电子学、数学、逻辑学等学科
催生的
在计算机科学的持续发展中,分化出了软件科学
软件学中又分化出了操作系统、编译原理、数据结
构、计算机图形学等等学科
软件科学的发展,又反过来影响和催生了更多的学
科:例如语言学、人工智能、控制论、计算物理学
、计算化学 ......
- 8. 1.3. CS 、 IT 、 SE
? 计算机科学( Computer Science )
?
系统性研究信息与计算的理论基础以及它们在计算机系统中
如何实现与应用的实用技术的学科。它通常被形容为对那些
创造、描述以及转换信息的算法处理的系统研究。
? 信息技术( Information Technology )
?
主要用于管理和处理信息所采用的各种技术总称。应用计算
机科学和通信技术来设计、开发、安装和实施信息系统及应
用软件。
? 软件工程( Software Engineering )
?
研究和应用如何以系统性的、规范化的、可定量的过程化方
法去开发和维护软件,以及如何把经过时间考验而证明正确
的管理技术和当前能够得到的最好的技术方法结合起来的学
科。
- 9. 1.3. CS 、 IT 、 SE
? 科学
?
放之四海而皆准、定义、公式、原理、算法
? 对 or 错
? 技术
?
将科学应用于实际,对实际生活产生实在的影响
? 升级
? 工程
?
做一件事,涉及到需求、时间、人员、技术、限制
条件等等
? 技术 + 艺术,很难评判优劣
- 13. 2.1. 软件开发技能的三维坐标
? 对于一个软件开发项目,我们通常可以描述为:在某
某平台上 + 采用某某语言 + 面向某某领域的产物
? 常见平台
?
Windows 、 Linux 、 MacOS 、 Java 、 .NET 、 Web
、 Android 、 iOS...
? 常见语言
?
Java 、 PHP 、 Ruby 、 C# 、 JavaScript 、 C 、 C+
+ 、 LISP 、 ObjectiveC 、 Delphi 、 Python 、 ActionScript...
? 常见领域
?
电子商务、电子政务、嵌入式、语音、搜索、云计算、虚拟
现实、音频视频、自动控制、信息安全 ...
- 14. 2.2. 评价标准试举例——平台
J2EE
初级
中级
高级
J2EE Web
开发
熟悉至少一种主流 J2EE
Web 开发技术或框架(如
Spring 、 Struts 、 JSF
等),能够熟练应用相关技
术开发 Web 应用。
熟悉 J2EE Web 开发的
各种相关技术和框架,
能够根据需求选择最适
宜的技术解决方案来搭
建 Web 应用。
熟悉 J2EE Web 开发的各种相
关技术和框架,参与过或有能力
设计 J2EE 平台上的通用 Web
开发框架。
J2EE 架构
熟悉主流的 J2EE 分布式计
算的技术或框架(如
EJB 、 JMS 、 MapReduc
e 等),能够熟练的应用相
关技术开发应用服务。
熟悉 J2EE 分布式计算
架构的各种技术和框架
,能够根据需要选择最
适宜的技术解决方案。
对基于 J2EE 的分布式计算架构
有深入的理解和丰富的经验,参
与过或有能力设计 J2EE 分布式
计算平台 / 框架。
J2EE 中间件
熟悉主流的 J2EE 中间件
(如 Oracle
Weblogic 、 IBM
WebSphere 、金蝶
Apusic 等),能够面向
J2EE 中间件完成基本的开
发、部署、监控、调优工作
。
熟悉主流的 J2EE 中间
件,有在 J2EE 中间件
集群上部署和管理应用
的经验。
熟悉主流的 J2EE 中间件和相关
的运维管理技术及工具,主持过
大型 J2EE 服务集群的设计、部
署、监控、调优工作。
- 15. 2.3. 评价标准试举例——语言
Java
JDK (安装、使
用) IDE (安装、
使用)
Java 语言特性
Java 基础类库与扩
展类库
初级
在 2 种以上的平台
( Windows/Linux/MacOS
)基本的安装,配置 JDK 与
IDE ;对 2 种以上的 IDE 有
所了解
( Eclipse/Netbeans/... )
对于 Java 的各种语法及语言
特性,有全面的了解,掌握大
多数 java 教科书传授的知识
点
能够熟练使用 Java 的常用类
库,了解 API 的细节
常用 Java 框架与开
源项目
Java 框架浩如烟海,能够在
工作中熟练的组合运用 N 种
框架即可
Java App Server
能够安装、部署、使用 2 种以
上的 Java App
Server ( Tomcat/Resin/We
bLogic/... )
中级
高级
熟练掌握 JDK 的各种命
令行参数,能够在全命令
行下开发、编译、调试
java 应用;熟练使用各种
IDE ,对 IDE 的各种插
件有较为深入的运用
深入了解 Java 的语法及
语言特性,知其然,更知
其所以然,理解 Java 语
言特性的设计意图,能够
分辨其中的优势与陷阱,
在开发中能够熟练灵活的
运用
能够熟练使用 Java
IO/NIO/Concurrency/S
QL/ 等类库,并深入理解
背后的原理
深入理解各种框架,能掌
握原理,分析源码, fixbug 等等
了解各种平台上
JDK/JVM 的差异,并能
做相应的调整与优化;对
IDE 了若指掌,精通某一
种 IDE 插件的开发
在各种平台上安装、配置
、部署、调优、监控 App
Server
发起或参与过较为知名的
Java App Server 开源项
目
能够从 JVM 虚拟机的层
面,彻底掌握 Java 语言
,熟悉 JVM 的开源实现
,最好能够做过优化或提
出过改进意见,对于
Java 语言的各项特性有
独到的见解
对于各种外部扩展类库有
广泛的涉猎,曾经主导或
参与其中某一部分的开发
发起、参与并维护过较为
知名的 Java 开源项目
- 16. 2.4. 评价标准试举例——领域
语音
自然语言理解
( Natural
Language
Understanding )
语音信号处理
( Speech Signal
Processing )
识别算法
( Search/Decode
Algorithm )
初级
了解统计自然语言处理理
论,能使用 NGRAM , HMM ,形式语
言与自动机,各种分类器
如支持向量机,贝叶斯分
类器等
了解信号处理与数字信号
处理,熟悉数字滤波器的
应用,熟悉 ETSI 前端标
准,知道怎么实现语音增
强、抗噪声等任务,熟悉
HTK ,了解声学模型训练
流程
熟悉 HTK ,了解 Lattice
的概念,对组合数学、最
优化算法等有深刻了解,
了解和熟悉 Viterbi , A*
等最佳路径搜索算法,熟
悉模式识别理论
中级
能够胜任分词、训练自然语
言模型、数据挖掘、文本标
注及分类聚类、机器翻译等
任务,针对不同的任务,知
道从哪些方面,利用哪些算
法和工具去提高自然语言理
解模块的性能
能够针对不同应用环境选择
合适的解决方案来提高语音
信号处理模块的鲁棒性,知
道如何选择数据来进行声学
模型训练,能够根据具体任
务开创性地处理语音信号,
包括语音编码、倒谱信号变
化等等,知道如何组织数据
及安排训练任务来满足产物
需求
能够编写解码器,熟悉
Beam-Search , MultiPass 等算法,实现 RTN
等算法,对搜索算法的时间
复杂度和空间复杂度能够根
据具体任务进行设计和优化
高级
有深厚的学术背景和工程
背景,在国内学术及工业
圈中有很高知名度,作为
主要负责人成功实现过比
较复杂的产物
在国际上已经有较高知名
度,在某个学术方向上是
国际权威,对语音识别的
发展方向有独到的见解或
参与过标准制订,了解世
界上语音识别方向的前沿
研究方向
在国际上已经有较高知名
度,在某个学术方向上是
国际权威,针对解码器问
题提出过较新颖的理论解
决方案,能够对解码器框
架进行理论设计以满足新
应用的需要
- 33. 4.1. 常见的学习途径
? 书本:尽信书则不如无书
? 杂志:《程序员》、《码农》
? 视频:国外大学公开课
>ScreenCast>TED> 国内培训公司教学视
频
? 搜索引擎: Google>Baidu
? 问答网站: StackOverFlow/Quora/ 知乎
? QQ 群:严重不推荐
? BBS :比较不推荐
? 邮件组:好的真不多(某些开源项目 / 社区
的不错)
? 开源项目:详见下节
- 34. 4.2. 介绍开源
? WikiPedia.org
?
?
?
?
全球最大的百科全书
4,087,903 articles in English
已有 598,596 篇中文条目
基于 MediaWiki
? Linux
?
?
?
?
一种自由和开源的计算机操作系统
由 Linus Torvalds 最早开发
世界上运算最快的 10 台超级计算机运行的都是 Linux
2010 年 2 月,在服务器市场, Linux 占据 60% 以上份额
? Android
?
目前最火的移动操作系统, Google 出品,开源
? 其他著名的开源软件
?
?
?
?
?
?
Apache,Nginx
Eclipse,Netbeans
GCC,LLVM
Mozilla Firefox,Google Chrome
OpenOffice
......
- 36. 4.3. 选择一个开源项目
? 选择一门语言
?
?
?
一门动态语言 + 一门静态语言
一门经典语言 + 一门新兴语言
足够的深入,才能够举一反三
? 寻找开源项目
?
?
?
?
?
开源基金会:
Apache 、 Linux 、 Eclipse 、 Jboss
开源托管站:
GoogleCode 、 Github 、 CodePlex
技术社区: CSDN 、 InfoQ
WikiPedia
Search Engine
- 37. 4.4. 阅读与理解开源项目
? Hello World
?
让代码在你的机器上跑起来
? Read the code
?
理解项目的静态结构
? Run the code
?
理解项目的动态结构
? Modify the code
?
从破坏开始,渐渐找到感觉
? Commit the code
?
试着为开源项目做贡献