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.
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 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.
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 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.
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.
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
There is a good, free book on Python that teaches practical skills for automating tasks. I sometimes recommend it to people, because it's immediately practical.
After that, you could try Flask or Django (Python web frameworks) and gradually introduce HTML, CSS, and JS.
There are also a couple of online courses that might be useful. I've only watched part of the first one -- it was good.
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.
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.
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".
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.
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 realise this is a crazy idea but have you tried asking what she's interested in?
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.
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.
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
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. ))
Having just finished 1.5 years working at a code school, here's my "link dump" of stuff that helped a lot of people.
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.
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.
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.
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.
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.
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.
You might want to take a look at "How to Teach Programming".
Bonus: A talk entitled "What We Actually Know About Software Development, and Why We Believe It's True":
Start with a good pre-nup.
teach him about frontends: the design(html, css).
dont force her to do something she doesnt what.
thats bad idea.
Always remember effective learning can be achieved by doing something like small project and stuff.
dont confuse her to make or clone something big. it's really hard to discern.
tell her about good learning trick like spaced repetition
Talking from personal experience here, with my wife now being able to create websites on her own after 6-8 months of learning (some weeks part time, some weeks full time, and some weeks no time :) ).
Any programmer will have to eventually learn HTML & CSS anyway, so that's a good place to start.
My wife started with https://www.codecademy.com/, which she found incredibly helpful, some youtube videos like others creating websites, and practical one on one sessions with me on doing actual projects. The best learning time was when she created a website by herself, for example in 1 week, and then we did it again together (mostly me) in 1 day.
Be prepared to let her do her own way, not force her into best practices, and especially don't nag her about not learning/doing anything, that will most likely turn her away from programming when it's hard.
Also be prepared to try and explain things which we take for granted after years of familiarity.
Congrats to both of you for this decision, I'm sure she'll do great!
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.