I have always struggled with how to advise my friends & family on this path of learning. It seems like everyone wants to be a WFH developer these days, but I don't know how to enable them to succeed on that path. "Go build something you want to build!" is something I keep reiterating (as does this article). But most don't seem to be interested in that for whatever reason (presumably because its fucking hard).
Maybe I should just leave it at that - I am getting to a point where if someone doesn't have the willpower to go burn a whole weekend on a pile of bullshit that won't even compile (i.e. because they really want to solve some problem), then maybe they won't have the necessary pain tolerance required to truly master the skillset.
I have never met a programmer I respected skill-wise that wouldn't randomly spend a weekend locked in a room solving an esoteric problem they felt they had to solve (for no reason). Over the Christmas holidays everyone at my company writes PoCs or hobby projects, being glad to have some free time away from paid programming in order to enjoy recreational programming.
What I'm trying to get at is software engineering is an easy career if you're literally obsessed with it, and most software engineers are, or at least were at some point (it goes in cycles).
If you're not gonna do that, you simply can't assimilate the huge amount of knowledge needed to truly excel in even one facet of programming.
When non-tech folks ask me how to learn programming because they want "jump on the money train", I ask them if they ever take the initiative to solve a problem with programming. You don't have to work in tech to do this. For example:
Work in an office writing documents and making spreadsheets? Have you ever simplified your job by writing a Word or Excel Macro?
Own a smart TV? Have you dug into its features until you know them backwards and forwards and can program it to (metaphorically) sing and dance on command?
Have you connected multiple things in your house together so you can control them from your phone, just because you could?
These are all examples of taking the initiative AND having the curiosity to dig into technical problems, and implement solutions. If you are like this, you will likely do well in tech and really enjoy it. If you DON'T have the tendency to do these sorts of things, you are probably going to have a bad time.
> learn programming because they want "jump on the money train"
I think this is the best predictor of poor outcome in the field. The devs I've seen that chose the field for the money typically didn't last long and did everything they could to get into a non-technical position (often management). And then, unsurprisingly, fared poorly there as well.
I often see STEM pitched as a way to make money... And really the only people making money out of it are the institution cashing the first-year tuitions checks before they drop out. And that’s not even touching the predatory ISA that bootcamps offer…
Jm2c but I'm a great developer (I think) but I'm a terrible tech consumer. I have issues with smartphones most of my peers do not and I hate doing smart things at home.
I would also suggest that it's a matter of having an engineeristis attitude (analyzing problems and finding solutions) more than the topic itself.
>or at least were at some point (it goes in cycles)
Indeed. And the periods in which I can be obsessed seem to be increasingly less common as I get older, but every now and then I get bitten and just have to bang it out.
You can be a great engineer and not need to do any recreational programming.
The thought that some devs are more respectable skill-wise because they hack in their free time is short sighted.
You literally have 8 hours a day to experiment and try all you want, everyday you have the opportunity to learn, hone your skills and experiment and good companies actually have days dedicated to experimenting.
Obviously you can't get great at this job if you don't bang your head on problems for days, but I fail to see that's a quality of recreational programming.
This “you gotta program all day every day or else you are unfit for it”-attitude is incredibly toxic and harmful. No other profession has this. No dentist gets told he gotta setup a practice in his garden shed to practice pulling teeth, or else hell be a horrible dentist. No, doing job for 40 hours a week is enough to be one.
I agree on this, but I believe the comment was aimed more at the "Tinker-Attitude" that many STEM-People have.
And I believe many other professions have this to an extend: I'd imagine that many journalists and authors enjoy reading in their spare time. Every mechanic I know has a cellar full of half-finished machines he fiddles with in the evening.
I don't have the energy to code on private projects for eight hours after eight hours of coding at work (besides occasionally enjoying not sitting in front of a monitor...).
But every once in a while it bites me to blow 10 hours of tinkering on some strange useless problem, like simulating Logic-Gates with basic arithmetic.
That was not prescriptive but descriptive. I don't program every day after work either, but I do sometimes get terribly addicted to a problem and work on it a great deal. I haven't met a good programmer that didn't have it, much like you don't mean someone who's properly good at anything they don't practice a great deal.
> No dentist gets told he gotta setup a practice in his garden shed to practice pulling teeth
This is a weird argument to me, the medical field has an even more unhealthy work/life balance than our field. They absolutely "practice at home" (obviously not through home surgery, but reading and so). Dentists have an easier time than most other medical professions, but every dentist I've met regardless had extremely good work ethic and frequently obsessed over his work.
You can absolutely work 40hrs a week and be a good engineer business-wise. However, most people who are remembered for their contributions to a field (and weren't just in the right place at the right time) dedicated a large part of their life to it. That includes writers, poets, musicians, doctors, anything.. to quote old Onion videos: are tests biased against students who just don't give a shit?
It is very common for professional athletes and for anyone who wants to live off their art (painters, musicians, writers, etc). Most academic types I know are like that too.
There are plenty of programming jobs where 40hs a week is enough and you get paid a good salary.
Now, if you want to join a FAANG, that's a different story. But no one wins a Grammy by playing exclusively in weddings either.
You can show people the door, but they have to walk through it. I learned programming, and a bunch of other stuff later in life (now 39). They all have the same process - you decide you want to do it, and you start doing it. You will absolutely fail hard and regularly at it. You'll pick the wrong course or book or language or whatever, but that's all part of the process. If people see you doing the work and are able, they'll help you out (ideally, not IME).
In a way its kind of nice to get started with something new, because you don't need a plan at first. You just start kind of doing it, and then when you take breaks, you figure out the plan. Its amazing how quickly you can pick things up once you get into the habit of doing it very regularly. That initial hump is always, ALWAYS a huge pain, but there's no escaping it. Failing and flailing for that initial period is how you learn, not how you fail.
I feel like I have a reasonably good track record of helping people get into tech (and was myself helped) and I'd note two things I've found very helpful:
1. It is very useful to let people know that the first ~500 hours of programming are the worst (not unusual for hard skills). I've seen now successful developers reduced to scream crying by the feelings lack of agency and overwhelming complexity during this period. Knowing it gets better can help them push through this phase.
2. Many people capable of being good developers respond badly to "Go build something you want to build!" because they don't actually want to build things, or the things they want to build are too outside their skill range and they feel disempowered. Giving someone a list of projects to do and textbooks to work through can be much more effective for certain people (like myself!).
Another way to handle 1.) is to let people modify the work of a master and build on their sholders to do fun stuff. I'd already "learned" a few languages (commodore basic, c, pre 98c++, and x86asm) well enough to do toy problems, but when my folks bought me quake I found it had a compiler and all the game logic in quakeC. I played the game a good bit but quickly it became about creating weird modifications, odd weapons shoggoths as pets etc. That exposed me to idiomatic code written by professionals, John Carmack presumably among them, while letting me skip everything between toy program or interrupt handler and using a game engine.
Code spells, a game on steam has some of that benefit, but nothing I jave seen since has been quite as accessible as quakeC
> But I had enjoyed working on the hard projects I'd encountered in my programing class back in high school. They were challenges I wanted to overcome. I changed my major and dove into college CS courses, which were full of hard problems -- but hard problems that I wanted to solve. I didn't mind being frustrated for an entire semester one year, working in assembly language and JCL, because I wanted to solve the puzzles.
> Maybe this is what people mean when they tell us to "find our passion", but that phrase seems pretty abstract to me. Maybe instead we should encourage people to find the hard problems they like to work on. Which problems do you want to keep working on, even when they turn out to be harder than you expected? Which kinds of frustration do you enjoy, or at least are willing to endure while you figure things out? Answers to these very practical questions might help you find a place where you can build an interesting and rewarding life.
> I realize that "Find your passion" makes for a more compelling motivational poster than "What hard problems do you enjoy working on?" (and even that's a lot better than "What kind of pain are you willing to endure?"), but it might give some people a more realistic way to approach finding their life's work.
---
A lot of people don't have the pain tolerance for the "this isn't fun" part of software development that is necessary to get past certain plateaus of skill.
It's like exercise. Everyone wants to be fit, but very few are willing to put out the sustained effort to get fit. There are no shortcuts, either. You can't pretend to be fit, you can't buy it.
Reddit has a bunch of posts where people will document their path to become a developer. Rarely do I see them go directly to building something they want to build.
It’s mostly people taking online courses and building the projects in those courses. They’ll do a few different courses and build up maybe 10-15 smaller projects before tackling something they want to build.
I've attempted to teach multiple family members/friends over the years "how to code", and they give up almost immediately. They "just don't get it", and I'd argue one needs to seriously find enjoyment in building things, and knowing how long things can take, to get started.
I'm not trying to level this against your friends and family, just an observation that I've been meaning to share, spurred by "just don't get it":
When I was in community college I had to take "Critical Thinking" as a pre-req for Symbolic Logic.
We spent the first 1/3 of the class, 8 weeks, analyzing truth statements, basically and, or and not. I was bored to tears, but attendance was mandatory, so I got to see how people absolutely struggled with this, and "just didn't get it". The average score on the mid-term covering that was a low D after 8 weeks of (excruciating for me) examples. I finished in <15 minutes and got 100%.
When you are in a bubble of people who work in engineering fields, especially in tech where logic is fundamental, I think it's easy to think that logic comes naturally to everybody, but it's far from ubiquitous and reading on here it sometimes feels like some people just don't realize this, especially those deep in tech.
Sometimes it's hard for engineers. In college, I majored in Computer Science, and for an elective, I took Electronics for non-EE majors. The first half of the course was analog electronics which I struggled with, but everyone else appeared to be following along fine. It was the second half of the class, with digital electronics, where things flipped. Students would struggle with "5V is a 1? 5V isn't 1V! What's going on?" while for me it was, "yeah, yeah, I know this already ... "
People want to learn the guitar|piano|violin, until they realize the amount of work it takes.
People want to get fit and jacked, until they realize the amount of work it takes.
People want to be a lawyer/doctor/engineer, until they realize the amount of work it takes.
Or they realize that they just don't really like it.
Programming isn't any different. One needs a particular mindset, and a level of patience to deal with debugging. It's not for everyone, and that's fine.
I know it's a pithy saying, but is it true? People tend to report the actual lifting of the weights as pretty pleasurable. It's the whole supporting lifestyle grind of consistently making it to the gym, only and always eating food whose ingredients you have weighed, etc. where you lose most people.
As part of the right routine and exercises, lifting weights can be very pleasant. Personally, I love doing a good set of dumbbell rows.
What keeps me (and I think a lot of people) from getting ripped is the sheer consistency needed. Doing anything that isn't strictly necessary for 1-2 hours 5-6 days per week every week for years is extremely difficult imo. I get knocked off course very easily, sometimes for months at a time, and I have yet to find a solution for this.
It's a pithy saying. It's basically shorthand for: "nobody wants to put in the work and adjust their lifestyle to achieve that goal of being ripped". But I wouldn't say doing 3x or 5x sets of lifting heavy weights ever is "fun"- you just get used to it.
Only caveat is, and this is where I feel bad, if the person hasn't learned something new in a very long time, they forget what it feels like to change, or even become convinced that they can't. It can be hard to convince someone that no, you don't need to have aptitude or be any good at it after a few days, weeks, even months. You just need to keep doing it. As long as the goal is realistic, you'll succeed. Whether you are more or less "talented" than someone else affects the timeline (a little) but you are going to the same place (again, realistic goals).
Applies to learning foreign languages too. I've spoken to many people that want to "learn Spanish" without having a clue that it's a huge grind to get to basic competency.
> I have always struggled with how to advise my friends & family on this path of learning. It seems like everyone wants to be a WFH developer these days, but I don't know how to enable them to succeed on that path.
The best advice is to get a proper CS or Engineering degree honnestly.
Maybe I should just leave it at that - I am getting to a point where if someone doesn't have the willpower to go burn a whole weekend on a pile of bullshit that won't even compile (i.e. because they really want to solve some problem), then maybe they won't have the necessary pain tolerance required to truly master the skillset.