如何学习ruby and rails杂谈

对于非计算机专业的技术人员来说,有时候,如果希望享受编程的乐趣,ruby与rails或许是比c#与asp.net等更好的选择。

1 为什么要学习编程?——尝试更自动化地工作

计算机的本质很大程度是帮助人们自动化工作,进而解放人类生产力。从这个角度来说,windows过易使用的界面,阻碍了你的自动化流程。举两个非程序员职业熟悉的软件来说,一名深受windows毒害的研究者,或许更习惯使用amos与spss的操作界面。当下一次要进行同样的操作的时候,又不得不又一次再一次地来点击鼠标。实在可以称之为效率低下。而使用spss脚本或者r语言等,则很容易将整个流程自动化与固化下来,便于重复使用,极大地解放生产力。

对于非程序员职业,也非计算机专业的从业者来说,掌握一门语言或者一个编程框架,更多地是帮助自己更自动化地工作,而不是让自身陷于编程细节。从这个角度理解,rails所宣称的“不要重复自己”理念显然是更符合计算机的本质。

在这个纷繁的世界,改变世界,更多意味着你能系统化地解决问题。而改变世界的程度有多少,也就是你的企图心能够解决问题的规模大小,离不开自动化。这,才是程序语言对于你的最大意义。相对现实世界的复杂与诸多中国特色,掌握编程语言,更是能让自己以较低成本进入国际化竞争的格局之中。抛开这一切,与其选择学习编程,不如直接参加公务员考试。

此部分入门读物:卓有成效的程序员

2 为什么不是Windows?——操作系统的选择

基于上述考虑,请更换操作系统为非windows类。比如mac,比如ubuntu,并且尽可能地使用命令符。一天不会,天天使用,自然就会了。并且,尝试离开windows,或许会让自己发现一个新的世界。在windows之外,还存在着大量类linux的操作系统。这些操作系统,就在你的便携设备,媒体播放器中发挥着作用。有时候,你会发现,你需要掌握的命令其实没那么多。更重要的是,你试图开启一个新的服务,而这种服务离不开日益发展的云计算趋势,这种趋势,实际很多环节也是与当今笨重的windows无关的。

此部分入门读物:鸟哥的Linux私房菜【基础学习篇】,请重点阅读前16章,选读17-22章。

3 为什么是ruby?

相对其他语言来说,ruby更符合人们的思维本质。请参考这一个例子。

http://www.ruanyifeng.com/blog/2010/10/why_lisp_is_superior.html

通过这个例子,我们能形象地感受到ruby与其他语言的不同。对于非程序员来说,有时候很难理解一些计算机语言的设计,为什么这个东西可以是对象,另一个则又不是对象。为什么通过页面传输过来的数据,这个可以是数组形式;另一个又不是数组形式,又多出一种新的类型?天啦?我记得住吗?

而ruby,简化了人们的记忆成本,规则更清晰,从而更容易记忆与理解。

4 从哪本书入手?

英语比较好的,优先推荐这本:Learn to Program (2nd edition)

台湾侯君昊已经翻译了一部分,请参考:

http://www.arch.nctu.edu.tw/~jhou/ 【暂时不能访问】

中文请阅读这一本,Ruby Programming——向Ruby之父学程序设计(第2版)

这一本正是所有非计算机专业,非专业程序员能看懂,也能学会的好书。

5 接下去,我该干嘛?

在对ruby有基本了解之后,开始尝试了解与运用rails。可以从这本书入手,《rails学习手册》,相对其他大部头,这本书更容易阅读,也更切合非计算机专业的人员的底子。

阅读完这本书,按照图书流程练习完例子之后,继而可以回头阅读这本:Web开发敏捷之道,目前中文已有第三版,英文则是第四版。

6 完成作业

边阅读以上书,同时参考以下两本书:

  • Programming Ruby 中文版 第二版
  • Rails之道

以及以下教程网站:

与以下答疑网站:

你应该完整掌握【2010 Ruby on Rails 書單 與 練習作業】该列表的知识点,并完成该列表所指定的任务:

http://blog.xdite.net/?p=1754

接下去,可以逐步了解更多,此时此刻,你的知识点的扩充应该更多来自博客的阅读与github库的阅读。

更多。。。

7 创造干货——改变世界的是干货而不是程序

学习编程的乐趣,很多时候,来自于你的成品受到欢迎。通过工具,建构一个现实世界中并不存在的事物,并继而让它与人们的现实生活发生联系。这,才是编程的真正乐趣。

请务必从一开始,就不要从普遍的留言板那些程序着手。那些程序,对现实生活中有什么意义呢?

忘掉他们吧!

ruby与rails与现实生活可以如此贴切,你所关注到的现实世界的实体直接可以变现为一个模型中的类,变成一个migrate中的定义。请从一个自己所感兴趣的模型开始着手,可以不复杂,但是请务必解决问题。你愤怒中国的房价,请设计一个足以简单的表,收集并呈现出中国房价的走势,并让它可以成为人们容易订阅的。你愤怒工资的增长幅度远远低于zf发行货币的速度,请设计一个足以简单的程序,让你的女朋友也很容易录入她最近接触到的物价。你绝望吗?你郁闷吗?这样的习作,就是xdite的绝望网。这些模型足够简单的小程序,对世界尤其是中国现行社会的改良意义,或许远远超过一个与现实无关的程序。

对于已经习惯考试,让中国的考试制度毁了自己的想象力的你,忘掉程序,忘掉留言板,而从一个基本的问题开始思考。我要建构一个什么样的新事物?你的模型可以像早期的推特一样简单——此时此刻的你,正在干什么?

可以不复杂,但是,你必须有这种从一开始就关注现实,并将之呈现为足以改变现实世界的干货。这,才是编程的乐趣。作为一名非计算机专业出身的你,你将焦点关注在算法,模式,那岂不是否定自己已经走过的路?当企业市场已经成为一个鸡肋市场,当学习编程变成生计而非享受思考的乐趣,此时此刻,忘记企业市场,直接面向自己的内心,通过更多地关注消费者市场,你的乐趣会更多。

8 但是,程序不是一切

人们可以在农业时代通过手脚改变世界;在工业时代通过机械改变世界;在互联网时代通过web程序改变世界。

但是,程序不是一切。而这,恰巧是计算机专业出身的程序员很多时候难以赚取真金白银现金的陷阱。

程序它只是一个帮助你的工具。当你系统化地思考一个问题,很多时候,请忘记程序,浙江的小老板们会发现很多非程序解决的办法。这,就是江浙小老板对世界的贡献。从这个意义而言,一个简单的煮蛋机比十个山寨的CRM系统更能给世界增加很多乐趣。

是世界已经迈入了互联网时代,移动互联网时代,物联网时代。因此,这些时代背景给我们提供了足够多通过程序来改变世界与系统解决问题地范本。

然而,范本不是解决问题的根本出路。范本,更不是你,在这个竞争激烈的社会,赚取足够财务自由的资金的可取之道。

对于健康减肥,我们都知道,通过朋友的鼓励与精确地记录饮食消耗的热量会更有效。但是,人们往往不太知道如何精确地记录自己的饮食,也难以找到与自己分享的朋友。基于对这减肥问题的系统思考,在如何帮助人们精确记录饮食的问题上,诞生了棒点专利技术;而在如何找到与自己共同减肥的朋友上,则通过雇佣减肥成功的人作为你的减肥教练以及建立减肥社区,以上两者,诞生了上市公司慧俪轻体

而这,程序,在其中发挥了什么作用呢?而这,可以离开程序吗?有兴趣地朋友可以阅读几十年来这家公司的发展史。为什么它,其实在程序员看来,一个简简单单地在线培训系统,偏偏能够创造上亿价值?你在现实生活中,会发现大量这样的例子,身为花费了大量学习成本的程序员,你很快会将问题归结到自己没有创业天赋,自己很内向,不善于人际沟通上。

但是,你真的曾经花费过非程序手段思考过类似于减肥这些问题吗?还是当类似于江浙小老板碰到如何管理销售人员的问题的时候,你懒惰地使用了一个现实世界中既成的范本——CRM?

价值,大价值,是来自你以一个更巧妙地方式,或者成本更低【家乐福】或者更美【无印良品】或者更真【SAS科学软件公司】或者更善【NGO组织】或者效率更高【Google搜索】地解决问题,而不是你的程序。

这,恰巧是非计算机专业出身的朋友的优势。你,在你的专业领域,例如财务【用友】,例如呼叫中心的通讯【腾讯】,拥有足够系统地认识,随着时代地变迁,借助于程序,你的更巧妙地系统性地解决问题的【干货】应时而生。你的这个【干货】,将以远远超越工业时代,农业时代的力量,传播到现实世界之中。

这,就是学习编程,可以赋予你的力量。而ruby与rails,通过简洁的语言,通过系统支持敏捷开发的大量工具,更通过【getting real】与【rework】这两本书以及大量或者已经名声大振或者还在路上的创业公司,为你,提供了同行者众,你并不孤独的信心。

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s