Every other discipline out there has a clear separation of pure from applied science. Why can't we do the same for software? What we end up with is borderline fraudulent coding bootcamps to fill in the gap.
Every other discipline out there has a clear separation of pure from applied science. Why can't we do the same for software? What we end up with is borderline fraudulent coding bootcamps to fill in the gap.
That being said, there are probably lighter ways of teaching that instinct than full-depth classes. I try to listen to podcasts these days as a way of expanding my horizons.
Practical, industry expert-led coursework has been by far the most outstanding education I have ever received. My DSP professor was (is still) an adjunct to the university I attended and works a normal job 9-5 during the day at some engineering firm. He was easily the best educator I have ever experienced because he brought reality into the classroom every day. I still vividly recall the 20–30-minute lecture/rant about making power point presentations that don't suck.
It's all the little things for me... The nuanced details like "why are you holding it that way?" are impossible to discover until you have a customer complaining at you for a while or have someone who experienced it themselves giving you a heads-up.
For me, the future of practical software engineering education looks a lot more like a machine shop than it does a university campus.
I'm sure you and I both took plenty of math classes, and therefore we won't ever really know what our computer science skills would be like without a rigorous math background. Even if I never touch anything more complex than algebra II again, taking ~30 credits of applied math allows me to think in a way that I wouldn't otherwise without that background.
If you really want a "math free" intro to tech, look into Business Information Systems. That tends to be more ad hoc, at least for now. At some point, people will start to care about software assurance even in that context, and the standards will rise accordingly.
Discrete, sure, but Calc? Not for most.
Beyond that it’s a very simple idea you can cover at the same time as your doing Big O notation in the first place.
You need very little beyond high school level math for most CS. Some areas, sure.
I've done things in my career that touches on a lot of different areas of math. But the number of times I've regretted not having taken more math have been pretty much non-existent. I wish I remembered a bit more of my trig, mostly.
Most software engineers come into contact with far less CS subjects where math matters than I do.
I don't have an issue with a place like MIT insisting on lots of math, but this notion that you need to understand so much math for software engineering is deeply flawed - you don't need much even for a lot of theoretical computer science.
(Then there's the whole "learning to code" part, of course. This is actually where middle and high school math provides useful application domains for learning to code, and people have tried to teach coding in schools since the 1980s.)
I opted out of pretty much all the math I could at university, and at mine you could opt out of almost all of it (I had to take one introductory course which mostly served to bring those who hadn't taken much in high school up to scratch, and one introductory stats course).
Many of my other courses touches on subjects where a mathematician probably would say "but that's math". E.g. my compiler courses of course touched on a lot on parsers and grammars that are effectively just math restated. But those restatements matter. Maybe if more math was taught in ways that downplayed the dense notations more people would actually stick with it.
And yes, we need familiarity with formal, logical reasoning, but the primitives you need to be able to understand coding are really basic, and often easiest introduced by showing people code rather than giving it the mathematical treatment.
It's not necessarily math itself that is the issue, but mathematical notation and the way we teach it - there's a very stark divide, I've observed, between those who prefer those really terse notations that you must take time to decipher, and those who want notations that can be read like prose. For my part I'm firmly in the latter camp.
The primitives are hopefully simple, but the logical implications are not. That's why it makes sense to have both.
What you're talking about sounds an awful lot like the program I went into initially at a community college. They taught you some coding in a few popular languages, some database concepts and sent you on your way. I dropped out after a year and found a job.
I ended up going to a four year program after a while. Turns out, a lot of the good jobs in software engineering require understanding those peaky abstract fundamentals.