That's actually not what a CS degree is primarily about. You learn to code in maybe the first 2 or 3 classes. After that, it's assumed that you can translate ideas into code and you start learning about different areas of computer science.
If you just need to learn to code for a job, there are bootcamps that can teach you that in a fraction of the time and cost.
> But those who can't probably have an ongoing problem in keeping up with the state of the art.
Personally, I wasn't able to learn to code in any meaningful way before college. I had tried to learn from books and online sources but never got beyond basic scripting. After working my way through a bachelor's degree and PhD, I don't have much trouble keeping up with the state of the art now.
Doing cs is not coding just to clarify.
Here's one:
https://www.usajobs.gov/GetJob/ViewDetails/539439100
>a custom build of the open-source search engine Solr, a highly responsive UI engineered on top of React, a high performance distributed brokerage system, and cloud-based hosted services with Kubernetes in Amazon Web Services. The primary programming languages are Python, Java, and JavaScript.
I eventually did study part time for a degree, mainly out of belief that it might help with future career opportunities, but also because I might enjoy it.
I got a 1st, with honours. TBH, the only part I truely enjoyed was the final project. The rest was mildly interesting at best, and a bore at worst. I found 80% of it easy, 10% difficult (maths), and 10% challenging (the final project, but only because I made it challenging).
In retrospect, I don't think it's really made any difference to my career, as I'd proved myself long before getting the degree. I don't necessarily regret it either though - maybe the most useful thing was getting me into the groove of reading academic papers, which had benefited me greatly, both work-wise and in my personal life (health issues).
Ive been a consultant at several companies where other software engineers REFUSED to learn anything unless:
A) it was during work hours B) the company provided a structured environment to learn the thing (usually in the form of paid 3rd party trainers coming on site).
Needless to say, those teams were far from successful.
There's also more and more folks coming in for the money (nothing wrong with that) expecting it to be a 9 to 5 job. It absolutely CAN be a 9 to 5 job given the right environment/company/structure, but no one in their right mind would pay average west/east coast software engineer salary for a 9 to 5 employee. The extra responsibilities, continual learning, possible on-call, etc, are all baked in those crazy 6 figure salaries everyone drool over.
There's totally a time and place for more typical schedule. Just expect to be paid accordingly. In the short term the market isn't quite adjusted to the idea that not all software eng roles are the same, so there's plenty of people who make 200k+ for doing essentially clerical work (that just happens to involve code) but its just a matter of time before that changes (its already happening).
I guess my question would be which government? I do government contracting (US), and degrees are not required. The labor categories are typically written so that if you don't have a degree, you just need an additional 4 years of experience. On almost every contract I've worked on I've met a developer without a degree.
I got into this stuff in early high-school, and those were just "intro to C++" books.
The book that kind of changed my life (and a bunch of other people's as well) is one I bought when I was 19 called "Structure and Interpretation of Computer Programs" (SICP for short). It's a bit heavy, but if you know the basics of programming it's not too difficult. This book really teaches you a lot of fundamentals of software, and to me is the must-have book in compsci, and it's available for free of MIT's website.
Then I just went on ebay and looked up "discrete math textbooks" and "discrete structures textbooks", and bought a few of the cheaper ones.
Then I started finding individual topics that interested me, which largely dealt with distributed computing, weird abstract math, and video processing. For that, I bought the book "Programming Distributed Computing Systems" by Varela, "Certified Programming with Dependent Types" by Chlipala, and random books on Fourier Transforms from eBay.
This is over the course of a few years, and it was intermixed with about a million different blogs and tutorials to get me better. I've found if you stick with the more "theory-heavy" languages like Coq, Idris, or Haskell, you end up picking up a lot more of the compsci concepts that you might learn in school, just because there aren't a million people constantly yelling "OMG YOU DON'T NEED MATH FOR <insert language here>".
I studied the same books and did the same exercises as my brother the CS major and do feel that my training would be incomplete without that. But I don't feel disadvantaged by not doing that within a class structure.
The main thing I lack is access to government jobs, which routinely require credentials I don't have. But I've probably had a more diverse and satisfying career as a big fish in small private sector ponds.
Not everyone can learn coding without externally imposed structure. But those who can't probably have an ongoing problem in keeping up with the state of the art.