标签 书籍 下的文章

想去写一本科技书籍是一个好的想法,但你还需要去了解一下出版业的运作过程。

 title=

你有一个写本科技书籍的想法,那么祝贺你!就像在阿巴拉契亚山脉徒步旅行,或者是去学做一种蛋奶酥,写书是人们经常讨论的话题之一,但是却都只停留在思考的初级阶段。那是可以理解的,因为失败的几率是很高的。要想实现它,你需要在把自己的想法阐述给出版商,去探讨是否已经做好充分的准备去写成一本书。要去实现这一步是相当困难的,但缺乏关于如何做这件事的信息会使事情变得复杂。

如果你想和一家传统的出版商合作,那么你需要在他们面前推销你的书稿以期望能够得到出版的机会。因为我是 Pragmatci Bookshelf 的总编,所以经常看到很多的选题,也去帮助作者制作出好的作品。这些选题中有些是好的,有些则不然,但我经常会看到许多不符合我们出版社风格的文稿。我会帮助你找到最适合的出版商,来让你的想法得到认可。

确定你的目标

你的第一步是要找出最适合你的想法的出版商。首先,想想你经常买书的以及你喜欢的出版商,你的书会被像你自己一样的人喜欢的几率是很高的,所以从你自己最喜欢的出版商开始,列出一个简短的列表将会大大缩小你的搜索范围。如果你自己所买的书籍并不多。那么可以去书店逛逛,或者在亚马逊网站上看看。 列一个你自己喜欢的几家出版商的清单出来。

下一步,筛选出你期望的出版商,尽管大多数技术类出版商看起来没什么差别,但他们通常各有不同的读者群体。有些出版商会选择广受欢迎的话题,如 C++ 或者 Java,那么你以 Elixir 为主题的书稿就可能不适合那个出版商;如果你的书稿是关于教授小孩学习编程的,那么你可能就不想让学术出版商来出版。

一旦确定了一些目标,你就可以在他们的商品目录、网站或者亚马逊上对其进行进一步的调查,去寻找有哪些书籍和你的思想是相符的。如果他们能有一本和你自己的书稿主题一样或很相近的书,那么你将很难说服他们和你签约。但那并不意味着已经可以把这样的出版商从你的列表中划掉,你可以将自己的书稿主题进行适当的修改以将它和已经发行的书区别开来:比如定位于不同的读者群体,或者不同层次的技能水平。也许已发行的那本书已经过时了,你就可以专注于该技术领域里的新方法,确保你的书稿能够弥补现有书的不足,更加完善,而不是单纯的竞争。

如果你锁定的出版商没有出版过类似的书籍,也许这将会是个好迹象,但也许是个坏迹象。有时候一些供应商不会选择去出版一些专业技术方面的书籍,或者是因为他们认为自己的读者不会感兴趣,也可能是因为他们曾经在这块领域遇到过麻烦。新的语言或者类库一直在不停地涌现出来,出版商们不得不去琢磨什么样的书籍内容将会吸引他们的读者群体。他们的评估标准可能和你的是不一样的。他们已经有了最终决定,也可能是还在等待合适的选题。判断究竟是哪一种的唯一方法就是提出文稿并找出答案。

建立起你自己的网络

确定一家出版商是第一步;现在你需要与其建立联系。不幸的是,出版需要的仍旧是你认识什么人,而不是你知道什么。你需要认识的那个人是一个去发现新市场、新作者和新选题的策划编辑。如果你认识某个和出版商有关系的人,请他给你介绍一位策划编辑。这些策划编辑往往负责一个专题板块,尤其是在较大的出版商,但你并非一定要找到符合你书稿的专题板块的编辑。各类板块的编辑通常都会很乐意将你介绍给合适的编辑。

有时候你也许能够在一个技术会议上找到一个策划编辑,特别是在出版商同时也是赞助商,而且还有一个展台时。即使当时并没有一个策划编辑在场,展台的其他工作人员也能够帮你和策划编辑建立联系。 如果会议不符合你的主题思想,那就需要你利用自己的社交网络来获得别人的推荐。比如使用 LinkedIn,或者其他非正式的联系方式,去和一个编辑建立联系。

对于小型的出版商,你可能会在公司网站上发现策划编辑的名单,如果你够幸运的话,还可以找到他们的联系信息。如果找不到联系方式的话,可以在推特上搜寻出版商的名字,试试能否找到他们的编辑的信息,在社交媒体上去寻找一位陌生的人,然后把自己的书稿推荐给他,这也许会让你有些紧张,但是你真的不必去担心这些,建立联系也是策划编辑的工作之一。最坏的结果只不过是他们忽视你而已。

一旦建立起联系,策划编辑将会协助你进行下一步。他们可能会立刻对你的书稿给予反馈,或者在他们可能想让你根据他们的指导来修改你的文章,使其变得更加充实。当你经过努力找到了一名策划编辑后,多听从他们的建议,因为他们比你更熟悉出版商的运作流程。

如果其他的方法都失败了

如果你无法联系到一名策划编辑,出版商通常会有一个 书稿盲投 proposal alias 的方式来接受投稿,通常是 proposals@[publisher].com 的格式。 查找他们网站的介绍,找到如何去发送书稿;有的出版商是有特殊的要求的。你需要遵循他们的要求,如果不这样做的话,你的书稿将会被丢弃,它不会被任何人阅读。如果你有疑问,或者不确定出版商的意图,那么你需要再尝试着去找一名编辑进一步地沟通,因为书稿并不能回答那些问题。整理他们对你的要求(一篇独立的主题文章),发给他们,然后你要做的就是期望能够得到满意的答复。

等待

无论你是如何与一个出版商取得联系的,你也得等待着。如果你已经投递了书稿,也许要过一段时间才有人去处理你的稿件,特别是在一些大公司。即使你已经找了一位策划编辑去处理你的投稿,你可能也只是他同时在处理的潜在目标之一,所以你可能不会很快得到答复。几乎所有的出版商都会在最终确认之前召开一次组委会来决定接受哪个稿件,所以即使你的书稿已经足够的优秀,并且可以出版了,你也仍然需要等待组委会开会讨论。你可能需要等待几周,甚至是一个月的时间。

几周过后,你可以和编辑再联系一下,看看他们是否需要更多的信息。在邮件中你要表现出足够的礼貌;如果他们仍然没有回复,也许是因为他们有太多的投稿需要处理,即使你不停地催促也不会让你的稿件被提前处理。一些出版商有可能永远不会回复你,也不会去发一份退稿的通知给你,但那种情况并不常见。在这种情况下你除了耐心地等待也没有别的办法,如果几个月后也没有人回复你邮件,你完全可以去接触另一个出版商或者干脆考虑自出版。

祝好运

如果你觉得这个过程看起来让你感觉有些混乱和不科学,这是很正常的。能够得到出版要在合适的时间地点,与合适的人沟通,而且还要期待他们此时有好的心情。你无法去控制这些不确定的因素,但是更好地了解行业的工作方式,以及出版商的需求,可以帮助你完善它们。

寻找一个出版商只是万里长征的第一步。你需要提炼你的思想,并创建选题,以及其他方面的考虑。在今年的 SeaGLS 上,我对整个过程做了介绍。查看视频可以获取更详细的信息。

关于作者

麦克唐纳先生现在是 Pragmatic Bookshelf 的总编。过去 20 年在技术出版领域生涯中,他是一名编辑、一名作者,偶尔还去客串演讲者或者讲师。他现在把大量的时间都用来和新作者探讨如何更好地表达出他们的想法。你可以关注他的推特@bmac\_editor。

如果这篇文章点燃你写书的热情,但又不知道如何找到合适的途径联系出版商,不如逛逛像异步社区这样的网站,按照上文的步骤尝试一下,也许能够发现新的希望。

via: https://opensource.com/article/17/12/how-find-publisher-your-book

作者:Brian MacDonald 译者:FelixYFZ 校对:wxy, 陈聪聪

本文由 LCTT 原创编译,Linux中国 荣誉推出

开源的 Ruby 书籍

Ruby 是由 Yukihiro “Matz” Matsumoto 开发的一门通用目的、脚本化、结构化、灵活且完全面向对象的编程语言。它具有一个完全动态类型系统,这意味着它的大多数类型检查是在运行的时候进行,而非编译的时候。因此程序员不必过分担心是整数类型还是字符串类型。Ruby 会自动进行内存管理,它具有许多和 Python、Perl、Lisp、Ada、Eiffel 和 Smalltalk 相同的特性。

Ruby on Rails 框架对于 Ruby 的流行起到了重要作用,它是一个全栈 Web 框架,目前已被用来创建许多受欢迎的应用,包括 Basecamp、GitHub、Shopify、Airbnb、Twitch、SoundCloud、Hulu、Zendesk、Square 和 Highise 。

Ruby 具有很高的可移植性性,在 Linux、Windows、Mac OS X、Cygwin、FreeBSD、NetBSD、OpenBSD、BSD/OS、Solaris、Tru64 UNIX、HP-UX 以及其他许多系统上均可运行。目前,Ruby 在 TIOBE 编程社区排名 12 。

这篇文章有 9 本很优秀的推荐书籍,有针对包括初学者、中级程序员和高级程序员的书籍。当然,所有的书籍都是在开源许可下发布的。

这篇文章是 OSSBlog 的系列文章开源编程书籍的一部分。

Ruby Best Practices

作者: Gregory Brown (328 页)

《Ruby Best Practices》适合那些希望像有经验的 Ruby 专家一样使用 Ruby 的程序员。本书是由 Ruby 项目 Prawn 的开发者所撰写的,它阐述了如何使用 Ruby 设计美丽的 API 和特定领域语言,以及如何利用函数式编程想法和技术,从而简化代码,提高效率。

《Ruby Best Practices》 更多的内容是关于如何使用 Ruby 来解决问题,它阐述的是你应该使用的最佳解决方案。这本书不是针对 Ruby 初学者的,所以对于编程新手也不会有太多帮助。这本书的假想读者应该对 Ruby 的相应技术有一定理解,并且拥有一些使用 Ruby 来开发软件的经验。

这本书分为两部分,前八章组成本书的核心部分,后三章附录作为补充材料。

这本书提供了大量的信息:

  • 通过测试驱动代码 - 涉及了大量的测试哲学和技术。使用 mocks 和 stubs
  • 通过利用 Ruby 神秘的力量来设计漂亮的 API:灵活的参数处理和代码块
  • 利用动态工具包向开发者展示如何构建灵活的界面,实现单对象行为,扩展和修改已有代码,以及程序化地构建类和模块
  • 文本处理和文件管理集中于正则表达式,文件、临时文件标准库以及文本处理策略实战
  • 函数式编程技术优化了模块代码组织、存储、无穷目录以及更高顺序程序。
  • 理解代码如何出错以及为什么会出错,阐述如何处理日志记录
  • 通过利用 Ruby 的多语言能力削弱文化屏障
  • 熟练的项目维护

本书为开源书籍,在 CC NC-SA 许可证下发布。

在此下载《Ruby Best Practices》

I Love Ruby

作者: Karthikeyan A K (246 页)

《I Love Ruby》以比传统的介绍更高的深度阐述了基本概念和技术。该方法为编写有用、正确、易维护和高效的 Ruby 代码提供了一个坚实的基础。

章节内容涵盖:

  • 变量
  • 字符串
  • 比较和逻辑
  • 循环
  • 数组
  • 哈希和符号
  • Ranges
  • 函数
  • 变量作用域
  • 类 & 对象
  • Rdoc
  • 模块和 Mixins
  • 日期和时间
  • 文件
  • Proc、匿名 和 块
  • 多线程
  • 异常处理
  • 正则表达式
  • Gems
  • 元编程

在 GNU 自由文档许可证之下,你可以复制、发布和修改本书,1.3 或任何之后版本由自由软件基金会发布。

点此下载《I Love Ruby》

Programming Ruby – The Pragmatic Programmer’s Guide

作者: David Thomas, Andrew Hunt (HTML)

《Programming Ruby – The Pragmatic Programmer’s Guide》是一本 Ruby 编程语言的教程和参考书。使用 Ruby,你将能够写出更好的代码,更加有效率,并且使编程变成更加享受的体验。

内容涵盖以下部分:

  • 类、对象和变量
  • 容器、块和迭代器
  • 标准类型
  • 更多方法
  • 表达式
  • 异常、捕获和抛出
  • 模块
  • 基本输入和输出
  • 线程和进程
  • 何时抓取问题
  • Ruby 和它的世界、Web、Tk 和 微软 Windows
  • 扩展 Ruby
  • 映像、对象空间和分布式 Ruby
  • 标准库
  • 面向对象设计库
  • 网络和 Web 库
  • 嵌入式文件
  • 交互式 Ruby shell

这本书的第一版在开放发布许可证 1.0 版或更新版的许可下发布。本书更新后的第二版涉及 Ruby 1.8 ,并且包括所有可用新库的描述,但是它不是在免费发行许可证下发布的。

点此下载《Programming Ruby – The Pragmatic Programmer’s Guide》

Why’s (Poignant) Guide to Ruby

作者:why the lucky stiff (176 页)

《Why’s (poignant) Guide to Ruby》是一本 Ruby 编程语言的介绍书籍。该书包含一些冷幽默,偶尔也会出现一些和主题无关的内容。本书包含的笑话在 Ruby 社区和卡通角色中都很出名。

本书的内容包括:

  • 关于本书
  • Kon’nichi wa, Ruby
  • 一个快速(希望是无痛苦的)的 Ruby 浏览(伴随卡通角色):Ruby 核心概念的基本介绍
  • 代码浮动小叶:评估和值,哈希和列表
  • 组成规则的核心部分:case/when、while/until、变量作用域、块、方法、类定义、类属性、对象、模块、IRB 中的内省、dup、self 和 rbconfig 模块
  • 中心:元编程、正则表达式
  • 当你打算靠近胡须时:在已存在类中发送一个新方法
  • 天堂演奏

本书在 CC-SA 许可证许可下可用。

点此下载《Why’s (poignant) Guide to Ruby》

Ruby Hacking Guide

作者: Minero Aoki ,翻译自 Vincent Isambart 和 Clifford Escobar Caoille (HTML)

通过阅读本书可以达成下面的目标:

  • 拥有关于 Ruby 结构的知识
  • 掌握一般语言处理的知识
  • 收获阅读源代码的技能

本书分为四个部分:

  • 对象
  • 动态分析
  • 评估
  • 外部评估

要想从本书中收获最多的东西,需要具备一定 C 语言的知识和基本的面向对象编程知识。本书在 CC-NC-SA 许可证许可下发布。

原书的官方支持网站为 i.loveruby.net/ja/rhg/

点此下载《Ruby Hacking Guide》

The Book Of Ruby

作者: How Collingbourne (425 页)

《The Book Of Ruby》是一本免费的 Ruby 编程高级教程。

《The Book Of Ruby》以 PDF 文件格式提供,并且每一个章节的所有例子都伴有可运行的源代码。同时,也有一个介绍来阐述如何在 Steel 或其他任何你喜欢的编辑器/IDE 中运行这些 Ruby 代码。它主要集中于 Ruby 语言的 1.8.x 版本。

本书被分成很小的块。每一个章节介绍一个主题,并且分成几个不同的子话题。每一个编程主题由一个或多个小的自包含、可运行的 Ruby 程序构成。

  • 字符串、数字、类和对象 - 获取输入和输出、字符串和外部评估、数字和条件测试:if ... then、局部变量和全局变量、类和对象、实例变量、消息、方法、多态性、构造器和检属性和类变量 - 超类和子类,超类传参,访问器方法,’set‘ 访问器,属性读写器、超类的方法调用,以及类变量
  • 类等级、属性和类变量 - 超类和子类,超类传参,访问器方法,’set‘ 访问器,属性读写器、超类的方法调用,以及类变量
  • 字符串和 Ranges - 用户自定义字符串定界符、引号等更多
  • 数组和哈希 - 展示如何创建一系列对象
  • 循环和迭代器 - for 循环、代码块、while 循环、while 修改器以及 until 循环
  • 条件语句 - If..Then..Else、And..Or..Not、If..Elsif、unless、if 和 unless 修改器、以及 case 语句
  • 方法 - 类方法、类变量、类方法是用来干什么的、Ruby 构造器、单例方法、单例类、重载方法以及更多
  • 传递参数和返回值 - 实例方法、类方法、单例方法、返回值、返回多重值、默认参数和多重参数、赋值和常量传递以及更多
  • 异常处理 - 涉及 rescue、ensure、else、错误数量、retry 和 raise
  • 块、Procs 和 匿名 - 阐述为什么它们对 Ruby 来说很特殊
  • 符号 - 符号和字符串、符号和变量以及为什么应该使用符号
  • 模块和 Mixins
  • 文件和 IO - 打开和关闭文件、文件和目录、复制文件、目录询问、一个关于递归的讨论以及按大小排序
  • YAML - 包括嵌套序列,保存 YAML 数据以及更多
  • Marshal - 提供一个保存和加载数据的可选择方式
  • 正则表达式 - 进行匹配、匹配群组以及更多
  • 线程 - 向你展示如何同时运行多个任务
  • 调试和测试 - 涉及交互式 Ruby shell(IRB.exe)、debugging 和 单元测试
  • Ruby on Rails - 浏览一个创建博客的实践指南
  • 动态编程 - 自修改程序、重运算魔法、特殊类型的运算、添加变量和方法以及更多

本书由 SapphireSteel Software 发布,SapphireSteel Software 是用于 Visual Studio 的 Ruby In Steel 集成开发环境的开发者。读者可以复制和发布本书的文本和代码(免费版)

点此下载《The Book Of Ruby》

The Little Book Of Ruby

作者: Huw Collingbourne (87 页)

《The Little Book of Ruby》是一本一步接一步的 Ruby 编程教程。它指导读者浏览 Ruby 的基础。另外,它分享了《The Book of Ruby》一书的内容,但是它旨在作为一个简化的教程来阐述 Ruby 的主要特性。

章节内容涵盖:

  • 字符串和方法 - 包括外部评估。详细描述了 Ruby 方法的语法
  • 类和对象 - 阐述如何创建一个新类型的对象
  • 类等级 - 一个特殊类型的类,其为一些其他类的简化并且继承了其他一些类的特性
  • 访问器、属性、类变量 - 访问器方法,属性读写器,属性创建变量,调用超类方法以及类变量探索
  • 数组 - 学习如何创建一系列对象:数组包括多维数组
  • 哈希 - 涉及创建哈希表,为哈希表建立索引以及哈希操作等
  • 循环和迭代器 - for 循环、块、while 循环、while 修饰器以及 until 循环
  • 条件语句 - If..Then..Else、And..Or..Not、If..Elsif、unless、if 和 unless 修饰器以及 case 语句
  • 模块和 Mixins - 包括模块方法、模块作为名字空间模块实例方法、模块或 'mixins'、来自文件的模块和预定义模块
  • 保存文件以及更多内容

本书可免费复制和发布,只需保留原始文本且注明版权信息。

点此下载《The Little Book of Ruby》

Kestrels, Quirky Birds, and Hopeless Egocentricity

作者: Reg “raganwald” Braithwaite (123 页)

《Kestrels, Quirky Birds, and Hopeless Egocentricity》是通过收集 “Raganwald” Braithwaite 的关于组合逻辑、Method Combinators 以及 Ruby 元编程的系列文章而形成的一本方便的电子书。

本书提供了通过使用 Ruby 编程语言来应用组合逻辑的一个基本介绍。组合逻辑是一种数学表示方法,它足够强大,从而用于解决集合论问题以及计算中的问题。

在这本书中,读者会会探讨到一些标准的 Combinators,并且对于每一个 Combinators,书中都用 Ruby 编程语言写程序探讨了它的一些结果。在组合逻辑上,Combinators 之间组合并相互改变,书中的 Ruby 例子注重组合和修改 Ruby 代码。通过像 K Combinator 和 .tap 方法这样的简单例子,本书阐述了元编程的理念和递归 Combinators 。

本书在 MIT 许可证许可下发布。

点此下载《Kestrels, Quirky Birds, and Hopeless Egocentricity》

Ruby Programming

作者: Wikibooks.org (261 页)

Ruby 是一种解释性、面向对象的编程语言。

本书被分为几个部分,从而方便按顺序阅读。

  • 开始 - 向读者展示如何在其中一个操作系统环境中安装并开始使用 Ruby
  • Ruby 基础 - 阐述 Ruby 语法的主要特性。它涵盖了字符串、编码、写方法、类和对象以及异常等内容
  • Ruby 语义参考
  • 内建类
  • 可用模块,涵盖一些标准库
  • 中级 Ruby 涉及一些稍微高级的话题

本书在 CC-SA 3.0 本地化许可证许可下发布。

点此下载《Ruby Programming》


无特定顺序,我将在结束前推荐一些没有在开源许可证下发布但可以免费下载的 Ruby 编程书籍。


via: https://www.ossblog.org/study-ruby-programming-with-open-source-books/

作者:Steve Emms 译者:ucasFL 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

书是非常私人的东西,编程类书籍也不例外。我们都是通过阅读书籍来帮助掌握某种语言的基本知识。随后又通过阅读书籍来全面探索这门语言的灵活性。我仔细考察了一些我最喜爱的 C 语言书籍,并从其中选出了对我意义最大的九本。

C 语言是一种通用的、面向过程的高级编程语言。也是最具流行度和影响力的编程语言之一。该语言在设计时就被设计为可以通过编译器进行编译,以此来对内存进行底层操作、高效地执行机器指令以及在运行时仅需要最小的支持。很多很多编程语言都得益于 C 语言, C 语言就像是编程界的通用语言一样。

C 语言非常易懂。它允许程序员能够以一种清晰、简单、符合逻辑的方式来组织程序。这是一种非常灵活、实用并且简洁的语言,同时它还具有非常容易读懂的语法。使用 C 语言编写的代码运行非常快。可以非常简单地操作计算机的底层设施。通过编译器的指令可以允许我们为不同体系结构的设备生成同一个版本的程序。

C 语言是自由的。因此学习 C 语言的书籍也是体现了其自由性。快来看看我挑选的开源书籍,有没有哪一本能够吸引你?好好享受它吧!

C 语言 The C Book

The C Book

C 语言 The C Book 》这本书是为那些已经具备使用现代高级面向过程编程语言的程序员设计的。这本书专注于那些 C 语言的特有之处。尤其是使用 C 语言的方式是这本书所重点关注的。作者: Mike Banahan, Declan Brady 和 Mark Doran ,350 页

包含以下章节:

  • 变量及运算法则介绍 – 介绍了 C 语言的基础知识, 包括关键字和标识符,变量声明,实数类型,整型,表达式和运算法则以及常量
  • 控制流及逻辑表达式 – 这一章介绍了在 C 语言中可以用于控制程序流程的几种方法,包括一些尚未介绍的语句。 控制流,逻辑表达式以及奇怪的运算符。
  • 函数 – 函数的类型, 递归,传参数以及链接
  • 数组和指针 – 数组, 指针, 字符处理, sizeof 以及储存空间分配, 函数指针,包含指针的表达式,数组,&运算符以及函数声明
  • 结构体数据类型 – 结构体, 联合体, 位字段, 枚举类型, 限定符、派生类型以及初始化
  • 预处理器 – 预处理器是如何工作的及其相关指令
  • C 语言中的一些特定内容 – 声明, 定义,typedef, constvolatile以及序列点
  • 库 – 诊断, 字符处理, 本地化, 与具体实现相关的限制, 数学函数, 非局部跳转, 信号处理, 可变参数, 输入输出, 格式化 I/O, 字符 I/O, 无格式 I/O, 随机访问函数, 通用函数, 字符串处理, 日期和时间
  • C 语言编写的完整程序 – 综合以上内容, main函数的参数, 解析程序参数, 模式匹配程序以及一个难度更大的程序

作者允许读者利用此书做任何他们想做的事情,只需说明作者和版权。经 Mike Banahan 确认,本书通过知识共享协议发布。

风格的要素—— C 语言版 C Elements of Style

C Elements of Style

作者 Steve Oualline ,265页

风格的要素—— C 语言版 C Elements of Style 》是一本十分有用的编程风格指南,指导 C 和 C++ 程序员如何去编写可读性良好的,易懂的,易于维护的程序。不论你是一个学生还是专业程序员,你都能从这本书中提供的技巧和技术中获益,构建优雅可靠的代码。

这本书意在向读者们展示如何在你的程序中融入风格良好的代码。机器仅处理代码,而人类关注于注释。良好的编程风格与这两部分都有关。

我们的最终目标是构建设计良好,编写良好的代码,这种代码对于计算机来说是高效的,同时包含了精心编写的注释用于帮助人类理解程序。这样一来,调试,维护和增强程序,都变得更加容易了。最终还提升了代码的可读性,简洁性,可靠性和可维护性。

在本书中,你可以找到有关编写注释,程序头,变量命名,语句格式化,语句细节,编写预处理器命令,组织目录和创建makefile的指南。

本书通过知识共享协议发布。

编写你自己的 Lisp 语言 Build Your Own Lisp

Build Your Own Lisp

作者 Daniel Holden ,212页

在学习 C 语言的同时学习如何创造你自己的编程语言——一个最简的 Lisp 语言(仅用不到1000行代码)。

编写你自己的 Lisp 语言 Build Your Own Lisp 》这本书是为两种人写的,一种是想要学习 C 语言的人,另一种是想要知道如何创建一门语言的人。本书并不适合作为第一本入门书籍,因为你需要一些编程经验才能读懂它的内容。

本书基于知识共享署名-非商业性使用-3.0 未本地化版本协议发布

纸质版可以在 Amazon 上购买。

GNU C 语言参考手册 The GNU C Reference Manual

The GNU C Reference Manual

作者 Trevis Rothwell, James Youngman ,91页

GNU C 语言参考手册 The GNU C Reference Manual 》是一本 C 语言参考手册,意在写明 C89,C99 标准以及当前 GNU 对标准 C 语言的扩展情况。本书并不适合新手阅读。

包含以下章节:

  • 词法元素——这部分内容描述了预编译之后,组成 C 语言代码的词法元素。包括 5 种:关键字,标识符,常量,操作符和分隔符
  • 数据类型——研究基础的数据类型,枚举,联合体,结构体,数组,指针,不完全类型,类型修饰词,储存类型修饰词以及重命名类型
  • 表达式和操作符 —— 还介绍了自增/自减,算数操作符,复共轭性,比较操作符,逻辑运算符,位移,位运算符,指针运算符,sizeof,类型转换等等。
  • 语句 —— 标签,表达式,if 语句,switch 语句,while 语句,do 语句,for 语句,代码块,null 语句,goto 语句,break 语句,continue 语句,return 语句以及 typedef 语句
  • 函数 —— 学习函数声明,函数定义,函数调用,参数,变长参数列表,通过指针调用函数,main 函数,递归函数等等。
  • 程序结构和定义域 —— 从宏观上来看程序
  • 一个例程 —— 一个用 C 语言编写的完整程序,包含 C 语言源文件和头文件。这个程序是一个典型“hello world”程序的扩展版,它向我们展示了在 GNU FSF 项目中 C 语言是如何工作的。

本书基于 GNU Free Documentation License Version 1.3 及其更新版本发布。

GNU C 语言编程教程 The GNU C Programming Tutorial

The GNU C Programming Tutorial

作者 Mark Burgess, Ron Hale-Evans ,290页

GNU C 语言编程教程 The GNU C Programming Tutorial 》以逻辑顺序向读者介绍了 C 语言的基本内容。本书内容涵盖了 C 语言的全部主要内容的细节以及如何使用 C 语言编程,特别强调了GNU/Linux编译器以及相关软件。

一些章节主要介绍了函数,变量以及声明,作用域,表达式和操作符,参数,指针,判定,循环,数组,字符串,输入输出等等。

本书基于 GNU Free Documentation License Version 1.1 版发布。

C 语言基础 Essential C

Essential C

作者 Nick Parlante ,45页

C 语言基础 Essential C 》这份简短的文档解释了 C 语言全部的常用特性和技术。这份文档十分简洁,因此它的目标人群是已经具有其他编程语言背景的人。

内容包括变量,整型,浮点型,类型提升,截断,操作符,控制结构(if,while,for),函数,数值参数,引用参数,结构体,指针,数组,预处理器以及 C 语言标准库函数。

目录:

  • 简介
  • 基础类型与运算符
  • 控制结构
  • 复杂数据类型
  • 函数
  • 杂项
  • 高级数组与指针
  • 运算符和标准库

根据作者的描述,我们得知这是一本基于开源协议发布的书籍。

Beej 的 C 语言教程 Beej’s Guide to C Programming

Beej’s Guide to C Programming

作者 Brian “Beej” Hall ,130 pages

Beej 的 C 语言教程 Beej’s Guide to C Programming 》试图为那些心存困惑的读者带来一种仅能通过纯粹 C 语言编程而产生的快感。

章节:

  • 构建程序的基本结构块
  • 变量,表达式和,语句。变量就是一个数字的名字——一个 C 语言表达式可以包含其他的表达式以及运算符。文章还介绍了ifwhiledo while以及程序重复执行的for语句。
  • 函数——当程序块变得很大,或是当这些程序块用来执行一些特定的工作时,我们会把它们封装到函数中。
  • 变量(续篇)——探讨了变量的作用域和储存类型
  • 指针——它们是数据在内存中的地址。就像一个整型的值可以是12,一个指针的值就是数据在内存中的地址
  • 结构体——结构体允许你将逻辑上相关的变量分组。随后你可以将其作为一个整体来使用。
  • 数组——一组相关数据的线性集合
  • 字符串—— C 语言中的字符串就是内存中的一组连续的比特,包含了一组字符
  • 动态内存——探讨了malloc(), free(), realloc() 和 calloc() 函数
  • 更多内容——指针运算,typedef,枚举,结构体声明,命令行参数,多维数组,类型转换和类型提升,不完整类型,void指针,NULL指针和static关键字
  • 标准输入输出库——用来进行文件的读写。
  • 字符串操作——用来查找子串的函数,连接字符串的函数,获取字符串长度的函数,等等。
  • 算数——一些可以满足你基本算数需求的函数。

本书基于知识共享署名-非商业性使用-禁止演绎 3.0 未本地化版本协议发布。

现代 C 语言 Modern C

Modern C

作者 Jens Gustedt ,310页

现代 C 语言 Modern C 》鼓励读者逐级探索 C 语言的特性。内容一共分为如下五层境界:

  • 第一层——使读者了解最基本的 C 语言程序。了解使用 C 语言的目的和数据结构,以及如何去使用它们
  • 第二层——详细的说明了大部分主要概念以及特性,包括控制结构,数据类型操作符和函数。这一级的主要目的是让读者能够对于这些运行程序必备的知识,有更深刻的理解。
  • 第三层——进入 C 语言的核心部分。详细的解释了指针,让你熟悉 C 语言的内存模型,并且让你了解大多数 C 语言库的接口
  • 第四层——深入理解一些特定的主题。比如性能,重入,原子性,线程及泛型编程
  • 第五层——探讨了作者对这门语言未来发展趋势的理解

本书基于知识共享署名-非商业性使用-禁止演绎 3.0 未本地化版本协议发布

GCC 简介 An Introduction to GCC

An Introduction to GCC

作者 Brian Gough ,144页

GCC 简介 An Introduction to GCC 》介绍了 GNU C 语言和 C++编译器——gcc 和 g++,它们是 GNU 编译器套装(GCC)的一部分。

本书介绍了如何使用编译器。通过多年以来对邮件列表中的问题的观察,本书带领读者直击 GCC 的重要内容。

章节介绍:

  • 编译c程序——介绍了如何使用 gcc 来编译 C 语言程序。单个文件或多个文件均可以编译,也可以使用操作系统函数和头文件。
  • 编译选项——介绍了 gcc 中一些常用的编译选项。这些参数控制一些功能,例如搜索库函数和头文件的路径,提供额外的编译告警和诊断。预处理宏和 C 语言方言。
  • 使用预处理器——描述了cpp(GNU C preprocessor)的使用方法,cpp 是 GCC 的一部分。预处理器会在编译前将代码中的宏展开,当 GCC 处理 c 或者 c++ 代码时,预处理器会自动被调用。
  • 编译带有调试信息的程序——提供了一个-g选项用以在中间文件和可执行文件中存储额外的调试信息。这些调试信息使得我们可以追踪错误,将机器指令中的问题定位到源代码中。
  • 优化编译——GCC 是一个优化过的编译器。它提供了很多选项,可以加速编译或是减少编译后文件的体积。
  • 编译C++程序——介绍了如何使用 GCC 编译 C++ 程序以及该语言可以使用的命令行选项。
  • 平台相关选项——介绍了一些常见平台可以使用的选项
  • 排错——GCC提供了一些帮助和诊断选项用于帮助我们定位编译过程中出现的问题。
  • 编译器相关工具——介绍了 GCC 编译过程中会用到的一些有用的工具。包括用来创建库的 GNU 归档工具 ar,GNU 性能和覆盖率测试程序 gprof 和 gcov
  • 编译器是如何工作的——详细介绍了 GCC 是如何把源文件编译为可执行文件的。编译是一个多阶段过程,涉及很多工具,包括 GNU 编译器本身,GNU 汇编器,以及 GNU 链接器。在编译过程中使用的各种工具,我们统称为编译链。
  • 检查编译后的文件——介绍了一些用来检查可执行文件和 obj 文件内容的工具。
  • 常见错误信息——介绍了 gcc 和 g++ 产生的最常见的错误和告警信息。每种情况都带有原因分析,样例以及建议的解决办法。
  • 获取帮助——如果读者遇到了书中没有提到的问题,还有很多介绍GCC和语言的手册可以参考。

本书基于 GNU Free Documentation 协议发布


很多 C 语言书籍都可以免费下载,但是可惜的是它们并没有以开源协议来发布,或其基于何种协议并没有明确说明。以下对其进行介绍,排名不分先后:

最后,如果你想买一本权威参考书,请认准《 C 程序设计语言 The C Programming Language 》。这本书非常简练,不适合新手,但是被奉为经典。

书籍是非常主观和私人的财产,编程书籍也不例外。但是不管 C++ 编程书籍的风格、关注点或者节奏如何,好书总可以带领读者走过一段引人入胜的旅程,揭示编程语言的能力,还能向读者描绘如何使用编程语言来实现各种事物。

分享是一种美德,我精心挑选了九本值得一读的优质 C++ 书籍,这些书籍均基于开源协议发布。在这之前,我会给出一份 C++ 的简短介绍。

C++ 是由 Bjarne Stroustrup 设计,初次发布于 1983 年。它是一种静态类型、格式自由、多重范式、可移植、编译式的通用编程语言。它被认为是中级语言,同时包含有高级与初级编程语言的特性。C++ 设计用于实现系统级与应用的编程,它拓展了 C 编程语言,因此其名字中的使用了自增运算符 ++。

C++ 仍是一种流行的编程语言。例如,它被广泛应用于嵌入式系统、银行以及通讯业。它作为 C 的超集保留了 C 标志性的简洁与高效,同时提供强类型检查、多重继承、数据抽象、异常处理操作符重载、泛型编程,以及面向对象编程等功能。C++ 不仅影响了 C 语言的发展,同时也影响到了包括 C#、Java 在内的许多其他编程语言。

Boost C++ 类库 The Boost C++ Libraries

The Boost C++ Libraries

作者 Boris Schäling (570页)

Boost C++ 类库 The Boost C++ Libraries 》被认为在 C++ 世界中极其重要并有深远影响。书中这些可移植的库提供对多种任务和结构体的支持,包括多线程、容器、字符串和文本处理、迭代器、线性代数、伪随机数产生、元程序设计模板、并发程序设计、数据结构、图像处理、正则表达式和单元测试。Boost 可以在几乎所有现代操作系统上工作,包括 Linux 和 Windows 及其衍生,并且支持绝大多数现代编译器。

这本书介绍了 72 个 Boost 库,提供了广泛并且实用的功能。它们能够帮助程序员更轻松的管理内存和处理字符串。这些库提供多种容器以及其它数据结构来拓展标准库。使用这些库可以轻松实现平台无关的网络应用程序。

本书是一颗值得添加到各类收藏中的明珠。430 份源代码例子生动形象地阐释了这些库的功能。

本书前面的章节审视了内存管理、字符串处理、容器、数据结构、算法、通信、文件与流以及时间。后续章节进一步探索了函数式编程、并行编程和泛型编程。以对语言拓展、错误与数字处理、应用程序库、设计模式以及其他库的大部分内容。

本书采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。如果你喜欢实体书,可以在亚马逊上购买纸质书,也可选择如 kindle、E-book 和 PD F格式的电子书。

C++ 注释 C++ Annotations

C++ Annotations

作者 Frank B. Brokken (1029页)

C++ 注释 C++ Annotations 》提供了关于 C++ 编程语言的一份全面的教程。它可以被当做一门 C++ 课程的教材。本书面向已掌握 C 语言或其他类 C 语法知识的使用者。

本书主要章节有:

  • 命名空间
  • 字符串——C 提供的是最基础的字符串支持
  • I/O 流库——提供了一个基于类概念的输入/输出库
  • 类——C 提供了两种结构化不同类型数据的方法。C 语言的结构体包含多种类型的数据成员,而 C 语言的 共用体 union 同样可以定义不同类型的数据成员。本章介绍的类,也是一种结构体但是它的内容对外部世界来说是默认不可访问的。
  • 静态数据和函数
  • 内存管理——审视 C++ 中能够操作内存分配的操作符
  • 异常——允许 C++ 程序执行受控的非本地返回命令,避免了使用 longjmp(非局部跳转)和 setjmp(激活非局部跳转)函数的缺陷。
  • 操作符重载——介绍通用的操作符重载
  • 抽象容器
  • 继承——派生的另外一个特性。 本章演示基类指针可能被用来指向派生类的对象。
  • 多态——继承的一种特殊形态
  • 友元机制——介绍 friend 关键词以及它的使用原则
  • 成员指针——定义成员指针及其用法,静态成员指针,指针长度
  • 嵌套类——当嵌套类与其外围类有概念上的紧密联系时会被使用
  • 标准模板库(STL)——包含容器、通用算法、迭代器、函数对象、分配器、适配器和数据结构的通用库。这些算法使用的数据结构都是抽象意义的,因此算法实际上可以使用任何数据类型。
  • 泛型算法——涵盖标准模板库中的泛型算法
  • 函数模板——探索模板独特的句法。介绍模板类型参数与模板非类型参数和函数模板等概念并且提供模板的多个案例。
  • 类模板——讨论构建与使用类模板
  • 进阶模板用法——一份简短的模板元编程主要特性与模板的微妙关系的介绍

本书有HTML、PDF、PostScript 和 txt 版本。它可以自由分发,基于 GNU GPL 协议发布。

通过 C++ 和 Qt4 了解设计模式 An Introduction to Design Patterns in C++ with Qt 4

Introduction to Design Patterns in C++ with Qt 4, An

作者 Alan Ezust, Paul Ezust (656页)

通过 C++ 和 Qt4 了解设计模式 An Introduction to Design Patterns in C++ with Qt 4 》从介绍 C++ 基础知识、面向对象概念、UML(统一建模语言)和核心 Qt 类开始。进而转向更高级的编程概念如 Qt modules 和设计模式。最后严密地印证了重要的 C++ 特性。其中涵盖了非常优秀的对函数、继承和多态的讲解。

本书不需要具备任何 C 或者 C++ 编程经验前提,并且被设计为普适用途。它也为教学工作者准备了 Qt 案例、练习、答案以及课程 PPT。

本书是 Bruce Perens 开源系列中的一部分。所有在此系列中的书籍都是基于 Open Publication License V1.0 及其后版本发布的。

像计算机科学家一样思考:C++ How to Think Like a Computer Scientist: C++

How to Think Like a Computer Scientist: C++

作者 Allen B. Downey (191页)

像计算机科学家一样思考:C++ How to Think Like a Computer Scientist: C++ 》是使用 C++ 编程语言进行软件设计的一本简洁友好的介绍性书籍。本书的目的是通过讲解最基础的概念并且以读者容易接受的节奏逐步增加新内容来把没有编程经验的读者培养成为未来的开发者。

本书提供的有价值的内容包括:

  • 变量、表达式和语句
  • 函数
  • 条件语句与递归
  • 丰富的函数
  • 迭代
  • 字符串
  • 向量
  • 成员函数
  • 对象的向量
  • 向量的对象
  • 类与不变量
  • 文件输入输出和 apmatrixes

本书是一本在知识共享署名-非商业性使用-3.0 未本地化版本协议下发布的免费书籍。

C++ Qt3 图形界面编程 C++ GUI Programming with Qt 3

C++ GUI Programming with Qt 3

作者 Jasmin Blanchette, Mark Summerfield (464 页)

最新发布的 Qt 稳定版本是 5.8,而《 C++ Qt3 图形界面编程 C++ GUI Programming with Qt 3 》指导读者如何使用 Qt3 编写 GUI 程序,Qt3 最近一次更新是 2004 年,但是本书仍然有大部分内容对 Qt4 和 Qt5 有效。

本书不是一本面向初学者的书,需要读者对 C++ 有基本的理解。

本书向读者介绍了使用 Qt 进行 GUI 应用编程所有的概念和需要的练习。本书不仅详尽的讲述了核心内容,而且也提供了一些特别的和高阶的学习材料。

本书是 Bruce Perens 开源系列中的一部分。所有在此系列中的书籍都是基于 Open Publication License V1.0及之后版本发布的。

开放数据结构(C++ 版) Open Data Structures (in C++)

Open Data Structures (in C++)

作者 Pat Morin (336页)

开放数据结构(C++ 版) Open Data Structures (in C++) 》教导读者设计和分析基础数据结构以及如何使用 C++ 实现。 它涵盖了对如下数据结构的分析和实现:序列(列表)、队列、优先队列、无序字典、有序字典以及图。作者的意图在于向大学计算机科学的学生提供一条学习数据结构的免费的途径,但是并不打算成为介绍 C++ 编程语言或者 C++ 标准模板库的一本书。不过它可以帮助程序员理解标准模板库的数据结构是如何实现的以及这种实现为何如此高效。

章节内容覆盖了基于数组的列表、链表、分级链表、哈希表、二叉树(又包含了随机二叉搜索树、替罪羊树、红黑树)。之后的章节还包括堆、排序算法(比较、计数和基数排序)、图、整数的数据结构和外部存储器搜索。

本书基于知识共享署名 协议发布。免费的 HTML、PDF 均已发布,本书的 LaTeX 版本,Java/C++/Python 源代码都可以从 GitHub 下载。也有纸质书版本可供购买。本书已被翻译为斯罗维尼亚语和土耳其语。

使用 wxWidgets 进行跨平台 GUI 编程 Cross-Platform GUI Programming with wxWidgets

Cross-Platform GUI Programming with wxWidgets

作者 Julian Smart,Kevin Hock和Stefan CsomorBrifll (744 页)

wxWidgets 是一个流行的 C++ 库,可供开发者使用单一的代码基础为 Windosw、Mac OS、Linux 和其他平台创建应用。它支持非常广泛的图形处理库。

这本书《 使用 wxWidgets 进行跨平台 GUI 编程 Cross-Platform GUI Programming with wxWidgets 》从简单的介绍和起步章节开始,主要内容包括:

  • 事件处理
  • 窗口基础
  • 画图
  • 输入事件处理
  • 使用 sizers 进行窗口布局
  • 使用标准对话框
  • 创建自定义对话框
  • 图像编程
  • 剪贴板与拖放动作
  • 高阶窗口类
  • 文件和数据流
  • 内存管理,调试和错误检查
  • 编写国际化应用
  • 编写多线程应用
  • wxSocket 编程
  • 处理文档和视图
  • 日臻完美你的应用

本书是 Bruce Perens 开源系列中的一部分。所有在此系列中的书籍都是基于 Open Publication License V1.0及其后版本发布的。

Rook 的 C++ 指南 The Rook’s Guide to C++

The Rook's Guide to C++

作者 Jeremy Hansen (160页)

Rook 的 C++ 指南 The Rook’s Guide to C++ 》的章节中包含变量、常量、输入输出、数据类型和转换、条件判断语句(if、else 和 else if、switch 语句)、字符串、循环、数组、块、函数和作用域。之后的章节主要集中解决问题和定位问题,包括预处理器、高等代数、文件输入输出、指针、动态数据、类和抽象、分离编译和标准模板库。

本书大部分都是由 25 位 Norwich 大学的学生于一个黑客马拉松周末写成。当然不敢说毫无缺点,但还是一本相当不错的书。它被基于知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本协议发布。同时在亚马逊也有本书的纸质版可供购买。

GCC 简介 An Introduction to GCC

An Introduction to GCC

作者 Brian Gough (144页)

GCC 简介 An Introduction to GCC 》介绍了 GCC,同时介绍了 GNU C 和 C++ 编译器:gcc 和 g++,均属于 GNU 编译器集合(GCC)。

本书解释了如何单独使用编译器。作者通过数年对邮件列表中发表的问题的观察,撰写本书带领读者直接接触 GCC 最重要的部分。

章节简介:

  • 介绍
  • 编译一个 C 程序——描述了如何使用 gcc 编译 C 程序。程序可能是由单独文件或者多个文件编译而成,也可能使用系统库和头文件。
  • 编译选项——描述gcc中可以使用的编译器中常用的选项。这些选项可以修改本地库和包含文件的搜索路径,配置额外的 warning 和调试信息,预处理器宏指令和 C 方言。
  • 使用预处理——描述了属于 GCC 包内的 GNU C 预处理 cpp 程序的用途。预处理将宏定义在源代码被编译前展开。预处理会在 GCC 编译 C 或者 C++ 程序时自动被调用。
  • 以调试为目的编译——提供 -g 选项使目标文件和可执行文件中存储额外的调试信息。当出现错误时,这些调试信息允许从特定的机器指令回溯到源代码中相应的行。
  • 优化编译——GCC 是一个优化编译器。它提供了大量的选项来使其生成的可执行文件的速度得到提升,并尽量减小可执行文件的大小。
  • 编译一个 C++ 程序——描述了如何使用 GCC 来编译以 C++ 编写的程序,以及针对这门语言特定的命令行选项。
  • 平台相关的选项——描述了一些通用平台上可用的选项,如 Intel 和 AMD x86 选项、x86 拓展选项、x86 64 位处理器选项、DEC Alpha 选项、SPARC 选项、POWER/powerPC 选项、复合架构支持以及浮点相关问题。
  • 问题定位——GCC 提供了几项帮助和诊断选项来帮助用户在编译过程中定位问题。
  • 编译器相关工具——介绍了大量能够用于和 GCC 组合使用的工具。包括:用来创建库的 GNU 压缩器 ar,以及 GNU 性能和覆盖测试工具:gprof 和 gcov。
  • 编译器如何工作——描述了关于 GCC 如何将源代码转换为可执行程序的更多细节。编译是一个涉及到多种工具的多级过程,包括 GNU 编译器自身(通过 gcc 或者 g++ 前端)、GNU 汇编器 as 以及 GNU 链接器 ld。编译过程中一个完整的工具集合被称之为工具链。
  • 检查编译后的文件——描述了多种有用的工具来检查可执行文件和目标文件的内容。
  • 常见错误消息——描述了 gcc 和 g++ 产生的最常见的错误和警告信息。每一个案例都伴随着错误和警告产生的原因,相应的例子和可能解决问题的建议。
  • 获得帮助——如果读者碰到了本书中未能涵盖的问题,还有多种参考手册更详细的描述了 GCC 和编程语言相关的主题。

本书是基于 GNU Free Documentation 协议出版的。

此外还有一些 C++ 书籍可以免费下载,但是那些并不是基于开源协议发布的,或者作者没有指定一个协议。这类书籍包括:

最后,我对刚入门的 C++ 新手的建议一定是《 编程原理与体验(C++ 版) Programming — Principles and Practice Using C++ (第二版)》。普遍认为这是最合适的入门书籍,由 C++ 的创始人书写,物超所值。


via: https://www.ossblog.org/master-c-programming-with-open-source-books/

作者:Steve Emms 译者:xiaow6 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出