Is programming a bad career to get into? Is it true that you can’t work in it more than a couple of decades because all your skills will go obsolete and you’ll be replaced by someone younger?
Are you serious? If you have an aptitude for coding/design/software architecture, and no other burning passion, programming is an excellent choice. While indeed changing rapidly, it is an easy discipline to update your skills cheaply and with almost no red tape. Besides, most people change careers on average more often than every 20 years, so no point looking that far ahead.
When I was a few years younger and naiver, I thought this site is all about the Singularity. Now I know it is about akrasia, conditional probability, self help and manything else. No wonder not everyone expects the Singularity to render our current coding habits obsolete.
Maybe in a sense where creating a compiler or a high-level API is an automation. There will be a need to “code” in the current high-level language for quite some time. (There is still some demand for people who can code in C and even in Assembler, despite the decades passed since the languages were first introduced, and despite the Moore’s law holding steady.)
Programming is the act of deciding exactly what needs to be done by the automation. At whatever level of automation exists, there’s still telling that automation what to do.
Is it true that you can’t work in it more than a couple of decades because all your skills will go obsolete and you’ll be replaced by someone younger?
If this happens (and yes, to some people this happens), then you are doing it wrong. Getting older usually brings some problems, like accumulated bad experience, loss of illusions, less enthusiasm, possible burning out, and starting a family which means that you are less willing to work overtime, etc. But this happens in any profession.
What exactly are your programings skills? (The “larger picture” is already mentioned in a shminux’s comment, so I focus here only on programming.) If you have memorized a few keywords and function names, then honestly you don’t know anything about programming, and a new programming language or technology will make your skills obsolete. Even for a good programmer, having the important keywords in your “memory cache” is useful, but switching to another language is just a matter of time.
After “memorizing the keywords” level you get to the real programming—you design algorithms, understand design patterns (which simply means: you will need to solve thousands of problems, but then you will see that 99% of them can be classified as belonging to one of cca dozen templates, and when you are familiar with the templates, solving these problems will become very easy), and you will see something really new only once in a while (even most of the new things are just reinventing the wheel). And even if you see the new thing, it still helps to have a knowledge about the old things, because you will understand why the new thing was designed this way.
You have to develop some meta-skills to make learning easier. For example if you work in multiple programming languages, you often use the same or similar thing with a different syntax. So why not make yourself a cheat-sheet per language per topic? Then if you have to learn a new language, you have to spend one day constructing a new cheat-sheet, and you are fluent in the new language. Using Google and parsing the official documentations are important skills. This can make your learning curve incredibly fast. Are there fresh people coming from university that know more than you? Listen to them, make notes of the keywords they use, ask what tools they use, then read Wikipedia, read a free online book, try the tools, use google, and within a month you will be able to give them good advice.
And then there is the higher meta-level where you decide what exactly will you do and how will you sell yourself.
“Programming” isn’t really a coherent vocation any more, and will probably become even less so as time passes. By way of analogy, being a scribe was once a trade in its own right, but any contemporary job you’re ever likely to want will demand literacy.
Jobs might not require coding literacy, but knowing how to write rudimentary code (in a scripting language like Python) makes a computer another tool at your disposal (a very very powerful one!). e.g.
one can use a regular expression to find all the telephone numbers in a text document
if one has a list of 20 files to download, then knowing how to write a 4 or 5 line script that takes the list and downloads the files will make it much faster.
[edit] scripts are reusable, so an hour investment of time writing a script that cuts 5 minutes off a common task pays for itself quickly
(Also, being able to clarify ones thoughts enough to convey them unambiguously to a computer is possibly a useful skill in itself.)
one can use a regular expression to find all the telephone numbers in a text document
Recognizing phone numbers is actually a non-trivial problem, because people write them in so many crazy ways. It’s easier if you have a list of phone numbers all formatted in roughly the same way, but that’s not always the case.
Ah, good point, but something very general like /[0-9+\-() ]{4,}/ will at least reduce the amount of manual filtering required!
In a neat coincidence, I was just reading this article, of which the first 3 paragraphs are most relevant:
Performing manual, repetitive tasks enrages me. I used to think this was a corollary of being a programmer, but I’ve come to suspect (or hope) that this behaviour is inherent in being human.
But being able to hack together scripts simply makes it much easier to go from a state of rage to a basic solution in a very small amount of time. As a side point, this is one of the reasons that teaching the basics of programming in schools is so important. It’s hard to think of any job which wouldn’t benefit from a few simple scripts to perform more automation.
When we’re hiring, even for non-developer roles, we look for this kind of mentality—it’s extremely useful, especially when building a software businesses, if costs don’t scale linearly with revenue. The more we can invest up-front in automation, the less time our team has to spend on performing stupid, manual tasks. As we add more employees, the benefits are compounded. And less rage generally makes the workplace a much happier place.
This more or less would have been my response. It may not be worth your while becoming a software developer, but it’s definitely worth your while learning to code.
It depends on other things about you that we don’t know. What do you want? What’s your skill/ability profile like?
If you’re most interested in money, working as a salaried programmer can take you into the six figure range (the average for Silicon Valley has passed that now). Your skills will obsolesce faster than in other disciplines, and you’ll actually be called on it (doctors skills vary a lot by time of graduation, with older being worse, but the patients don’t do anything about it), but that’s manageable. Unfortunately, as you get older you lose fluid intelligence and so can’t learn new skills as easily.
You can make much more money in startups in expectation (from tail outcomes) if you’re good, but note that one can be an entrepreneur in other fields (software/web startups are nice in terms of low barriers to entry, low capital requirements, etc, but that also means more competition). With a long time horizon if you’re smart enough to reliably graduate medical school and find medicine tolerable you’ll make more money as a doctor than an engineer. Likewise for elite law schools, if you both have the credentials to get in and go to the high end places (although that carries more risk). Finance (investment banking, hedge funds, etc) has substantially better financial prospects if you can get into it, although again nontrivial risk.
Other technically demanding jobs (other types of engineering, actuaries, etc) have similar or better aggregate compensation statistics.
In terms of quality of life, some people really like coding, at least compared to the demands of higher-paying fields (risk, self-motivation, management/sales/schmoozing, intense hours, many years of costly schooling, etc). Others don’t.
Is programming a bad career to get into? Is it true that you can’t work in it more than a couple of decades because all your skills will go obsolete and you’ll be replaced by someone younger?
Are you serious? If you have an aptitude for coding/design/software architecture, and no other burning passion, programming is an excellent choice. While indeed changing rapidly, it is an easy discipline to update your skills cheaply and with almost no red tape. Besides, most people change careers on average more often than every 20 years, so no point looking that far ahead.
Just Don’t Call Yourself A Programmer.
Coding should be automatized, sooner or later. Can’t expect nothing will change basically for decades.
Yes. We call that “the singularity”.
When I was a few years younger and naiver, I thought this site is all about the Singularity. Now I know it is about akrasia, conditional probability, self help and manything else. No wonder not everyone expects the Singularity to render our current coding habits obsolete.
Programming is automation.
Automation of automation. Of course.
Maybe in a sense where creating a compiler or a high-level API is an automation. There will be a need to “code” in the current high-level language for quite some time. (There is still some demand for people who can code in C and even in Assembler, despite the decades passed since the languages were first introduced, and despite the Moore’s law holding steady.)
Programming is the act of deciding exactly what needs to be done by the automation. At whatever level of automation exists, there’s still telling that automation what to do.
If this happens (and yes, to some people this happens), then you are doing it wrong. Getting older usually brings some problems, like accumulated bad experience, loss of illusions, less enthusiasm, possible burning out, and starting a family which means that you are less willing to work overtime, etc. But this happens in any profession.
What exactly are your programings skills? (The “larger picture” is already mentioned in a shminux’s comment, so I focus here only on programming.) If you have memorized a few keywords and function names, then honestly you don’t know anything about programming, and a new programming language or technology will make your skills obsolete. Even for a good programmer, having the important keywords in your “memory cache” is useful, but switching to another language is just a matter of time.
After “memorizing the keywords” level you get to the real programming—you design algorithms, understand design patterns (which simply means: you will need to solve thousands of problems, but then you will see that 99% of them can be classified as belonging to one of cca dozen templates, and when you are familiar with the templates, solving these problems will become very easy), and you will see something really new only once in a while (even most of the new things are just reinventing the wheel). And even if you see the new thing, it still helps to have a knowledge about the old things, because you will understand why the new thing was designed this way.
You have to develop some meta-skills to make learning easier. For example if you work in multiple programming languages, you often use the same or similar thing with a different syntax. So why not make yourself a cheat-sheet per language per topic? Then if you have to learn a new language, you have to spend one day constructing a new cheat-sheet, and you are fluent in the new language. Using Google and parsing the official documentations are important skills. This can make your learning curve incredibly fast. Are there fresh people coming from university that know more than you? Listen to them, make notes of the keywords they use, ask what tools they use, then read Wikipedia, read a free online book, try the tools, use google, and within a month you will be able to give them good advice.
And then there is the higher meta-level where you decide what exactly will you do and how will you sell yourself.
Thanks for the detailed response :)
“Programming” isn’t really a coherent vocation any more, and will probably become even less so as time passes. By way of analogy, being a scribe was once a trade in its own right, but any contemporary job you’re ever likely to want will demand literacy.
Are you saying that all jobs will soon require coding literacy?
Jobs might not require coding literacy, but knowing how to write rudimentary code (in a scripting language like Python) makes a computer another tool at your disposal (a very very powerful one!). e.g.
one can use a regular expression to find all the telephone numbers in a text document
if one has a list of 20 files to download, then knowing how to write a 4 or 5 line script that takes the list and downloads the files will make it much faster.
[edit] scripts are reusable, so an hour investment of time writing a script that cuts 5 minutes off a common task pays for itself quickly
(Also, being able to clarify ones thoughts enough to convey them unambiguously to a computer is possibly a useful skill in itself.)
Recognizing phone numbers is actually a non-trivial problem, because people write them in so many crazy ways. It’s easier if you have a list of phone numbers all formatted in roughly the same way, but that’s not always the case.
Ah, good point, but something very general like /[0-9+\-() ]{4,}/ will at least reduce the amount of manual filtering required!
In a neat coincidence, I was just reading this article, of which the first 3 paragraphs are most relevant:
This more or less would have been my response. It may not be worth your while becoming a software developer, but it’s definitely worth your while learning to code.
That makes sense. Programming as a side dish.
It depends on other things about you that we don’t know. What do you want? What’s your skill/ability profile like?
If you’re most interested in money, working as a salaried programmer can take you into the six figure range (the average for Silicon Valley has passed that now). Your skills will obsolesce faster than in other disciplines, and you’ll actually be called on it (doctors skills vary a lot by time of graduation, with older being worse, but the patients don’t do anything about it), but that’s manageable. Unfortunately, as you get older you lose fluid intelligence and so can’t learn new skills as easily.
You can make much more money in startups in expectation (from tail outcomes) if you’re good, but note that one can be an entrepreneur in other fields (software/web startups are nice in terms of low barriers to entry, low capital requirements, etc, but that also means more competition). With a long time horizon if you’re smart enough to reliably graduate medical school and find medicine tolerable you’ll make more money as a doctor than an engineer. Likewise for elite law schools, if you both have the credentials to get in and go to the high end places (although that carries more risk). Finance (investment banking, hedge funds, etc) has substantially better financial prospects if you can get into it, although again nontrivial risk.
Other technically demanding jobs (other types of engineering, actuaries, etc) have similar or better aggregate compensation statistics.
In terms of quality of life, some people really like coding, at least compared to the demands of higher-paying fields (risk, self-motivation, management/sales/schmoozing, intense hours, many years of costly schooling, etc). Others don’t.