如何教女朋友编程?

移动开发
回到我还是一个学生的日子,具体地说是大学时期,我曾经跟朋友们说过这些。我期望每个人的想法都和我一样,但是出乎我的意料,我是那个疯狂极客小组里面唯一疯狂的人。他们告诉我,他们不需要程序媛女朋友,那样他们会发疯的。但是我认为这是胡扯。

[[146883]]

自从我几年前刚成为一个软件开发者之后,我就一直梦想着有一个能和我一起讨论工作的女朋友。我想和她讨论我所从事的工作。不是像“对,我做计算机 的”那样,而是以真正深入的方式讨论。就像你和同事间对话一样。无论什么时候,当我发现一些令我激动的新东西时,我希望她是我***想告诉的人,并且能够理 解这个新东西。

回到我还是一个学生的日子,具体地说是大学时期,我曾经跟朋友们说过这些。我期望每个人的想法都和我一样,但是出乎我的意料,我是那个疯狂极客小组里面唯一疯狂的人。他们告诉我,他们不需要程序媛女朋友,那样他们会发疯的。但是我认为这是胡扯。

这只是他们不愿意说罢了。每个人真正想的是,是否有可能找到一个既漂亮聪明,又对编程感兴趣的女孩,并且会对你这个不懂社交的极客有好感。这一切发生的概率能有多大?

但是老兄,让我告诉你一个秘密:她不需要懂这些东西。生活中的任何事情都是可以学会的。一些人可能会倾向于某些特定的事 情,但是不代表其他人学不会、理解不了。我们对自己的职业非常自豪,因为我们花费了很多年来掌握它。但是说实话,如果你掌握了方法,很多需要你花费一年时 间来理解的东西,可以在5分钟内解释清楚。

指针运算真的很难么?还是因为我们最终理解了它,就认为自己的水平提高了呢?理解多态很难吗?是 Monad(译者注,Monad是为了消除副作用的一种模式,如函数式编程中的链式结构,参见维基解释)真的很难理解,还是我们站在一个错误的角度来理解它?

智商达到 80 就足够了。

如果你选择了合适的比喻,你可以在几个小时内解释清楚指针、手动内存管理、栈/堆分配、垃圾回收等等知识。

问题来了,请用白话向外行解释“指针”、”手动内存管理”、”栈/堆分配”、”垃圾回收”。

还是算法很难呢?我打赌你不会希望有人在午夜叫醒你,让你写一个快速排序。但是假使你有几把刀,并想教你的女朋友如何对它们排序(当然是按尺寸)呢?你可能不得不为她示范两三次,从而让她相信这个算法真的管用,虽然算法本身简单到爆。

如果你遇到一个问题,在几个小时后还是不能理解,去找你的女朋友,并向她解释。不要像跟墙说话那样,在你说话过程中意识到该如何做之后就中断谈话。尝试向她解释,即使她一点儿都不懂技术。一旦你找到了合适的比喻,她就很容易理解了。

时刻记住,她需要有意愿来学习,你不能把你的知识强推给她。这里***的障碍是,打破“我永远也理解不了”的恐惧。

 

这不难,只需要一些时间

 

大约 6 个月之前,我女朋友正在为她的硕士学位学习政治学。在此之前,她真的没有任何技术经历。

有一天她决定要学习一些JavaScript中酷酷的东西,并在我为她做的个人网站上制作一些动画。一周后我在教她Ruby on Rails。几周后她已经在做自己的Web应用了。又几周后她意识到需要更多底层的知识,因此我们开始学习一些基础的技术。

我们开始学习诸如计算机如何工作,如何手动申请内存,栈和堆的区别,如何在Objective-C中做引用计数管理,垃圾回收机制如何工作,函数式编程(我指的是Haskell),网络协议等等。她甚至知道了我在一年前还不知道的东西。

基本上,我能够从我的知识里面,选择重要的东西,抛弃掉为了搞清楚什么东西最重要而浪费的99.5%的时间,从而只教给她那些需要知道的知识。

让一个人成为一个程序员,这些足够了吗?不。她仍然不得不经历困难的部分,要理解许多东西,但是她仅仅在6个月后,就已经比在大学里学习软件工程专业的大多数学生掌握了更多的知识。

 

你是一个专业的老师

 

作为一个专业的开发者,在某种程度上意味着你也是一个专业的老师,因为我们的工作迫使我们不断地向其他人解释。我们不得不站在阅读者的角度,使我们的代码可读。我们不得不在我们所做的事情看起来没意义时,解释我们做了什么。我们不得不教育实习生,让他们成长得更优秀。

在工作中,我们做了很多复杂的事情,让它看起来简单(希望有些人喜欢做相反的事情)。学习某个知识需要花费很长时间,其中的一个原因是,你一直在迷失。你可能有一个老师会偶尔向你解释,但是每周只有一次听讲的机会。

另一方面,如果你在教和你生活在一起的人,她将能***次地接触你,且能够立即得到任何问题的答复。

开发者很擅长Google,因为我们一直在迷失。我们一直在寻找答案。但是如果你有一个在同一个房间、知道所有答案的人一起,你的生产力会怎么样呢?

责任编辑:chenqingxiang 来源: oschina
相关推荐

2015-08-21 09:48:11

女朋友编程学习编程

2020-10-21 08:59:50

删库程序员虚拟机

2019-03-12 09:43:14

反向代理正向代理服务器

2019-04-09 09:40:23

2020-03-16 14:08:59

线程熔断限流

2021-09-14 12:00:11

VR字节跳动

2019-10-09 10:45:16

云计算Web互联网

2020-04-21 11:45:04

技巧单一责任链开闭原则

2020-10-15 09:35:27

乱码UTF-8GBK

2019-12-23 10:26:02

3PC分布式2PC

2019-07-22 10:34:31

大案牍术大数据Big Data

2019-04-26 14:46:18

GitGitHub局域网

2020-12-14 07:08:37

MSL网络Linux

2019-04-19 09:48:53

乐观锁悲观锁数据库

2018-08-21 22:31:04

数据分析单身女朋友

2020-10-19 13:01:31

删库程序员思科

2020-12-14 10:25:08

DNS通信IP

2021-10-21 08:31:31

Spring循环依赖面试

2021-03-09 12:27:05

微服务 微服务架构应用程序

2020-06-22 08:07:48

Spring依赖场景
点赞
收藏

51CTO技术栈公众号