4 ms·
You seem to describe a very different world of programming than the one I live in. I have no dislike for logic, formal proofs, category theory and such: I can
by hibikir 10y ago
You seem to describe a very different world of programming than the one I live in.
I have no dislike for logic, formal proofs, category theory and such: I can live in that world just fine. However, almost none of the problems I've ever had to dealt with in my 15 years programming made me wish for large amounts of that: I've used bits here and there, but going all in never made any sense.
The hard part of most tasks I had to do in professional programming is to gather enough information to even begin to write one of those formal specifications: Knowing what real business needs are, understanding how distributed systems fail, working around bugs, reading library code quickly and effectively, learning how to factor code in a way that would evolve well with changes in what the application needs to do... that's where the value is. 99% of that is talking to people and making educated guesses about the future: The implementation itself is trivial. With that, was able to get solid code working in languages that were ill equipped to handle any of the fun pieces of math that you'd need to write mathematically-minded programs.
If anything, the experience I've had working with people that were heavy on the math has been dismal. I worked with a rather well known dev who has published books, gives a lot of talks in FP circles, and is a lead dev in a huge mathematically driven library. We worked on on a rather novel distributed systems. He hid in a corner with a copy of Mathematica for a couple of months, and came back with a paper that proved a well performing solution to one of the things we had to do with our distributed system: Great!... Except, not so, because his proof only worked in a mythological environment where there is no latency between nodes. Under real conditions, the algorithm's properties led to unacceptable results, and he just hid behind the proof.
I don't have papers and patents behind me. He knows a lot more category theory than I do. But It took me a day to implement a completely unproven algorithm that had far better performance properties in a real case. This is not due to any special brilliance of mine, but because I sat down and approached the system like a scientist or an engineer would, instead of like a mathematician.
In my opinion, teaching the scientific method and the basics of engineering in other fields will serve your average programmer far better than being better at math ever will.
- Bahamut 10y agoI disagree, as someone coming from a math background - from no formal CS training, but 4 years of math at a top graduate program, I fully believe that a large percent of my peers from there could be extremely successful developers. In fact, I ran into a fellow former peer once at a conference who joined Google after exiting academia - he is currently on the Angular team. To take myself as an example, I have been very successful as well, currently being a lead developer who mentors/helps other developers on a near daily basis. Formal mathematics training isn't necessary to be successful - many of us know many people who have picked up the intuition that those formally trained understand at a deep level & have been able to use it to great advantage. However, I argue that more training in areas of logic & reasoning would serve people well in all facets of their lives, including helping people be successful in software development over the long term. I know that I use my knowledge I gained from decades of mathematics to code strong abstractions faster than just about everyone else I have worked with so far (I've made mistakes too, but nothing terribly costly & unrepairable) - it helps me nearly every day I code & learn new things.
- berntb 10y agoI'll believe that there is a correlation of more than 0.5 to 0.7 between good at software development and good at abstract math. But hardly higher -- there are also some other talents needed, I don't know what. I saw a few people that had no problems with the math courses in CS but that never really got the programming part. (No names or details, people might be recognized.) But this is of course anecdotal. (My surprise over this was similar to when I realized that rationality and intelligence didn't have as high correlation as I expected. I know some intelligent people which are Truthers and believe in other conspiracy theories. Others can't reason when their emotions are involved.)
- axlprose 10y ago> But hardly higher -- there are also some other talents needed I'm not going to deny the presence of some built-in preferences for formalized thinking among some subset of the general population, however the cognitive resources and preferences that would lead one to enjoy or excel at math, are about the same as those correlated with programming. e.g. a noticeable interest in understanding mechanical systems. So given that set of preferences that would produce an interest in math/cs, if a person was raised by a mathematician parent, they'd likely be "good at math", but possibly still struggle with programming when they reach their CS classes in college. Meanwhile another person with the same set of preferences but raised by a hacker, might be good at programming by the time they reach college, but still have a hard time with math. The issue is less about "can this CS person be good at math?" or vice versa, and more about "will this person be motivated to learn these complementary skill-sets?". Because it's not just a one-way street, mathematicians can also learn from thinking programatically, as shown by the growing popularity of automated theorem provers like Coq. And mathematics being helpful for programming is nowhere better epitomized than by the huge trend of nearly every popular language slowly adopting functional features (and even "optional" typing), because everyone is slowly discovering that mathematically sound programming principles actually are practical (just a bit more abstract and difficult to grasp at times). Both of those examples should be pretty good evidence of these two fields being pretty helpful towards each other. The large show-stopping issue here making this relationship non-obvious, is education. If complex subjects that are already difficult get taught poorly, it's only natural that we don't expect people to make connections and think "oh hey, this [math/cs] concept I learned about might be helpful in this [totally unrelated] situation". P.S.: as an anecdote, I just recently used my (minimal) category theory knowledge to change the way I take notes, so that I can smoothly use outlining tools (like org-mode) more like mindmaps when taking notes on complex topics.
- tnecniv 10y agoWhen all you have is a hammer, the world is full of nails. In my experience, knowing more math will allow you to tackle harder problems in a more sophisticated manner. > Great!... Except, not so, because his proof only worked in a mythological environment where there is no latency between nodes. Under real conditions, the algorithm's properties led to unacceptable results, and he just hid behind the proof. Then he did a bad job. His failure does not undermine the power of taking a formal approach to a problem. He should have accounted for this latency in his initial model. What he did is the equivalent of someone working on an autonomous car and assuming that a noisy GPS signal is good enough to do control with.