The biggest difference I find between people who have been to college and those who have not (ie, self-taught) is their breadth of knowledge.
There are various required classes in a college program that are designed to be “survey” classes that present an entire landscape of approaches to different topics. And there are several such classes required for the same reason.
Technically speaking, I was a Math major, and I was required to have a bunch of core math courses. Then there was a core of computer-related courses. Then there were a lot of electives I could take based on my interets. When I was applying for graduation (BS), my advisor looked over my studies and remarked at how broad my interests were. He counted nine (9) different computer-related fields, and said most students only got exposure to 4 or 5. I just followed my interests, while a lot of others followed what their advisors told them to take. I can’t say one is better than the other, but I’ve certainly met lots of devs who have what I considered to be extremely deep and narrow understanding of various programming topics at just the BS level.
As a programmer, math has been a constant thread in most of my work, but it has all been fairly simple math (if you want to call it that).
One quite innocuous (and required) class that I took was MAT243 Discrete Math Structures. It was all about counting problems. There was only one guy who taught it and he had the personality of a wet dish rag. Nobody really liked it. The material itself was quite boring, to say the least. However, it turns out that this one class probably has played the most central role of all math classes I took in school. Most of the rest of the core math classes (like calculus and linear algebra) have had zero impact on anything.
One class i wish I would have taken is Set Theory, because SQL is based on that, but back in the 70’s, SQL was barely even a thing yet.
Now, things could have been different, because the jobs I got were a result of searching for work that interested me. I actively avoided anything dealing with heavy-duty math topics that got into the realm of calculus, numerical analysis, and hard-core linear algebra. I loved trig for some reason, and I used some basic linear algebra once when I did some stuff involving image analysis and manipulation, although that involved understading and applying a lot of existing material rather than having to write code from scratch.
As it happens, I’ve done a lot of work in areas that leveraged my studies in the world of Compiler Construction, building lexers and parsers and similar stuff, although most folks may never run into that. I’ve always enjoyed working with lingusitic and language-related problems.
The point is, I’ve worked with many self-taught devs who had a lot of very detailed knowledge of the subject. But what they lacked was breadth.
When your knowledge foundation is built on narrow topics picked up over time based on choices you’ve made yourself or what your employer has made for you, it’s not common to “survey the landscape” in the same way that you get in a typical college curriculum. And that has often been important to me in being able to find alternate approaches to solving a problem.
I’m not about to say that having classes in humanities and social sciences is helpful to programmers overall, but someone who wants to get into Management might find them quite helpful at some point. I was a Math major, and yet I’ve never used Calculus and things built on that, although from time to time I’ve wished I had a little more so i can play around in the arena of things that let you analyze and alter sound profiles. But so much of that has been covered by others that you can just search around and grab a library to do what you need, so it’s not a great loss. But reading the theory behind a lot of thee algorithms is hard for me to follow.
One of the biggest areas where I've observed this to be relevant, and will probably never be addressed, is in the web world involving certain types of web design. User-facing stuff lives in the world of Graphic Arts, while back-end support (ie, database stuff) is more classic programming stuff. There are lots of schools that teach UX/UI design from an “art history” perspective that’s targeted at artists. These people often must deal with some kind of back-end DB, and frequently need a middle-tier to apply a lot of security and filtering as well.
These folks are NOT “programmers” although more and more javascript is being employed on UIs today. So we end up with people who have virtually no classic traiing in “programming” or “math” being asked to solve classic back-end and middle-tier programming tasks, and companies wonder why their systems run so poorly. But, boy, do the “look great”. :)
In situations like this, a project really needs to have TWO people working on the project: one of whom is more of a visual artist (graphic design) and one of whom is more of a programmer. Unfortunately that doesn’t seem to happen very often in my experience. The term “full-stack” has come to imply someone skilled in the entire gamut of skills — jack of all trades, master of none. When people programmed in VB or FoxBase or things like that, the whole magilla was built into that one tool. It wasn’t a “stack”, it was just one big dev tool or another, Today it’s like someone threw thse tools at a brick wall and they shattered into component parts.
Back before we had IDEs, we had all of these tools, and you used “make” to help you build things and you just used whatever “commands” you could find to help. Today, they’re all taught as separate subjects in some schools. Back then, everybody was dealing with the same pot of stew filled with most of the same ingredients. Today, your likelihood of being hired is how many of the different ingredients you have hands-on experience working with.
Companies don’t want to waste time and money with people having to learn stuff — they want people who can hit the ground running. So even saying “full stack” isn’t meaningful unless you say what each of the components of that stack are. Never mind that a lot of them at each layer are fairly equivalent. The people laying out these requirements often don’t have a very broad base of understanding themselves, so they rely on advice from whomever they can find to advise them. And sometimes it’s just left to someone in HR.
Anyway, my point is that self-taught people tend to have an excellent understanding of things they’ve encountered over time. Left to their own devices, most people do not “survey the landscape” from time to time to see what else is out there, in the way a typical 4-year college degree affords students. Yes, a lot of what you’re exposed to is ultimately going to be irrelevant, but a lot of it comes into play in unexpected ways throughout your career.
I’ve worked with self-taught devs who don’t know anything about regular expressions, or what lexers and parsers are, so when we’re facing a situation where we need something like that, they don’t even know what to look for. If you have no exposure at all to some topic, you don’t know any relevant terminology, or how to research it, or anything. You’re just groping around in the dark. I’ve seen this a lot, and it exists frequently because people don’t like to ask for help.
I ran into that recently myself and posted an explanation of what I wanted in a group, and several people came back and explained there’s a whole “body of knowledge” with its own terminology and whatnot, stuff for me to search for on Google and dig into.
As it happens, there are lots of little niches like this we’ll all encounter over time. However, most college curricula are designed to present a lot of stuff that most people in the field will enounter repeatedly over time.
I think it would be possible to teach an entire CS program without the humanities and social-science aspects in half the time they take today (2 years) and that would be quite sufficient for most developers in their career, without much loss of value. But again, if you want to get into any kind of Management role, you’d be at a loss relative to others who did get this broader background in college.
-David Schwartz
---------------------------------------------------
PLUG-discuss mailing list:
PLUG-discuss@lists.phxlinux.org
To subscribe, unsubscribe, or to change your mail settings:
https://lists.phxlinux.org/mailman/listinfo/plug-discuss