Ask HN: What do you say to someone who wants to get into software development?
Occasionally I have friends who really want to get involved in software, but they have zero background in it whatsoever. I'm never really sure what to say. Computers and programming have been a part of my life as long as I can remember. It's the only thing I was ever good at or wanted to do. I can't really understand how to articulate that. It seems impossible for me to recommend someone do this stuff without having that lifelong level of understanding and context and passion. Am I wrong? Is software really not that hard, and able to be learned later in life?
76 comments
[ 4.7 ms ] story [ 166 ms ] thread- it's not for everyone, you sit for hours in front of a computer not socializing
- it can be a very rewarding career, there are many tracks one can go down
- it requires a mindset that learning never ends, many people have stopped learning, so restarting that process is difficult
- that switching careers typically takes full time effort to be successful.
- to checkout the Grasshopper app to get a taste of programming
- try an online course before spending significant money on a boot camp
- bootcamps are a better path than self teaching, but to be very careful when selecting, top ranked and widely know is the way to go
- sometimes it can be better to learn a little programming to automate processes in your current role, rather than switching careers to become a full time programmer
2. Heathcare has been secretly booming for the last 10 years without very much attention at all. The convergence of regulation and technology leaves a _huge_ opening for innovation right now. Specifically, as of this year the patient will own their data and can use whatever application they choose to ingest and utilize that data. It's a big deal. I wish I was in a place where I could be part of the end-user experience.
> there are many tracks one can go down
I think this one is very important - both for the person giving and receiving advice. There are so many paths just for software development specifically. The paths absolutely endless. And that might be exciting or present opportunity. But it's also a responsibility of someone giving advice to make the person aware of the vastness but also to help them navigate it all.
Yes there are three or four major languages, but you could find yourself working in one of hundreds. There are many support technologies - front-end, back-end, api specific, frameworks, hosting, data storage and models.
And related to but not specifically software development, there is QA, devops, project management, and many other support fields that require an understanding of how software works.
Anyone have a link?
i plan to start learning to code and making a game would be one of the final milestones on the loose roadmap i've set for myself -- i get it's complex but would love to know why you advise against it.
However, game companies have a reputation of being terrible to work for. https://en.wikipedia.org/wiki/Criticism_of_Electronic_Arts#T...
To your comment, making games is great and fun and I think it's great you want to do it. Working in the games industry is different from making your own games though.
For one - you pretty much will never have creative input on the game you're making as a programmer (unless you're on a really small team).
Probably the biggest reason to avoid the games industry is salary. Game developers make less than their peers in other areas of software development. Lots of people blame this on there being a huge supply of fresh grads to hire cheaply, but that explanation feels like a myopic/simplified view from people on the outside looking in to me. My opinions aside, the fact is that if I left my job today and got a job programming something that wasn't games, I'd almost certainly make more money. I'm paid well enough to live a very comfortable life, but if your goal is just to maximize how much money you make, game dev is a bad choice.
Next thing to point to is crunch. Game development is notorious for "crunch" (aka - long periods of 70-80 hour weeks). Some studios do this more than others. It always sucks. It's also a fact of life in games. Even teams that "don't crunch" will usually wind up doing something like it at some point. I honestly have no idea if other programming fields do this too, it's just a common criticism that I've seen levelled at games industry jobs.
Being a game developer also means that you're not working with the kinds of tech stacks that the larger software industry as a whole is using, which feels like it would make switching fields more difficult (not that I've tried). For example: I haven't had to build a real database since college, have written maybe two unit tests in my life and don't think I've ever worked anywhere that's used the C++ standard library, despite working in C++ for most of my career.
It's also super unstable. It feels like most game studios will close (or transition to not making games) within ~10 years of starting up. Layoffs and studio closures are also a really common occurrence. Every time a meeting gets randomly added to my calendar at the last minute, my first thought is that a layoff is going to be announced (even though this has literally never happened at my current job). This is less of a concern at large studios (although definitely still a thing), it's a huge deal if your dream is to work at indie studios though.
There are lots of great things about working in games, but the above wall of text are some of the reasons why I'd hesitate to encourage folks who aren't already interested in the field to choose game development as a career.
making this game i've envisioned is more of a carrot on a stick, a clear goal that forces me to learn loads of different stuff on the way. whether or not the game itself ultimately materializes is not as important as picking up new skills, and i definitely don't see myself working in the games industry (nor the IT industry).
Making your own games is really fun and rewarding. Highly recommended. But the games industry works more like Hollywood than Silicon Valley. Games are either a hit or a flop, and they have very tight release schedules with hard deadlines like a movie. The resulting work environment is notoriously terrible.
I do know a few people that got into it later in life, but those just did it, they didn't ask friends how to get started. So usually when someone asks, I unfortunately immediately predict they won't make it - since everything you need is available online, a person that asks already is showing lack of motivation or "digging" skills.
You are wrong. Software is a passion of yours and had been all of your life, but that's not the case for many or even most of the many millions of developers out there.
For them, it's just a job and it can be learned just like you learn any other job.
I studied history at university, did a lot of traveling after graduating, working casual jobs for years. I was 28 when I started work as a junior developer after spending a few months doing an evening course in the UK. (1998)
I chose programming as a profession not because of any passion for the subject (I had none), or experience working with computers as a teenager (I never had one). I chose it because even back then, in 1998, it was a lucrative profession, and one that I could learn 'on the job'.
Things were a lot different back then. On the job training was more of a thing and CS courses were not always packed to the gills at university.
You can be a great doctor without immersing yourself in medicine from a young age. You can learn to be a great vet, lawyer, school teacher, even writer. Writing code, building software - it's no different.
>What do you say to someone who wants to get into software development?
Tell them you need to put in the work, but the rewards are worth it. Tell them it's a varied field, as varied as medicine (where there are nurses, GPs, plastic surgeons and heart transplant surgeons). Tell them that even though they might make lots of money, that money alone won't make them happy and that the office politics is no better or worse than any other profession.
I'd say do it.
---
On the other hand, if someone likes the idea of writing code itself, I'd say don't go to a bootcamp — learn python from FreeCodeCamp — there's a whole world out there that you can do if you learn how to manipulate computers and data
https://github.com/geohot/fromthetransistor
I am not a super smart person either - I had an average talent and got average grades. However, the asset I do have is that I am OK with sucking and failing at something over and over again. I think this trait is more important than intellect.
Are you the kind of person that can bang their head against a problem for many days not quit? If so, you can be a software developer. Some natural intellect will help, but perseverance is likely more important. In fact, maybe being somewhat unintelligent is even better since you will be used to not succeeding at everything so easily.
*Caveat - it took me about 7 additional years to actually become good at writing code.
Bootcamp is a really good shortcut. It's no surprise that most bootcamps arrived at the conclusion that front-end dev has a lower barrier to entry and focus on that. Kudos to them. It's a great way to get started.
Working a software-adjacent job can also lead you to software (I took this route), whether that is being a data scientist, data analyst, or any job that might benefit from a bit of python scripting. It greatly reduces opportunity in some cases (for example, a lawyer who leans to code to help his day job), in other cases, it simply delays it (if you really want to switch to SWE, you kinda still have to start at a junior position at some point)
Self-taught is absolutely possible. But it also means you have to do both the course planning as well as the learning, which adds another layer of challenge. It really takes a lot of dedication to go this route.
Software is unique in the sense that your skill becomes obsolete much quicker than other fields. It's a double edge sword - on one hand, you have to constantly learn new things, on the other, this dynamic creates a lot of jobs, because you don't have to wait for people to retire or switch jobs. A 3 year react dev is consider senior, same goes if you have 2 years of prod experience with k8s right now. You just don't see that in other fields.
I usually offer a free copy of the book and they get really excited.
After a month or so, I sometimes hear back about what they learned from the book & how they are applying it to their journey of becoming a software developer. Those who stick with it usually land jobs within 12-18 months.
Otherwise I don't hear back from them at all. Their loss.
Your lifelong learning and passion are a key part of your identify, and most probably the reason why your friends respect you and trust you enough to approach you about software.
Unless your friends are trying to replicate you, it won't be necessary for them to develop the same lifelong understanding as you. If all they want to do is to learn about software, they could just learn a little bit about it, or as much as they can given their late start. That might still satisfy them.
If you want to be a good friend, it's important for you to distinguish between their ambitions and your passion. Try to see things from their point of view, and only share as much information as is necessary for them to be able to see the next step of the big picture.
For example, if they don't already know any programming languages, you could just tell them that there are different languages that suit different applications, and ask them what they are interested to work on. Don't talk in detail about the merits of particular languages because they won't be able to grasp these details yet.
If they say they just want to be able to program Excel, or to write an app to help their grandmother remember something, then you just need to tell them about the tools that exist for those applications.
Don't tell them too much. Just point them towards the right starting point, and tell them they are welcome to bring more questions to you as they arise. That will keep the conversation relevant to them, and avoid the difficulty of having you talk for too long about things they can't understand or appreciate yet.
Changing culture is an insane amount of effort for lead positions, and an impossible one for anyone else.
Respect yourself or your mental health will start deteriorating. If this trend isn't caught early, it can take a very, very, long time to recover. It can also be be expensive, and I'm not talking about just monetary cost of therapies, but it can cost you in many other domains. And it creeps up on you, trust me; you don't notice until it's too late.
Depression/stress (burnout) literally damage your brain on a physiological level. It's no joke.
- I can't believe how much useful knowledge I have lost (or at least would have rather still retained, perhaps useful is the wrong word)
- how difficult the smallest things are now
- how long it took me to realize the ship wasn't sinking -- it sank years ago, and I'm already lost at sea.
Time to brush up, and find enough driftwood to make a raft, I suppose.
I don't even care about titles, more pay, etc.. I just want to make things that I can be proud of again.
> Depression/stress (burnout) literally damage your brain on a physiological level. It's no joke.
No kidding, and I am finding it harder to get back on the horse and self-study (I feel like I lost 90% of my fundamental knowledge since college. Use it or lose it, I suppose). I want out of web development, and I would love something lower-level, but I am not sure where to even look. I am sick of .Net Core and Sql. I want C and ARM assembly (good thing I forgot it all). I rather program a dishwasher than another web app at this point.
It's easier to never fall off the horse than it is to get back on. Lessons learned.
I feel like there are many paths to computation and I’ve met many people who have become functional technologists from various backgrounds. I think the most important thing to figure out early is do you like programming. Do you like this kind of thinking?
1. Software that is undeniably evil and has a net negative effect on humanity for money
2. Software that isn't directly evil but you'll be adding features that exclusively make it worse
3. Software designed to help the former two groups work more efficiently."
That sums it up pretty well.
Edit: unfortunately you’ll need to know Leetcode to break into a lot of jobs. Honesty just memorize solutions for two weeks. It sucks but it is what it is and it’s easier to go with the flow than get angry at it
1: https://www.youtube.com/watch?v=WkXzlkOWLE0
I mean, 90% of development these days is knowing what parts to glue together and where to get the parts. You're converting business rules into code: for the most part, it's really not that hard.
Want to help your friends get into software and don't know what to say? Tell them to go for it. Let them decide if they like doing it.
I think this is a myth that people who learned a long time ago and learned over a long time say. It is hard - there's a lot of complexity involved. It does a disservice to other software engineers.
> It does a disservice to other software engineers.
How does that phrasing affect any other engineers?
Things that seem easy to people who already know how to program or who have the mind for it are very confusing to people just learning.
I'd also argue it's often a teaching problem. I'd highly recommend this essay that goes into the flaws in particular with introductory CS education:
https://felleisen.org/matthias/Thoughts/Developing_Developer...
That's when I remembered that way back I had similar problems. It takes time to develop that skill and the average person will struggle with that
Most other engineering disciplines are much harder in the sense that the benefits are not immediately practical and the answers aren't as straightforward. Not many people are going to learn electromagnetic theory on their own.
Many software engineers think they're smart because software allows developers to hit all these epiphany points on a constant basis. You hit successes and you can learn convoluted concepts quickly because software presents it all to you in an idealized abstraction. It also quickly tells you whether your attempt at a solution was correct or wrong. It allows for quick learning. The reality is.. all of this happens because software tends to be easier.
Other forms of engineering don't provide you with that many euphoric highs when you learn a new concept or solve some problem because they are so few and far in between. This itself is an indicator that those other fields are punishingly hard.
Just to re-emphasize. I am not saying software is easy. Software is hard. But easier than most other forms of engineering.
Also the products of bootcamps tend to be quite poor for the most part.
If you feel something is too complex to teach then do not teach that thing. Learn that thing better from experts who have simplified that complexity into an elegant framework. Then teach that thing.
As usually, it depends. If by getting involved in software you mean "passionately doing software for software's sake", they are likely late. If you instead mean "getting a superpower helping you think through and implement solutions to your not-computer-science-problems" then they are never late.
There has been some discussion whether everyone should learn some coding in the school. Frankly, I am quite irritated by some commenters arguing that it is not necessary because "not all are going to be software developers when they grow up". Well, not everyone needs to be mathematicians and we still teach some math to all kids. And not everyone are going to write novels, but we still teach kids to write. As I said, wring code is a superpower to thinking, and any curious mind should be encouraged to at least have a look.
(I am commenting as if the question is about general interest in coding, not career change towards software development.)
What? Of course you are wrong. It sounds completely alien to me why someone would even have such doubt. It sounds arrogant too.
Anyway, to your question, tell people to try for themselves for some time and let them discover if they have joy coding something. Joy is important.
It is completely ok to get into software development for the money, but if you don’t enjoy the daily work of programming something the chances of you get a rewarding career out of it are slim - personally and financially.
Software development is different from some fields in that you have to continuously study software development. That does not really happens with most office jobs (marketing, HR, finance, sales) and happens in a much slower pace in field jobs (plumbing, carpentry, etc). That’s why joy is important.
It is very possible that someone could discover the joy of programming later in life.
My personal recommendation is to go with www.freecodecamp.org. Try it for a couple of months and try to identify if you like going through the tasks. And if you get happy after solving a particular trick one.
freeCodeCamp is free, well done, with very small tasks that allow you to adapt to any schedule you might have for studying.
2) You're competing in a global heavily saturated market and need to find a way to stand out (all the qualifications, certifications, github repos, friends you can get to land the first proper position)
3) You're not special but you're not a failure either. Software dev is a rollercoaster of feeling like you're one or the other
4) Don't aim to be a software developer, aim to solve a problem you're interested in (software development for the sake of software development is terribly dull - 99% of the problems are boring - find the 1%)
5) Ignore the hype. You won't be a rockstar programmer, top 10 app store, bitcoin millionaire tomorrow because you bought that Python book