我姐和我女友这样学编程

标签: 女友 编程 | 发表时间:2012-09-01 02:26 | 作者:锅仔鱼丸
出处:http://www.voosee.com/

译者 锅仔鱼丸

就像我前面日志里提到的,伊娃和芳来旧金山跟我学编程。在这篇博客中,我会介绍我是怎么教她们的,我构建教她们的方式的理由,以及这种方法是怎么起作用的。按时间顺序去列明她们所学到、做到的那些事儿很简单,但是,这没什么帮助,而且你也容易错过重点。重要的是要了解详情,以及为什么它管用,所以我将从基本原则来开始。做好准备,文章比较长。

在你的 整个 编程历程中,以下原则要牢牢记住:

1)传播:

在伊娃和方开始之前,我为她们创建了个博客。我告诉她们,记录下她们的编程之旅和她们所学到的。在开始的时候是很难的,你可以问她们。我花了一个星期的唠叨,她们才写一次博客。但现在,如果不写写她们花了大把时间去做的那些项目,则像是错的了。

如果你在你的项目里用的是API(应用程序编程接口),发微博或者邮件给那公司,告诉他们你对他们的API的想法。当你在你的编程马拉松里获得了一个奖励,写条好微博@他们以示感谢,或者发篇日志。让这日志空前美好,然后推荐到黑客新闻栏目,就像它必将登上首页一样(尽管大多数是不会的)。

给你的编程之旅一个健康的传播过程的最大好处是,它让你对你的项目负责人,这也就引入了我的下一条原则。

2)完成:

芳和伊娃都知道,完成一个项目是很难的,但也是很重要的。我说得很清楚,除非她们写一篇日志,在twitter上@那API公司,或是在黑客新闻版上发这项目完成的消息,我们都不会启动一个新的项目。尽管第一个项目只是一个的井字棋游戏,但这是她们做得最好的井字棋游戏。你从来都不想写一个蹩脚的程序,所以多么简单的或不相干都不重要。如果你要写一个项目,那它必须是你能写出的最好的程序。我已经见过太多的程序员在一些看不到黎明的非正式项目上费时耗力。如果你正在学习编程,你必须从一开始就学习,珍惜你的时间和精力,完成您的项目来证明它。

最后的20%需要80%的努力。开发人员可以一两天就能把“点子”变成具体可执行的。而要发布一个“完美”的产品,需要两倍的时间来完成每一种情况下的测试,解决每一种临界问题。把80%的精力都花你项目最后的20%,这将在许多许多访问中成就传奇。
3)思考:

如果你被卡住了,请 不要 直视你的代码。出去散散步,呼吸一下新鲜空气,并考虑一下吧。你被卡住了,是因为你的逻辑除了错,而解决的最佳办法就是在脑海或者纸上一步一步地理清楚。程序员获得高额的酬劳是因为他们在思考。问题解决是依靠你的思考,编写代码就是这么可恶的工作。优秀的项目经理通常有一个丰厚的程序背景,并且在思考和解决问题方面训练有素。

根据这种说法,如果你被卡住了20多分钟,而且你也无法突破,那就 问别人 吧。如果你20分钟都没有得到任何线索,那么接下来的一个小时你 不会 有更多进展。信托伊娃。她有一天浪费了5个小时,就因为一个愚蠢的错误,实打实的教训啊。散个步,去干点儿别的事儿。然后再回来搞它。能够脱离出自己的问题,转移注意力是一个技巧。

4)再思考:

现在你可能想通了,思考在一个程序员的生活里地位重要。请 一定不要 ——特别是如果你正在学习如何写代码时——复制粘贴代码。如果你想学习如何怎么写代码,复制粘贴—— “你看,它成了!”——不会让你有任何突破的。相反,当你看到代码,你必须理解了它在做什么,再去尝试调试它。当你越来越能驾轻就熟理解别人的代码时,把它简化到恰好满足你的需要,然后再写出来。如果你从初学阶段就习惯这么做,在几个月里你就可以成为一个非凡的开发者。

5)谷歌:

学习如何自己解决问题。除非你被卡住了至少20分钟, 不要 询问编写代码的问题。程序员必须独立。他们是伟大的思想者和伟大的传播者。要成为其中一员,你必须有逻辑地思考,并找出问题发生的原因。很多年轻的开发人员所面临的一个问题是,他们很难写出他们真正需要的东西。我们很多人都经历过这个过程,你知道问题是什么,但是你不知道怎么去找到它。你必须从初学阶段就学会正确地开发程序,这是个技巧,它很好地回扣了第一点里说的传播。

现在,记住了这5个点,来看看伊娃和方学习的时间表:

第1-3天:通过Ruby学习编程的基础知识。

我选择了Ruby,因为用来上手变成它是最简便的。Ruby的语法限制很少(空格与制表符,类型声明等),因此伊娃和方能够专注于编程的思想过程,而不是去攻克语法规则。她们学会了if语句,循环,数据结构,并解决一些编程题目,如FizzBuzz(译者注:当满足一定的条件时打印Fizz或者Buzz或者FizzBuzz,是初级编程训练题目),替换字符串中的字符,转换一个数组,找出最大值。重要的是要了解类和对象。

*注意* 我不教她们Ruby的特定语法。我告诉她们对参数要始终使用括号,而且每个函数结束时一定记得返回。这样一来,当她们学习其他语言时,上手更快。

第4天:HTML

HTML和CSS严格说都不算一种语言,所以没有必要花太多的时间在这上边。伊娃和芳花了一天时间在HTML上,并且玩了一些标签,还研究了表单、信息页,等。我确信,她们 用HTML标签。这将建立起用CSS的兴奋。在这里需要重点学习的是区分块HTML与内联HTML,区分标识与分类。

第5天:CSS

在玩了HTML后,“你怎么把这个放那儿,你怎样让这个丑陋的HTML页面更漂亮?”的问题来了。CSS是一个完美的答案。今儿就开心地让你的网页更有型吧(所有的HTML页面都是前一天做的)。这里学习的重点是相对/绝对/固定定位,HTML元素流, 绝对和固定定位如何控制元素,以及正常的流。(译者注:没看懂。。。)

第6-7天:用jQuery来做JavaScript

jQuery的需要一点点努力来习惯,因为有的程序涉及到jQuery的框架,这需要一点儿时间。花了几天时间,让她们的HTML页面有交互性。

第8-15天:第一个项目——井字棋游戏

在这一点上,芳和伊娃了解了HTML/ CSS/ Javascript,但还没有很好地适应之。这是启动她们第一个项目(井字棋游戏)的最佳时间。尽管她们在2天内完成了这个项目,优化它又花了好几天。最后的20%需要80%的努力,这是事实。作为初学者来说,重要的是学习来完成你的项目。

第16-20天:Sinatra

在那个像是从来不能完结的井字棋游戏之后,学新的东西对芳和伊娃来说不能更激动人心了。学习服务终端代码对于她们一直在做的事儿来说是全新的体验。我选择sinatra因为它是我所用过的最干净、简单的web框架语言了,而这种简洁性让解释web的运作变成小菜一碟。

第20-22天:PhotoShop

Photoshop对于绝妙的设计非常重要。对那些从来没有用过它的人来说,它足够唬人(至少一度对我是的),但是借助Photoshop创立的网站,比起那些传统的前端框架网站要高一个档次的。而且事实上你只用知道混合选项就够了。任何一个相当成功的开发者都会需要Photoshop,所以学会用它很重要,并且要用它服务你所有的项目。

第20-27天:第二个项目—— “拖图片”

项目大量涉及JavaScript的运用。该项目涉及使用Ajax请求,Facebook的API,和cookies。这是一项联结其所有web编程基础的大工程。这个项目涉及的范围大于第一个项目,我觉得这是向更复杂项目迈进的一大步。在此期间,他们通过GIT(译者注:一个开放源码的版本控制软件)合作。这是一个开源项目!

第28-30天 :RSpec

至此,芳和伊娃已经适应了构建Web应用程序。也是到这个关头,她们已经意识到代码多么容易打破,而一个改变又如何摧毁一切。现在,测试驱动开发适时引入。我们在RSpec上花了几天时间,伊娃和芳用写测试案例当每天早上的编程练习。我有没有提到她们每天早上都要解决一项技术问题?从第28天开始,她们不得不在她们开始写代码 也写些RSpec。

第30-35天:BackboneJS

着手与一个涉及较广泛的项目(比如“拖图片”),你可以学到很多东西,并且遇到一些你希望有更好解决办法的问题。只有这样,你才真正欣赏那些帮助过你的的框架的意义。我还没有找到很好的BackboneJS的教程,所有教程都一下子提供了 多的信息。我是这么教的:

首先,了解模型。创建一个模型,而且 仅供一条 数据库条目所用。学习如何修改它,将它保存。

其次,学习视图。为你之前一直在做的那个模型创建一个视图。添加事件侦听器,领会视图如何如此贴切地绑定模型,以及这一切又是如何彼此贴合。

第三,现在就可以说清楚集合的意义了。你不能手动键入每一个的模型,特别是如果你不知道有多少模型时。

我们从来没有学路由的课程。我还不觉得路由重要。

第35-40天:Android

如果你还没有完全注意到没有,我们已经在很短的时间里涵盖了 很多的 东西。好程序员需要时刻适应变化,所以我们的最后一个项目是学习Android。在编程中,你不能忽视移动终端,它太重要了。我教了她们Android编程。这不是很辛苦,Android编程和web编程是非常相似的。你有了视图的XML(可扩展标记语言),你就有了可以与网络控制器匹敌的Java代码。模型-视图-控制!通过使用Ruby和JavaScript,芳和伊娃开始寻找编程语言的相似之处,让她们与特定语言脱离关系。对她们来说,编程语言有不同的语法和相同的工作方式(并非事实,但我们会稍晚些区别,以避免混淆)。

结论:
1)女孩在编程方面是惊人的。
2)不是计算机科学专业的不是一个借口。
3)编码是有趣的,每个人都可以学习。
勇往直前!
感谢您的阅读,
歌曲
如果您想知道更多关于她们的编程之路,去问问她们!
,eeevahhh @ @ fongchinxx

相关 [女友 编程] 推荐:

我姐和我女友这样学编程

- - VooSee - 拮取生活中的彩虹
就像我前面日志里提到的,伊娃和芳来旧金山跟我学编程. 在这篇博客中,我会介绍我是怎么教她们的,我构建教她们的方式的理由,以及这种方法是怎么起作用的. 按时间顺序去列明她们所学到、做到的那些事儿很简单,但是,这没什么帮助,而且你也容易错过重点. 重要的是要了解详情,以及为什么它管用,所以我将从基本原则来开始.

Hadoop Streaming 编程

- - 学着站在巨人的肩膀上
Hadoop Streaming是Hadoop提供的一个编程工具,它允许用户使用任何可执行文件或者脚本文件作为Mapper和Reducer,例如:. 采用shell脚本语言中的一些命令作为mapper和reducer(cat作为mapper,wc作为reducer). 本文安排如下,第二节介绍Hadoop Streaming的原理,第三节介绍Hadoop Streaming的使用方法,第四节介绍Hadoop Streaming的程序编写方法,在这一节中,用C++、C、shell脚本 和python实现了WordCount作业,第五节总结了常见的问题.

Shell编程

- - 博客园_首页
本来打算寒假回家好好学习Linux的,为以后学习嵌入式打好基础的. 回家之后的学习效率非常低,之前为了搭建Linux环境,折腾了很长时间,学到现在也就勉强才把Shell编程学完了. 今天就把自己学习的相关知识点总结整理一下. 个人感觉shell程序跟windows下的批处理文件有点像,就是将一些系统命令写进一个可执行文件中,然后执行.

用 AlphaCode 编程

- - 奇客Solidot–传递最新科技情报
至少在部分问题上 AI 程序员能与真正的程序员竞争了. Alphabet 旗下 AI 子公司 DeepMind 宣布了 AI 代码生成系统 AlphaCode(PDF),声称测试显示其水平在编程竞赛中已经具备了竞争力. 计算机科学家 Scott Aaronson 也为 AI 在编程方面的进步 惊叹不已.

编程能力与编程年龄

- - 酷壳 - CoolShell.cn
程序员这个职业究竟可以干多少年,在中国这片神奇的土地上,很多人都说只能干到30岁,然后就需要转型,就像《 程序员技术练级攻略》这篇文章很多人回复到这种玩法会玩死人的一样. 我在很多面试中,问到应聘者未来的规划都能听到好些应聘都说程序员是个青春饭. 因为,大多数程序员都认为,编程这个事只能干到30岁,最多35岁吧.

[译]所有编程皆为Web编程

- - 呦呦鹿鸣
原文作者:Jeff Atwood. Michael Braude对Web编程大受追捧表达了他的不屑:. 大部分人想去做Web编程的原因是,他们不够聪明,因此也做不了别的事. 他们不懂编译器、并发性、3D或类继承. 他们根本不明白我为什么要使用接口或者抽象类. 他们不理解虚函数、指针、引用、垃圾回收、终结器、传引用与传值的区别、C++的虚拟析构函数、或者C#的结构体与类之间的差别.

javascript 编程规范

- 红茶 - 博客园-Ruby's Louvre
为公司起草的javascript编程规范,参考了网上的许多资料,尤其是google的规范. 现在放出来,希望能抛砖引玉,大家多提宝贵意见. 本规范是针对javascript函数式编程风格与公司严重依赖于jQuery进行编码的现实制定出来. 禁止使用eval,with与caller(ecma262 v5 的use strict要求).

Javascript编程风格

- - 阮一峰的网络日志
Douglas Crockford是Javascript权威, Json格式就是他的发明. 去年11月他有一个演讲( Youtube),谈到了好的Javascript编程风格是什么. 我非常推荐这个演讲,它不仅有助于学习Javascript,而且能让你心情舒畅,因为Crockford讲得很幽默,时不时让听众会心一笑.

编程的未来

- - ITeye博客
最近在看一本书,加来道雄(Michio Kaku)的《物理学的未来》,第一、第二章是程序员更加关心的,对于下一个100年计算机和人工智能未来的预测. 想想计算机发展短暂的历史,这些发生了的翻天覆地的变化,似乎都在弹指一挥间. 无论如何,书中对其这样几个猜想令我记忆深刻:. 这是物理学家眼中的世界(另外推荐他的另一本书《平行宇宙》),激动人心;另一方面,我回想起小时候无比痴迷的机器猫,小小四维空间袋,寄托了孩子多少纯真的梦想,有多少神奇的道具已经成为现实…….

MapReduce编程模型

- - CSDN博客云计算推荐文章
MapReduce是一个Google发明的编程模型,也是一个处理和生成超大规模数据集的算法模型的相关实现. 用户首先创建一个Map函数处理一个基于对的数据集合,输出的中间结果基于对的数据集合,然后再创建一个Reduce函数用来合并所有的具有相同中间Key值的中间Value值.