《利用开源项目,学习软件开发》内容回顾与作者采访

2023-11-04

本文转载至:http://www.infoq.com/cn/articles/use-open-source-projects-learn-software-develop?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global

一本仍然在创作中的关于开源和软件开发的图书--《利用开源项目,学习软件开发》可以下载阅读了,国内社区合力创作,内容涵盖如何从一个开源项目入手,循序渐进的学习开发,乃至有详尽的“Hacking”的实例。

本书最大的特色就是其本身也是开源的,代码托管在GitHub上,是由国内开源活跃人士庄表伟发起,有多人共同开发。

在书的开始,作者明确了本书的读者以及学习软件,学习开源软件的开发的几个前提条件,以及诠释了古希腊太阳庙神殿的铭语“认识你自己!”,不是所有人都适合软件开发,你准备好了吗?

下来作者阐释了软件开发的技能,及需要刻苦训练的时间要素,重点强调了软件开发所需要的必备-学习!然后引出来开源对于学习的重要性,这里不是捷径,而是一条康庄大道。然后介绍了接触开源项目之前,需要掌握的基础知识,绝不是xx技校可以三天修炼为大师的那种,并推荐了一些学习站点,并就学习编程语言专门列出了一些建议。这里有点真话:英语一定要好!

在接下来的一章里,作者介绍了如何选择一个开源项目。列出了常见的开源组织、代码托管、技术社区、及商业公司的研究院等,还有利用社交媒体、搜索引擎、问答网站、维基百科等的一些指引。然后给初学者们就如何选择一个开源项目提了几点建议,如明确自己的目的、优先选择能够独立运行的项目、选择活跃的项目、选择适当的版本。最后给出了几个适合初学者学习的开源项目例子,如著名web服务器项目Nginx等。

在第四章,作者介绍了代码版本控制工具,如git、SVN、CVS等,以及一些流行语言的包管理工具,此二者均是告知读者如下获得源代码的,然后以各个语言的初始化安装环境为例,介绍了如何让这些语言能够运行程序,涉及的语言有java、php、ruby、python、Node.js、C/C++等,最后给出中间遇到困难该如何处理的“锦囊妙计”。

第五章,和著名的《code reading:The Open Source Perspective》一书的内容有得一拼,从静态阅读代码、动态编译运行、乃至debug来逐步跟踪等,每一个环节都是各位作者的心得和体会,希望读者在理解代码的过程中一定要知其所以然。顺便提及的就是本章的参与者其中有Python中国著名大妈:Zoomquit。

第六章,渐入佳境,作者以一度非常流行的桌面游戏《2048》,来实际修改其源代码,有趣且不失难度。

第七、八、九章,有些遗憾,还没有任何的内容。按照作者的列表来看,此三章想让开发者成为某些项目的贡献者,或者是自己发起一个开源项目,这里只能祝愿大伙加油。

在书的最后,列出了一些优秀的学习资源,是值得推荐的项目。

InfoQ有幸就此书采访了发起人庄表伟:

InfoQ: 发起创作本书的意愿及背后的原因是什么?

最初发起这个项目的时候,我还在盛大创新院,当时我在创新院的工作是“开发者关系管理”。确切的说,是搞好盛大与外部开发者的关系,当时,我们认为可以做很多与开发者相关的事情:赞助技术活动,举办开发大赛,支持与推广开源社区等等,这些事情,都能够提升盛大在开发者心目中的形象。当时,我们在开源的方面做了不少的工作,例如:创办了teamhost这样的开源项目托管平台,发起《我们的开源项目》这样的开源爱好者聚会,这些活动当然也办得热热闹闹,但是我们也意识到:做开源的人,还是太少了。当时,我就有一个想法,如果越来越多的在校大学生,在开始学习软件编程的时候,就知道开源是怎么回事,甚至愿意借助开源来学习软件开发,愿意参与到开源社区之中,应该是一件拓展群众基础的好事情。因此,我发起了《利用开源项目,学习软件开发》这个开源写作项目,希望能够吸引更多的爱好者,能够成为开源社区的一份子。

InfoQ: 书中对于读者的定位是不是有点狭窄,毕竟现在很多的公司都在使用开源。谈谈您的看法。

当然,即使对于工作多年的人来说,开源也是非常有益的。但是,直白一点说:很多工作经验“丰富”的老人,很早以前,就认为自己不再需要学习新东西了。相对的,在校大学生,以及新毕业的大学生,是深刻意识到自己需要不断学习的一群人。真的,我在技术这个圈子里,遇到了很多不思进取的老程序员。他们每天都忙得要死,根本没空学什么新东西。哪怕这些新技术,新工具,能够帮助他们提升效率,改进工作。即使他们在工作中用到了开源,也并非出于自愿,仅仅是由于上头决定的。所以,如果我当初的定位写的是“大学毕业(正负1~2年)”,的确过于狭窄的话。那么我愿意修改为“所以愿意始终不断借助自学提升自己的程序员”。

InfoQ:在理解源代码一章中,所给出的示例跳跃很大,项目、语言、工具等都有所涉略,这是否给一些初学者带来困惑?

这一章,我写得也很幸苦,因为想要表达的内容很多,而且也很难找到一个示例,将这些手段都串联起来,因此只能将各种理解源代码的手段,分门别类,一一罗列。如果说因此给初学者带来困惑,也只能先表达歉意,然后再慢慢看看如何改进。

InfoQ: 关于如何参与或发起开源项目的章节还没有完成,还是没有开始?中间遇到了什么困难了嘛?

其实,主要还是卡在了修改开源项目这一章。要找到一个足够好的示例,将修改开源项目的要点讲清楚,的确很不容易。我后来找到2048,来做一个简单的修改。但是,这个项目的复杂度,其实是不够的,有很多要点,在这个示例的范围里,其实不是容易讲出来。所以,如果有朋友能够提供更多的,关于如何修改一个开源项目的案例,则“在下不胜感激”。

InfoQ: 谈谈您对于开源对于软件开发、创新,以及其在未来的一个地位与影响如何的一些看法吧。

这个问题,实在是太大了。之前听过几个说法:未来人人都要懂编程;开源已经赢得了世界;创新需要开放的氛围。也许我们可以把这些观点结合在一起来看:因为未来是由软件来定义的,而且,越来越多的时候是由开源软件定义的。所以,如果完全不关注、不了解这一趋势,是相当不明智的。开源是什么?开源软件(硬件)是什么?搞开源的人,是一群什么样的人?他们究竟以何种动力,在搞些什么东西?的确是一些值得所有人去探究的问题。在我看来,开源是一种智力型集体劳动的协作方式,想要最大限度的发挥人类的智慧,采用开源协作模式,是最为合理的选择。而且,这种协作模式,虽然最早是应用于软件开发,最终将成为所有“智力型劳动”的共同选择。在刘慈欣的《三体》中曾经预言的技术大爆炸,在新的协作模式下,将会得到进一步的提速。

InfoQ: 您对参与本书的贡献者,或者是呼吁更多的有经验的人参与到本书的创作中说些什么?

最近,我开始跑步,有了一些感悟。支撑我跑下去的,其实不是毅力,不是责任,不是减肥目标。而是跑步本身带来的“快感”。参与开源也与此类似,我算是一个乐于分享的人,因为在分享之后,我获得了“甚至超出预期的”收获。经常分享自己的所思所得,会有很多收获: 1. 整理自己的思路,温故而知新 2. 能够收获建议和意见,三人行必有我师 3. 传播自己的理念,收获同道中人的友谊,有朋自远方来,不亦乐乎。所以,我也很期望能够更多的朋友,参与到本身中来,分享更多,收获更多。

非常感谢庄表伟百忙之中抽出时间接受InfoQ的采访。

关于作者

适兕,华为开源专家,目前主要的工作是华为的内源社区平台建设。1997年毕业于华东师范大学,曾任盛大创新院的高级研究员、印客网的技术总监。多年来一直在编程的第一线,并以Coding为最大的乐趣。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《利用开源项目,学习软件开发》内容回顾与作者采访 的相关文章

  • 岁月划过生命线(2016 年终总结 -季度之星)

    岁月划过生命线 2016 年终总结 季度之星 标签 coder 年假结束 明天就要回到杭州 回到我fighting的战场 回首过去的2016 放纵了许多 但也收获了很多 n个项目 n个框架 第一个季度之星 头像第一次登上CSDN以及第一个年
  • 读书笔记(2018年3月)-《卓有成效的管理者》总结

    1 善用时间 有效的管理者知道他们的时间用在什么地方 他们所能控制的时间非常有限 他们会有系统地工作 来善用这有限的时间 1 记录时间 记录时间耗用的实际情形 2 诊断时间 做有系统的时间管理 首先要找出什么事根本不必做 这些事做了也完全浪
  • 程序员必读书目推荐

    1 Effective Java Joschua 稍许过时 但没有替代java方面的书 2 Effectvie C Scott Meyer 3 More Effective C Scott Meyer的书是非常非常好书 每次读都感到汗颜 自
  • 读书:《少即是多》

    少即时多 是本田直之的一本书 他还写过 杠杆阅读术 杠杆时间术 杠杆思考术 等 现在社会 物质财富的获得变得相对容易 但并没有让人更幸福 或者快乐持续的时间很短 随之而来的是担心 忧虑和负担 真正带来幸福的反而是减法 如何做减法 断舍离 L
  • 读书:《人生的底气》

    人生的底气 是樊登刚出的一本书 里面讲解了孟子的7个关键词 每个关键词挑了有代表性的3句话 第一个关键词 初心 生 亦我所欲也 义 亦我所欲也 二者不可得兼 舍生而取义者也 人生的每一天可能都在面临着人生意义和工作价值的拷问 我们所做的事合
  • Linux命令:top

    top命令 用于动态地监视进程活动与系统负载等信息 top 23 27 36 up 30 min 0 users load average 0 52 0 58 0 59 Tasks 6 total 1 running 5 sleeping
  • 大家看看什么是牛人

    现在跨专业跨学校考研已经是一种趋势 某君学习图书馆学n年 也是觉得发腻 于是决定考个理科的研究生 在广泛的调查和研究之后 他毅然决定考天大的化院来挑战一下自己 看看一个连苯烷都不会写的人是否可以大跨度考研成功 他做了以下几步 1 坐火车到天
  • 费曼学习法简述

    你真的已经对某个知识点足够深入了吗 还是只是停留在一个肤浅的阶段 不妨试试费曼学习法 让自己的思考更加深入 费曼学习法 主要分为四个阶段 下面针对这四个步骤进行详述 选择概念 选择一个你想学习的概念 讲授概念 你对面的是一个10岁孩童 试图
  • [读书] Linus 为乐趣而生

    下载地址 http pan baidu com s 1pJ3Dz2j
  • 恐怖谷效应

    恐怖谷效应 Uncanny Valley 是仿真机器人领域中的一个理论 是指一个机器人的外貌或行为越来越逼真的过程中 观察者的心态会从认同到不适 再到认同这样一种现象 数学上X轴为接近度 Y轴为亲近感 则会出现一段山谷曲线 所以命名为恐怖谷
  • 大话西游灯谜答案

  • 浓缩就是精华

    凡人牧场 人生启示录 被称为世上最经典的25句话 转载 作者 晶晶鱼 提交日期 2003 12 31 15 32 40 记住该记住的 忘记该忘记的 改变能改变的 接受不能改变的 能冲刷一切的除了眼泪 就是时间 以时间来推移感情 时间越长 冲
  • 《编程珠玑》--读书笔记12章:取样问题

    第十二章 作者提出了一个问题 程序的输入包含两个整数m和n 其中m lt n 输出是0 n 1范围内的m个随机整数 不允许重复 有两种方法达到目的 1 思路 从r个剩余的整数中选出s个 以概率s r来选择下一个数 比如 m 2 n 5 选择
  • 通过智慧的选择保持持续的进步 ——Google全球副总裁李开复谈选择的智慧

    通过智慧的选择保持持续的进步 Google全球副总裁李开复谈选择的智慧 2006 11 21 15 24 57 当今时代和20世纪已经有很大的差别 今天人们可以通过互联网接触到更多的信息 根据这些信息来为自己做更好的选择 这样的环境下 能够
  • 别让不好意思害了你

    有些事情是不能告诉别人的 有些事情是不必告诉别人的 有些事情是根本没有办法告诉别人的 而且有些事情是 即使告诉了别人 你也马上会后悔的 所以 假使你够聪明 那么 最后的办法就是静下来 啃啮自己的寂寞 或者反过来说 让寂寞来吞噬你 罗曼 罗兰
  • 你业余时间在做什么?

    author skate time 2010 04 20 哈佛大学凌晨4点半的景象 在网上看到这篇文章 觉得很有感触 或许这再一次印证任何人每一次的成功背后都有不为人知的付出和汗水 人的时间和精力都是有限的 所以 要利用时间抓紧学习 而不是
  • 读书:《完美主义扼杀效率》

    作者是日本人 全书对比了33条完美主义和实效主义的做法 我只挑几条有感觉的记录在一页纸上 时刻提醒自己 做事的时候不过于追求完美 而是要抓住重点
  • 《宫本武藏》

    吉川英治 宫本武藏 地之卷 水之卷 火之卷 风之卷 http book sina com cn nzt his gongbenwuzang 空 二天之卷 http lianzai book qq com book 3746 缺少最后的 圆明
  • Windows Vista的安装和配置

    声明 此文章为个人读书笔记 仅记些重要的内容备忘 无盗版之意 更多相关内容请查看 indows Vista使用详解 严禁转载 第二章 Windows Vista的安装和配置 全新安装Windows Vista 从Windows XP升级为W
  • 真正的阅读者,是不需要荐书的

    From http www luanxiang org blog archives 2136 html 早上一个朋友在朋友圈里跟我说 上次你推荐的 信息简史 和 知识的边界 两本书 我觉得很不错 这条消息让我比较差异 首先我并没有 推荐 过

随机推荐

  • Springboot中使用ModelMapper对outputdto转entity的坑

    今天在使用ModelMapper对outputdto转entity的时候发现转出来的entity是null的 在用inputdto转entity的时候没出现过这样的问题呢 对比了下inputdto和outputdto并没有什么不一样 可以说
  • 常用的ASCII码值

    常用的ASCII码值 1 什么是ASCII码 ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符 标准ASCII 码也叫基础ASCII码 使用7 位二进制数 剩下的1位二进制为0 来表示所有的大写和小写字
  • 目标检测小白入门(一)——背景、指标、数据集

    一 背景介绍 计算机视觉领域有四大主要任务 分别是图像分类 目标检测 目标跟踪 图像分割 图像分类的目标是将给定的图像进行分类 给图片或视频分配一个类别标签 比如图像中大部分都是气球 还有其他物体 要给这个图片或者视频提供气球的标签 目标检
  • C语言实现GB2312和UTF8之间的编码转换

    C语言实现GB2312和UTF8之间的编码转换 GB2312 GB2312编码适用于汉字处理 汉字通信等系统之间的信息交换 基本集共收入汉字6763个和非汉字图形字符682个 GB2312中对所收汉字进行了 分区 处理 字符集分成94个区
  • CocosCreator3.8研究笔记(十五)CocosCreator 资源管理Asset Bundle

    在资源管理模块中有一个很重要的功能 Asset Bundle 那什么是Asset Bundle 有什么作用 怎么使用 Asset Bundle呢 一 什么是Asset Bundle 有什么作用 在日常游戏开发过程中 为了减少游戏启动时 资源
  • 2020年必学的devops流行工具,你学会了吗?

    2020年必学的devops流行工具 1 Git 2 Docker 3 Selenium 4 Jenkins 5 Ansible 6 puppet 7 Nagios 8 Chef DevOps Development和Operations的
  • 第14.12节 Python中使用BeautifulSoup解析http报文:使用select方法快速定位内容

    一 引言 在 第14 10节 Python中使用BeautifulSoup解析http报文 html标签相关属性的访问 和 第14 11节 Python中使用BeautifulSoup解析http报文 使用查找方法快速定位内容 介绍了通过属
  • Python实现文本词频统计算法及完整代码

    Python实现文本词频统计算法及完整代码 Python是一种高级编程语言 广泛应用于数据科学 机器学习等领域 在文本处理方面 Python也有着得天独厚的优势 不仅提供了多种字符串操作函数 而且还可以使用各种开源库来处理文本 本文将介绍一
  • hdu 1043/poj 1077八数码问题 BFS+康托展开求解

    hdu poj include
  • JedisCommands

    import java util List import java util Map import java util Set Common interface for sharded and non sharded Jedis publi
  • 10天学会flutter DAY6 flutter 玩转异步加载

    玩转异步加载 异步支持 1 处理 Future 2 声明异步函数 3 async await 4 处理 Stream 5 isolate机制 6 生成器 7 元数据 异步支持 Dart 代码库中有大量返回 Future 或 Stream 对
  • 用 Pyqt5 制作一个动态水波进度条

    最近做了一个小项目 里面有一个需求需要添加一个动态进度条 进度条的样式就类似于水波来回起伏的那种形状 下面就是最初的展示效果 有一点区别 这里我加了一个进度自动增加的功能 end imag11252323 gif 下面先说一下这个效果的制作
  • OpenGL ES SL 3.0规范中以前的attribute改成了in varying改成了out

    有几个学习图形学不久的同学都问到这个问题 做一阐述 1 关键字的小修改大概由如下两点决定 第一 先考虑一个成本原则 一个关键字的定义是否修改 是由熟练程序员在使用该关键字时的思维成本来决定的 当然 还有一个原则 是由初学者的学习成本来决定的
  • BUUCTF [GWCTF 2019] 我有一个数据库

    BUUCTF GWCTF 2019 我有一个数据库 考点 目录扫描 phpmyadmin 4 8 1 远程文件包含漏洞 CVE 2018 12613 启动环境 应该是为乱码 结合题目名 应该与数据库有关 寻找提示无果 使用dirsearch
  • JavaBean的详细及引用

    1 JavaBean实际是具有统一接口格式的java类 2 JavaBean的组成 属性 Properties 方法 Method 事件 Events 3 一个JavaBean的例子 该例子是用的Simple属性 lt 属性在以后说 gt
  • (数据库-MySQL) Date 函数

    下面的表格列出了 MySQL 中最重要的内建日期函数 函数 描述 NOW 返回当前的日期和时间 CURDATE 返回当前的日期 CURTIME 返回当前的时间 DATE 提取日期或日期 时间表达式的日期部分 EXTRACT 返回日期 时间按
  • 设计模式(单例模式)

    设计模式第二弹 一 应用 1 1 概念 1 2 应用场景 二 实现 2 1 Python实现 一 应用 1 1 概念 单例模式是一种创建型的设计模式 这种设计模式主要的目的是为了让一个类只保留一个实例 1 2 应用场景 如果你需要创建一个数
  • 用微博图片反查上传者信息

    其实微博每一种图片都包含了上传者的信息 只是大家平时都不会去观察或者不知道罢了 我们经常会看见别的网站会有微博的外链缩略图 那么如何通过微博图片查找到其上传者呢 首先第一种方法 使用网站查询只要一张微博图片就可以帮你 查找出上传这张图的主人
  • FPGA等精度测频

    频率测量在电子设计和测量领域中经常用到 因此对频率测量方法的研究在实际工程应用中具有重要意义 常用的频率测量方法有两种 频率测量法 和周期测量法 频率测量法是在时间t内对被测信号的脉冲数N进行计数 然后求出单位时间内的脉冲数 即为被测信号的
  • 《利用开源项目,学习软件开发》内容回顾与作者采访

    本文转载至 http www infoq com cn articles use open source projects learn software develop utm campaign infoq content utm sour