Well, 6 months ago, I undertook to teach programming to 3 non-programmers. The three were: my wife and two stepsons, W and E. I told them that if they persevered, by the end of six months, they would have a new career and be able to find a good-paying job. So, how did they (and I) do?
I mentioned in my interim report that E had decided that programming wasn't for him. Wonderfully, he got a job offer shortly after that and is working in New York City doing what he always wanted to. I maintain that it was my beneficial influence that brought this about, but pretty much I'm the only one buying that.
My wife soldiered on for two months before she, too, dropped. She surprised me by just how well she picked things up, but the experience made her realize that she didn't want to do this as a "job".
That left just W and me. Ah, but what a success story! W remained fully committed and after just four months, got a great job with an even greater boss. In fact, I'd like to take a few pages to talk about just what a great boss he has. Compassionate; challenging, but fair; a great teacher and mentor. In fact, my wife liked him so much, she married him.
What did I learn? Well, I learned that being a good programmer is, maybe more than anything, being a good problem solver. You have to enjoy translating real-world problems into data and algorithms. That's not as easy as it might seem. And beyond being able to do it, you really have to enjoy doing it.
Would I do it again? Yes. It's a good feeling seeing W well on his way to becoming a fine programmer. I get to teach him all that "Man, I wish I had know this when I was starting out..." stuff. And even though my wife decided she didn't want to pursue it, she now has a much better idea of what I do. Having that shared experience is really nice.