若干年前,在我还是一个小小的软件开发人员的时候,我就梦想有一个女孩能让我与之畅谈我喜欢的东西。我想和她谈论我做了什么。不是简单地说我在做与电脑相关的东西,而是能够更深层次地畅所欲言。就像和同事一起的那种谈话。我希望当我发现了什么令人兴奋的新玩意儿的时候,当我兴致勃勃地讲给她听的时候,她能理解我。
回想我还在上大学的时候,我也经常将我这个梦想说给朋友听。我以为他们会和我想的一样,但让我吃惊的是,我是这群极客中唯一一个这么想的人。他们中的每一个人都告诉我,他们不想找一个女程序员做女朋友,他们说这会让他们会发疯。但我认为他们是在自欺欺人。
他们内心真正的想法是,要找到一个既好看、聪明,又对编程感兴趣,以及最重要的是,对你有意思的女孩,那是不可能的。概率微乎其微?!!
让我告诉你一个秘密,兄弟,她其实并不需要知道编程。生活中的一切东西都是可以学习的。的确,有些人可能更擅长于编程这些理科类的东西,但这并不意味着其他人就无法学习和理解这些内容了。我们能骄傲地宣称自己是个程序员,是软件工程师,那是因为我们用了很多年的时间去学习和掌握这些知识。但是我要告诉你一个真相,许多你花了一年时间才明白的东西,其实可以在5分钟内被解释得清清楚楚,如果你知道怎么解释的话。
指针运算真的很难吗,还是我们需要这么说以便于自吹自擂,炫耀自己的能耐,因为我们自己是好不容易才明白它是如何工作的?理解多态性困难吗?是真的很难理解,还是我们自己理解的角度不对?
思维角度相当于80分智商。
你完全能在短短几个小时内就将指针,手动内存管理,栈和堆分配,垃圾收集等等等等解释得一清二楚,如果你选择了正确的形容和比喻方式。
算法难吗?我敢打赌,你肯定不希望有人半夜吵醒你要你写一个快速排序。但是,如果你有很多小刀,然后教你的女朋友如何对它们进行排序(明显是按大小来)?你可能依然需要示范个两三次,才能让她真正认同这种排序方法是有效的,但其实这个算法本身不要太简单。
如果你有一个问题,想了几个小时还是搞不明白,那么不妨试试解释给你的女朋友听。不要以为这是在对“牛”弹琴(各位美眉勿喷),如果你在句子中突然有所发现,可以中断谈话。试着真正地解释给她听,就算她一点儿也不懂技术。如果你能用一个正确的比喻手段来解释的话,她理解起来其实是很容易的。
记住得是她自愿学习这些东西,你不能强迫灌输知识给她,自己想学才能学得进去。你需要打破的最大障碍是,克服她“我永远不会明白”的忧虑。
这并不难,只是需要时间
大约6个月前,我的女朋友还正在学习政治学,攻读她的硕士学位。她真的没有任何技术经验。
然而突然有一天,她决定要学一些很酷的东西,以便于用JavaScript在我给她制作的个人网站上面放一些动画。于是我开始教她Ruby on Rails。两周之后,她建立了自己的web app。几个星期后,她意识到,她需要一些更深层次的知识,于是我开始教她更多基本的东西。
我们学习了如计算机如何工作,如何手动分配内存,栈和堆分配之间的差异,如何在Objective-C做到正确地引用计数,垃圾收集器是如何工作的,函数式编程(此处指Haskell),网络协议以及更多。她甚至知道了我在一年前还不知道的东西。
基本上我采取的方式是,对于我知道的内容,提取重要的东西,扔掉99.5%用于说明什么重要的浪费时间的玩意儿,只教她需要知道的东西。
不过这还不足以让人成为一个程序员,她还需要了解硬件部分,但即使这样,她已经比大多数在学校中学习软件工程的人懂得更多了,仅仅学了6个月之后。
你是一个专业的老师
作为一个专业的开发人员,也意味着在一定程度上你是一个专业的老师,因为我们的工作迫使我们需要不断地解释给其他人听。我们必须将自己代入阅读者的角色以便于让我们的代码更易于理解。我们必须解释我们做的事情,当别人不知道这有什么用的时候。我们必须教实习生如何迈向自己的伟大之路。
我们在工作中能做的就是将复杂的事情简单化(话说,有些人恰喜欢反其道而行)。之所以需要这么长的学习时间,其原因之一就是因为我们经常迷路。你可能有一个偶尔会给你解释一些东西的教授,但是很遗憾每周只有一节课。
但是话说回来,如果你教你的女朋友——因为是住在一起的——那么她随时就可以问你,因为你随传随到,立马可以给她解答问题。
开发人员通常之所以非常擅于谷歌搜索,是因为经常陷入迷途。总是需要自己去寻找答案。但是,如果在同一个房间里,对方随时能提供答案的话,那生产效率还能不高吗?