Cool Cleveland has a post up called the STEManifesto. The gist is that there’s a job gap and we need to fill it with science, tech, engineering, and math (STEM) careers, and the traditional route of going through academia isn’t working. I have to agree with most of what that post is trying to say, but find it misguided on a few things.
I can see how racking up debt in college with classes that aren’t needed isn’t an ideal solution. The best programmers I know are self-taught, so that route isn’t necessary. It’s easier today to get into programming with boot camps like The Software Guild in Akron, or We Can Code IT in Cleveland, and Massive Open Online Courses (MOOCs) like Codecademy and Udacity.
What I also agree with as a professional developer is you shouldn’t reinvent the wheel. One of the good practices in software development is reusing what was already written and tested to work correctly. You typically shouldn’t reimplement software to alphabetically sort a list at your job just for the challenge. Your function may have errors or bugs. Sorting words alphabetically is such a common task, there’s probably pre-built software to do that for you. An often used software library would have been proven correct in the field and vetted by people better than you.
But that doesn’t mean you shouldn’t learn the theory behind those libraries as the Cool Cleveland post suggests. I find the idea of not learning the underlying theory and never opening the black boxes to be abhorrent. You shouldn’t reinvent the wheel on the job, but education isn’t the job.
Just as the software boot camp and MOOC trends are redefining the tech world, so are the maker and hacker space movements with places like Cleveland’s Maker Faire or Makers’ Alliance, where the idea of never opening the black box is antithesis to what they are about. At these maker/hacker spaces and events, you beat away the blackness of that box with the light of discovery, sometimes smashing the box outright to get the light in there, or there isn’t even a box because you’re the first to put the creation in your dark cube.
Reusing existing software is key to good software development. But sometimes that is not possible. As mentioned in the Cool Cleveland post, programming is seeping into other disciplines like biology, in contrast to the post’s other claim that you shouldn’t learn a wide array of subjects. In graduate school, I teamed up with a biology major to work on DNA sequence alignment. There are numerous programs and libraries for that, but none matched his needs. He needed to learn the underlying theory to develop software to match his needs.
Also mentioned in that post is how tech is seeping into music. Let’s say you want to create a startup to find songs based on just a snippet of audio. If you only learned how to use existing libraries you’d get nowhere because no one invented a ready-to-use library or application programming interface (API) for that yet. You’d have to invent it yourself, which means knowing the theory behind it. That is what the cofounder of Shazam did. You could tell your students all the functionality they need is already on their computer, but then you are removing them from the field of innovation.
As for eliminating subjects that seem completely unrelated, it’s interesting the example given in that post was French impressionistic interpretation. That is a subject known for going against convention, something regarded highly in startup culture with its talk of “disrupting markets.” Appreciating aesthetics isn’t useless in software development either. Ask any developer about “elegant” code. There is no metric for that. One of the greatest volumes on programming by someone in the pantheon of great computer scientists, Donald Knuth (who went to Case in Cleveland), didn’t call his epic work “The Theory of Computer Programming” but “The Art of Computer Programming.” Similar to what Edmund Harriss said of math, software isn’t grounded in the physical world, so the only guide is beauty.
All that I’ve mentioned at this point is tech, the T in STEM. That’s because that’s all that post seems to recognize. I think that’s because the post focuses on not teaching the underlying theory, which is what all the other letters of STEM (science, engineering, and math) are all about, and the only viable course we have for those fields right now is academia. If you’re focused solely on generating jobs, then more jobs means you’ll eventually need to innovate. That means making something for which we don’t already have a software library.
No, not all courses or subjects of study are strictly required to write a web app. But no one can deny that greater understanding provides better insights and leads to the creation of amazing new ideas, and is just plain cool.