Hacker News new | past | comments | ask | show | jobs | submit login
I self-learned to code at 30 (kaapi.team)
160 points by sujdes on March 17, 2021 | hide | past | favorite | 144 comments



I started at 37 and got my first full time job a couple of months after I turned 38. I was a lawyer and hated it - now I love going to work every day.

But it wasn't easy. I was working full time in a demanding profession and I'm married with two kids under 5 years old. So basically I spent every free moment I had working on learning HTML/CSS/JavaScript. If my kids were asleep, I was coding. I basically had to burn the candle at both ends to make a career change happen but it's been worth totally worth it.

I got hired to write React but I work for a very small company so we all wear a lot of hats around here. Since I started in June of 2020, I've already learned Java and now I'm working on a new ML/AI project (so Python, here I come).

My only regret is that I didn't do this 10 years earlier.


I always coded since I'm 12 (softwares on AOL Chatrooms for those who remember!) but after my high school diploma, I decided I wanted to explore arts, especially music and cinema. I thought I was spending way too much time on screen and I didn't want to turn my passion to a job.

I got a master's degree in cinema, a few jobs in the industry but I hated the atmosphere there. I still love everything related to arts but at 30, I thought I will go back to what I love: coding (even if I was terrible at it, just a script kiddie with a few personal projects).

After a few trainings, I'm working on ML/AI projects at 33 years old, doing what I love.

I don't regret doing different things during my 20s. All my studies and jobs made me learn so many things, I would not be the same as today if I didn't take this path or If I went studying CS right after high school.

Don't regret doing this only now. You built a family and I'm pretty sure you have learned a lot during your career as lawyer even if you hated it.


> My only regret is that I didn't do this 10 years earlier.

It's not a bad thing to have a professional career before programming. I'd imagine that you'll have developed some non-technical skills that some developers lack, to be blunt about it.


Not only that, but developing websites 10 years ago kinda sucked. Browsers were wildly inconsistent, it was common to have another CSS stylesheet for IE only, JS was so fragmented that jQuery was an instant hit.

On the other hand pages were much smaller, you'd rely on HTML much more than on JS which meant you'd rarely be working with bundlers and such.

But still, if you take the state of the web for what it is, the sheer productivity with today's tools is unparalleled. I think the best time to start coding is tomorrow.


How difficult was it to transition into the job market? I have always wanted to make the jump (in finance & accounting now) but the most daunting thing seems like convincing someone to hire you.


That is the hardest part. Certain professions give a kind of boost. If you switch from being a lawyer or some type of engineering background managers will assume you are smart. Much harder if you move from being a waiter or actor where the assumption may go the other way.


I’ve known a lot of people that had a hard time breaking into tech, even very “smart” highly educated people. The key is persistence. If someone tells you that you can’t code because you were a waiter or an actor, they weren’t someone you wanted to work for anyway.


Your first point is correct. It is hard to break into tech. For almost anyone. That does not make the fact that having a background that on paper makes one appear "smarter" makes it easier to break into tech any less true.

Your second point is also true. But when getting your first job is the hardest part many people would rather do 3 months to a year under someone they wouldnt want to work for and then move to a better role than continue being a waiter or actor for the rest of their career while they hold out for a first job that is ideal.

I agree that persistence is the key but it is easier for some backgrounds than others.


It's good to see someone on the same path. I was a corporate lawyer for a couple years before dedicating all my time to learning programming. I got really excited with it and got back to university to get a compsci degree. I'm on my second year and I still love every minute I spend learning algorithms and other technologies.


Congrats on the transition! I'm making a similar transition but from management back to individual contributor and also changing tech stacks.


That puts things into perspective. I sometimes worry about my ability to become a software engineer just because I never finished my degree and I'm in my late 20's.

But I already know java fairly well and a few other languages like python as well, maybe its just a matter of making some more side projects and selling myself better.


As someone in my late twenties who started a little later than the people who went through CS in college w/ internships, etc., you can do it!

It takes a bunch of persistence - just keep chugging at applications and learning.

If you don't jibe well with the leetcode interviews (I certainly don't, I just don't do well and I think it has to do with my anxiety), aim for smaller companies or really just any that ends up having a laxer interview process. They do exist though!

I'm convinced the leetcode stuff selects for something largely orthogonal to ability. My major was practically the same as CS, if not harder in many ways (EE) - I can understand any of the concepts in their full math and theory, etc., I generally just don't have them at at my fingertips to perform on demand, aside from basics. This stuff belongs in books to be referenced as needed.


Do they use you as GC too? ;)


This part stood out to me:

> Every weekday - 1 hour post work

> Every weekend - 4 hours on Saturday and Sunday each

> Done over 4.5 months, so total = 234 hours

As an almost-40-year-old that has minor coding experience (but wants to do / learn more) I find that time is the component that's the most difficult to overcome. I have a wife, a 5 year old, a house... all of which require time. Getting 4 hours _per day_ on a Saturday / Sunday combination to be able to focus is nearly impossible for me unless I wanted to completely forgo spending time with my wife and son (and even then it might not be possible due to responsibilities as a parent / home owner).

On the flip side of this discussion: his breakdown and explanation of the walls you hit and the feeling of excitement an elation when you pass them really stuck out to me as something not often talked about enough. Learning is a commitment and requires dedication. The author did (IMO) an amazing job talking about his experience with that and how he worked to overcome those obstacles.


Very similar experience here too: I'm not a full time dev, which is probably even worse,as I have to switch between very different contexts throughout the day, which is draining. After work I have two options,either forgo time with family,which isn't sustainable,or try to work late evenings/nights on a side project. It kills every drop of motivation that is left there when trying to debug that code at 1am. Weekends are the same: I can't tell my family I'll be going through some code for 5 hours,while you sit there and keep yourselves busy.


I learned at 27 and it was difficult, even without children. Working all day and then spending 5 hours after work debugging and writing code is very taxing. I have sympathy for this viewpoint but it doesn't seem any different to learning any skill after a certain age. Unfortunately you either can or you can't find a way around the time constraints. I know there's lots of hobbies I've abandoned for the same reason.


> "even without children." ... "but it doesn't seem any different to learning any skill after a certain age"

This couldn't be farther from the truth. There is a vast difference between being shot from work and sitting down for a long stretch of time by yourself to self-study and being shot from work and sitting down for a long stretch of time while also being constantly interrupted by the responsibilities you have to care physically and emotionally for another set of human beings.


Yeah of course but he's right about the reality that you can either find some way to make time or move on and there isn't much other solution.


Time is 100% the hardest part. I advise people making the jump to spend 1 hour a day over 90 days doing a Udemy course or something similar in JavaScript. If you can force yourself to make that time and make it a habit then you might be a good fit for a coding bootcamp or deciding to make a more dedicated effort.

But most will never be able to spend 1 hour or more a day learning a new skill because its hard to learn after you work all day.


The thing is, even if you just spend 1 hour every weekday and then whatever you happen to have available on weekends (even if it's nothing), those hours are going to add up.

The most important thing is that you code daily on something meaningful to you. Even finding an hour a day can be difficult, but should be doable for anyone.


This is important. With a busy family life, you will never find 4-8 hours regularly to sit down and study solidly.

What you're quite likely to have is half an hour every day, and if you do some study for a short amount of time daily, the hours will very quickly add up


100% Agree


My experience with learning how to code, is just find some good guide, follow it TO BUILD A REAL USABLE PRODUCT.

Learning by making a real usable product is the most important part here, other kinds of learning didn't work for me.

P/S: This is different from learning by project. Project mostly is for fun, not a real usable product.


This is 100% the key. I learned to code in my 30s, but I had been trying to learn for a dozen years before that and nothing stuck. Until I had a product I absolutely wanted (or had) to build, it was impossible for me to have the motivation to learn and have the concepts stick. But once I had that product in mind, everything fell into place.


I like this nice list for finding those sorts of tutorials https://github.com/tuvtran/project-based-learning


Yep. I can't even count how many times I've lost steam trying to learn something by doing tutorial projects where you're making lists of vegetables and otherwise building nonsense. It's like trying to learn guitar and being given "Mary had a Little Lamb" instead of some melody you actually like.


This.

I developed a .Net web application for a company 20 years that is still going strong (better than ever and now with multiple developers). I didn’t know how to code back then but bought two good books and their concepts are the basis for almost everything in the app.

Now I am trying to learn Python/Django. I have tried doing the Udemy courses and going through building a “blog” and “real estate” apps. They are fine but boring and I lost interest. Then I remembered what I did 20 years ago and am now building a real product based on what I am learning in a couple of good books. It couldn’t be going better.


This is my advice to anyone learning to code or learning a new tool. If you cannot build something that interests you, you're going to have a hard time building something for a paycheck.


I've started learning guitar more seriously, and I'm convinced this is the fastest way to learn. Set a semi-ambitious goal of something you can show others, and use deliberate practice to get there.

It'll take longer than you want, but you'll get better much faster than you think you can.


I agree. I learned to code in my 20s but I felt real confidence only after building multiple products that have real paying customers or products that other web developers use to build their products with paying customers. After building a dozen products, I believe that I can learn and build any feature within technically possible. This was not the case after coding parts of application or going through tutorials, but became the case after building entire applications from scratch for real customers.

EDIT: typos


> follow it TO BUILD A REAL USABLE PRODUCT

And what would be a "real usable product" for you in that context? It's a genuine question, since I'm someone who would like to build engaging online courses.

I do have a Python course online although it teaches concepts from small examples..


A real usable product consists of many things you need to do for it to be deliverable and usable.

Hobby projects often don't take much account into production usage, somethings we called it "best practices".

In short, imagine your code is in real world usage, which has real user, instead of just "small examples" or project to learn only.

It's about mindset here that settle us to be really serious at what we're coding and thinking.

No joke, but testing in production is one of the braviest ways to learn, too.


> In short, imagine your code is in real world usage, which has real user, instead of just "small examples" or project to learn only.

So, for instance, something like starting from an idea (a "webforum for all my friends", or other usable example), designing the database, implementing authentication, implementing the frontend (html, css, js, etc.), then adding those small things and finally deploying to a webserver?

The thing I think I'm asking is what kind of topics would be good to motivate people to follow through? For instance, the webforum above could work for some while others would have other ideas. It would be hard to design a course around a moving target like that..

I hope I'm not boring you with my questions above, I'm mostly trying to understand your point because I've been thinking about designing interesting courses for people, but I wouldn't like to do another basic introductory course with small chapters and exercises as other 1000 courses out there..


I got it.

The point is, not trying to add too much at a time. Try adding one feature at a time, but make it production ready, stable, reliable. It's what make progress !


That's probably the best advice. I'd add to it: make sure it's something your passionate about. Bonus if you can get real users.


Most of the time, you'll surely get the goal if you're passionate about it ;)


Out of curiosity, why do you believe that the learning process is more pronounced with making a real usable product rather than a fun project ?


Because when you make a real usable product, you're not doing just for fun. You're making product for others to use and to be happy. It's the mindset that make them different.


Not a big fan of these survivorship bias blog posts. I've been fiddling with code since I was about 11 years old (ActionScript for Club Penguin cheat tools as well as some Visual Basic). I got pretty serious in High School and learned Java as well Python. I am now pretty comfortable in the web stack as well as C, but still do not have the confidence to become a developer. I don't get how people can spend roughly 3 months learning to code and make a career out of it. Surely they must be lacking in certain core areas of CS.

I get that these kinds of posts are meant to be motivational, "Anyone can do it! Hoorah!" type of thing, but it seems misleading.


In my opinion, it's not about knowing all the core areas of CS — it's about being OK with the unfamiliar. It's about being confident that if someone hands you a problem outside your comfort zone, you'll be able to search for and find the answers necessary to solve the problem.

I'm a senior engineer, but have never taken a CS class, and have never been able to get past page 1 of any programming book. Possessing knowledge isn't what makes me successful at my job. There is simply far too much knowledge required in this job, and my memory is too sketchy, for me to learn and retain all of it. What makes me successful is that (a) I have a good grasp of how to break projects down into little manageable tasks, and (b) I'm really good at Googling.

For this reason, I do believe that anyone can do it, where the "it" that is being "done" is thinking things through and looking up information, not understanding the ins-and-outs of algorithms and data structures and electronics.

What you're describing is the reason impostor syndrome is so prevalent in the tech industry. Because programming is such a tremendously deep area of study, there will always be people who know things you don't, and this can make one feel inadequate. We're raised to think that being an expert is the same thing as knowing lots of things. In the development world, being an expert is more about being comfortable with what you don't know.


I'm a 35 year veteran programmer, so I might not remember clearly, but I totally disagree with this. You will NEVER cover all the core areas of CS, there are too many. So, most developers specialize, somewhere. You can get pretty good at some core thing in 6 months and I give you permission to call yourself a programmer as soon as you have successfully built, and regularly use, something you wanted for yourself.


You are one of the few senior engineering leaders who think like this! And kudos to you! Wish I had talked to you in the earlier days of me struggling to learn


I support this kind of encouragement.

Please, if you've built something that you or someone else has used, you're a programmer/developer.

This field is so broad that I also feel like I don't know what I'm doing with 10+ years of experience. You will never learn/know everything and that's OK.


OK, so if I wrote a UI that a call center used to more easily allow staff to access different customer categories, and I also wrote a text analysis script to analyze and categorize customer feedback, I'm officially a programmer/developer?


Sounds like it to me!


Hard agree. I can include myself in the group of survivors. I was a military officer commanding tank units until my early 30 and I originally planned to move into the Army's ORSA program, which requires a quantitative background, so went back to school for Applied Mathematics, ended up falling in love with programming, and did a Master's in CS after discharging from the service and here I am years later doing fine. And I don't think I'm lacking in core CS knowledge, either.

But I'm not going to sit here and say "oh, anyone can just go back to school full time while also working full time and complete a grad program at a top ten CS school with a 4.0 GPA and triple their salary within five years." The reality is this world has been set up for people like me to succeed. You see all these posts here about how terrible the Leet Code experience is but I've been working through all of the problem sets in math textbooks for fun since I was 5. I love this stuff and wish I'd have discovered it sooner. My family didn't even own a computer when I was a kid and I had no idea this even existed as a possible career field. But I won spelling bees when I was a kid. I won a television quiz show and got a perfect SAT score. I live for intellectual challenges and love being tested.

If that describes you as well, then great, the knowledge economy is your oyster. But no, that doesn't mean anyone can do it. Even at an elite engineering school and in industry since, I've seen very smart people struggle tremendously through something I figured out in minutes.

Doesn't mean I'm some kind of great or special person. Thanks to spine injuries I suffered in the service, I can hardly get out of bed some days, and for 99% of human history, I'd have been discarded as a worthless piece of trash holding back the rest of the tribe and been thrown to the wolves. I'm just really, really lucky I was born now and not during most of human history.


There is very little overlap between computer science and workaday software development. Some analogies might be that an auto mechanic doesn't need a mechanical engineering degree, and a chef doesn't need a chemistry degree. Most software engineering work is skilled craftsmanship. You don't have to know much about the inner workings of a computer, or have the ability to invent (or even understand) efficient algorithms, in order to use the tools of the trade to construct something. Having the theoretical and academic background is helpful, opens a lot of doors, and is required in some challenging environments, but the vast majority of professional software developers don't need CS fundamentals to produce software.

I've got an academic CS background. I didn't learn much beyond what I'd already learned on my own, and the more advanced topics didn't stick because I didn't use any of them for the first decade or so of my career. Only a few jobs in the ensuing decades used any CS theory or advanced fundamentals. My bread-and-butter is web app development and devops, and I do believe anyone can learn to do that without a CS background. Especially in the current market where there are so many unfilled openings. There are plenty of small companies where a self-taught developer can thrive; not everyone needs to be a FAANG-level engineer.


I am not sure if it's a survival bias blog post, but the blogger is a businessman. No matter how much luck is involved, it still takes certain type of skills and character to do it well.

I was an 'aspiring' businessman, but I never was able to execute the hustles and do all the things that a businessman do to make a living at it. I never learned how to do that nor do I possess mental fortitude to do such things. I hardly can deal with stress or perform my adult responsibilities well enough. What makes me think I could take on such a challenge as this?

Luck can't pay much if any role if you don't have any business skills.

I still love the idea of being a businessman, though.


Heh heh! I like the idea of being in love with the idea of being a businessman! :)

I wish I could tell you I have mental fortitude + hustle. I think I got lucky because I always had people around me who inspired me. I was a product owner / manager / CEO for quite some years who hung out with "techies" all the time.

PS I am the author of the article


Hi! I am the author of that article.

> I don't get how people can spend roughly 3 months learning to code and make a career out of it. Surely they must be lacking in certain core areas of CS.

I kinda agree with you. One usually does NOT make a career in 3 months. But who says you can't? I definitely will fail all coding interviews even now after 1.5 years of practice. But I built a real SaaS app that people are paying for. It's not the best architecture. I am sure it will fail at scale. But hi, fuck it, I built something of real value.

The title is a bit clickbaity - but still true. Anyone can learn coding, no matter the age.


I'm a trained mathematician, but old enough to elude anything serious regarding computers during my studies more than 25 years ago. I did some Turbo Pascal + Assembler for my own interests completely self-taught during that period, though. I had to change direction at 31. After five years with small gigs mixed 50/50 with employment (main result: Getting an in-depth grasp of C++), I became a full-time freelancer at the turn of the millenium. I never looked back and always learned along the way. Because people continue reaching out to me, I tend to think doing some things right.


That would be the whole premise of bootcamps - train someone for 4 months and get them a junior software engineer job.

Now, we can argue about how whether these junior engineers are better or worse than CS grads. And a lot of these programs require you to have spent enough time on your own to be able to like write a fibonacci function. But the large number of people getting hired out of these programs does seem to indicate that switching careers into CS with less than a year of training is not unreasonable and maybe even normalized at this point.


I completely empathize with this feeling but... you can do it.

As you work with more developers, you'll realize (or start to actually believe) that everyone has limitations and is out there figuring things out as they go.

There will always be those pro engineers who seem to understand everything but the average developer is probably less skilled than you've built them up to be.


> still do not have the confidence to become a developer.

You've identified your core problem, your obstacle to leveling up, and yet show no interest in solving it. What's up with that?


Self taught coder at 44. My memory isn’t the greatest, probably one of the hardest things I’ve done, required so much persistence to get through all the frustrations, only reason I made it was due to huge motivation.

There’s no way in hell everyone can learn how to code. Even if most people had the intellectual capability to code (which they don’t), most don’t have the patience and persistence required to follow through to the end.


I don't like to say that not everyone can code. I like to say that not everyone will enjoy coding. Personally, I find it more liberating to confront my personal challenges in learning something in terms of how much fun I'm having and/or how much work it'll take to get good at it.

For many years I told tried coding and told myself that I couldn't do it when it got to hard. But the honest answer is that I simply didn't want to put in the work.

Later in life that changed, and I started seriously working at learning to code around age 35 because I was having fun. I decided to go for it professionally at age 38, and got my first coding gig at age 40.


I don't know why we have to sugarcoat it. Not only can anyone not be able to code, I'd go as far as saying that MOST people will never be able to code a production application no matter how much teaching/resources you throw their way.

My mother, at her peak, would have never learned how to code even if you held a gun to her head.


Would have is different than could have.

There’s lots of things in life I don’t care to learn, but it doesn’t mean I couldn’t. To be perfectly frank, programming is one of the easier things in life I’ve learned, and it’s usually only difficult for the wrong reasons like poor documentation, bugs in other people’s code, people, etc.


This. First of all, I don’t think there is a “critical” period for learning programming like there is for languages, or motor skills (try learning to skateboard as an adult). My school curriculum, a foreign language and, yes, skateboarding have all been a lot more challenging than programming. I’d say that learning network administration is probably a lot harder too b/c stuff like that isn’t as logical as a programming language.


I actually meant could have.


Learning to code != learning to run a prod app with real clients.

I can learn to surf without being a professional surfer. So why can't I learn to code without wanting to make a career out of it?

PS I am the original blog author


> ...never be able to code a production application...

It's true, the vast majority of people will never code a "production application".

BUT, many folks code everyday in the form of excel macros, R, Mathematica, Matlab or Julia notebooks. Many people create programs and scripts in all kinds of tools to get stuff done. IT'S ALL STILL PROGRAMMING, it's just not what folks here would consider a traditional "production application". The people who do this are domain practitioners who use computing to do things, but don't have a need to spend a million dollars to hire a team of "real programmers" and their entourage of PMP's, sales, support, and customer success agents to do it for them.

As far as folks "not being able to code" that's all a matter of inclination and background. There's nothing special about software development. Lot's of people can do successfully at various levels. Some are more DIY than others, but I think you would be surprised at what some people's grandma's can do with the right motivation and background.


> There's nothing special about software development.

There's also "nothing special" about writing. Somehow, though, we don't see millions of Hemingways pop up each year.

Writing code is a form of art. There is a science behind it, but the same is true for many other art forms. It's true that everybody can be an artist. Not everybody can be a good artist, though. It's equally true for writers, painters, and coders.


We don't need "millions of Hemingway's".

The parent comment was suggesting that very few people can code-- and by "code" they meant "production applications".

I am trying to say that lot's of people can code, well enough to solve their domain problems, well enough to put food on their tables, well enough to not need "real programmers" in increasing numbers of scenarios. Just because they're not doing internet scale application development or cutting edge mission critical projects doesn't mean they "can't code".

There's a long and continuous spectrum between Hemingway-like programmers to bored-out-of-their-skulls enterprise developers to lunch-time dilettantes who are running a far more of their business than they should on brittle excel pivot tables and VBA macros.


And "writing" is still a good skill to have, even if you are not a professional essayist or author.


Yes. But writing a letter to friend (or automating your accounting in Excel) differs from writing "War and Peace" (or writing an OS kernel). I think everybody is capable of learning to do the former, but have a really hard time beliving the same for the latter.


If your mother ever told you how to do something which required you to make decisions along the way, she’s a coder.


According to that reasoning, babies are coders too.


Babies' demands certainly do compel parents to figure out what to do so they can get enough peace to grab time back for themselves.

What changes once babies grow into toddlers is that they develop the capacity to learn new behaviours, not just through the trial and error of stimulus/response, but through instructions given by language. That's where mothers and fathers excel. The quality of their instructions can be measured by the agility and resilience of the behaviour these instructions impart.

Done well, parenting is not just coding - it's software engineering.


Then we are all coders. Even dogs are coders.

Guess they were wrong when they said people from dying industries should learn some programming: we were coders all along!


I think that the idea that everyone can learn to code is an exaggeration, in the same way not everyone can learn arithmetic and algebra (that is, some people are literally incapable of learning it, others end up with such severe anxiety they become incapable of it though it's not a technical incapability). However, I do believe that anyone capable of learning arithmetic and algebra can learn programming, though perhaps only to a certain level. And that doesn't necessarily lead to a a career in programming.

Take VBA + Excel, for example. I've seen many non-programmers (by education or trade) pick it up to solve real problems within their offices. It's certainly not my tool of choice, but the level they pick it up to is basically the arithmetic/low-algebra level. They aren't making software for a living, but they are making software to support their living (that is, they're engineers or accountants or administrators who make something that solves a problem, but not software engineers/programmers in general). Their understanding is at the arithmetic/low-algebra level in that they can do it, but don't necessarily understand (fully) what they're doing (they know what variables are, and use them correctly, but maybe don't understand or even know about scoping rules).

The next level involves actually learning scoping rules and how to apply them. How to create new classes/modules and not just by rote imitation. How to "factor" your program into collections of procedures on data structures. This is the algebra level, this is the point where people can start actually becoming professional programmers (more reliably, you can become a professional at the previous level but you'll be constrained in what you can make by what you can understand).


I learned to code around the age of 7, and I too agree that there's no way in hell we can get everyone interested in learning how to code. It's something I basically can't explain why I enjoy doing. How would you even get someone who doesn't understand programming to get interested in a career of software engineering?


> How would you even get someone who doesn't understand programming to get interested in a career of software engineering?

Well, money will make people interested, for better or for worse (for worse, I think).


I learned at 43. Got my first developer job at 44. This description rings true for me.

Persistence in the face of frustrations along with an actual enjoyment of creating things with code is what got me through.

Programming seems like it would be a dreadful job for someone who didn't get some satisfaction out of typing code and then watching as your code does stuff. Definitely not for everyone.

In my case, I didn't start out wanting to learn programming. I wanted to create a web site for a business idea I had. To do that, I started learning javascript and python. Pretty soon I realized that I was much more interested in learning more about programming and web development than I was about my business idea and that I'd rather get paid by someone else with a business idea to write some code.


> Persistence in the face of frustrations along with an actual enjoyment of creating things with code is what got me through.

I want to say that this is essentially what "the knack" is for a lot of engineering/programming types. It's the willingness to beat your head against a wall dealing with something unfamiliar until it works and you understand it a little more. Some people can't stand it - for others the dopamine hit of finally figuring it out makes all the frustration worthwhile.


That dopamine hit is so delicious when you're learning to code and a bunch of frustrating puzzle pieces finally fit together.


>That dopamine hit is so delicious when you're learning to code

I think you meant 'endorphins'...

Great that you're getting that positive feeling but many people just don't. Just like with the infamous 'runner's high', which I never get. I feel shitty before, during and after running and exercise.


I think coding proficiency is obviously on a pretty large spectrum, so I think there is probably something of a bell curve on where people can reasonably get to. Certainly most everyone could get to a point of working with the basics of a given language, but past that coding really becomes problem solving, whether it is a bug or a business requirement...and that's when a person's willingness to stick with a problem till the end comes into play.

Also, congrats on your journey and sticking with it :)


>> There’s no way in hell everyone can learn how to code.

I have to really disagree with this statement. I agree that not everyone can write the next Google search engine, or even the next personal website. But you don't have to do to learn how to code.

My coding skills are pretty crappy after stepping away from it some years back, but I would still consider myself to be able to code something up. Even a small VBA script to help with Excel automation should be considered coding.


What you’re referring to isn’t what I consider coding. That’s more like scripting. Maybe most people could learn things like html, but creating a production application is a whole different ballgame


I think of it this way: Most people can go to the gym and subject themselves to the physical discomfort of running, lifting weights, etc.

Few people will dedicate themselves to this discomfort on a daily basis.

Writing code makes the brain hurt. It's perpetually frustrating. We're in a bubble here, but outside of this bubble, people generally do everything they can to avoid mental effort.


The path of learning to code has a lot of similarities to learning to speak a language or learning to play and instrument.

You can get to an A2 level of a spoken foreign language way faster than most people imagine, but at the same time, getting to native fluency takes longer than even the most pessimistic beginners realize.

Most people dramatically overestimate how long it would take to be able to play a decent tune on the piano, but also have no way of comprehending the near-infinite hours required to become a professional concert pianist.

Each unit of “better” takes exponentially more work than the last. But there’s a lot of utility in even getting to the first level. It just depends on your goals.


I have a slightly cynical view about this sort of thing, and assume that most might have some counter-arguments for why my cynicism is misguided.

I get that the point of the post is to encourage others, but proclaiming to have "learned how to code" feels misleading because there is no real finish line for it. This is an open-ended skill, there is no such thing as being done with it, same with most other skills. Maybe you can claim that you self-learned how to do a Rubik's cube, but I have been learning how to code for 15 years and with each day I feel like there's so much more that I don't know.


There's a level above which you can be gainfully employed though.

In my private projects I use cutting-edge frameworks, write tests (which actually test at that), solve algorithmic problems and learn new languages.

None of this takes place at work and still I get paid - mostly because what I'm doing for a living is akin to brick laying, since it was optimised for predictable outcomes(hilariously enough having tested code is not part of this optimisation - hiring a QA team once the budget for that is approved is, though).


This is basically the paradox of the heap. Adding one grain of sand doesn't turn a non-heap into a heap of sand, so there's no point at which you've added enough sand for there to be a heap. Yet if you add enough sand, you clearly have a heap at some point. You can always add more sand and make a bigger heap, but that doesn't negate the fact that you have a heap.

The fact that you can't clearly delineate the point where you've learned to code doesn't mean that can't have learned how to code, and the fact that you can get better at coding doesn't mean you haven't learned to code yet.


There is a point where a person can move from honestly describing their capability as "I don't know how to implement an application" up to "I can implement an application". Sure, learning never ends, but reaching this first hurdle is the thing we are discussing here, I think.


As someone else remarked here, if you are good enough to become employed, this would in my opinion statuate one kind of level (among many possible) describing something reasonable final (I agree of course, after this you will learn a lot more).

The other point is, life is not finished with doing coding. While I'm still a not too bad programmer, in particular my C++ abilities are not on par with my former ones. Simply, because I nowadays write most things in Python, wear other hats than pure programming etc., but I certainly can say I learned to code.


You are right! But what is that level when you say that you are a coder now? A software developer? When you graduate from a bootcamp?

When someone hires you? Maybe when someone pays you for an app you built?

For me it was the latter..


Knowing how to code means you're able to go from an idea to working implementation in a reasonable amount of time.


What is "an idea"? Any idea? On any programming field? Am I not a coder because I don't know how to make a osx app? And what is a reasonable amount of time? After all, I can make an osx app, taking way longer than someone who has experience making osx apps, but waaaay faster than someone who doesn't know anything about programming. Maybe that's enough? Ah but, I know how to make a http rest api in a fraction of time. So maybe that is enough to be a coder? So the osx app isn't needed after all? So maybe it's any idea? But how about if it's a trivial idea, like something I can make using excel? Is that still coding? Or only if I use advanced excel scripting, but not if I just use basic formulas? And what is "working implementation"? Something that people pay you for? Something that has any users besides you? Or something that brings value to at least one person, even if that person is yourself?


I think if you wanted to make an OS X app you could probably figure it out while someone who doesn't know how to program would not even know how to begin.


Learning from YT videos, the kind you get by searching “learn programming” is IMO not a good idea. These videos are engineered for ad revenue and engagement metrics.

Maybe be watch one or two to get a gist of how things come together but please buy a good book on the topic. Even better, take a college course in Coursera or EDx.


He called JSON, Git, and CSV 'languages' so...

I have the feeling he didn't learn programming but was able to copy/paste a small project together.


It's possible that his technical abilities are now sufficient to do the work but he hasn't yet learned the language commonly used for describing the technology.

This is a pretty common thing amongst self-taught people.


As a self taught programmer, I struggled with this for years. I could do the work; understood it; but sometimes I would get terms mixed up. For example: Is it called a method or a function?

Conversely, I've known college taught programmers who struggle with basic CSS so... it's all relative IMO.


For a 4 year degree in CS at many universities, the coursework isn’t that similar to web development, so it’s not surprising that CSS may be a struggle. CS and programming are different things. For example, there are typically several classes on data structures and algorithms. I have worked with and managed self taught, bootcamp, and CS grads, and the CS grads on the level understand how to use dictionaries and lists efficiently, how and when to write recursive algorithms, can quickly write compound Boolean expressions, and seem to have a good concept of runtime complexity and not to write nested loops. Many other examples as well where 4 years of learning the internals of how everything operates and is designed feeds into day to day development.


> Is it called a method or a function?

Allow me to throw a wrench in the works and point out that a lot of the time when people say “function” they mean “procedure”


>I've known college taught programmers who struggle with basic CSS

During my 5 years studying Computer Engineering (BSc, 5 years is the normal amount of time if you don't fail any classes where I'm from), the total amount of time someone taught me CSS was 30 minutes.

Go back a few years and Web Programming would have been an optional class, meaning it could have been 0 minutes.


I don't struggle with css, i just never use it since it's not what we were taught and my job rarely has me poking at it. But if I need to convert stuff or alter things it's not an issue. It's just gonna look sloppy it less than ideal.

But it's css code. You can debug that real time and it doesn't affect the real stuff that my company actually pays me for.


I've never actually encountered a situation where the differences in terminology actually matter (same as sub-routine and procedure), so I'm comfortable dismissing them.


Hi, I am the blog author. This cracked me up! I have to go back and see where I made that goof up! :D But yeah you are probably right - I dont think I am the best software developer out there.

I can definitely code just good enough to cobble up a project together.

Just because my painting isn't good enough (yet), am I not a painter? Who awards that distinction? :) Genuine thought experiment ..


That reminds me of a candidate out of college who said their favorite language was XML because of the pretty colors in the IDE.


I think you are talking about the pie chart image in the blog post? I think "programming languages" is the default tag that Wakatime assigns to any file type inside VS Code.

I took the screenshot from my Wakatime account :)


If you want to learn something difficult it's far more important to get started and do something than to identify the optimal method.


One thing I've noticed as a self-taught programmer is that concepts get really, really fancy names for simple things and it kinda acts as a barrier.

That said one of the hardest part s of programming on a team so far has been making names that make sense, so, some sympathy there.


I see you've likely met Dependency Injection, the fancy name for "pass the dependency as a parameter"


Exactly!


100% agree. I find this is problem particularly acute in Data Science / Machine Learning / AI.


I learned to code at 33.

I am now working full time in the field. Before that, I was a sysadmin. I worked as a sysadmin from about age 20. I understood ops coming in and this let me punch above my weight.

It took about a year for me to get good enough to apply for jobs.

I would now be considered a good developer by most standards. This only happened because I found a fantastic mentor. He took me under his wing and pulled me up.

I have since introduced my non-technical brother and encouraged him to start learning to code. After about a year of effort he is starting his first full time job in the field next week.

It is possible and very doable.

Find a mentor early though to fast track the learning process.

Other notes based on other comments:

- My brother and I both value critical thinking and apply it naturally. We didn't work in creative fields previously.

- We both settled on early mornings to study while managing our other lives (work/family) (5am).

- I don't have a post secondary degree. Brother does in unrelated field.

- Don't get hung up on "which language and ecosystem to learn". Pick one. Your work will ultimately dictate these things to you and you'll need to adapt. You can pick up a new language quickly.

- Get good a networking (people to people). If you can talk to people, you can get a job in tech.

- Find a mentor or a friend you can talk to about programming and computers. It's more fun and keeps you thinking about it.

- Open your editor every day. Even if you're just reading code for 10 minutes. It sucks coming back two days later and realizing that it's slipping.

- Be kind to yourself. This stuff is complicated.


How did you get mentor?


Networking IRL.

Most people think networking is trading business cards. Don't do this. It's pointless and doesn't work.

Talk to people. Talk to everyone. Be interested in what they say. Be interesting. The best way to be interesting is to do interesting things. You can do interesting things by being interested.

I met my mentor at the gym. We were talking about gym stuff and eventually he said something I recognized as technical. I followed up and kept asking _good_ questions. I respected their time but made it clear I valued their input.

We developed our relationship overtime and eventually formalized it. I asked him directly to help me and he was excited to help. We all love helping people. It feels good.

This is also how I got my first tech job (different people, same process).

Talk to people and be interested in them and their lives. Sometimes this will provide opportunities. Don't do it with the intention of creating a transaction.

If I _needed_ a tech mentor, I would hang out with tech people. Tech people hang out with other tech people. Go hang out there (this is obviously harder due to covid, but we're almost through it).

Gyms, gun ranges, music stores, libraries all attract these people.

Saying "Hi" is the hardest part.


I suspect that most of what is coding (ie, logic) is pretty intuitive, and only obfuscated by environmental factors like learning syntax, obscure jargon, and especially learning to execute code in your head.

However, it's been a long time since I learned to code myself and my own learning experience is lost to the mists of time, so I'd really love to hear from people who are either learning right now or have recently learned how to program: what were/are the hard parts for you?

I'm not just asking out of curiosity - I'm trying to build a better programming paradigm (based on visual programming) and a key goal for me is to make building software more accessible to new entrants.


I have done a little bit of coding: macros, small programs, tool controllers. What kills me is that I can do 90% of what I need using other tools (excel, JMP, imageJ, matlab) and coding mostly makes things take longer. Most of the effort is plumbing: where are my files, what is the structure of the output, where is the file: the boilerplate stuff.

I usually know what I want and how, but it takes quite a bit to structure. Back in the day, labview+scripts/c were great. You could get to a point, and then extend as needed.

The other problem, of course, is finding meaningful problems to solve. Would I like to build a semiconductor process simator: yes, yes I would. Will I....not likely.


The hardest part I think is knowing that you should ignore all of the noise around different practices paradigms, and frameworks and focus on fundamentals. The best way is to look through and try to understand some very well written open source projects.

I feel like I stumbled on doing this but for many, I think they probably just bumble along building web apps and taking much longer than necessary to understand fundamentals. You have to expose yourself to high level professional code and absorb as much as you can from it otherwise you’re in danger of plateauing.


I'm inclined to agree - there's a lot of cargo-cult practices in software development and it's hard to know that it's often over-generalised until you deeply understand the core of programming, which is essentially just breaking down big problems into small forward steps.


I agree I came into Programming via the technical side and there middle out development was how I normally worked.

By that I mean work out how the core algorithmic parts first then interface to the lower level (normally experimental rigs) and finaly polish the interface


Yes, it took me two or three years to have any sort of valid opinion on TDD or SPA vs plain html and where each would be appropriate and in what quantity. Watching talks helped me a lot. Programmers really like giving talks.


I tried to learn to self code for a few years, but kept hitting wall of what to learn next.

After realizing I really wanted a chance to change careers, I decided to just do a second bachelor’s, basically to have a curriculum.

So far, I’ve learned more math than programming. The actual coding we do is greatly benefited by the self learning I did before, but my understanding of what’s going on in code is much higher. The other place I got stuck seems very natural for other people to move past with ease, but it was how to really solve problems with code. For me, I think the much deeper understanding from a school setting will set me up to better understand how to solve problems with code. (At least, I seem to be pretty good solving problems with accounting, my first degree, so I don’t think I lack inherent problem solving ability. This whole second bachelors is a bet that I am just missing deep enough understanding of the subject area to apply it to problem solving yet.)


Having done a bachelor/master in CS and taught a coding bootcamp, I only believe this to be partially true. It depends on what work you want to do as a programmer. For example, if you want to become a web dev at an average organization, then compiler construction knowledge isn't the most optimized way to spend your time. Yes, it'll add to your general programming knowledge, but it's better to spend the time to directly learn JavaScript, how to setup a project structure, devops tools like Docker and so on.

People that claim that such things aren't timeless are missing the fact that once you've seen enough tools that your underlying knowledge becomes deeper (and therefore timeless) as well.

What will happen though is that when you're doing your job is that you'll begin to notice that you miss certain fundamentals. At such point you know what you're missing, and you can immediately do targeted learning without doing a whole bachelor for it.

This whole story does pressupose that you know aprior what kind of developer you want to be, which is not an easy feat since it's a bit a chicken/egg problem (i.e. you need to know programming and have seen different flavors in order to better know what you want to become).


I did the self taught route and it's funny, like, I read a lot of books and kept trying to work on stuff but I'm not sure when exactly it came together for me. Just seems like I couldn't and then one day I could.


> how to really solve problems with code.

For me, it took me a long time to really understand where to begin. It wasn't that I couldn't solve a specific problem, like on leetcode. I didn't know how to go from scratch to building some kind of tool or application.

The solution for me ended up being just watching a ton of random tutorials to get something started, then taking the tutorial a totally different direction. That gave me some examples of what the entry point to the process was, and from there it was just an additive process until I got the desired behavior.


I learned about 8 years ago and I think the first, hardest part is grasping the fundamentals - firstly data structures and algorithms. Things like visualizing the storage of data types in variables and using them later. Things like when you create a variable you create an empty box and assigning something to that variable is like putting the variable in the box. A tool to be able to visualize what an array of tuples looks like as you write code to store values would be pretty neat for instance.

I think that first hurdle is the most important by far because once I crossed that it felt like I knew I was actually capable of being a software engineer. The next difficult jumps for me were grasping OO concepts like polymorphism and inheritance and learning functional programming. I also struggled with async style programming (first callbacks, then promises) as well as understanding contextual values such as Javascript’s this.


Honestly if I were advising someone, with apologies to Dijkstra, I'd tell them not to worry about the CS side of things until they could make programs. Way easier to approach that stuff as someone who already is comfortable with programming basics.


Well the whole "public static void main(String[] args)" thing took me about 8ish months to understand everything in just that statement.

JavaScript, jquery, json, and xml also were another hurdle. I lump them just because I was kinda learning them all at the same time. I was doing web stuff and one day i finally understood the difference between a scripting language and a compiled language. Suddenly understanding how to use the language became much easier for me.

Oop took me about 6 months of just java coding constantly. Then I got it and it really helped me at my internship.

Now my main struggle is LINQ expressions and streams.


> Well the whole "public static void main(String[] args)" thing took me about 8ish months to understand everything in just that statement.

Yeah, that's exactly what I mean about jargon. Even the idea that you have to hardcode what appears at first to be a string of magic words is not very accessible.

> JavaScript, jquery, json, and xml also were another hurdle.

Another area where things are made needlessly difficult - you really shouldn't have to worry about /how/ your data is being transferred (JSON/XML), just that you are in fact transferring it. JS versus jQuery is a bit more of a legitimate concern, but thinking about them in terms of their function rather than what they "are" (JS being general coding and jQuery being a tool for manipulating HTML/CSS) clears it up a big.

> Now my main struggle is LINQ expressions and streams.

I can't help with LINQ but I use streams all the time - what about them are you struggling with? Maybe I can help.


Self taught in late 40s (after doing BASIC in school in UK). Takeaways from my experience:

- Have an objective - otherwise it's hard to know if you're making progress.

- Essential to lose anxiety about not knowing everything. Many languages are so big that a beginner can feel lost in them for a long time.

- Some things just take time to 'click'.

- Understanding the basics of whole 'stack' is really useful. Some things are hard without a mental model of how the machine works.

- Basic code 'hygiene' is really important - found Sand Metz's POODR really useful in this. Also learn to use VC early on.

Finally - as others have mentioned persistence is key and that links strongly to how passionate about your objective you are. I almost gave up several times but the objective pulled me back in.


Results not typical

It all depends what you want to do or how much proficiency you seek

I don't think coding will ever be easy but it can be made easier


I taught myself to code in junior high, pre-web and (unless you worked at a university) pre-internet. I would have killed for the access to the plethora of programming-related content available to people today. I had access to a couple of others who were also trying to learn what we could do on a TRS-80 Level I, and that's about it. I bought computing magazines that had some code in the back of them, and learned from a few programs that were passed around on diskettes. Later my parents bought me a Tandy Color Computer. I purchased an assembler for it and a book on 6809 assembly programming and finally felt like I was making some progress.

I just wanted to throw that out there. It's a completely different world now and the access we all have to programming resources would blow the mind of the younger me. If I can give one suggestion, it's to learn about how computers work at a low level as you're learning whatever language calls to you. It helps tie the concepts together in a way that learning only the syntax and quirks of one language does not.


Learnt at the age of 40. Thought was late to the game. Kinda of person who really doesn’t do anything unless presented with the reason to do so. Also started with Python so was motivated enough to stick with it. Been making odds and ends but now working on monetizing that skill sets.


Not at 30, but I started to self-learn at 27. The key difference for me was that a) it was on the job so I had access to computers (the job wasn't related to coding) and b) I didn't have any family commitments so I could do as much reading/practice/coding as I wanted. Many Saturdays and Sundays were spent at the Unix prompt.

However, I wasn't driven by the desire for my own business or career growth etc (nothing wrong with being driven by those - I do like money very much). The driving force that kept me going was that I absolutely loved programming. It is probably the one enduring thing that I never outgrew. I guess that is why many many years later, I'm still coding. And I still love it.


OP, i just wanted to say that I didn't expect much based on the title but you blew me away with how detailed and well structured this post is. congrats and please keep writing!


Hi folks! I am Aditya (author of the article!)

Just got forwarded this by a friend to realise that it's trending here! :D

AMA if you want. Online for next hour.


Nice. I love learning new things, even if only for the sake of it.

Also, always refreshing to see a post that ends on an optimistic note.

Good job.


Assuming he started from zero, I am astonished that he only needed 160h research and 80h coding to launch his first project.


I started coding at 17; And I continue to learn/code in new programming languages; It's fun :)


his resume is here https://www.linkedin.com/in/adityarao310/ could not figure out if he means he learned to code html/css etc. in 30 or something else


didn't read, closed the tab as soon as i saw the obnoxious popover


I learned to code at 29, and I'm sorry to say that, compared to to the author, I don't have such a rosy outlook...

For context, I was a Product Manager, and fell in love with CS/SEng by taking Harvard's CS50 in my free time. I then did other MOOCs on topics like algorithms and software architecture before finally settling on a 12-course masters in Software Engineering at Harvard Extension.

I took a hybrid approach compared to the author, combining a hacker-builder mentality with academic study, since I enjoy both.

5 years later, I'm building custom apps for enterprise and startups, making about the same as an early-senior software engineer in my country, so I'd say I'm doing quite good. Though it's important to note that I get paid for my sales, project management and design skills on top of programming. There is no way I would make as much as a staff engineer here.

However, I really do not share the sentiment that it doesn't take that long, or that anyone can (or should) do it.

I've spent thousands of hours studying and building, and I still find that pushing code to production and maintaining mid-sized codebases is ridiculously hard. This whole discipline still kicks my ass in myriad different ways, whether it's programming in the small or big. And no, being challenged regularly is not always fun - it can be extremely psychologically taxing too. There is also the commonly understated fact that, as with any complex discipline, learning sees diminishing returns: getting from 0 to 100 may take 400 hours, but getting from 100 to 200 may well take 4000. So you better be prepared for this grind.

Learning to code, and building a prototype glued together with no-code and a simple FaaS backend is completely different to scaling out a production-ready system. And I don't think that's an entire process that one can learn ad hoc or on the job as makeshift CTO. If a prototype you build is really successful, you will likely be completely overwhelmed by the technical challenges and will not be remotely able to lead engineering; rather, you will need to delegate entirely to experts. If the product has a very slow start that allows you to learn as you go, then how are you going to pay the bills?

Framing it in a slightly different way, how many people do you know that grew into a CTO / engineering lead role all by themselves having spent just a few hundred hours of casual coding? Mark Zuckerberg or David Heinemeier Hansson don't count - they likely spent their 10,000 hours coding before they saw any success. They were hardcore. I've spent many hours browsing HN and related sites over the years, and while I've occasionally encountered the "I built a prototype, dumped it onto some competent engineers, and then switched to CEO" archetype (I've met three people like this IRL, actually), I don't think I've ever encountered any substantial examples of "self-made CTO in under a year".

I don't mean to be a gatekeeper or belittle the author or his experience. I am well aware that there are some people that are orders of magnitude smarter than me, and with a nearly-permanent happier predisposition. I also think there is a lot to be said about doing what you enjoy, and as far as "following your passions" goes, programming may be one of the safest bets out there, since software has eaten the world and there are many opportunities in the wild. I just want to offer a counter-argument in that there is a good chance that you will find part of this process grueling. Be prepared!


One isn't going to get to CTO in only hundreds of hours, but one can get to "getting paid" in that amount of time, and then, if you're smart and keep prioritize learning, get to CTO while getting paid. I started web dev at 30 (though had coded in high school), and was a startup CTO at 44, now an architecture consultant, and the best advice I had in the beginning from a good mentor was to structure everything relentlessly so that I was spending 20-25% of my time learning, even if it meant less money per paycheque. I can't stress enough how important and effective this is. If you're willing to make 75% less at the beginning to keep working that lever, in 10 years you will be a hot property and commanding very good compensation.


I agree with pretty much everything you've said (your comment on the tension between billing and learning being particularly poignant), but you're talking about a 14 year path versus the gist of the article, which talks about shipping commercial products with 400 hours of self-learning - an unrealistic expectation for most people.

You're probably better off planning for the decade-long path (starting humble, and improving incrementally) than thinking that anything remarkable is going to happen in your first couple of years.


Thanks for this advice. I'm 37, started at 30 and I'm at the midway point. I'd like to get where you are.


fuck me man lol


How come people forget Critical Thinking?

It's obvious Critical Thinking helps to learn programming.


Because it is not obvious how this insight is actionable.




Consider applying for YC's W25 batch! Applications are open till Nov 12.

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

Search: