Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: I'm teaching my wife to code. What direction should we go?
41 points by dotdi on Mar 13, 2018 | hide | past | web | favorite | 67 comments
My wife has shown interest in learning how to code in order to find flexible (or, even better, remote) work in the future, i.e. after the kids start going to kindergarten and/or school. She has no prior CS experience and has a Bachelor's in French and Norwegian Literature.

I was leaning towards starting her journey with Python, since (1) it's pretty popular and can be used in many different contexts (backend, data analysis, ML, etc.), it's (2) quite beginner friendly, with great learning resources and (3) I have prior experience with it.

Lately, however, I started wondering if I shouldn't push her towards front-end, i.e. HTML/CSS and eventually JS and a respectable framework or two. I did some substantial AngularJS projects a while back, so I could support her if we chose this direction. She is quite inclined towards design and has a good sense of color palettes, fonts, arrangements, etc. (IMHO).

We are located in Germany, and, as far as I've seen, there are many more freelance jobs looking for JS/Angular/React or similar than anything with Python. That might not be a problem when looking for remote work, but some local customers might be interesting for building her portfolio. I could imagine getting some clients under my name and having her "on the team" for the beginning.

Does anybody have any experiences worth sharing? Any pointers, valuable lessons, must-do things?

I think the usual advice is that she should try to solve one of her own problems. That doesn't mean curing diabetes or anything. I used to get annoyed because my personal budgeting program expected the debit & credit columns of my bank statement to be swapped, and I had to cut & paste the columns every time I imported a statement. That's a great first Python project, in my opinion. Look for nuisances. Maybe that means front-end development, maybe not. But whether anyone has any personal or professional success with software development depends on that person having the sense that they can solve a genuine problem with their skills, even if it's a modest problem or takes them a while or isn't a perfect solution.

Best point about her solving one of her own problems. It might not even have to be a formal problem, but just something of her interest.

As long as she is interested, she will learn.

This is the best advice.

I learned more about programming when I had a task in mind that I wanted to accomplish than I did just going through the motions with a book or for a class.

Programming and all of its related tools are best learnt out of necessity. I started to use Python for its original purpose: as a "better shell script". I've never succesfully learnt anything just for the sake of it. It's always been because I had a problem I wanted to solve with it.

Learning general purpose languages like Python or C would be great if she actually has any interest in computing. Has she ever expressed any interest in this? Does she do anything with a computer where a tool would help her?

If not, and she still thinks she wants to learn, then I suggest going the web route. Making your own website has a very nice learning curve. Learn about HTML and what it means to "mark up" a document. Learn CSS to make it look nice. Learn Javascript to make it interactive. Learn Python/Django to make the content database driven. It's very easy to see the appeal of each new skill and nothing seems like learning something "just because".

I completely agree with your comment.

What I want to achieve is to create a path for her that maximizes her ROI (i.e. the time and effort she invests). In this context, that would mean to find the necessity as well as guiding her toward the goal while making sure she goes through the right struggles and avoid big time-sinks that don't provide much value.

Having two kids creates the necessity to be smart about approaching projects, especially as big as this.

I think the web route is the way to go. HTML will offer that initial struggle of making sure the syntax is perfect for the computer to understand. This is a struggle that experienced programmers (including me) tend to forget.

Maybe she can write her own blog? It's very achievable. Doesn't really need javascript, though, so maybe straight from CSS to Django?

Good luck! I've been teaching my wife Python (she's already got some scripting experience in bash). It's a good learning experience for you too. I find where she is really lacking is seeing the "big picture". She can't think several moves ahead. So she'll never be a great programmer, but hopefully it will help her day to day at work.

If the end goal is remote work, I think front-end is the way to go. Like you said, there are the most freelance jobs associated with it.

I've been thinking about this a bit so I thought I'd share: Two successful, but fairly tech illiterate, Women in my life have wanted websites built for their businesses. I put both of them in touch with a bunch of developers and they also searched on their own. They both ended up choosing a Woman freelance developer. They said the Woman made them feel most comfortable and seemed to empathize with their needs and many uncertainties. I wonder if there is untapped potential there.

Thanks for your comment.

Since I'm much more of a backend guy, that would also have the added benefit that, down the road, we could take projects that require significant work on both front and backend.

I'm actually going to conflict with some other suggestions here, but when I first started learning to code, I started with simple HTML, CSS, and JQuery/Vanilla JavaScript. I took a framework: bootstrap and started building websites. I liked this approach because the elements are well documented and easy to pick apart AND even more important, you can start to see the results of your code immediately.

>you can start to see the results of your code immediately.

I don't think this can be understated. Python is a great language to start with since it's clear and fairly straightforward, but there's a nontrivial amount of overhead. It's peanuts to open up the editor in your browser and tweak HTML/CSS to immediately see a change. Creating a quick prime calculator or whatever as your first program is cool, but it's still hard to beat "I made a webpage!" It establishes the importance, provides immediate feedback and excitement, and you can easily establish the mindset/thought process needed before moving on to other languages.

I'll second this. Especially based on "She is quite inclined towards design and has a good sense of color palettes, fonts, arrangements, etc. (IMHO)."

I'd probably also suggest taking a look at WordPress. Barrier to entry is pretty low to start making things pretty and despite what you read, still very much in demand. It's easy to progress quickly, and just as easy to quickly get a portfolio of sites under your belt (for prospective employers or freelance work).

I am with FroshKiller's comment, who said to solve one of her own problems. My girlfriend had little interest in programming, but asked me one day if there was a way to track a price on a shopping website and get notified if it changes. I offered to help her make this, and she didn't believe she'd be anyway near capable of implementing something like that.

Took an evening, she wrote it in Python, and I had her look everything up (StackOverflow and other places), and just helped in explaining the rough concepts involved (here's what a variable is, then you need to read a website's entire content into a variable, see what that website actually looks like in code, spot the words..., here's how you can cut and slice text, and find word positions, etc.) — I then wrote her a tiny python library that only has one function, like a "send_email(to, subject, message)" and takes care of using my smtp setup. She was excited (and exhausted), but she was REALLY excited when she received an e-mail about a week later about a price-drop.

Stuff like that is gold, it takes time to spot those opportunities and find something that matches her interests, but working on things that she actually needs will make things incredibly easier.

Another issue is that most people don't know what they can actually 'do' with programs. A friend of mine lost his job and started studying programming, and when I asked him what projects he had in mind, he had no idea what's even in the realm of things possible. I helped him make a temperature reader with the Raspberry Pi, and a website. And he loved it. But he completely freaked out when I showed him that same website can be opened on his phone and stored as an "app-like" bookmark on his home screen. He showed all his friends, and I'm sure he didn't sleep much that night wanting to improve the website to make it even cooler.

The hardest part about programming isn't the language, it's learning all the technologies and concepts involved in how it all ties together, how to break any given project into its core components that need to be implemented, and what tool is right for the job.

Same story here. My wife did some online course at EPFL for java programming, then she did the front end developer nanodegree from udacity.

Now she is writing elm with me. I'm doing my best to keep her away from all the js "drama" (setting up webpack, dealing with npm...) and only into programming to avoid her being overwhelmed. And all this build stack/devops... part can be really frustrating.

Also, functional programming is somehow much easier to grasp when you start with it.

I'm interested in teaching non-programmers to program via Elm. I think the baggage that comes from imperative programming is a deterrent to pure fp. But if you start with pure fp, it's all pretty clear.

I'm making a huge gender-related assumption here, but I think you're making a good first guess at what she'll be interested in regarding front-end and design.

People who are more social (and women tend to be more social) are going to enjoy the kind of programming that interacts with people more (front-end, design, html, css, etc). People who aren't very social and are more withdrawn will enjoy the problem-solving of back-end and middleware (java, python).

There are tools to help you pick colors if you're not the designy-type (https://coolors.co/ combined with MatrialCSS or Bootstrap). If you are the designy-type, these tools just add to your toolbelt.

If you live outside of the US, you should look at Vue instead of React or Angular. Vue is far more popular outside of the states. The popularity of Angular and React is pushed by Google and Facebook more strongly in the US.

Another way to tinker is to get a Raspberry Pi and try to think of something you want to do with it. Do you want to control some smart bulbs in your house or something? Make some kind of toy for your kids? Great, do it in Python!

You have to have something you want to solve to give your wife the energy she'll need to see this through. If it's purely academic, she'll lose interest like most people.

What I really want to achieve is for her to not only tinker and do stuff that is interesting, but also maximize her general understanding, i.e. to make sure she gains knowledge that is transferable.

That's why I'm a bit reluctant about the front-end track (not even mentioning the whole JS framework and tooling drama). On the other hand, going for general programming topics and some theory with Python might not be nearly as much fun and might be off-putting.

Going to go against the grain here.

If I were to start again. I'd purely go down the python, data analysis and ML routes. Definitely focusing on ML and AI specifically.

I believe that in about 5-10 years, there is going to be a resurgence of tools that focus on leveraging what some developers do in terms of work and putting it into the hands of ordinary people without any knowledge of coding.

By that I mean, wordpress developers, WP plugin developers, or even those like Shopify app developers. Additionally, those who crank out basic HTML, CSS, Javascript templates and sites for companies who want a basic presence using NodeJS and Vue/React.

All of this is about to disappear. We are going to have tools that will be able to replicate what a JUNIOR javascript developer can do.

Sure, it's going to be tough for them, but will be true game-changer. I'm also not talking about sites like Wix, SquareSpace or other landing page builders like Unbounce or Leadpages. But I am thinking in much broader terms that what will be developed by the ML/AI is highly specialised and custom. Not only that, is accessible by data and can be changed on the fly by an algorithm. Ensuring that even maintenance is automated.

This is what I suggest really a rudimentary knowledge of front-end development. It's all going to get replaced to some degree very soon.

>however, I started wondering if I shouldn't push her towards front-end

Yeah I would do the same

>i.e. HTML/CSS and eventually JS and a respectable framework or two. I did some substantial AngularJS projects a while back, so I could support her if we chose this direction. She is quite inclined towards design and has a good sense of color palettes, fonts, arrangements, etc. (IMHO).

Go for Vue, it's way easier to learn and to build small things quickly, and the doc is really well made so it will not be as frustrating as it could with angular

Having done a small project with Vue, I agree. I'm a bit reluctant on the whole JS ecosystem, though.

I had significant CS and professional experience before getting to do a big Angularjs project and it still was, at times, unbelievably frustrating. I can see that whole drama killing all the joy and wonder of actually creating something, especially for beginners.

There is a good, free book on Python[1] that teaches practical skills for automating tasks. I sometimes recommend it to people, because it's immediately practical.

After that, you could try Flask[2] or Django[3] (Python web frameworks) and gradually introduce HTML, CSS, and JS.

JavaScript frontend development has more moving parts, so I think it's harder to pick up as a first technology. You have to explain asynchronous code earlier than with Python, and that's one more mental concept to juggle.

There are also a couple of online courses[4][5] that might be useful. I've only watched part of the first one -- it was good.

[1] http://automatetheboringstuff.com/

[2] http://flask.pocoo.org/docs/0.12/quickstart/

[3] https://tutorial.djangogirls.org/en/

[4] https://www.edx.org/course/introduction-computer-science-mit...

[5] https://www.edx.org/course/cs50s-introduction-computer-scien...

I suggest picking a project, and focusing on it while learning how to code. Learning is such a continuous process while coding that I think you need some kind of focus to ever feel like you have learned enough to apply the skills. Plus, that project could be a portfolio piece when she is seeking work.

Also, the project doesn't have to be a business - I think utilities that you would use, whether it's family communications or something funny, are perfect.

In many places I worked, we had more trouble finding/retaining designers and people good with front design, CSS skills etc than server side. If she hasn't already decided to learn server side tech, maybe it is worth experimenting with design and see if she likes it?

I know of at least two women who got their start in tech career learning Tableau and basic DB skills and they went on to do other stuff from there. That might be an option too.

Everyone gets into coding a different way. If she is inclined toward design, I would definitely start with HTML and go from there.

As a new coder even things like learning the tree-like structure of HTML, the brutality of an errant slash or missed closing tag, or the frustrations of bringing a visual idea to fruition with plain text are challenging enough. I wouldn't worry too much about HTML "not being real code".

If time is on your side (more than a year), I would gently nudge her into HTML and see what she comes up with. If she finds it tedious maybe try another route, but if it sticks I would segue into simple Javascript or CSS after that depending on what she wants. If she wants more control over how the page looks, naturally she'll want to learn CSS. If she wants more control over functionality and making the page "do" something, Javascript.

As a completely radical idea, you could show her LOGO. I remember that being incredibly inspirational when I was a kid and appealing to the artistic side.

If time is on your side, you are lucky in that she can afford to play around and not go down the bootcamp route which will inevitably lead to burnout. I say nurture the interest as gently as possible.

My wife actually got into programming using netlogo, then processing. It's all about agents, and her work was trying to explain how aggression leads to sociality. It provided a nice clean (and fun) interface for tweaking parameters and seeing how creatures "evolve".

From there she learned some python and Ruby. It was a pretty naturual progression, she just wanted to "do stuff"

I had a similar discussion with my wife. I instead found it better for her to start off native mobile app development. She has started the udacity android course and is loving it. The best thing about learning Android for beginners, compared to Web dev, is there are fewer things to learn. They just need to learn Java and Android Studio, and have an Android phone to test their app. I guess the same stands for iOS dev too.

I have no idea why I haven't brought that up with her! Take my upvote.

I realise this is a crazy idea but have you tried asking what she's interested in?

In well-paying job that can be done remotely, apparently, not the programming itself.

Unfortunately it's increasingly the case that people learn to code to get a well-paying job rather than because they're interested in it (with the employment opportunities being a side benefit).

This is probably what's lead to the rise of Electron, and using Javascript everywhere.

It's was like that in the 1980s. There was always good money to be earned in Law or Accounting but for those without the drive to study IT looked like easy money. Met many a failed accountant that thought all you had to do was sit in a nice office, drink coffee and poke the keyboard occasionally. Over time they moved into project / client management

Which, sadly, explains a lot

I dunno, I've reverse engineered proprietary binary TCP protocols and written assembly ISRs in my current role. I still think electron and js are great! Electron and wasm will be even better though.

How could this possibly be seen as a bad thing?

Note that this does not make it a requirement for anyone to not care about coding. But not only getting into coding because it is so much fun but because, hey, it is actually being paid really well and you are flexible and it's future proof, that seems to me to be one of those good problems to have.

It sounds to me like an industry growing up.

Remote and/or flexible schedule would be the most important aspect, that's true.

But she is quite interested and impressed by all the things one can do with programming and that's what's driving her in this direction.

Take up one app/website that she finds impressive and teach whatever is necessary to implement a prototype of it. Often, when starting out in anything, maintaining and amplifying the initial interest and enthusiasm is a major challenge.

Haha, yes, I asked her several times. She's not sure, hence this ask HN.

I would approach this as a Venn Diagram. One side is computer programming, the other side is your wife's intrinsic interests. I will assume that your wife enjoys photography.

Have her program a solution that allows her to solve her own problem. For example, have her write a server script when a SMS image message is sent via Twilo, it will take that image and display it on your Raspberry Pi digital photo frame on your living room wall.

Little projects like that make in enormously easy to have momentum when learning for the first time.

Unless you're strapped for cash, I would avoid learning "for the market" at first. Since if you put React/Angular in front of my face when I first started programming.

I would say "What's the point?". I didn't understand the problem they were solving,until I had a problem that they solved.

For general programming? Start with Python. She's not going to get that job tomorrow. You may as well help her get some strong fundamentals in a language that's easy to code in and has straightforward semantics. If she really wants to do JavaScript, she can pick it up later.

I told her the exact same thing a few days ago. Thanks!

The hardest part of this is actually convincing companies afterwards that she can actually code. Although there is a huge shortage of developers companies still are primarily looking for Senior Devs with years of experience in this very special framework the company is using.

I'm aware of this issue, and that's why we considered having me "front" for her so that she can get some work while I lend credibility.

You might want to take a look at "How to Teach Programming"[0].

Bonus: A talk entitled "What We Actually Know About Software Development, and Why We Believe It's True"[1]:

[0]: http://third-bit.com/teaching/ [1]: https://vimeo.com/9270320

Over the years I have tried to teach people to code a lot (and mostly succeeded) in various settings. I went through a lot of approaches, so here is what I learned:

Some restrictions in what a language lets you do are helpful, whereas others are not. In particular, functional programming has been a lot harder to pick up for many folks I have worked with before, so I would definitely go with an imperative language (which appears is what you were going to do anyway).

A static type system has been helpful, though. Both in requiring the aspiring programmer to think about what type their data has or should have and in documenting your own and standard library code. Additionally compile errors (and annotations right in the code) have proven helpful by catching errors earlier and reducing frustration.

I wouldn't recommend C, C++ or Rust or a similar systems programming language for a first language, but C# or Java. If you have access to a Mac, Swift might be a good idea. I have personally made very positive experiences with the Playground for teaching.

After explaining the bare minimum needed in a language to get anything done reasonably (and reinforcing with exercises) I generally let the student choose some task they are interested in tackling (if they try to do something that I know will be virtually impossible for them to do, I encourage them to choose something else now and revisit it at a later date), for example a Sudoku solver, and let them work on it until they ask for help or feedback or haven't made progress in some time. I will generally give them a nudge in the right direction if they are stuck or give opinions on how code could be simplified, sometimes introducing new language features.

Only when someone is reasonably comfortable with programming and can solve most "problem solving tasks" (not neccessarily efficiently), I would move on to frameworks and such.

Since you mentioned you were based in Germany: In my experience it is quite hard to get a permanent job here without some formal education. Your wife probably doesn't want to get another degree due to the immense amount of work required, so a long term goal of freelancing might be sensible. Since there is a relatively large demand for freelance work in the web field, and particularly in front end, I would be inclined to agree that that might be a good long term goal.

I've been telling my wife that she would be a good coder for years. She finally agreed to let me show her some things the other day.

I'm planning on going the JS route. She actually knows a tiny bit about HTML (BBCode from the MySpace days) so there will be something familiar to work with. Plus, it doesn't take much to get to the point where you're moving <div>s around, and I want her to actually see results so she stays interested.

There's plenty of customer support remote jobs that pay better than jr freelancing, with better hours. Find an online service that hires remote like Zapier, learn everything about their product, learn everything about browser debugging/DOM, good to go. From there learn development since possible to move into that role internally.

They esp look for people with multiple languages. Look on jobspresso.co or remoteok

Thanks, that's something we will consider.

I have tried to teach couple of close friends programming in Java before. Most people are interested with what you are building and excited to learn. But after writing some code with not much visual result, they interest started to fade in. So I would recommend to start html/css/js so she can see results of her work and get more interested to build more. ))

I think Java can be a bit off-putting for beginners because of verbosity and somewhat forcing people into OOP.

HTML and CSS definitely have much more immediate "results" but don't offer the benefit of generally teaching CS thinking. Even if you are an expert in HTML and CSS, being declarative, they don't help you in any way with "traditional" programming.

Having just finished 1.5 years working at a code school, here's my "link dump" of stuff that helped a lot of people.

Good luck!


Awesome, thanks!

There's a Rails Girls coding event in Munich in April, I highly suggest checking that out. Even though my SO didn't stick with Ruby, it was a catalyst for her interest in programming and understanding of frameworks.


How much previous knowledge did your SO have?

My wife took the CS50 Harvard course, great content, engaging lecturer and the problem sets are very satisfying. Gives a wide spectrum of coding exposure and then she can choose where to go from there. The CS50 in a box/virtual machine makes getting up and running pretty straight forward.

It's on my radar, thanks. I agree that it's a great course.

I would choose a strongly typed language to teach a beginner, it may be harder for her at first but she will quickly benefit from learning about how type systems work, and how it allows the compiler to catch certain types of error. Java or C# would be a good choice

>>I could imagine getting some clients under my name and having her "on the team"

What kind of clients do you think you will get - what will they want? The answer should lead you to what kind of work she should be trained on.

She's an adult. Instead of asking a bunch of strangers, ask her what interests her enough that she thinks she'll stick with it. Then choose your technologies based on that.

As a teacher, your job is to expose the student to a variety of programming topics early on. But when it's time to narrow the focus, their interests should be what guides their study.

That's definitely an important aspect. I was leaning towards python because it's a mostly sane language which can be used to teach a ton of different topics without much ceremony and other annoyances.

Would be be so kind to share your research up to this point, i.e. the great learning resources you have been referring to? Seems like you already put quite some thought into this :)

Why not dot net and asp.net core, there will be a lot of jobs in it and the transition is just beginning.

Start with her own website ( no CMS)

before teaching her programming find out if she is into logical thinking. it may sound horrible but I came to believe my math teacher that only 20% of mankind is capable of 'logical intuition', and only those can become true good programmers.

I don't know about the claim of 20% but I fully understand where you're coming from. You can usually tell who lacks that intuition when they have a problem. They come to you with a problem: thing X isn't working. "Well, what have you tried so far?" you ask them. "Oh, nothing. It's just not working."

They see the world as "thing works" and "thing doesn't work" and never stop to wonder, "why?"

Someone with logical intuition might first think, "Well, it was working earlier, what's changed since then?" Even if they possess none of the knowledge to fix the problem themselves, they may be able to come up with some theories as to why it's not working.

I don't know why you're getting downvoted. You can teach anybody to program, but they're still going to struggle if they don't know how to logically approach issues and software design tasks. I've seen people struggle and move on to other things because of this.

Start with a good pre-nup.

Consider starting with theory.

I would start by doing simple calculator in scheme, then maybe tryruby.org and then maybe analysis of brainfuck/turing machine.

Try Go, it is a nice language for making small tools that can simplify and automate your life. I wouldn't touch JS ecosystem with a ten foot pole, it only leaves you with frustration.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact