前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >写本Racket入门书

写本Racket入门书

作者头像
tyrchen
发布2018-03-28 15:04:37
2.3K1
发布2018-03-28 15:04:37
举报
文章被收录于专栏:程序人生程序人生

从来没有一件事让我如此着迷。自上周五那个无聊的晚上打开 racket-lang.org 的主页,想看看大牛们口中的Racket究竟是什么样子后,这猎奇的心态就变了味,就好比古时那个不入流的诗人去青楼寻找作诗的感觉,却偶遇才女,于是邂逅变成了朝思暮想,最终散尽家财,八抬大轿娶回家的故事一样。

一个朋友曾经开玩笑跟我说过:「学lisp就是没事找事,自己跟自己过不去」这话在理。所以,两三年前与clojure嬉戏的时候,在我心里,她始终就像朱紫国那个金圣娘娘,身披七彩霞裳,跟刺猬一样,亲近不得。也是这个原因,在简简单单了解clojure的基本语法后,我便对她敬而远之。但Paul Graham在「黑客与画家」中对lisp的无比推崇又让我一直如鲠在喉,不征服lisp仿佛自己始终没能窥探编程的奥义,那种感觉,估计和搞到了法国却搞不定约瑟芬的拿破仑一样一样的。

所以你该能明白我对Racket的复杂感情。邂逅变成了天天守望,每天早上起床到9点前,下午6点后至睡觉,我都沉浸在与Racket互动带来的愉悦之中,以至于回家像女神索吻,女神吓得一边躲一边娇嗔:「爸爸要刮胡子了」,我才意识到,胡子又开始大面积覆盖我那黝黑中透着阳光的脸蛋。

不少读者在看了我周二的文章「走进 racket(lisp) 的世界」后自豪地说自己的学校就开设了Racket的课程,作为编程入门语言,这真是羡煞死我。我没有老师,老师是官方文档,google和stackoverflow;没有同学,同学是mailing list和IRC;从另一个角度讲,一个三十好几,搁十年前的眼光看该从「程序员」岗位上「退休」的「老头子」,跟不到二十或者二十出头的孩子们同场PK,也是够拼的。曹阿瞒说:「老骥伏枥,志在千里;烈士暮年,壮心不已」,活着活着,一不小心成了「烈士」,还好「壮心不已」。

就这么一周苦读下来,在Racket上,我算是刚刚如了门。能写点简单的程序,做个动画,画个图,用regex处理下文本,定义一些简单的语法聊以自慰(你可以打开github repo下的util/common.rkt自行观看,不要鄙视我)。稍稍可以称道的是,我用scribble把这个过程文档化,记录我学习的过程。这便是我的Racket入门书:「Racket语言入门」。

以我现在的学习速度,我估计,一个月后能有一点小成,三个月大致能理解Racket里的主要概念,写点有实用价值的东西。所以,这本书的草稿至少要等三个月后才能完成。当然,按照项目管理界不成文的规定,一个程序员预测一件事情完成的时间如果是t,那么最终的时间应该是这个样子:

代码语言:javascript
复制
T = λt + α # λ一般大于等于2,α是个经验数据,跟程序员的人品有关

嗯。

该书完全是用scribble撰写的,一来满足我对scribble探索的需要,二来与Racket官方文档格式保持一致,所以本书不会在公众号上连载(这么techy的内容估计大伙也没心思看),也不会在百度阅读发布(转格式估计都要累死我),就像我在书中的「前言」里写到的那样,写这本书是出于私利 —— 以教代学,它并不代表我对Racket有任何程度的深入掌握。

所以,本书是一个初学者在学习过程中顺手为初学者所写的「入门书」,如果你在读的过程中发现任何有悖于这一指导思想的地方,欢迎给我提bug。

阅读地址:http://racket.tchen.me/。

github地址:https://github.com/tyrchen/racket-book/,欢迎提bug,墙裂欢迎点赞。

大致提纲(在学习的过程中会不断调整):

1) 开始:餐前甜点(已完成)

2) Racket语言概要:基本语法和数据结构(正在撰写)

3) 写点有意义的代码:用Racket解决一些实际问题

4) Racket语言进阶:Racket的编程思想,函数式编程思想,语言的高级用法

5) 用Racket作图:主要讲Racket的plotting

6) 用Racket写作:主要讲scribble

7) Racket包管理:介绍raco及主要的Racket packages

8) 可爱的宏:这是肉戏,也是lisp的精髓

9) 用宏来设计你的语言:假象一门语言,用Racket实现

10) 延迟计算:讲讲continuation,延伸到concurrency

11) 用Racket编写服务器程序:写点有意义的服务器程序,和其它系统互操作

12) 用Racket做Web开发:现在写代码,不和「云」挂点钩,能叫软件开发么

13) 使用Racket撰写复杂的系统:这个没想好,看我学到什么程度

14) Racket的其它特性:前面章节没有提到的,但也比较重要的概念和库,算是拾遗

15) 下一站:Typed Racket:Racket最终会用Typed Racket重写大部分库来提高性能,我们也来凑凑热闹

16) 下一步该学什么?—— 这个问题问得好,等写到了我再回答

17) 结语 - goodbye my friend:打酱油的章节,希望到时我有一些思想和你分享

我无法保证我一定都能写完,我也无法保证每天都更新,不过如果你Watch这个github项目的话,你应该能收到通知。此外,基本上2015年底还没有完成本书的话,你就不要追了哈。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2014-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
项目管理
CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档