Hacker News new | ask | show | jobs
Ask HN: Introducing my wife to programming
3 points by salttrail 2797 days ago
I am experienced Java developer but I'm not sure whether it's something I should start with or teach her python. She have knowledge about what programing is and she would like to do career change so if you have any tips to share in which direction I should go, it would be helpful. At the end of the day either web or mobile development is fine as long as she is able to have steady learning curve and less "huh?" moments, until she feel comfortable with whatever hack the programming is :).

My plan is to

1. Tackle OOP fundamentals

2. Introduction in one of the frameworks

3. Build simple apps

6 comments

I think #3 goes at the top.

Open an editor and start a python script, <html></html>, new Xcode project from template, etc.

Then do the minimal amount of work to make a "program". Would be great to have input from the user and output something interesting. But many programs/apps are just informational right?

So you start with the most basic program.

And you add to it.

Occasionally jump over to a huge codebase and show her how editing one line changes the program. Explain how this one just has more layers, time spent on it, more people working on it, all of the above.

Go back to your small programs. Push until you have a real need for OOP or a framework. Then she will be A) interested about OOP or the framework and B) actually understand the point. Imagine someone trying to shove OOP down your throat when you don't have any use for it. Inexperienced people aren't ready for that kind of abstract thinking. Maybe they can understand it but they don't understand the application of it, or worse, they will start to think everything should use it. Show the simple version first, then show how other things can make you work faster and the code cleaners (which are really some of the biggest reasons for OOP and frameworks, right? It's not as if you can't make something happen without them, they just increase productivity and code clarity).

Lastly, making something that scratches an itch of theirs or both of yours so the work is practical. There's plenty of possibilities there to avoid making tic tac toe if no-one likes tic tac toe.

Good luck

I think this is quite important as well. A couple of years ago I had a girlfriend that was interested in programming and she started _directly_ making an iOS application.

I helped occasionally when needed as I had 10 years of random programming experience at the time (not in iOS though) but she powered through many issues on her own. While I don't have contact with her anymore, based on her LinkedIn profile she's still an iOS developer to this day, at a /really/ nice company as well.

My advice: don’t do OOP fundamentals. OOP should come up out of necessity of keeping code modular, not as a governing principle.

Building simple apps is the way to go. Don’t do web at first, it’s too messy. Objective-C is a little harsh as well, so android development is what I’d recommend. It’s simple enough to not get too frustrated, and it’s good for motivation cause it’s cool to make an app for a phone.

For all the hate it gets, there is nothing simpler than a small Javascript and node.js app. Easy to focus on one language initially, and if a beginner wants to build frontend stuff, Javascript is the only option.

Guide her through building a simple app of her choice. Teach her how to find answers on MDN and SO, but take time to talk her through big picture ideas and architectures.

Do something with Pinterest API Crawl site to find jewelry or mittens or puzzle boards or whatever she likes then analyze it with open cv. Forget OOp altogether for a beginner — it’s useful after dealing with large code bases and needing a method to organize code.
As somebody who made this career change, do not underestimate how much she has to learn. It's very doable, but there is really SO MUCH. For somebody who didn't grow up tinkering with computers (I didn't, my Dad needed that desktop to write his law briefs so if we messed it up we were in big trouble) there's so much ground work to lay and jargon to conquer that is second nature to people who program but very confusing and new for beginners.

For example, early on when I was just starting to program, somebody was trying to help me use a terminal (a what?) and they said "ok, type L S dash L pipe grep dot txt." HUH? ok, I typed "ls-l," but what's pipe? No no no, it's "L S Space dash. ls is the command." It's a what? It's like software that's already been written that you can call just by typing the name." Oooohhh.

That's just one example. I got it eventually, I got a CS degree and I'm doing distributed systems stuff fulltime, but man those first few months were rough. I remember a friend helping me through what I later recognized as Baby's First Off-by-one error. I remember the victory of writing my first program that worked the first time. I remember the first time a classmate asked a question and suddenly I was able to answer it!

My recommendation to start: write a toy program to do something trivial and run it from the terminal. Like "Hello ___" where you take in ___ from the command line. Learn how to interpret or compile your code from the terminal, learn the basics of variable assignment (== vs =), if statements, maaaybe loops, and go from there.

Never, ever say "It's simple," "It's easy," or "It's trivial." I got very hung up (still do sometimes) on trying to understand what I'm doing from code down to bare metal, and that is NOT SIMPLE, and when you're swimming in unfamiliar terms and confusion it is very hard to articulate a question that clarifies your confusion. And trying to guide somebody into thinking on a handful of abstraction levels without going to far is not simple. Many times I needed to hear "you don't need to worry about that right now" or "just treat this as magic for the moment and focus on this other thing." That is way more helpful and encouraging than "it's simple." I think FizzBuzz is simple now, I sure as heck didn't back then.

Like other commenters said, leave OOP or functional paradigms or whatever for much later. That stuff matters when you realize your one class has gotten super unwieldy.

Don't jump too quickly to Android or web development without covering the basic basics first. Android and web development are not simple and there's some black-box magic that I don't even think some pros fully understand. It is nice to visually see the changes that you're making through editing a UI, but the abstractions can be tough.

This comment got long. In short, be encouraging, help her discern what she needs to know and what she doesn't, and nothing is ever simple because ultimately it's all running on a lightning-infused rock, and these days that rock is probably connected by metal strings or electro-magnetic waves to other lightning-infused rocks, and that's pretty hard to wrap your mind around.

All that said, I know for a fact that she can do it because I did!

Thank you for such kind words
keep her in the kitchen