Ask HN: Why did you quit learning programming?
Maybe, HN is not the best place for this question, but something tells me there will be interesting stories behind it.
I saw a lot of people I knew start learning how to program. They did it in all sorts of ways: free courses, paid courses, books, schools, etc.
Almost all of them quit within weeks or months.
An interesting observation was to hear them describing why they quit too abstractly, too broadly. "I didn't like it." "Couldn't make the time to learn." "Too hard." Things like that.
I've always felt that there's so much more behind those answers. So much we could learn about why programming is so hard to enter, apart from the inherent domain complexity.
What's your story, or that of someone you've seen quit?
59 comments
[ 2.0 ms ] story [ 126 ms ] threadWhen I was studying, we would have nine guys for each one girl learning CS, and it was fairly hard for the girls to fit in terms of actually learning things. Some of them would show real interest for the subject, but they were being more or less alienated when it came to working on projects in groups.
You clearly paraphrased her quote beyond recognition.
You should, that isn’t OK. If she really said that, she’s an asshole. Fuck her.
> Average stripper salary $50k
> CS grads out here accruing $1m in 5 years
Ya I think she was just rationalizing her inability to complete her major...
"That's what autistic guys like you are."
...
As a great man once said "I'M A PEOPLE PERSON!!!"
What I have found more frustrating is learning something with longer feedback loops. That's kept me from doing hardware.
But I agree, this doesn't compare against things where there isn't a definite right answer.
Uhhh...wouldn't that be nice.
With programming it works (... or it doesn't). Of course, there are abstractions and clean ways to write a program so in the end I think my prior experience in writing has benefitted me in programming.
Where are we from a feedback loop of a woodworker where when he cuts something wrong he can see it while doing the cut? I have to wait for a 2 to 30min build with end to end testing and deployment to hope that I'm right then two weeks from now a person with Opera starts using the application and proves that I was wrong.
Math is a prereq not because we use it, but because people who don't have the patience for high school math won't have the patience to learn programming.
As a "mentor" for some of my friends, I feel like it's a failure on my side, since I wasn't able to quickly show them what you can really do with programming.
I'll add on here that it's not like my classmates were using esoteric learning languages like Racket (god bless the poor souls at NU), they were using Python, with plenty of helpful resources online and more experienced classmates. However, Python too has its quirks and reliance on perhaps unfamiliar concepts like packages (which means a new student will also need to learn how to use pip, why they don't need to use pip for the std library, etc). It's probably because of this that things inevitably get lost in the wayside, because you need to teach so much at once and the knowledge doesn't neatly project onto a linear timeline. It really is more similar to learning a new language, but add in some bootstrapping issues, as well as the fact that if your grammar is wrong or if you misspelled something then your entire construction is unintelligible it's not often obvious why.
There are a lot of reasons for that; it would actually be kind of tough to highlight just one. Here are some:
- I was in a terrible learning environment at "home" (the dorms where I lived) due in part to the way I was raised by an extrovert family to be a sociable introvert. They didn't really know better, and so I was essentially taught to constantly overstimulate myself and burn out. I was not only getting caught up in tons of social stuff, but I was also nominated to be the dorm floor leader and took on additional volunteer group-oriented duties.
- I was raised with fundamentalist religious beliefs, and the various little points of belief worked well in concert with my avoidance urges. Like I'd avoid homework until Saturday night, and then oh--it's 9 p.m., this'll take at least 6 hours, and I don't study on Sundays, so there's no hope.
- At the time I had some undiagnosed mental illness, which I only found out about and addressed later.
- I had a part-time job in IT that I was really good at, and I ended up compensating for the issues in self-image (or whatever) by pouring my heart into that job. I would go home having overworked myself, and after doing that I definitely had a headache and no bandwidth for homework.
- My learning style was completely different from the teaching style of my professors. In fact it was the complete reverse: Procedural outside-in for business impact on my end, vs. first principles-up for theoretical play on their end. I later realized that I would have had more success by reading the textbooks literally backwards.
(If your learning style is different, every single sentence, conversation, or email is potentially coming at your cognitive blind spots, and thus potentially very frustrating--not many people know this. My professors even tried to convince me that CS might not be a good fit given my goals, but I literally couldn't understand their reasoning and thought they were pretty ignorant for not seeing things my way!)
- Java, the language of our CS department, was completely new to me, it was generally new and hot, but I naturally work better with underdog languages due to the random configuration of my psychology from birth or near-birth. I would have done better to negotiate with professors to use something else that was older and way worse, but I had no idea that might have been an option, nor did I even know that was a differentiating psychology thing in general.
Anyway, the overall event of quitting learning programming was completely shattering to my belief in myself, and even my belief that I could learn to code.
I didn't go back to serious programming until something like 7 years had passed, and then only started by dipping my toes in via small edits here and there, and some templating languages like TXP Tags for Textpattern CMS. Up to that point, any time I needed to program I would either write a dead simple script, or use some orthogonal app (MMB/Multimedia Builder, Flash, etc.), or find some solution off-the-shelf.
This all still makes me very sad because I was very good at programming in Basic/Pascal/C/C++ in HS, and I could write system scripts all day long, and I basically stopped all of that.
On the bright side, in my last working day as a CS student, I walked into another department, told them I was into computers but looking to quit CS, and within minutes I had a key to a professor's office with a login on their high-end graphics workstation, and a catalog in my lap to order whatever Dell server I wanted for my own use. Thank you liberal arts! :-)
That's the best I can do for now, hope it's been worth sharing...
In retrospect, I think the main problem was motivation, in multiple ways. It was during a period of "I don't really know what to do, so maybe I'll try to learn to program, or maybe learn a little Korean, or what if I got into...", where I was exploring broadly, but without clear goals or much practice learning on my own. At the time, I didn't even know what I wanted to major in! Because there wasn't much real interest backing the initial exploration, I backed out when I ran into some resistance and it required a little more effort, and I instead moved on to the next thing (spoiler alert: I also didn't learn Korean). I wasn't very good at putting in the work it takes to learn hard things, and I hadn't had a lot of practice studying, though I somehow passed my freshman year classes without good study skills.
I think that starting with the broad, amorphous goal of "learn to program" didn't include tangible goals that I think would have helped motivate 19-year old me, like building an actual website, writing a useful app, or making a basic game. As another comment says, multiplying numbers for the sake of multiplying numbers wasn’t enough. Coupled with the aversion to putting in the work, I don't think there was enough to motivate me to keep going.
When people ask me about learning to code, I try to think of ways that they can leverage their interests — maybe if you love cooking, you can learn enough to build a very basic cooking app. You'll run into some tough spots, and having that inspiration can help you get through them, hopefully until you're well practiced in getting through those tough spots. Better yet, work through it with other people and get through them together.
When learning to program later, a large part of the motivation was to make a career shift, and it was much easier to direct my energy and focus, aided by a little more maturity and practice learning as well. There was nothing quite like fielding customer support calls to help motivate me to study after work, and I stuck with it much better.
The joke is truly on me, because I now really enjoy both programming and learning.
I think this is key, as it's fundamental to learning anything.
Some folks "learn to learn", and that's all well and good.
Most folks, however, learn to do. They have some task they want done, so they learn what they need to in order to do that task. We can exempt folks taking courses solely to meet a degree requirement, but that's also a goal oriented learning experience. "Need to pass to graduate. Need high grade for GPA, but that doesn't mean I actually care to learn Psychology 101."
Aimless learning is rarely rewarding. While I was fascinated at a general level with computers, once I learned the basics, pretty much everything else was self-taught with some goal in mind.
With me, I was always writing crummy little games. Games present all sorts of interesting implementation problems. And there's no better way to learn than to write something really badly! My friend and I in college were trying to do our own Roguelike, and went through two platforms, and four languages, rewriting and standing on the shoulders of, well, not giants, but the ruined wasteland of our previous attempts each time. Learned a lot.
Also, there's nothing wrong with someone learning something to then find out they don't like it. Computers are awful, horrible creations and demand a certain mindset to wrangle, and they are not for everyone to be sure.
The first time you code yourself into a corner is an interesting experience. It can be frustrating but it's almost always lead me to big realizations about larger concepts around/about how to design a program.
- Very little initial benefit, especially depending which language you choose.
- Small mistakes are not forgiven by the computer, which is demoralizing.
- Very non-intuitive feedback loops and error messages
- A semi-requirement of going down rabbit holes at the drop of a hat (I wanna write python to download a csv, wait now what's a virtual environment??)
- learning and suggestions from a friend in industry will give you a very direction that's not always helpful ("ok now install git")
- abstraction is often unintuitive, and learning programming requires some heavy compartmentalization early on, or you'll be stuck trying to learn cpu architecture fairly quickly
- the puzzle isn't fun, and if programming isn't somewhat fun or interesting to someone, it's a hard sell
Then some years later, I found that there was data over here that I needed over there, and that writing a program was going to be a lot more efficient that printing it out and typing it back in. I taught myself assembler, and went on from there.
In math, we introduce functions all the time. I define f(x) to be whatever is handy for a particular problem, and then I work with f.
By any chance, do these people have much of a math background?
Most students really dislike anything that appears arbitrary which I think plays into this. One pre-med student I knew despised math after being taught 0!=1 because it seemed seemed completely made up to him and broke established rules.
Part of the onus falls on instructor to clear up areas like this (e.g. explain the cardinality of the set containing just the empty set is 1, 0!=1 allows for many formulas to be expressed tersely, etc). The other component of this is that the students who dislike ambiguity self select out of the program.
That's not what 0!=1 means in math, the ! means factorial, which is to multiply by decreasing positive integers. Here's the definition:
n! = n x (n -1) x (n - 2) x . . . x 2 x 1
So, for people starting to learn calculus/math, being told that 0!=1 makes no sense
Myself, despite being really good at coding, I don't much like it. But I do like solving problems and coding is a particularly great tool for that. Imagine a toolbox that has every tool and the only bound is the time you're willing to put into using the tools.
Name one thing that hasn't already been done to such a degree that it wouldn't be worth the time for an individual to work on with their own resources.
> There wouldn't be any jobs in software development if that was true, would there?
If the economy was only about supply and demand, that might be sound. The economy, however, is not a closed thermodynamic system, but an open one. Marketers know they can create artificial demand by convincing people to buy or subscribe to things they don't actually need. Easy money from venture capital creates business opportunities that wouldn't otherwise be viable or sensible but can line people's pockets in the meantime. Human attention and relevance churns, so every year there's another version of essentially the same things that have already been made because eventually the old thing will go out of style. And finally, there's business owners and executives who simply don't know better, are living in the past, and think that they need to write more of their own software than they actually do.
To an extent, I agree with you, but I have a beef with our industry perpetuating the idea that we can all strike it rich. It's reminiscent of the narrative that everyone has a chance to can come to Hollywood and be a star; after all, there's tons of movies and shows that haven't been made yet. It's certainly not untrue, but it's not that simple. Someone who wants to build the next "thing", almost no matter the scale, will have competition with more resources and financial backing, and the likelihood that their app in particular will take off is very, very slim.
"All good music has been already composed..." LOL
So they start teaching you about IDEs, git, tests, docker and lots of stuff that is completely unrelated to learn how to program.
Think about it. Why should someone learn about testing code if they don't even know how to code?
Sometimes, all people need is to learn enough programming to make their life easier, like automating Excel spreadsheet stuff or PDF stuff.
Unfortunately, there is nobody to teach things like that.
No no no no no. You don't just throw tools at people who may or may not have had a background in software development. Yes, they may be able to pick up the set of skills to build a React app, but do they have the skills to be good software engineers? Do they know what's going on under the hood when a React app is being built?
I'm not totally against this method of teaching, but I think there's a perverse incentive to sell these types of courses to absolute beginners when in reality they should be marketed to people who at least know how to program.
This stuff results in a market flooded with candidates who can't do fizzbuzz, allegedly. I seem to keep hearing that there's "tons of jobs" but not enough talented candidates, and though I am skeptical of this narrative, if the narrative were true, the industry itself has no qualms in perpetuating the cycle.
I worked in IT for a while and picked up some programming but didn't do much at work for a long time. Then I started going to college at nights and on weekends and now I am a programmer.
I don't have a natural aptitude for this stuff. If it takes you 1x of grinding to learn some programming thing, it takes me 4x. Although aspects of it can be enjoyable, like when a whole project neatly comes together, or when someone gives me money for the app I made, I find it to be quite a soulless and artless "craft".
Nonetheless, I fell for the learn to code meme, I'm pretty invested at this point, I'm not half bad at it, I need some money, and this is the only lucrative skill I have, so I can't quit now.
Similarly, don't feel sorry for the wastewater treatment plant worker. He's not doing it because he's passionate about cleaning up your shit, he's doing it for the money, because he's passionate about supporting his family.
These two things do not necessarily map neatly into each other.
Could it be that people had an expectation to build a working product/service, and not learn 2's complement, operator precedence and whatnot?