There is nothing special about software development in terms of a career. You learn it like you learn anything else. Some people have a natural aptitude, some people will never get it, most are in the middle: capable of becoming competent developers.
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.
Many things have difficulties and complexity. I would phrase it not as "software isn't hard" but that "it is no harder than many other things". This specific questioning is not often employed for many other equally complicated and difficult fields, which I think is a bit unfair and often acts as a gatekeeping mechanism that has led to diversity problems in the field.
> It does a disservice to other software engineers.
How does that phrasing affect any other engineers?
I highly disagree. Software engineering is hard, but out of all the engineering disciplines out there it is the easiest. That's why it's a very normal thing for software engineering to be learned in boot camp or without any assistance.
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.
I remember helping a friend with his intro to CS homework in college. It was fizz-buzz type programming and extremely simple, but he could not understand what the code was doing or how to change it to make it work. And this friend is very smart and successful in his career.
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.
And for others it goes quite quickly! There is no doubt that programming can be helped with a natural aptitude and that it won't make sense to everyone no matter how smart they are, but that is true of many fields.
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:
Thanks for that link! That six-step design process appears to be a formalization of what I've learned to do subconsciously from years of experience. I've been struggling with mentoring junior colleagues wrt the software design process, and I'll be trying that six-step approach as part of my mentoring.
I recently put my wife through a programming videogame (exapunks). She gas a mechanical engineering degree. She has great memory, but she said the hardest part was holding 2 nested loops in her brain to foresee the execution.
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
Cool! My new year resolution is to not buy more games while I have other uncompleted or not started ones but I have bookmarked that game for when I start buying games again.
Sometimes, if it’s a large and complex code base, the difficult part can be knowing where to glue parts together, and how it relates with the rest of the functionality. So even if one has the aptitude to learn programming well, both patience and some grit is good to have to make a good career of it.
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.