
Ask HN: I'm teaching my wife to code. What direction should we go? - dotdi
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&#x2F;or school. She has no prior CS experience and has a Bachelor&#x27;s in French and Norwegian Literature.<p>I was leaning towards starting her journey with Python, since (1) it&#x27;s pretty popular and can be used in many different contexts (backend, data analysis, ML, etc.), it&#x27;s (2) quite beginner friendly, with great learning resources and (3) I have prior experience with it.<p>Lately, however, I started wondering if I shouldn&#x27;t push her towards front-end, i.e. HTML&#x2F;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).<p>We are located in Germany, and, as far as I&#x27;ve seen, there are many more freelance jobs looking for JS&#x2F;Angular&#x2F;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 &quot;on the team&quot; for the beginning.<p>Does anybody have any experiences worth sharing? Any pointers, valuable lessons, must-do things?
======
FroshKiller
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.

~~~
rambossa
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.

------
turingcompeteme
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.

~~~
dotdi
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.

------
eladrin201
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.

~~~
Amorymeltzer
>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.

------
mittermayr
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.

------
kuon
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.

~~~
z5h
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.

------
craig1f
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/](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.

~~~
dotdi
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.

------
no1youknowz
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.

------
maxencecornet
>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

~~~
dotdi
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.

------
JoshMnem
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/](http://automatetheboringstuff.com/)

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

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

[4] [https://www.edx.org/course/introduction-computer-science-
mit...](https://www.edx.org/course/introduction-computer-science-
mitx-6-00-1x-11)

[5] [https://www.edx.org/course/cs50s-introduction-computer-
scien...](https://www.edx.org/course/cs50s-introduction-computer-science-
harvardx-cs50x)

------
philip1209
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.

------
jfv
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.

~~~
lettergram
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"

------
justaguyhere
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.

------
pcx
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.

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

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

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

~~~
beojan
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.

~~~
peterhi
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

------
leon_sbt
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.

------
bitwize
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.

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

------
tex0
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.

~~~
dotdi
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.

------
Cu3PO42
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.

------
neilsimp1
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.

------
Jugurtha
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/](http://third-bit.com/teaching/) [1]:
[https://vimeo.com/9270320](https://vimeo.com/9270320)

------
hackermailman
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

~~~
dotdi
Thanks, that's something we will consider.

------
Sherxon9
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. ))

~~~
dotdi
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.

------
bhollan
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!

[https://beehollander.wordpress.com/2018/03/12/helping-
over-3...](https://beehollander.wordpress.com/2018/03/12/helping-
over-3500-students-learning-to-code/)

~~~
dotdi
Awesome, thanks!

------
davidkuhta
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.

[http://railsgirls.com/munich2018.html](http://railsgirls.com/munich2018.html)

~~~
dotdi
How much previous knowledge did your SO have?

------
simonbarker87
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.

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

------
ojhughes
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

------
0x4f3759df
>>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.

------
cimmanom
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.

------
quakenul
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 :)

------
NicoJuicy
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)

------
singularity2001
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.

~~~
nkrisc
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.

~~~
avenoir
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.

------
GnarfGnarf
Start with a good pre-nup.

------
cup-of-tea
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".

~~~
dotdi
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.

~~~
cup-of-tea
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.

------
9889095r3jh
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.

~~~
dotdi
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.

------
perfmode
Consider starting with theory.

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

------
type0
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.

