For a period in the 1980s-1990s, you could argue that calculus was not essential in computer science. It was all discrete math for a while. But then came machine learning, and it's all about hill climbing and gradients now.
For a period in the 1980s-1990s, you could argue that calculus was not essential in computer science. It was all discrete math for a while. But then came machine learning, and it's all about hill climbing and gradients now.
Contrary to popular belief, there are NOT that many ML jobs out there and the ones that are there are more about data science and messing with model zoo type of shit than actually coding useful programs. Most programmers will be lucky if they get to integrate inference of a prepared model into the apps they work on.
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.
MIT best prepares people for those less well defined roles, such as designing the next era of web browsers. For that, you can never know exactly which skills will be needed, so it's probably best to have as many neighbouring skills as possible so you don't hit problems you can't solve merely because the knowledge required to see the best solution was in that topic your course didn't cover.
Who knows, maybe the next era of web browsers will browse the web for you, and then condense everything they learned from thousands of resources into a single paragraph for the user to see. And for that, they might need ML.
Absolutely.
Explicitly.
I have just been a bystander, but it's clear.
I don't think that MIT grads are in this thread wasting their breath, though. Which I think is a good decision.
[1] https://lemelson.mit.edu/ [2] https://innovation.mit.edu/resources/
Having worked with quite a few MIT grads over the years, at least in my anecdotal experience, they were smart people who were no more or less likely than any of the other smart people working around them to stumble upon the next evolution of the web browser.
I've always enjoyed math and kept enrolling into it out of habit, until it became so esoteric, and my actual interests more solid and practical.
I find a lot of my university career was fascinating and... useless. Not just from "I will never use this directly perspective", but also largely from "this will give me broader understanding and framework and enable me to learn faster" perspective. We can have wonderful philosophical discussion on what University should be for - job prep or educational enhancement for the sake of it - but truth of the matter was that I envied those in Engineering fields who had fun AND learned AND were doing practical things AND were going to apply some of it. Whereas my 3rd and 4th year maths were just maths for the sake of maths.
I may be hanging out with uninteresting crowds, but same experience is broadly true for my friends and co-workers - Java developer, VMWare architect, Database Administrator, ERP developer, etc. We all value education and love learning and will go on our vacation with couple of technical books - but university Computer Science degree seems very mistailored, or at least, sold wrong.
I was in college long ago and for my CS undergrad and masters took the usual CS and math courses. When I needed electives though I took courses like economics, finance and accounting. Many years later, those electives ended up being the most useful.
The CS and math courses I wouldn't consider useless though. I'm sure I lean on theory I learned without realizing. But, at the time I couldn't have predicted working in small companies or startups and how important basic finance and accounting would end up.
The goal of the degree is to prepare people for data analysis, machine vision, 3d graphics, ML, signal processing, and similar. If you're not into that, going to MIT is wasteful for everyone involved.
That's not elitism talking; that's just the nature of MIT. Other schools aren't like that. For example, if you want to do a startup around a database-backed web application, Stanford is a fine choice. I'm not arguing Stanford is either better or worse; it's just a little bit less academic and little bit more entrepreneurial. There are other schools which emphasize other things. Harvard or Yale will move you more into the class of powerful people. Etc.
I'm sure the same could be accomplished with other fields of math but I don't feel it's necessary to switch. Would be extremely hard to find good teachers and course materials for combinatorics or graph theory to.
But, you know, like Latin in the 19th century was always still useful to one's education, calculus is still useful. It is also something a lot more people know how to teach, than know how to teach statistics (or other more useful topics). I think the latter is the primary reason it remains central to most engineering programs.
You may have some short term success without understanding the algorithms at all, but as the field changes and you are no longer in school, being able to keep up at least somewhat with papers is very useful.
I agree that the day to day is mostly about formatting data though!
But 99% of the alterations you can make to an ML library, will not make nearly as much difference as what data you feed into it and how. If it's the right data, many ML models will work, and if it's not the right data, none of them will. But regardless, none of this requires, or even really benefits from, calculus.
Was it? Or was it perpetuated by a community that happened to already know it and so they leveraged it?
So many terms can be quickly understood if you understand Latin prefixes and suffixes, and the better you understand Latin the better you'll understand its use in any of the modern Western languages.
people aren't going to school to learn computer science, they are going to school to get a job and be effective in that field, but the universities shouldn't feel obligated to adjust to that since they've been for the privileged folks who are actually there to pursue education for the sake of higher learning for nearly 200 years (or much longer). it is mere coincidence that they have to put up with a few decades of people needing the school for subsequent employment and the school will exist after this phase as well
so with that observation it really is useful to push for trade schools again, for the people that actually need it
for the people that are really going for that upper echelon of access to other privileged people whether they get a wage-slave job or not, yeah they should slog through MIT, but everyone else should consider other things that more closely match the lane they were born into
But don't have to
Community colleges should have electives and tracks that are similar to trade schools: getting you up to speed on whats relevant right now
But as long as they are pushing towards associates degrees and transferable credits to universities I think the utility is less optimal for people looking to be efficient at a job
(Also employers should be training people for what they actually need too, sparing us all from imagining that the Computer Science major is necessary to synthesize better outcomes in unknown situations)
Those are totally useless skills. If you live in America and your only contribution to society is being pleasant, knowing how to fix things around the house, and basic accounting, then expect your livelihood to be replaced by someone willing to do your unskilled work overseas for a fraction of the cost in the very near future. Not to be harsh, but that's the reality.
Also, fixing things is highly skilled work and very hard to offshore.
Don't you mean the Plurinational State of Bolivia?
My undergrad was in a non-technical area and so I never had to take calc in undergrad. Having later learned it to solve problems, it has become clear to me that it would be preferable if everyone with a college degree knew calc. I was, in retrospect, wrong to have tried to avoid it.
I'm well aware we don't live in that world, unfortunately many people with a college degree also don't know write effectively, or perform critical analysis on texts, things I also thing should be part of being college educated.
> Knowing basic accounting, being able to fix things around the house, being pleasant to work with, etc are far more important.
I'm not sure how knowing calculus reduces these things.
Everyone needs to learn calculus because it opens up a gate into a form of beauty that no amount of work can ever satisfy.
The idea that people only need to learn what they need to live their external lives, those of work and interpersonal relations, is just wrong.
You need to learn calculus as part of your own internal life.
My point is that in the zoo of mathematics, the reals are just one exhibit. Equally valid is to map phenomena onto topological spaces, inner product spaces, sets, groups, rings, fields, lattices, topoi, etc... People have been standing on Newton's shoulders for so long that all they can see from there is ground well worn by their colleagues who stood on the same shoulders.
I think we'd be much better off if you had to specialize in some part of math, but that different people specialized in different parts of it without necessarily taking a major in it. This would maximize the sort of happy accidents that lead to discovery because for any given phenomena you now have a wider variety of perspectives on it, rather than just a classroom full of analysts.
I'm against the reals in particular because I think they're especially suited to zero sum games, and I wish we played fewer of those.
Then lo and behold, turns out I like computer graphics a few years later, and all that linear algebra and multivariable calculus I skimmed through slams me back in the face as I find out that GPUS chew through such math for breakfast. I could never find the application of such math to my career track until long after I took those classes.
To this days to be a developer university must be seen just as something extra that you do if you want to occupy positions that goes beyond being a simple programmer.
I also don’t particularly know what goes into calculus (in the U.K. we studied something called ‘calculus’ in high school which included integrating/differentiating polynomials, some trig functions, easy integration by parts and, in the ‘further maths’ course, some second order linear ODEs with forcing, first order ODEs via integrating factors, first order linear systems of ODEs via the eigenvectors method, and I think some integration by parts based recurrence relations. At university things were divided into ‘calculus’, which contained practical tools for applied maths like Green’s theorem or partial derivatives or contour integration or Sturm–Liouville theory, and ‘analysis’ which had foundational things like epsilon–delta stuff or Dedekind cuts or the definition of a limit or Riemann integration or the conformal mapping theorem and so on.
I think a first course in the thing I called analysis above is very useful for building mathematical maturity (ie the ability to not deduce false things but also playing with definitions and thinking about counter-examples) but the calculus knowledge can be useful for understanding the physical world. But I don’t know if that understanding should be required for e.g. computer scientists.
A few calculus examples I can think of in computer science:
- Some famous story of Feynman ‘interning’ at Thinking Machines and solving some capacity management problem using bizarre differential equations with terms representing e.g. ‘bits per second’. No sufficiently good solutions had been found using discrete methods.
- I was once asked an interview question which I suggested solving with differential equations but I was quickly directed towards not doing that.
- Honestly I can’t think of many more but maybe this is a lack of imagination. I think there are a few things that are really probability theory that you need some understanding of calculus for, e.g. emergent behaviour of distributed systems, reasons to prefer random cache eviction, some intuition to answer a question like ‘if the time X takes has some distribution, but sometimes we have a gc pause for y milliseconds, how would that affect the distribution?
I think you get into calculus very quickly once you start dealing with uncertainty. A bit is 0 or 1, a discrete value. A random or unknown bit has some probability of being 1, a continuous value. A process that produces a random bit does too. An unknown such process has a distribution over such probabilities. Things like that are fundamental for things like communication or image classification.
Also, though, a major application of computers is modeling and controlling the calculus-based physical world, just because they are so good at number crunching. Particularly popular examples are ray tracing, music synthesis, and motor control.
Anyway, as nonconvex models are usually stacked convex models, you can find works that incorporate these submodular functions as neural network layers.