读《借助开源项目,学习软件开发》总结

读《借助开源项目,学习软件开发》总结
GitBook文章源地址:文章源地址
一.前言
准备条件:(1)一台能上网的电脑(2)首选系统Ubuntu,其次Windows
二.开始
(1)软件开发能力体系:

基础知识:计算机、数学、算法、逻辑
编程技能:具体语言相关
领域知识:与工作的具体方向有关

逻辑能力
理解能力

创造能力
中与高的两项,属于超越编程局限的通用能力,不仅仅是软件开发上用得到,在各方面都非常需要这三类能力。逻辑能力,可以通过训练提高;理解能力,可以通过经验积累;而创造能力,的确比较难,有天赋的成分在其中。锻炼这些能力借助开源学习是最有效的
(2)在学习语言之前
a)了解计算机科学的基本知识:
学习网址: 斯坦福大学 计算机科学入门课程
b)确定自己学习的语言
推荐语言学习网站

推荐语言:

语言名称 主要开源项目 推荐理由
ruby Ruby On Rails 动态语言,简洁清新
java Tomcat 经典的面向对象静态语言,长盛不衰,优秀项目多如牛毛
python scipy, nltk, django, ansi 最接近人类语言的通用语言,在开源的科学计算领域一骑绝尘,在数据挖掘、web开发、系统管理等领域也为表现突出
c语言 lua,mongrel2 面向过程的,存在于所有平台,历史悠久的语言。如果你的未来应用方向是嵌入式开发的话这是首选
nodejs sails.js,angular,coffee 疯狂的科学家们在用js做一系列的不可思议的事情,有一统的趋势
三.选择一个开源项目
(1)开源基金会:
Apache:http://projects.apache.org/indexes/quick.html
Linux:http://www.linuxfoundation.org/programs
Eclipse:http://www.eclipse.org/projects/listofprojects.php
Jboss:http://www.jboss.org/projects
(2)开源项目托管网站:
服务提供商 SVN Git Mercurial 介绍
Google Code 支持 支持 支持 Google Code属于“富二代”,其在速度上,使用体验上都优于其他几个托管网站,尤其是其丰富的帮助文档,其中有很多还有对应的中文版。因此,对于初学者来说,比较容易上手,也可以获得一个很好的学习机会。当然,因为都是google.com的域名,所以时不时的会访问不了管理界面,原因大家懂的。另外,因为使用简单方便,相应的其在功能上就相对较弱一点。但是应付一般的项目还是绰绰有余。正在关闭中…
Sourceforge 支持 支持 支持 SourceForge可以算是开源界的托管始祖,很多古老的,知名的开源项目都托管在它上面,其对开源界的贡献估计可以和Apache对 Java界的贡献相提并论了。因此,其在功能上经过了长时间的考验,大家想要的功能都能找到。不过,因为强大,其上手难度也相对较高,而且全英文界面,对于英文较弱的同学来说也是一件很痛苦的事。
Github 支持 支持 不支持 GitHub属于托管界的新贵,伴随着Git的蓬勃发展而发展。越来越多的开源软件使用Github托管。最近因Rails漏洞被Hacker黑了也让其处于媒体的风口浪尖。这个事件从一个侧面反映了其在业界的影响力。
CodePlex Yes Yes Yes 微软的开源项目基地
BitBucket No Yes Yes Python的项目在上面比较多
launchpad No No No 使用bzr管理代码,项目很多,如Ubuntu等,中国大陆访问速度巨慢无比

(3)这样的开源项目适合初学者
a)明确自己的目的
b)优先选择能够独立运行的项目
c)选择活跃的项目
d)判断代码的质量
e)选择合适的版本
(4)值得推荐给大家的开源项目
项目名称 语言(平台) 所属领域 推荐理由
Petshop4.0 NET 企业开发 1.微软官方用来展示.Net企业开发实力的项目,架构优雅;2.涉及中小型企业开发常用技术;3.网络资源较多
Haozesfx NET Winform,SIP协议 1.基于飞信实现的开源项目,实用性强,方便二次开发;2.结构清晰,设计成熟;3.实现了SIP协议
ThinkPHP PHP Web框架 1.应用较为广泛的Web开发框架,成熟稳定;2.集成多项先进的设计思想;3.活跃的社区支持和完善的中文文档(帮助手册,Demo,代码注释)
Nginx C/Linux/Unix/windows/MAC 基础设施 代码优秀简洁,插件系统牛逼,HTTP协议可谓当今码农的必备知识
bottle Python/Linux/Unix/windows/MAC web开发 代码优秀简洁,3000多行代码(包括注释)搞定web server

四.下载开源项目
利用版本控制工具:SVN、Git、Mercurial
五.理解源代码
(1)约定俗成的目录结构:
目录名 含义
conf/configure 各种配置文件
src/source 项目的源代码
doc/document 项目文档
test/unittest 单元测试
tools/utils 相关工具
lib 库文件
app 应用相关的文件(在web项目中经常出现)
controllers 控制器,在遵循MVC模式的Web项目中,经常出现
models 模型,在遵循MVC模式的Web项目中,经常出现
views 视图,在遵循MVC模式的Web项目中,经常出现
db 数据库相关文件
demo/example 相关示例代码
misc 其他杂项
include 头文件所在目录,c/c++项目中常见
out/build 编译结果输出目录
third_party/vender 第三方库
install 安装所需的相关文件

(2)UML图
在UML系统开发中有三个主要的模型:
功能模型: 从用户的角度展示系统的功能,包括用例图。
对象模型: 采用对象,属性,操作,关联等概念展示系统的结构和基础,包括类图。
动态模型: 展现系统的内部行为。包括序列图,活动图,状态图。
在学习开源软件时如何使用UML,有以下一些经验和忠告:
不用使用工具,自动化的生成UML。自己手绘或者用Umbrello这样的开源工具自己绘制,将大大提高阅读并理解代码的能力。
首先建立对象的静态模型,也就是先画“类图”。
在UML规范之外,可以加一些辅助自己记忆的符号,这个没有一定的规矩,方便好记就行。
其次在动态理解的过程中,对关键的执行路径,画出时序图(Sequence Diagram),将有助于深入理解项目的执行过程。
对于非面向对象的软件项目,可以参照类图与组件图的模式,画出模块图。也有助于加深理解。
UML本身有越来越复杂,越来越学术化的倾向,要适可而止。
六.修改开源项目

文章推荐书籍:具体数学(英文版第2版)
代码大全
代码整洁之道
软件调试的艺术
计算机网络
结语:《借助开源项目,学习软件开发》里面涉及到的学习方法、资源很多,这篇总结只是个人在流程上的总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值