狠狠撸

狠狠撸Share a Scribd company logo
Software

Code
Work

软 件开发 与信息技术
导 游图
对于我
? 盛大创新院高级研究员:庄表伟
? 新浪微博: @ 庄表伟
? Gmail : zhuangbiaowei@gmail.com
? Blog :
http://www.zhuangbiaowei.com/blog/
提问
1.现在学习的内容以后工作能用多少?
2.如果进入软件行业,我们还缺少什么?
3.我们学的硬件知识,以后都用不着吗?
4.计算机专业学的太杂又不精通该怎么选择方
向?
5.该怎么提高自己?
内容提要

1. 光锥与学术史
2. 软件开发技能的三维坐标
3. 解剖一个应用领域(互联
网)
4. 常见的学习途径
5. 多说几句
1.1. 光锥与学术史

光锥,物理学名词。指从一个
事件散开的光在四维的时空里
形成了一个三维的圆锥,称为
这个事件的将来光锥。
将一块石头扔进水塘,水表面
的涟漪向四周散开,并且涟漪
以圆周的形式越变越大,这个
二维的池塘水面加上一维的时
间,扩大的水圈与时间就能画
出一个圆锥,顶点是石头击中
到水面的地方和时间。
1.1. 光锥与学术史
? 第一枚石头被投入了
池塘
? 这块石头激起了层层
涟漪
? 一块石头引发了更多
的石头
? 更多的石头激起了更
多的涟漪

? 第一篇奠定某一学科
的论文
? 这篇论文引发了更多
的研究
? 一篇论文激发了更多
论文
? 一个学科被完整的确
立起来
1.2. 光锥与学术史:更加复杂的情况
? 学术的发展史,是交叉影响的
? 实际上存在的并非一个光锥,而是一系列的光
锥
? 多个光锥交叉影响,会催生新兴的光锥
?

?
?

?

计算机学科最初是由电子学、数学、逻辑学等学科
催生的
在计算机科学的持续发展中,分化出了软件科学
软件学中又分化出了操作系统、编译原理、数据结
构、计算机图形学等等学科
软件科学的发展,又反过来影响和催生了更多的学
科:例如语言学、人工智能、控制论、计算物理学
、计算化学 ......
1.3. CS 、 IT 、 SE
? 计算机科学( Computer Science )
?

系统性研究信息与计算的理论基础以及它们在计算机系统中
如何实现与应用的实用技术的学科。它通常被形容为对那些
创造、描述以及转换信息的算法处理的系统研究。

? 信息技术( Information Technology )
?

主要用于管理和处理信息所采用的各种技术总称。应用计算
机科学和通信技术来设计、开发、安装和实施信息系统及应
用软件。

? 软件工程( Software Engineering )
?

研究和应用如何以系统性的、规范化的、可定量的过程化方
法去开发和维护软件,以及如何把经过时间考验而证明正确
的管理技术和当前能够得到的最好的技术方法结合起来的学
科。
1.3. CS 、 IT 、 SE
? 科学
?

放之四海而皆准、定义、公式、原理、算法
? 对 or 错

? 技术
?

将科学应用于实际,对实际生活产生实在的影响
? 升级

? 工程
?

做一件事,涉及到需求、时间、人员、技术、限制
条件等等
? 技术 + 艺术,很难评判优劣
1.4. 计算机科学的相关领域
1.5. 信息技术的相关领域
1.6. 软件工程的相关领域
2.1. 软件开发技能的三维坐标
? 对于一个软件开发项目,我们通常可以描述为:在某
某平台上 + 采用某某语言 + 面向某某领域的产物
? 常见平台
?

Windows 、 Linux 、 MacOS 、 Java 、 .NET 、 Web
、 Android 、 iOS...

? 常见语言
?

Java 、 PHP 、 Ruby 、 C# 、 JavaScript 、 C 、 C+
+ 、 LISP 、 ObjectiveC 、 Delphi 、 Python 、 ActionScript...

? 常见领域
?

电子商务、电子政务、嵌入式、语音、搜索、云计算、虚拟
现实、音频视频、自动控制、信息安全 ...
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 服务集群的设计、部
署、监控、调优工作。
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 开源项目
2.4. 评价标准试举例——领域
语音
自然语言理解
( Natural
Language
Understanding )

语音信号处理
( Speech Signal
Processing )

识别算法
( Search/Decode
Algorithm )

初级
了解统计自然语言处理理
论,能使用 NGRAM , HMM ,形式语
言与自动机,各种分类器
如支持向量机,贝叶斯分
类器等
了解信号处理与数字信号
处理,熟悉数字滤波器的
应用,熟悉 ETSI 前端标
准,知道怎么实现语音增
强、抗噪声等任务,熟悉
HTK ,了解声学模型训练
流程

熟悉 HTK ,了解 Lattice
的概念,对组合数学、最
优化算法等有深刻了解,
了解和熟悉 Viterbi , A*
等最佳路径搜索算法,熟
悉模式识别理论

中级
能够胜任分词、训练自然语
言模型、数据挖掘、文本标
注及分类聚类、机器翻译等
任务,针对不同的任务,知
道从哪些方面,利用哪些算
法和工具去提高自然语言理
解模块的性能
能够针对不同应用环境选择
合适的解决方案来提高语音
信号处理模块的鲁棒性,知
道如何选择数据来进行声学
模型训练,能够根据具体任
务开创性地处理语音信号,
包括语音编码、倒谱信号变
化等等,知道如何组织数据
及安排训练任务来满足产物
需求
能够编写解码器,熟悉
Beam-Search , MultiPass 等算法,实现 RTN
等算法,对搜索算法的时间
复杂度和空间复杂度能够根
据具体任务进行设计和优化

高级
有深厚的学术背景和工程
背景,在国内学术及工业
圈中有很高知名度,作为
主要负责人成功实现过比
较复杂的产物
在国际上已经有较高知名
度,在某个学术方向上是
国际权威,对语音识别的
发展方向有独到的见解或
参与过标准制订,了解世
界上语音识别方向的前沿
研究方向

在国际上已经有较高知名
度,在某个学术方向上是
国际权威,针对解码器问
题提出过较新颖的理论解
决方案,能够对解码器框
架进行理论设计以满足新
应用的需要
2.5. 能力分级的常规标准
? 初级
?

掌握如何应用某种技术

? 中级
?

在多种技术中合理选择

? 高级
?

为这项技术 / 领域,做出自己的贡献
2.6. 对 PhD 的简明解释
这是整个人类所掌握的知识。
2.6. 对 PhD 的简明解释
这是你小学之后所掌握的知识。看似特别的少。
2.6. 对 PhD 的简明解释
高中之后,你知道的似乎多了一点点。
2.6. 对 PhD 的简明解释
拿到学士学位之后,你有一点自己的专长之处了。
2.6. 对 PhD 的简明解释
硕士学位意味着你在专长领域有更多的知识了。
2.6. 对 PhD 的简明解释
在阅读大量研究报告之后,你走到了人类知识的极限。
2.6. 对 PhD 的简明解释
你到了那个极限之后,需要更加专注。
2.6. 对 PhD 的简明解释
你向极限外猛推了好几年。
2.6. 对 PhD 的简明解释
最终有一天,极限给你跪了。
2.6. 对 PhD 的简明解释
这,就是 PhD !
2.6. 对 PhD 的简明解释
整个世界对你来说将和从前不再一样。你甚至可以傲视群雄。
2.6. 对 PhD 的简明解释
但是,也别忘了大背景啊!
2.7. 这个解释的偏颇之处
? 只要是发前人所未发
? 只要是符合科学原理而非民科
? 并非只有 PhD 才能突破知识的极限
? 并非只有向外、再向外,才能发现新的知识
? 对已有的知识交叉、综合、融会贯通,也能有
所创新
3. 解剖一个应用领域(互联网)

终端
桌面

手机

平板

浏览器

网络
局域网
互联网

广域网
移动互联网

服务器
Web

应用

服务器

服务器

数据库

文件

服务器

服务器

负载均衡

高速缓存
3. 解剖一个应用领域(互联网)

终端

网络

服务器

协议

W3C协议族
HTML
WML

TCP/IP
ADSL
IEEE 802协议族

CORBA、SOAP、REST

技术

Web开发技术
Desktop开发技术
Mobile开发技术

有线网络
无线网络
光纤网络

中间件、消息队列、
数据库、缓存、负载
均衡

框架

jQuery
Sass
Cocoa

语言

JavaScript
Java
Objective-C

Ruby On Rails
Yii
Zope
JSON
XML

C/C++、Java、C#
Perl、Python、PHP
Ruby
4.1. 常见的学习途径
? 书本:尽信书则不如无书
? 杂志:《程序员》、《码农》
? 视频:国外大学公开课
>ScreenCast>TED> 国内培训公司教学视
频
? 搜索引擎: Google>Baidu
? 问答网站: StackOverFlow/Quora/ 知乎
? QQ 群:严重不推荐
? BBS :比较不推荐
? 邮件组:好的真不多(某些开源项目 / 社区
的不错)
? 开源项目:详见下节
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
......
4.2. 借助开源项目,学习软件开发
? 源代码最有营养
?
?

纸上得来终觉浅
能够运行起来的代码,是最真实的

? 积累经验的有效方式
?
?
?

可以接触那些没有机会接触的项目
看看别人犯过的错误
在与代码搏斗中快速成长

? 开源社区是一所好学校
?
?

开放、分享、交流,是开源社区的本质
问对问题,就会收获好的答案
4.3. 选择一个开源项目
? 选择一门语言
?
?
?

一门动态语言 + 一门静态语言
一门经典语言 + 一门新兴语言
足够的深入,才能够举一反三

? 寻找开源项目
?

?

?
?
?

开源基金会:
Apache 、 Linux 、 Eclipse 、 Jboss
开源托管站:
GoogleCode 、 Github 、 CodePlex
技术社区: CSDN 、 InfoQ
WikiPedia
Search Engine
4.4. 阅读与理解开源项目
? Hello World
?

让代码在你的机器上跑起来

? Read the code
?

理解项目的静态结构

? Run the code
?

理解项目的动态结构

? Modify the code
?

从破坏开始,渐渐找到感觉

? Commit the code
?

试着为开源项目做贡献
4.5. 自己发起一个开源项目
? 解决自己的需求
? 寻找现有的解决方案
? 择地安家
? 埋头苦干与大声吆喝
? 选择一个合适的 License
? 延伸阅读
?

制造开源软件:如何成功运营自由软件项目
4.6. 开源作为一种精神
? 乐趣
? 成长
? 分享
? Geek 改变世界
5.1. 多说几句
? 你真的适合做软件开发吗?
?
?
?
?
?

够懒惰?
有条理?
有耐心?
好奇心?
够较真?
5.2. 其他一些需要涉猎的领域
? 与人有关
?
?
?

管理学
心理学
文化差异

? 与事有关
?
?
?

领域知识
运筹学
外部接口

? 与技术有关
?
?

各种关联技术
关注新兴技术

? 与基础有关
?

各种理工科基础
回到最初的问题 ...
1.现在学习的内容以后工作能用多少?
2.如果进入软件行业,我们还缺少什么?
3.我们学的硬件知识,以后都用不着吗?
4.计算机专业学的太杂又不精通该怎么选择方
向?
5.该怎么提高自己?
? 学什么?( 不学什么?)
? 怎么学?
回到最初的问题 ...

? 学而不思则罔,思而不学则殆
? 三思而后行,行成于思毁于随
? 若有所思,若有所得
? 知是行的主意,行是知的功夫;知是行之始,
行是知之成,知行合一。
? 从理论到实践,再从实践回到理论
回到最初的问题 ...
? 功夫在诗外,艺多不压身,融会贯通最重要
? 找一些有趣的事情来做做
? 设立一个努力以后能够达到的目标(跳高原
理)
Thank You!

More Related Content

software development guide map