I studied maths and computer science at university for precisely this reason - I heard many programmers say they wish they knew more mathematics. Honestly there have been very very few times where my knowledge of mathematics has directly helped me with coding, possibly even none.
Unless you continue to study mathematics, which you will likely only do if you stay in academia, you will forget what you've learned! It boggles my mind to think that I used to know advanced calculus, group theory, linear algebra etc. I have forgotten all of it bar the very basic concepts behind them.
That said where it has helped me is in logical thinking - stuff like abstractions as the article describes. Writing mathematical proofs requires logical precision which is very helpful when programming. If you spend enough time studying mathematics then eventually some of the core concepts will sink in and it will help in thinking of solution. Though I would not advise that you study it with the aim of thinking "How can I use this knowledge in programming" - its not directly applicable unless you are doing graphics programming, AI, data science etc.
"It boggles my mind to think that I used to know advanced calculus, group theory, linear algebra etc. I have forgotten all of it bar the very basic concepts behind them."
I thought it was just me!
edit: we should add confessions like DHH twitter where all these advanced programmers confessed they had to look up print() commands on google or whatever it was.
edit#2: The point might be that you don't remember linear algebra but you remember there is that tool to help. If multiple, parallel computations come up, you know to look up linear algebra. If a rate of change question comes up, you know to brush up on calculus. If the halting problem comes up, you know it isn't solved etc.
I tend to think of math as having two parts: a way of thinking along with all the things people thought up by thinking that way. To learn the first, you have to study the second.
Examples of the second are calculus, group theory, algebra, etc. Examples of the first are being able to define useful words with useful logical consequences, knowing when you can infer things beyond what can be directly tested, detecting patterns that might profitably be abstracted, etc. It's a bunch of force multipliers for your logical mind.
Specific subjects were developed with the goal of solving particular kinds of problems, so if you are faced with such a problem, it can be very useful to know what people have already figured out! However, if you're not, then it might not be so useful remembering these details.
>Honestly there have been very very few times where my knowledge of mathematics has directly helped me with coding . . .
> its not directly applicable unless you are doing graphics programming, AI, data science etc.
Well, those are pretty large fields!
If you ever get to touch machine learning, that's all about linear algebra, sparse methods, numerical methods, calculus in many dimensions (e.g. gradient descent).
Any kinds of image or signal processing, and you run into your old friend Fourier Transform, which is, again, analysis, linear algebra, complex numbers.
In my previous job, I got to have fun computing an orthonormal basis of polynomials on a disk, and doing some linear algebra with that (although to be fair, fields like computational lithography are probably more math-heavy than others).
The amount of programming jobs where math would be directly applicable is on the rise.
That's not why I studied mathematics. I do it because it is an art[1][2], and because I can. But it certainly comes with certain benefits in the workplace.
I think you stumbled exactly into why people say that (including myself) - proofs.
With AI, ML, and Data Science becoming hotter and hotter topics, a lot of the material is still VERY mathematical proof heavy. This [1] is an example of understanding the Lagrange multipliers for SVMs. This is not a worked example, but a repetition of the mathematics. If you are shaky on what dL/db means, then you're lost. It doesn't help that the only other options are import sklearn tutorials, so you only get a slight understanding of the inner workings of something like SVM. You still can't do it by hand, if say for example, you were given a toy problem with like 10 items.
Let me shamelessly advertise a book for programmers I am writing for this exact case: Numerical Linear Algebra for Programmers: An Interactive Tutorial with GPU, CUDA, OpenCL, MKL, Java, and Clojure!
Unless you continue to study mathematics, which you will likely only do if you stay in academia, you will forget what you've learned!
You've remembered more than you think, most notably you do (or would if appropriately prompted) remember that things are possible and probably a bit about the approach. You don't remember the details of how, but those are details you can look up if needed - you have the framework in which those details fit and that's the important thing.
Though for the most part I hardly use advanced mathematics in my day to day job, it is sometimes the case that math is like a super power. Where if I programmed the obvious idea to solve a combinatorics problem, the solution would never be tractable. But, then I learn the mathematics of combinatorics, and suddenly I can write a much simpler and much more powerful solution.
So, math doesn't help frequently (or perhaps not trying to use it enough), but when it does it can help tremendously.
It can also help deflate a lot of the hype in AI and ML, especially if you know the fundamental theory of ML.
> Honestly there have been very very few times where my knowledge of mathematics has directly helped me
And that is the intended use of math! Knowing math is like knowing judo or another powerful martial art. You take great effort to learn and master it, not for its "practical applications", but because you are honestly interested. One day, hopefully never, this knowledge will save the day, and you will be the only one around who has it.
I chose to study mathematics in university precisely because of the second reason: logical thinking. By extension that includes the ability to write proofs. Even if you aren't actually writing proofs on the job, getting into proof-writing mode will make your technical exposition much better.
>its not directly applicable unless you are doing graphics programming
You missed the point. It actually is directly applicable.
The difference with math and programming is that the axioms of a program constantly change. A reassignment, a mutation is an axiom mutated.
Otherwise they are the same.
You could invent a style of programming where all things are immutable. Then that style of programming will be virtually indistinguishable to math. I wonder what I would call such a style of programming?
I feel like writing almost the opposite: An Engineer's Regret: Focusing Too Much on Math.
I did a lot of calculus, some functional analysis, numerical methods, etc. I've never needed even basic calculus for my engineering job. I did use it a few times, but mostly because I was looking for an excuse to use it. No one cared, and demonstrating such skills played no role in my annual review. Furthermore, everyone around you has forgotten this stuff, so the system will shift to not valuing math.
Of course, jobs do exist that need heavy math. They are not the norm, and there is a lot more competition to get those jobs. With the exception of machine learning, your employer will value you as a SW engineer more than a math wiz, precisely because the demand for the former is much higher compared to the supply.
(I honestly don't regret it - but the value of knowing advanced math in the professional world is overestimated).
The thing is, software engineer salaries are going down and data scientist salaries are going up and the data scientist jobs are taken by people from the sciences, who know that kind of math, that CS courses maybe are not that heavy on. So there is a great big incentive to know "maths" (continuous maths). And if one does not know, the incentive is for one to learn.
I feel the post is misguided. Pick any career out there and you'll find that in a complex enough cranny of it there is mathematics. That doesn't mean that plumbing IS doing mathematics, or fixing the washing machine IS doing physics; at least not in any substantial sense. If you're cutting web APIs, writing wrappers, wrangling pixels; you wont find maths useful to you very often.
If you find yourself working in data science, cryptography, compilers, formal design, etc then obviously maths will be indispensible to you. Having said that most the maths that you need in order to pick something up and implement it is within your grasp and you'd probably have to learn it anyway even if you did know some maths. Recall, there is no "know maths"; you only ever know some maths, and once you've done it long enough you develop an ability to "do maths" which is in some bizarre way independent from any actual maths you know.
As a final note and honestly to hell with lamenting the past. I think if I could do it all over again; I would... and when I did I'd most probably want to do it all over again, again.
Math is a subject that you don't understand why you need it till you see real-world applications for it, especially higher-level math. Rather than teaching math in a way where you solve equations, students need to be taught to 'think' mathematically, similar to mental models. In fact, a good number of mental models have a strong grounding in mathematics. Seeing the world as a set of mathematical problems gives you a leg up on a number of things.
The thing is - if Programming corresponds to Maths (according to Curry-Howard) what is really happening is Mathematicians and Programmers are disagreeing over language, not over substance.
Mathematics is a formal language. As such - it's part of the Chomsky hierarchy.
And if it's part of the Chomsky hierarchy - we can build parsers/interpreters/compilers for it. So why not standardise it all into a shared library?
> As computer-assisted proofs become more and more popular, expect plenty of cross-polination between software engineers and Mathematicians.
Similar things were said in the 1950s and 1960s. I don't remember specifics but our lecturers told us that computer scientists back then thought that they could actually just mathematically express a program and there would be no need for a programmer.
The Vienna Development Method has been around for god knows how many years and have never caught on.
Saying that programming is like maths, is the same as saying cooking is like chemistry. Sure there is lots of chemistry going on in the food, but I doubt many chefs know or care about the chemical properties of organic compounds.
Additionally we actually did a course on VDM back in 2006/2007 and the lecturer said that he had only encountered one team that proved their program to be correct and it took them about a decade.
You could argue the code itself is the mathematical expression. But honestly as someone that has a very strong Maths background and moved to Software Engineering most software unless you are doing something very specific like a sorting algorithm a lot of code isn't really that algorithmic, you are in the vast majority of cases just expressing a set of business rules and that is in my experience is best described by Use Cases / User Stories.
For most businesses this is simply a waste of time. Getting developers to write tests is hard enough and businesses don't see the benefit until things start going horrifically wrong.
One issue that it glosses over is that in mathematics, the object of study is a-priori truths (and mathematicians are usually Platonists). I would express this as saying that math is interested in knowing what's true. So obviously it is applicable to proving things about programs. So far so good.
But programming involves a lot of work which could be described as a-posteriori. As an example on dictionary.com puts it, "an a posteriori argument [...] derives the theory from the evidence". Programmers are designers, wrestling sense out of complex and sometimes poorly expressed specifications, requirements, and realities. This doesn't map onto mathematics: it's neither (in Gowers' terms) theory building nor problem solving, because mathematical theory building is an a-priori business dealing reflexively with mathematical tools, not with theories of the outside reality. A typical large software system is an unwieldy, organic thing, to which mathematically formulated theories apply in the same way as they do to biological organisms. Sometimes math can describe aspects a complex system well, but it can't tell you how to build it, any more than it can tell you how to build the Parthenon.
...maths is not a formal language by any stretch of the imagination. I think about the best definition one can give is maths is what mathematicians do, and maths notation is what one mathematician writes down to communicate mathematics to another mathematician.
It's circular in about a dozen ways but that is as it is IMO.
I do sometimes think more math might unlock more options for my software career (like if I had a better grasp on calculus I could be more effective at 3D graphics and simulations, for example).
But right now, I probably use math more often in my main hobby than I do when I program, and that hobby is board game design.
I'm often resorting to math to figure out how to make sure my designs are balanced, how many cards I should use at different player counts, how many cards I should include if I have different combinations of symbols on them (first time I've had to break out combinatorial functions outside of school), determining and balancing probabilities of different things happening, recording the results of multiple playtests and compiling and analyzing various statistics from those playtests, etc. Some designs for my games have even been inspired by game theory, computer science structures, fractals, etc.
One of the most prolific game designers out there today is Reiner Knizia, who has over 600 published games, and has a doctorate in Mathematics. I can see why. There's all sorts of neat fun things that can be found by probing different features and patterns in mathematics. What I've been trying to do is find corners he probably hasn't discovered himself yet, and considering I'm only aware of about 50 of his more well-known games, so probably the concepts I think are pretty new could very well be hiding in one of his lesser known 550 other games. Several times I've come up with an idea, only to bump into one of his designs a month or two later that does something similar.
So if I can find a bunch of uses for math for game design, there's probably a ton of potential applications I could see if I directed those energies more towards software engineering. And learn more math.
Another place where I wish I knew more math is Programming Language Theory. Proofs, abstract algebra, Denotational semantics etc. This would've let me work through books like Software Foundations, TAPL etc.
A regret: never being able to afford university and always feeling like it was too late when I finally could.
It turns out I really enjoy type theory, category theory, and formal mathematics. I also care about liability, reliability, and safety. And all I can do is study in my own time, which I do freely, in order to catch up. And I will never get a research position or work at a startup where I can put these skills and ideas to the test.
Oh well. I will still work on the libffi integration in the community Lean fork and will try to get Lean working on AWS Lambda and GCP, etc.
If you're younger and starting out -- don't neglect maths! It is far more useful than the programming language du jour. The former is how you weather the constant flux of the latter. And how you solve hard problems.
I'm a self-taught programmer and I turned that into my career. I didn't go to college and I didn't pay a lot of attention in Math classes in High School. I'm regularly reminded that I should have focused more attention on math. There are occasional challenges where understanding complex math would have been extremely helpful in solving real problems.
I think the most important thing is to perhaps be cognizant of your limits and strengths, and try and learn about what's out there that could be employed to solve problems, even if it's not you doing it.
I once worked with a guy with a PhD in math, and was really impressed by some of the stuff he was able to do. On the other hand, his coding skills were not stellar, and I was able to give him a lot of advice and help in terms of improving the structure and quality of his code.
I was in the same position and did some research to get better and I seriously recommend starting with Gelfand's book on Algebra (and another Gelfand book on Trigonometry. These are educational books developed by one of the best Soviet mathematicians translated perfectly to english. It starts with the absolute fundamentals of Math, but asks such critical questions that you develop a much more nuanced understanding of maths you thought you already understood.
From there I plan to slowly make my way through the entire Gelfand library and Spivaks Calculus. Maybe down the road Category Theory and Engineering Maths, or Physics.
There are so many amazing resources online that I don't see any reason why a motivated learner with spare time can't achieve an education on par or better than a University undergrad.
This 100%. So is there any good way to revisit all the maths in a correct order of operations as they would apply to a topical area of CS in general?
I've picked up a few overview text books and have bookmarked a copious number of math related refreshers but the subject is hard to gauge if the material is good or not. Any MooCs have good tracks that don't cost an arm and a leg?
Similar situation, and I'm considering going back to school. Well, except, I forgot a ton of basic mathematics! Even made a thread about it a couple weeks ago.
I get the feeling that when the article says "math[s]" it means continuous maths, like matrix arithmetic, calculus and statistics (judging by the examples given). Those can be useful, but not as immediately useful as the discrete maths for computer science that most programmers are (er, I think) at least somewhat familiar with: propositional and first-order logic, combinatorics, complexity theory, computational theory (including automata and languages) and, well, binary arithmetic.
Not to mention: algorithms.
I see the reference to category theory. That's discrete, of course, but it's intermediary to advanced. You don't get there without some solid foundations on logic, that you should expect to get from your CS course.
I agree that discrete math is even more widely applicable to programming than continuous math, but I would add one quibble to your comment: matrix arithmetic is not necessarily continuous — Shamir secret sharing works by doing polynomial interpolation in a Galois field, and that's linear algebra, even if you never materialize the Vandermonde matrix. Similarly, Peterson–Gorenstein–Zierler decoding of Reed–Solomon codes — one of the most-widely-used ECC schemes — is grounded in matrix algebra over finite fields too.
Myself, I've just started picking up some continuous math after years of neglecting it, because graphics, sound, probability, physical simulation, convex optimization, and neural networks are all continuous math. I feel like I've been really missing out!
I was a math + physics major in college, but I work at an outfit that has a lot of engineers. In my observation, most of them are weak at math -- they got through it OK in college but it didn't come alive for them, which is probably not their fault. And as they start their careers, they can easily get productive enough without using their math, whereupon they forget it pretty quickly.
This isn't a slam on anybody -- these are bright and capable people, and I envy their success.
A handful of people, maybe 10%, gravitate towards the problems that involve math. Maybe they took a personal interest in math while in school, or maybe they're using math to cover up a shortfall in some other area. They become the "math people" in the department, and everybody brings quantitative engineering problems to them. I'm one of the math people, not even officially an engineer, but I volunteer to solve problems that other people hate. I'm actually not as successful in my career as some of the engineers, but at the same time, I'm doing OK considering that I got a more esoteric degree.
I think we could teach math in a way that's more relevant to the people who might actually use it, without detracting from what makes math come alive for math people. Let's teach more computation and proofs, perhaps from the git-go. Computation is how most people solve problems anyway. Proofs offer a much richer palette of ideas and styles than memorized "forms" and algorithms.
Granted, any reform of math education suffers the same pitfall as contemporary and historical methods: Massive attrition. This is the huge unsolved problem in math education.
I think the biggest problem of math education is that it’s not taught in a way that maximizes long-term memory. There’s a lot of research on it but I think there’s lots of methodology in teaching on how to make students remember better that’s underutilized. An example: interleaving old problems in tests and homework. Doesn’t take much work but from what I remember there are studies that show significant improvement in final tests scores and likely in overall recall. Depending on students to review older material on their own isn’t a good bet.
I did a dual major in math and computer science, I recommend it if you are aiming for a research career like me. It helped me considerably in AI and mobile robotics, and I think in some ways it put me ahead of people who "only" did CS. I guess one of the reason for that is the gaping absence of math in the CS curriculum at my uni.
Of course the issue is that nobody knows prior to choosing their major if they want a research career! There's no point in studying topology and measure theory like I did if you end up being a front-end dev, apart from personal development.
To each their own, but a lack of math skills has rarely hurt me in my career. I guess I could be getting paid even more money as an ML specialist if I had more math knowledge. But you can make absurd amounts of money as a skilled generalist, so that only hurts you if you really find meaning in that type of work above what you'd do as a generalist programmer. And if that's where you're at, you can always study the math now.
To each their own, but the truth is that life isn’t just about money, and if someone knew maths, there’s a higher chance they can be getting paid the same amount of money working on more interesting problems surrounded by people who aren’t thinking only of money.
Similar story here - went to college, majored in CS, found out how much of CS is math, thought it was just there to be difficult, learned just enough to (barely) pass. It wasn’t until much later that I did some graphics programming that I wished I had paid closer attention - I’ve been going back and trying to re-teach myself a lot to the stuff, like differential equations, that I probably would have gotten a lot quicker and easier if I had just paid attention when it was the only responsibility I had along with access to an expert on the topic who I was actually paying to help me learn it. Oh, well, some of us have to do everything the hard way…
It would really help if professors would give you a taste of something applicable before diving deep into the math itself. I suffered through most of differential equations and calculus, but I happened to take a computer graphics course before linear algebra. We learned just enough math to make things work but linear algebra really took a deep dive that I was able to appreciate having had the basics around affine transformations explained in a very visual and intriguing manner.
Tons of free resources out there. OpenCNX is a solid resource for free online textbooks on algebra and calculus. A Programmers Introduction to Mathematics is also free.
I agree. I once worked with a Russian guy (it seems the communists were really good at teaching math) and he could often synthesize super elegant solutions because he knew how to express them in math. They were much shorter and more concise than my solutions which are often very much brute force.
On the other hand I have worked with physicists and mathematicians who were great at math but got nothing done in code. Applying math to coding seems a very special niche.
I don't think it has anything to do with communism, but I got similar observations. Don't know if that's still the case these days.
I suspect the reason is that in many countries, there is a greater focus on getting the fundamentals done with significant rigor. USA curriculums put more of an emphasis on breadth. I think they [the Russians] are right. For STEM-focused students, there should be no short-cuts when it comes to mathematics curriculum.
I would agree that Math is useful in several programming situations. I won't say that I shouldn't have maybe tried a little harder to understand it. Here's the problem though, nothing's free. Concentrating more on Math, means you have to give something else up. Maybe Math would have helped you in a certain situation, but what other skill have you gained that are useful in others? It's easy to say, "Wouldn't it be nice, if I did this?" without having to specify the consequences of that action. (OK that sounds really negative, but I'm sure you know what I mean.)
I sometimes wish I had a better foundation in college level math when encountering proofs in algorithm books. This is probably the biggest hurdle to me just buckling down and studying the various complex algorithms.
In my experience, the kind of math you get in engineering classes, that is: this is how you calculate integrals, now write the result, it is not really useful for programming.
However, the kind of math you get in a mathematics degree, that is: we have this conjecture, now prove it, had made me a much better software developer than I was before taking these subjects.
Of course, a lot of time has passed and education has changed, but the principle stands: learn to write proofs, as it will help you expand your mind.
I hear things like this from time to time, but among programmers that I hang with almost no one ever uses any math beyond a basic primary school stuff. I really wonder is it:
- us doing boring projects (quite possible), or
- web dev and business apps are a specific niches that don't need anything more complicated than interest rate formula level of math, or
- it's just that people complaining about not knowing enough math really don't know even the basic math?
I studied enough math to comfortably read Knuth and solve real geometric and AI problems, which sometimes needs linalg. Which is ~2 years out of a 5 years curriculum. I'm still happy with that decision.
Everything which sounded too complicated eventually was too complicated. If it speaks like a duck, acts like a duck and looks like a duck, it eventually might be a duck.
[+] [-] theworld572|6 years ago|reply
Unless you continue to study mathematics, which you will likely only do if you stay in academia, you will forget what you've learned! It boggles my mind to think that I used to know advanced calculus, group theory, linear algebra etc. I have forgotten all of it bar the very basic concepts behind them.
That said where it has helped me is in logical thinking - stuff like abstractions as the article describes. Writing mathematical proofs requires logical precision which is very helpful when programming. If you spend enough time studying mathematics then eventually some of the core concepts will sink in and it will help in thinking of solution. Though I would not advise that you study it with the aim of thinking "How can I use this knowledge in programming" - its not directly applicable unless you are doing graphics programming, AI, data science etc.
[+] [-] omarhaneef|6 years ago|reply
I thought it was just me!
edit: we should add confessions like DHH twitter where all these advanced programmers confessed they had to look up print() commands on google or whatever it was.
edit#2: The point might be that you don't remember linear algebra but you remember there is that tool to help. If multiple, parallel computations come up, you know to look up linear algebra. If a rate of change question comes up, you know to brush up on calculus. If the halting problem comes up, you know it isn't solved etc.
[+] [-] kmill|6 years ago|reply
Examples of the second are calculus, group theory, algebra, etc. Examples of the first are being able to define useful words with useful logical consequences, knowing when you can infer things beyond what can be directly tested, detecting patterns that might profitably be abstracted, etc. It's a bunch of force multipliers for your logical mind.
Specific subjects were developed with the goal of solving particular kinds of problems, so if you are faced with such a problem, it can be very useful to know what people have already figured out! However, if you're not, then it might not be so useful remembering these details.
[+] [-] romwell|6 years ago|reply
> its not directly applicable unless you are doing graphics programming, AI, data science etc.
Well, those are pretty large fields!
If you ever get to touch machine learning, that's all about linear algebra, sparse methods, numerical methods, calculus in many dimensions (e.g. gradient descent).
Any kinds of image or signal processing, and you run into your old friend Fourier Transform, which is, again, analysis, linear algebra, complex numbers.
In my previous job, I got to have fun computing an orthonormal basis of polynomials on a disk, and doing some linear algebra with that (although to be fair, fields like computational lithography are probably more math-heavy than others).
The amount of programming jobs where math would be directly applicable is on the rise.
That's not why I studied mathematics. I do it because it is an art[1][2], and because I can. But it certainly comes with certain benefits in the workplace.
[1]https://archive.org/details/hardy_annotated/page/n1
[2]https://www.maa.org/external_archive/devlin/LockhartsLament....
[+] [-] tsumnia|6 years ago|reply
With AI, ML, and Data Science becoming hotter and hotter topics, a lot of the material is still VERY mathematical proof heavy. This [1] is an example of understanding the Lagrange multipliers for SVMs. This is not a worked example, but a repetition of the mathematics. If you are shaky on what dL/db means, then you're lost. It doesn't help that the only other options are import sklearn tutorials, so you only get a slight understanding of the inner workings of something like SVM. You still can't do it by hand, if say for example, you were given a toy problem with like 10 items.
[1] https://towardsdatascience.com/understanding-support-vector-...
[+] [-] dragandj|6 years ago|reply
Drafts are available!
https://aiprobook.com/numerical-linear-algebra-for-programme...
[+] [-] fencepost|6 years ago|reply
You've remembered more than you think, most notably you do (or would if appropriately prompted) remember that things are possible and probably a bit about the approach. You don't remember the details of how, but those are details you can look up if needed - you have the framework in which those details fit and that's the important thing.
[+] [-] yters|6 years ago|reply
So, math doesn't help frequently (or perhaps not trying to use it enough), but when it does it can help tremendously.
It can also help deflate a lot of the hype in AI and ML, especially if you know the fundamental theory of ML.
[+] [-] enriquto|6 years ago|reply
And that is the intended use of math! Knowing math is like knowing judo or another powerful martial art. You take great effort to learn and master it, not for its "practical applications", but because you are honestly interested. One day, hopefully never, this knowledge will save the day, and you will be the only one around who has it.
[+] [-] kccqzy|6 years ago|reply
[+] [-] crimsonalucard|6 years ago|reply
You missed the point. It actually is directly applicable.
The difference with math and programming is that the axioms of a program constantly change. A reassignment, a mutation is an axiom mutated.
Otherwise they are the same.
You could invent a style of programming where all things are immutable. Then that style of programming will be virtually indistinguishable to math. I wonder what I would call such a style of programming?
[+] [-] BeetleB|6 years ago|reply
I did a lot of calculus, some functional analysis, numerical methods, etc. I've never needed even basic calculus for my engineering job. I did use it a few times, but mostly because I was looking for an excuse to use it. No one cared, and demonstrating such skills played no role in my annual review. Furthermore, everyone around you has forgotten this stuff, so the system will shift to not valuing math.
Of course, jobs do exist that need heavy math. They are not the norm, and there is a lot more competition to get those jobs. With the exception of machine learning, your employer will value you as a SW engineer more than a math wiz, precisely because the demand for the former is much higher compared to the supply.
(I honestly don't regret it - but the value of knowing advanced math in the professional world is overestimated).
[+] [-] YeGoblynQueenne|6 years ago|reply
[+] [-] usgroup|6 years ago|reply
If you find yourself working in data science, cryptography, compilers, formal design, etc then obviously maths will be indispensible to you. Having said that most the maths that you need in order to pick something up and implement it is within your grasp and you'd probably have to learn it anyway even if you did know some maths. Recall, there is no "know maths"; you only ever know some maths, and once you've done it long enough you develop an ability to "do maths" which is in some bizarre way independent from any actual maths you know.
As a final note and honestly to hell with lamenting the past. I think if I could do it all over again; I would... and when I did I'd most probably want to do it all over again, again.
[+] [-] throwaway082729|6 years ago|reply
[+] [-] ukj|6 years ago|reply
Mathematics is a formal language. As such - it's part of the Chomsky hierarchy.
And if it's part of the Chomsky hierarchy - we can build parsers/interpreters/compilers for it. So why not standardise it all into a shared library?
That's exactly what Voevodsky did. https://github.com/UniMath/UniMath/tree/master/UniMath
As computer-assisted proofs become more and more popular, expect plenty of cross-polination between software engineers and Mathematicians.
Code refactoring. Unit testing. Managing a large, shared code-base. Fun times ahead.
[+] [-] davesmith1983|6 years ago|reply
Similar things were said in the 1950s and 1960s. I don't remember specifics but our lecturers told us that computer scientists back then thought that they could actually just mathematically express a program and there would be no need for a programmer.
The Vienna Development Method has been around for god knows how many years and have never caught on.
Saying that programming is like maths, is the same as saying cooking is like chemistry. Sure there is lots of chemistry going on in the food, but I doubt many chefs know or care about the chemical properties of organic compounds.
Additionally we actually did a course on VDM back in 2006/2007 and the lecturer said that he had only encountered one team that proved their program to be correct and it took them about a decade.
You could argue the code itself is the mathematical expression. But honestly as someone that has a very strong Maths background and moved to Software Engineering most software unless you are doing something very specific like a sorting algorithm a lot of code isn't really that algorithmic, you are in the vast majority of cases just expressing a set of business rules and that is in my experience is best described by Use Cases / User Stories.
For most businesses this is simply a waste of time. Getting developers to write tests is hard enough and businesses don't see the benefit until things start going horrifically wrong.
[+] [-] howardcurry|6 years ago|reply
One issue that it glosses over is that in mathematics, the object of study is a-priori truths (and mathematicians are usually Platonists). I would express this as saying that math is interested in knowing what's true. So obviously it is applicable to proving things about programs. So far so good.
But programming involves a lot of work which could be described as a-posteriori. As an example on dictionary.com puts it, "an a posteriori argument [...] derives the theory from the evidence". Programmers are designers, wrestling sense out of complex and sometimes poorly expressed specifications, requirements, and realities. This doesn't map onto mathematics: it's neither (in Gowers' terms) theory building nor problem solving, because mathematical theory building is an a-priori business dealing reflexively with mathematical tools, not with theories of the outside reality. A typical large software system is an unwieldy, organic thing, to which mathematically formulated theories apply in the same way as they do to biological organisms. Sometimes math can describe aspects a complex system well, but it can't tell you how to build it, any more than it can tell you how to build the Parthenon.
[+] [-] usgroup|6 years ago|reply
It's circular in about a dozen ways but that is as it is IMO.
[+] [-] yakubin|6 years ago|reply
[+] [-] oneepic|6 years ago|reply
[+] [-] cableshaft|6 years ago|reply
But right now, I probably use math more often in my main hobby than I do when I program, and that hobby is board game design.
I'm often resorting to math to figure out how to make sure my designs are balanced, how many cards I should use at different player counts, how many cards I should include if I have different combinations of symbols on them (first time I've had to break out combinatorial functions outside of school), determining and balancing probabilities of different things happening, recording the results of multiple playtests and compiling and analyzing various statistics from those playtests, etc. Some designs for my games have even been inspired by game theory, computer science structures, fractals, etc.
One of the most prolific game designers out there today is Reiner Knizia, who has over 600 published games, and has a doctorate in Mathematics. I can see why. There's all sorts of neat fun things that can be found by probing different features and patterns in mathematics. What I've been trying to do is find corners he probably hasn't discovered himself yet, and considering I'm only aware of about 50 of his more well-known games, so probably the concepts I think are pretty new could very well be hiding in one of his lesser known 550 other games. Several times I've come up with an idea, only to bump into one of his designs a month or two later that does something similar.
So if I can find a bunch of uses for math for game design, there's probably a ton of potential applications I could see if I directed those energies more towards software engineering. And learn more math.
[+] [-] jasim|6 years ago|reply
[+] [-] DennisP|6 years ago|reply
[+] [-] agentultra|6 years ago|reply
It turns out I really enjoy type theory, category theory, and formal mathematics. I also care about liability, reliability, and safety. And all I can do is study in my own time, which I do freely, in order to catch up. And I will never get a research position or work at a startup where I can put these skills and ideas to the test.
Oh well. I will still work on the libffi integration in the community Lean fork and will try to get Lean working on AWS Lambda and GCP, etc.
If you're younger and starting out -- don't neglect maths! It is far more useful than the programming language du jour. The former is how you weather the constant flux of the latter. And how you solve hard problems.
[+] [-] codazoda|6 years ago|reply
[+] [-] davidw|6 years ago|reply
I once worked with a guy with a PhD in math, and was really impressed by some of the stuff he was able to do. On the other hand, his coding skills were not stellar, and I was able to give him a lot of advice and help in terms of improving the structure and quality of his code.
Working with diverse teams is fun!
[+] [-] Hammershaft|6 years ago|reply
From there I plan to slowly make my way through the entire Gelfand library and Spivaks Calculus. Maybe down the road Category Theory and Engineering Maths, or Physics.
There are so many amazing resources online that I don't see any reason why a motivated learner with spare time can't achieve an education on par or better than a University undergrad.
[+] [-] windexh8er|6 years ago|reply
I've picked up a few overview text books and have bookmarked a copious number of math related refreshers but the subject is hard to gauge if the material is good or not. Any MooCs have good tracks that don't cost an arm and a leg?
[+] [-] non-entity|6 years ago|reply
https://news.ycombinator.com/item?id=20446796
[+] [-] YeGoblynQueenne|6 years ago|reply
Not to mention: algorithms.
I see the reference to category theory. That's discrete, of course, but it's intermediary to advanced. You don't get there without some solid foundations on logic, that you should expect to get from your CS course.
[+] [-] kragen|6 years ago|reply
Myself, I've just started picking up some continuous math after years of neglecting it, because graphics, sound, probability, physical simulation, convex optimization, and neural networks are all continuous math. I feel like I've been really missing out!
[+] [-] analog31|6 years ago|reply
This isn't a slam on anybody -- these are bright and capable people, and I envy their success.
A handful of people, maybe 10%, gravitate towards the problems that involve math. Maybe they took a personal interest in math while in school, or maybe they're using math to cover up a shortfall in some other area. They become the "math people" in the department, and everybody brings quantitative engineering problems to them. I'm one of the math people, not even officially an engineer, but I volunteer to solve problems that other people hate. I'm actually not as successful in my career as some of the engineers, but at the same time, I'm doing OK considering that I got a more esoteric degree.
I think we could teach math in a way that's more relevant to the people who might actually use it, without detracting from what makes math come alive for math people. Let's teach more computation and proofs, perhaps from the git-go. Computation is how most people solve problems anyway. Proofs offer a much richer palette of ideas and styles than memorized "forms" and algorithms.
Granted, any reform of math education suffers the same pitfall as contemporary and historical methods: Massive attrition. This is the huge unsolved problem in math education.
[+] [-] rajlego|6 years ago|reply
[+] [-] jefft255|6 years ago|reply
Of course the issue is that nobody knows prior to choosing their major if they want a research career! There's no point in studying topology and measure theory like I did if you end up being a front-end dev, apart from personal development.
[+] [-] ijpoijpoihpiuoh|6 years ago|reply
[+] [-] heavenlyblue|6 years ago|reply
[+] [-] commandlinefan|6 years ago|reply
[+] [-] zcrackerz|6 years ago|reply
[+] [-] 40acres|6 years ago|reply
[+] [-] Ididntdothis|6 years ago|reply
On the other hand I have worked with physicists and mathematicians who were great at math but got nothing done in code. Applying math to coding seems a very special niche.
[+] [-] crispyambulance|6 years ago|reply
I suspect the reason is that in many countries, there is a greater focus on getting the fundamentals done with significant rigor. USA curriculums put more of an emphasis on breadth. I think they [the Russians] are right. For STEM-focused students, there should be no short-cuts when it comes to mathematics curriculum.
[+] [-] kemiller2002|6 years ago|reply
[+] [-] southphillyman|6 years ago|reply
[+] [-] Shorel|6 years ago|reply
However, the kind of math you get in a mathematics degree, that is: we have this conjecture, now prove it, had made me a much better software developer than I was before taking these subjects.
Of course, a lot of time has passed and education has changed, but the principle stands: learn to write proofs, as it will help you expand your mind.
[+] [-] ivanhoe|6 years ago|reply
- us doing boring projects (quite possible), or
- web dev and business apps are a specific niches that don't need anything more complicated than interest rate formula level of math, or
- it's just that people complaining about not knowing enough math really don't know even the basic math?
[+] [-] rurban|6 years ago|reply
Everything which sounded too complicated eventually was too complicated. If it speaks like a duck, acts like a duck and looks like a duck, it eventually might be a duck.
[+] [-] asplake|6 years ago|reply