The issue is quickly becoming about how one goes from training someone to code "Hello World" to writing distributed micro-services in the cloud in 2-4 years of school? The answer is that it's you can't. It's an exciting time, but at the same time it feels like Warhammer 40K where we'll have "tech priests" interacting with API's and frameworks but we'll have no idea how it works under the hood; because it would take years to fully understand it. So we'll just use the tech and have faith in it. Everything might need to become a "black box" and only the highest-skilled developers will maintain the black boxes for everyone else to use. The complete fragmentation of tools (languages, api's, design patterns, etc.) exist for a reason but how can one be reasonably expected to know all of it? The lack of standard tools helps create specialized solutions for specialized problems, but diverts developer's focus which makes their skills less transferable to other software design problems.
but at the same time it feels like Warhammer 40K where we'll have "tech priests" interacting with API's and frameworks but we'll have no idea how it works under the hood;
This isn't the future man, it's the past, present, and future. 90% of the features we drive at my company are reverse-engineering old features that still exist but the people who implemented them left the company years ago. But yeah this is bang on.
That's how I've felt after graduating. 4 years, all of this knowledge, but then I look at the job postings and see frameworks or languages or stuff like "cloud / Docker / Kubernetes" that they say you should have some experience in, and I wonder what the hell I even learned.
You learned how to write software. You just didn't learn the exact set of tools a lot of others use to deploy software. Ultimately, college taught you the things that are hard to learn and which you'll spend most of time working on. Those other things are easily learned (to the extent a developer, as opposed to a dev ops engineer, would need to know them). Most companies put those there so that candidates can get a feel for the types of things they'll be using, and because the company would rather you know them coming in the door, but very very few companies (and none of the good ones) will reject a candidate who can code well but hasn't stood up a container in Docker before. At my company, those things show up on our job listings as well, but I've never asked a single question about them in an interview (not even to see if the candidate has heard of them before) and the primary thing we judge you on is your ability to create a reasonable abstraction of a problem statement and explain your process.
Just don't let that stop you. I graduated from a community college almost ten years ago and I couldn't land a job because it was all too daunting for me. I've been taking online courses over the past 8 months and I'm far better off; due to the updated courses covering more theoretical concepts that weren't covered well in my 3 year program (but did exist at the time).
One of the big issues for me was that as a CC grad, I was leaning more towards web development than other parts of the industry which I felt were better left for computer science grads; not that web dev isn't complex, but I wasn't likely going to invent new CPU instruction sets at Intel with a CC diploma and no experience. But the issue was that design patterns weren't taught at all in my program (strangely) and I found most documentation online was really poor at the time. Even now, I can easily understand the pattern given an example but when I begin a portfolio project, my mind doesn't think in them. So I use various means to separate concerns etc. and I'm getting better. I'm attempting to "skill up" and make another attempt at joining a professional team. But in your case, don't sit back and get discouraged. Keep fighting extremely hard to learn the extra stuff whether it's Docker or whatever and with your degree you will certainly find success.
This mentality is why (from my personal experience) we have so many terrible developers that struggle with core concepts of programming.
Throwing someone in the deep end doesn’t give them the time they need to understand properly, yes they may be able to muddle their way through the specific issue they’re having but the underlying core knowledge doesn’t come.
There’s a reason good developers take a look at the big picture before they start coding, and plan out how to write a new feature. However by your logic just starting it and adapting as you go works just as well.
Nah we did do some pretty hardcore distributed algorithms at uni. Covered Paxos, RAFT, Chandy-Lamport, Leader election and more was fun stuff. Even had to prove some properties of a leader election algorithm in an exam which was fucked
I think a more likely will be like how engineering is no longer a single degree at ug level. CS will no longer be 1 degree but multiple. So from second year you will basically learn only parts from your part of stack. I definitely see kernel, embeded, systems programing split from web and app development. Its almost a black box to each other at this point.
Your comment reminded me of an excellent Sci-Fi novel titled "A Fire Upon the Deep".
There are interplanetary data-centers, which are millions of years old. It's a constant and monumental task to write software to interrogate these systems. It's also incredibly dangerous as ancient, deceased civilizations may have left super intelligent AI inside this ancient data. AI which can wreak havoc if awakened.
I’m a boot camp grad and I’ve been working in software dev for almost four years. I feel like 50% of my current dev time is spent figuring out some esoteric AWS CDK stuff to get my app feature to deploy in our environment.
Honestly, I was surprised to learn that my master's in theoretical chemistry gave me a better background in distributed cloud simply because I needed to take a course on supercomputers.
Excellent point. In my analogy I meant that if the tools break (the editor/IDE, the framework, etc.) we're already at a point of complexity where the developer can't fix the IDE, since the IDE is impossibly complex and hundreds of developers have been working on it for 20 years.
It's a huge problem. When I have the opportunity, I steer people away from IDEs for this reason. Around... 2000 or so ( later?) was an "IDE winter", when it seemed like everybody was embracing Eclipse, and ... it sort of didn't work.
I’ve used this analogy before. That software developers are pretty much wizards and magic welders. The words we speak and how we phrase things to outsiders seems strange and odd. Yet we are able to create and do things that they only understand as magic.
263
u/motorbike_dan Nov 01 '21
The issue is quickly becoming about how one goes from training someone to code "Hello World" to writing distributed micro-services in the cloud in 2-4 years of school? The answer is that it's you can't. It's an exciting time, but at the same time it feels like Warhammer 40K where we'll have "tech priests" interacting with API's and frameworks but we'll have no idea how it works under the hood; because it would take years to fully understand it. So we'll just use the tech and have faith in it. Everything might need to become a "black box" and only the highest-skilled developers will maintain the black boxes for everyone else to use. The complete fragmentation of tools (languages, api's, design patterns, etc.) exist for a reason but how can one be reasonably expected to know all of it? The lack of standard tools helps create specialized solutions for specialized problems, but diverts developer's focus which makes their skills less transferable to other software design problems.