Ever since I was a little software developer not so many years ago, I’ve dreamed of having a girl who I could talk to about the things I like. I wanted to talk to her about what I do. Not in a sense of yeah I do computer stuff, but in a real and deep way. The kind of conversation you would have with a coworker. I wanted my girl to be the person I go to whenever I find something new that excites me, and I wanted her to understand it.
Back when I was still in school days, university to be specific, I used to talk about this with my friends. I expected everyone to want the same as I did, but to my surprise I was the only crazy person in a group of already crazy geeks. Every one of them told me they don’t want a programmer girl, they said they would go crazy. But I call that bullshit.
It was just their fear talking. What’s really everyone thinking is that it is impossible to find a girl who would be good looking, intelligent, interested in programming, and above all else, interested in you, the socially awkward geek. What are the odds of getting all of that?
But let me tell you a secret brother, she doesn’t need to know all of this stuff. Everything in life can be learned. Some people might have predispositions for certain things, but that doesn’t mean other people can’t learn and understand them. We carry a great pride in what we do, because it took us many years to master the profession. But truth to be told, many of the things that took you a year to understand can be explained in 5 minutes if you know how.
Is pointer arithmetic really difficult, or are we just telling that to ourselves to boost our ego, because we finally understand how it works? Is understanding polymorphism difficult? Are monads really that hard to understand, or are we just looking at it from the wrong point of view?
A perspective is worth 80 IQ points.
You can explain pointers, manual memory management, stack & heap allocation, garbage collection and much more in just a couple of hours if you chose the right metaphors.
是指针真的很难懂，还是因为我们最终搞懂了指针是怎么回事，所以这样暗示自己，从而显得更牛逼？理解多态很难吗？monads 3 真的那么难懂吗？还是说我们理解它们的角度不对？
如果选择正确的隐喻，你能在一两小时内就解释清楚指针、手动管理内存、栈 & 堆分配、垃圾回收和其他更多的东西。
Or maybe algorithms are difficult? I bet you wouldn’t want someone to wake you up in the middle of the night and have you write a quicksort. But what if you had knives and wanted to teach your girl how to sort them (obviously by size)? You might have to do it two or three times for her to really believe you that it works, but the algorithm itself is stupidly simple.
If you have a problem that you don’t understand even after a few hours, go ahead and explain it to your girlfriend. I don’t mean the usual talk to a wall kind of thing, when you realize in the middle of the sentence what you wanted to do and abandon the conversation. Try to really explain it to her, even if she isn’t technical at all. It will be easy for her to understand once you find the right metaphor.
Just keep in mind that she has to be willing to learn these things, you can’t force your knowledge into her, she has to be the one who wants to learn. The biggest obstacle here I would say is breaking the I would never understand that fear.
About 6 months ago my girlfriend was studying political sciences for her masters degree. She didn’t really have any technical experience up until this point.
We’ve learned things like how computers work, how to manually allocate memory, differences between stack and heap allocation, how to do properly reference counting in Objective-C, how garbage collectors work, functional programming (yes I mean Haskell), networking protocols and much more. She even knows things that I didn’t know just a year ago.
我们学了计算机是怎么工作的、怎么手动分配内存、堆栈分配内存的区别、在 Objective-C 中如何恰当的进行引用计数、垃圾回收器是怎么工作的、函数式编程（没错，说你呢，Haskell）、网络协议和其他一些东西。她甚至知道一些我一年前都不知道的知识。
Basically I’m able to take what I know, extract the important things, throw away the 99.5% of wasted time on figuring out what is important and just teach her what she needs to know.
Is this enough to make someone a programmer? No. She will have to go through the hard parts as well, figure a lot of things out, but she already knows more than most people who go study software engineering on a technical university, just after 6 months.
Being a professional developer also means that you’re a professional teacher to some extent, since our job forces us to constantly explain things to other people. We have to put ourselves into the role of the reader and make our code understandable. We have to explain what we did when it doesn’t make sense, and we have to coach our interns on their path to greatness.
All we do in our jobs is take complicated things and make them simple (hopefully, some people like to do the exact opposite). One of the reasons why it takes so long to learn something is that you get lost all the time. You might have a professor who will occasionally explain something, but you still only have about one lecture per week.
On the other hand, if you’re teaching the person you live with, she’ll have unlimited access to you, the person who can answer any question, immediately.
Developers are so good at googling because we get lost all the time. We’re constantly looking for answers. But how productive would you be if you had someone with all the answers sitting in the same room?
因为开发者总是感到困惑，所以我们非常擅长用 Google 进行搜索。我们不断的寻求答案。但是如果坐在同一房间的某人知道所有问题的答案，那么你会有多么高效呢？