【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

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

  • 2015-11-19
  • 本文字数:3103 字

    阅读完需:约 10 分钟

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

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

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

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

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

重要通知:接下来 InfoQ 将会选择性地将部分优秀内容首发在微信公众号中,欢迎关注 InfoQ 微信公众号第一时间阅读精品内容。

在第四章,作者介绍了代码版本控制工具,如 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 为最大的乐趣。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群(已满),InfoQ 读者交流群(#2))。

2015-11-19 17:133769
用户头像

发布了 30 篇内容, 共 10.5 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

你代码的异味是故意的还是不小心?是故意的!

禅道项目管理

FDF循环互助游戏系统开发智能合约搭建

薇電13242772558

智能合约

OceanBase 生态产品:时序数据库CeresDB 正式发布 1.0 版本

OceanBase 数据库

数据库 oceanbase

云智慧助力中国信通院组装式应用开发平台系列标准建设

云智慧AIOps社区

技术沙龙 | 探索软件测试前沿技术及最佳实践,体验ChatGPT在测试领域中的应用

测试人

软件测试 沙龙 ChatGPT

取得成功的 13 个方法

宇宙之一粟

个人成长 翻译 成功

ins视频保姆级图文教程,快学起来!

frank

搬得进来,搬得出去!快来过一把数据迁移的“瘾”

OceanBase 数据库

数据库 oceanbase

探索以小程序提升运维效率

Onegun

运维 小程序容器

R-Drop论文复现与理论讲解

华为云开发者联盟

人工智能 华为云 深度神经网络 华为云开发者联盟 企业号 3 月 PK 榜

Sovit3D平台快速构建智慧渔业三维可视化养殖管理系统

2D3D前端可视化开发

智慧渔业 智慧渔场 智慧水产养殖 数字渔业 渔业数字孪生

京东云RASP云原生安全免疫创新实践

京东科技开发者

Web 安全 漏洞 业务安全 企业号 3 月 PK 榜

精选案例 | 博睿数据30w+监测节点护航新华网、人民网两会重保工作

博睿数据

可观测性 智能运维 博睿数据 精选案例 主动式拨测

适用于 Apple Silicon (M1芯片)的 Photoshop常见问题及解决方案

魔仙苹果mac堡

PhotoShop PS常见问题

跨端技术或许是提升软件运维效率的利器

FinFish

小程序化 小程序技术 高效运维 软件运维

M1电脑运行Windows10弹出“内部版本已过期”的解决方法

Rose

pd虚拟机 M1电脑 Windows内部版本已经过期

Vineyard 论文被 SIGMOD'2023 接收,助力计算引擎之间高效数据交换

阿里巴巴中间件

阿里云 计算引擎

小程序技术如何提升企业的移动研发效率?

FinFish

降本增效 小程序容器 移动研发 小程序技术

Dubbo Triple 协议

昵称不能为null

dubbo RPC triple协议

探索 Pixelmator Pro 3新功能——AI智能模板

Rose

Pixelmator Pro Mac修图软件

Higress on K8s 5分钟开箱即用

阿里巴巴中间件

阿里云 云原生 Higress

融云入选中国信通院《高质量数字化转型产品及服务全景图》

融云 RongCloud

产品 数字化 通讯

告别数据开发中的人工审核!火山引擎DataLeap落地“自动校验开发规范”能力

字节跳动数据平台

大数据 数据治理 数据研发 企业号 3 月 PK 榜

TypeScript 与 JavaScript:你应该知道的区别

京东科技开发者

JavaScript typescript 前端 后端 企业号 3 月 PK 榜

React等前端框架如何与小程序结合

Onegun

前端 前端框架 React Vue 3

Flink Table Store 0.3 构建流式数仓最佳实践

Apache Flink

大数据 flink 实时计算

聊聊线上发布这件事

老张

软件测试 权限管理 服务部署

量化合约对冲交易app系统开发源代码

开发微hkkf5566

解决mac电脑打开应用“意外退出”的问题 (点按“重新打开”以再次打开应用程序)

魔仙苹果mac堡

PHPStorm 意外退出 mac电脑

用户分享 | 达梦第三方客户端DockQuery使用体会

BinTools图尔兹

数据库 用户体验 国产数据库工具

数据测试实践:从一个bug开始的大数据引擎兼容性探索

京东科技开发者

大数据 bug修复 引擎 测试数据构造 企业号 3 月 PK 榜

《利用开源项目,学习软件开发》内容回顾与作者采访_语言 & 开发_适兕_InfoQ精选文章