8 ms·
I write software that runs on various jet engines. There is a lot of software that goes onto a modern commercial engine, but the general theme of the software I
by john_b 12y ago
I write software that runs on various jet engines. There is a lot of software that goes onto a modern commercial engine, but the general theme of the software I focus on is the modeling of the underlying engine dynamics using sensor data. It's very math- and physics-based. A thorough knowledge of linear algebra, signal processing, regressions, and clustering/neural network algorithms is essential, among other things.
It's not the kind of environment where typical startup aphorisms apply ("fail fast, fail often", "don't be afraid to pivot", etc). So every month or so when another "programmers don't need to know math" article comes out, usually written by a web programmer, I have an impulse to represent the other side of the divide, but I usually find so many misconceptions and poor assumptions in the original article that I conclude it's too much work. So I am glad that the author has done the job for me here.
What I have observed, again anecdotally, is that web programmers are generally more vocal about programming than systems programmers and scientific programmers. It makes sense in the historical context of the internet, but I don't think that this bias is properly accounted for when people on Twitter/HN/etc discuss "programming" and what it requires.
I don't think it should be controversial that programming is founded upon the study formal languages, mathematics in particular. So even if you don't need math to do your programming work on a day to day basis, it's because a lot of very smart people have solved some very difficult math and language problems over the decades so that you have the luxury of ignoring the mathematics your code relies on. This is all ok. But the implicit hostility towards mathematics that a lot of these articles demonstrate really makes me concerned about the influence it will have on the next generation of programmers. Moore's Law has allowed a certain level of indifference to mathematics in the past few decades since you could always throw a newer processor and more memory at a problem, rather than solving it via a better algorithm. But that situation won't last forever.
- srean 12y agoYou make a good point, and it worries me somewhat. It manifests itself not just in discussion about math, but also in discussions about fast runtimes, discussions about algorithms, discussions about data structures. There is a lot of vocal self reinforcement of the ideas that speed matters little, algorithms matters little, data structures matter little. The situation reminds me of an aphorism. I am sure there would equivalents of this story in other cultures. The story behind the aphorism goes like this: A worldly wise frog visits his friend, a frog in a well. The frog of the well wants to know how big the world is, and proceeds to ask questions by jumping over increasing fractions of the diameter of the well, and asking "is it this big ?". About the point where the frog jumps from the sides to the center of the well, the frog proclaims now if you say the world is bigger than this you are just bullshitting me. I see this a lot in CRUD programmers, just because they havent found a way to exploit some algorithms they think these are universally useless. Not only that, influenced by these oft repeated lines, they do not even try to find an use that would make their code more efficient. Some are more radical and propose that these topics should not be taught in CS courses. Redis is proof that CRUD can benefit from all these. Similarly, I have also seen many compute oriented programmers think CRUD is trivial. In which case I would just slide the keyboard towards them and ask them to write something that scales, is performant in terms of speed and latency, is robust and frugal with hardware resources.
- flogic 12y agoThe issue to me is more that our education system is so shitty these authors don't even know what math is or that they're doing it every work day. We combine abstract symbols and attempt to logically reason about how that will affect what our programs do. That's math. It's not separable from programming. The only other option is these authors are proud of the fact they engage in some weird cargo cult attempt at programming.
- shanusmagnus 12y agoThat is a definition of 'math' that is so broad as to be utterly useless. Other things that are 'math' by this standard include baking cookies from a recipe and writing poetry. I'm unsure of why so many people have such an urgent need for programming to be math, but generations of people have written software, some of it quite substantial, who have no mathematical education at all. Redefining what math is to get these works under the canopy reeks of No True Scottsman and is pointless. There's plenty of math in CSCI, and I will state unequivocally that any particular writer of software would only be improved by understanding more math than she currently does. In fact, I believe that about anyone, anywhere, in any field. But it doesn't mean that you're doing math while writing your Django app.
- Sirenos 12y ago> but generations of people have written software, some of it quite substantial, who have no mathematical education at all Could you list some examples? I am curious.
- colomon 12y agoI'm curious your experience with TDD and other hip programming approaches? Because I've been long wondering if "web programmers are generally more vocal" has a lot to do with their popularity. (Disclaimer: I love automated tests, particularly integration tests, and use them wherever it seems practical. But I cannot imagine developing the software I develop with a "unit tests first" strategy...)
- TheCapn 12y agoIndustrial Automation here.... I'd kill for a TDD framework in the tools I use. While you label many things as "hip programming" my industry is several years behind the fast paced methods of more popular platforms like the web. For the record, TDD was taught in my university education course as a pretty core testing methodology. The reasoning behind it is sound as it really helps you program to contract and forces the programmer/engineer/manager/whatever to make critical thinking decisions ahead of time. Working "On the fly" isn't always practical.
- sanderjd 12y agoI worked at a company with both a big web application and a bunch of hardware and firmware development. We showed the hardware and firmware developers our integration tests using cucumber, and after about a year they were test driving big swaths of their process using cucumber. (And they were better at it than we were.) My point being: with some work it can be possible to integrate the "hip" tools into your process, and sometimes it even makes sense and works ok!
- mlangdon 12y agoHard to get over just how behind automation is. The big scada platform we use is 'disruptive' (ie cheaper and better than the entrenched players) yet they think we should be happy that the brand new version finally supports half-assed, internal version control.
- john_b 12y agoMy experience, while nowhere close to being representative of the aviation industry at large, has been that large industrial companies are somewhat schizophrenic in this regard. I often find myself appreciating, for example, the care that somebody put into their automated build tools so that my unexpected corner case (which I originally expected to break things) actually worked the first time without a hiccup. Yet later in the same day I will be cursing the awful, terribly broken two decade old version control system that the same company is paying enormous sums of money to license. TDD is one of the approaches that I advocate for often, though not the extreme versions that some people advocate for. Some people get it, while others think it's more efficient to wait until the last few days of a waterfall(ish) process before running comprehensive tests (because "testing costs money"). The panic that ensues when they discover a major problem days before a big deadline is never very pretty.
- grn 12y agoPersonally I have the impression that many web programmers, especially those who has never worked with anything other than the web, are ignorant of the existence of other branches of programming. In many aspects programming for the web is simpler. For example the quality requirements for a microwave oven firmware are much higher. You can't easily deploy a hotfix to production after shipping 100k units. I have a feeling that most of complexity in web programming is incidental. It's a result of how poorly the web is designed as a platform. Of course it's very successful commercially but from a technical standpoint it isn't good. john_b, could you give an advice how to get into aerospace industry? It always seemed very challenging and I'd love to have a chance to work there.
- austinz 12y ago> Personally I have the impression that many web programmers, especially those who has never worked with anything other than the web, are ignorant of the existence of other branches of programming. I see this again and again in the articles that show up here. Occasionally, mobile apps are acknowledged (although they usually mentioned when the author is trying to make a point about trivial social media apps). > I have a feeling that most of complexity in web programming is incidental. It's a result of how poorly the web is designed as a platform. Of course it's very successful commercially but from a technical standpoint it isn't good. It seems that most of the technical challenges that people run into in this field can be divided into two categories: * Needing to accomplish something difficult by developing, implementing, or otherwise employing novel techniques, algorithms, data structures, automation, etc. * Needing to hack around poorly designed or obsolete software, such as CSS hacks to get older versions of IE to render a page element correctly.
- tjr 12y agoI'm not john_b, but I also work in aerospace. I've made numerous rebuttals (many right here on HN) to claims that software development is not engineering, citing aerospace examples to the contrary. Often the actual task of programming is as simple (or even simpler) than web programming, but there is a wealth of process that surrounds it, to, as you suggested, make sure that what goes out the door is as correct as possible the first time. Having also done some web and mobile development on the side, I see software development across a spectrum: ranging from throwaway hacks to cheesy mobile entertainment software to quality mobile entertainment software ... etc ... to embedded medical software and flight control software and such. While all of these activities are software development, it would be erroneous to classify them all as the same thing. Best practices in one region of the spectrum may well be ludicrous if tried in another region. How to get into aerospace? Apply for a job? Anyone with a computer science degree or equivalent experience [though the degree may be "required", depending on the company] would qualify for an entry-level position in most aerospace fields that I am familiar with. Another approach, if you're more web savvy, might be to get a job in an aerospace IT department doing internal web development and such, and then transfer out into some other project later.
- mbell 12y agoI think we should just do away with the term 'programmer'. It doesn't really mean much anymore. A 'programmer' could be anything from someone deep into the algorithmic side of thing to someone who spends most of their time writing event hooks in a UI. I don't mean to imply any level of 'who's better' in that statement, just that they are very different concerns, often with little in common other than 'writing code'. Making any generalization of programmers is bound to be wrong.
- nyrina 12y agoA "programmer" is already somewhat the same as a "builder" is. A programmer programs, just like a builder builds. A programmer can have a lot of different hats. A hacker (white or black), computer scientist, developer, etc, all do different jobs. You wouldn't put a hacker into a job of medical or financial responsibility, where a minor bug can be fatal or extremely expensive. A builder can have loads of different hats as well. A carpenter doesn't do the same thing as an iron worker, a plumber or an electrician. The carpenter probably could do a lot of the same things, with about the same error frequency as a hacker in a financial job would have. That error frequency would also decline as he got better at wiring like an electrician. That's my view of what the "programmer" word means.
- deleted 12y ago[deleted]
- SilasX 12y agoSo, people are wrong to say that programming isn't math, because in some cases, the task is to implement math?
- john_b 12y agoI didn't (and wouldn't) claim that programming "is" math in any literal sense. The foundations of software engineering are heavily derived from math, but a degree in software engineering isn't necessary for all forms of programming. I only claimed that programmers rely on the math skills of other programmers, even if they are not aware of it. Somebody wrote the compression, search, and encryption tools that even ordinary computer users use every day. Game developers often rely on 3rd party game engines to do the heavy vector mathematics that they'd rather not reinvent. So some programming is heavily based on math, and it is often exposed only as a library or service of some sort. As long as it sits quietly in the background doing its tasks, it won't be noticed much. Declaring that programmers don't need to know anything about math is, to me, equivalent to saying that abstractions can be counted on not to leak.
- adamnemecek 12y agoIn general I agree. But I can't help but feel that while math is essential to your job, it might not be essential to programming in general. It's similar to if someone said that having medical knowledge is essential for programming because he was working in medical imaging software. So I agree with your conclusion (math==good) but not necessarily with your evidence.
- analog31 12y agoI don't think this is limited to programming. I've noticed that most engineers forget their college math and engineering theory within a few years of graduating. Many are adamant that math isn't necessary for an engineering career, and many have heard this message from older engineers. Maybe there's a similar divide, where some engineering activities use more math & theory than others. In moments of cynicism or frustration, I label the two groups "engineers" and "designers," and complain to colleagues that a remarkable amount of design work is done by trial and error. Is it the right way or the wrong way? I don't know. I'm biased by my preference and enjoyment of math & theory, and I volunteer for tasks that use those skills.
- seanmcdirmid 12y ago> web programmers are generally more vocal about programming than systems programmers and scientific programmers I'm not sure you would find systems programmers doing much more math than web programmers. Sure, they'll focus on optimization and a few algorithms, but much of their job involves plumbing bits from point A to point B. There are programming jobs that involve math, but programming itself is not math. It is more like plumbing and architecture. You are right in that much of the math is already done for you, in well encapsulated components that you might want to know about but often can forget. But saying "programming is math" is like saying "biology is physics"; it might be true at some level, but it is not often very useful.
- john_b 12y ago> "But saying "programming is math" is like saying "biology is physics"; it might be true at some level, but it is not often very useful." I agree and actually thought about making this analogy. I think some people like to debate these things for philosophical reasons, and this kind of hierarchy of fields is of interest to such people. Others seem to approach it from a more pragmatic and anecdotal perspective and often take issue with the classification of their field as, e.g. "math-based" or "language-based", as though it reflects on their talents (required or actual) as an individual. The reaction of the latter group reminds me of pg's essay: http://www.paulgraham.com/identity.html http://www.paulgraham.com/identity.html
- seanmcdirmid 12y agoAlso related, the famous xkcd comic on purity: http://xkcd.com/435/ http://xkcd.com/435/ As programmers, we use lots of techniques and where many hats. We sometimes do engineering, design, math, sometimes we are detectives (especially when debugging or coming up with requirements), sometimes we are writers and communicators. That is why I react to "programming is math" so negatively; it belittles the other tasks that I have to do much more often than math.
- superuser2 12y agoYou do physics. The fact that you do it by writing software is incidental. Obviously mathematical skill is necessary to write software that models and controls complex physical/mechanical systems. No one is saying it isn't. That's a strawman. Many problem domains, however, are not mathematical in nature. I don't need to know anything about calculus, have accurate hand-computation skills, remember probability formulas, etc. to write a database application, for example. But then obviously I would need these things to write and validate a financial modeling/risk assessment system. I (and many others) would argue that when math becomes relevant to programming, it is because math is relevant to the problem domain in which you are working. Programming, by itself, has little to do with math (or, more precisely, skill in computation-based math classes and exams is not a proxy for programming skill.)
- srean 12y agoThere is actually more to it. There are aspects of programming that are no different from procedures in mathematics even if the application area of the code is not 'mathematical'. As has been said in the comments [0], the process of debugging code is really not that different from solving/proving those Euclidean geometry exercises/riders we had in school. Now, the person debugging the code may not be explicitly conscious of this, but if the person is any good, he/she is using the same procedure: assume axioms; make hypothesis; prove or disprove using observations, deduction/induction; repeat till you have reached your goal. [0] https://news.ycombinator.com/item?id=8055845 https://news.ycombinator.com/item?id=8055845
- superuser2 12y ago>he/she is using the same procedure: assume axioms; make hypothesis; prove or disprove using observations, deduction/induction; repeat till you have reached your goal Absolutely! This problem-solving process is very similar to what we were asked to do in physics and chemistry on a nightly/weekly basis. I've found chemistry problem sets to be very similar to programming. However, what you describe is not math, not as it is taught anywhere between first grade and Calc III. Being "good at math" is exactly equal to being good at manipulating symbols (first numbers, then variables) according to a memorized set of rules and procedures. The higher you go, the weirder the rules get. Symbol manipulation and the memorization of probability and geometry formulas are also the entirety of the "skills" represented by standardized tests of mathematics. Programming is about coming up with the rules and procedures by which the computer should manipulate symbols. It's really completely different. Excellent mathematical skills would make me a good compiler. Not a writer of compilers, but a compiler. Of course, that might be useful if I wanted to work on one (I'd be able to check its work by hand), but in practice, I'm that sort of work is done billions of times faster and with much greater accuracy by computers than humans anyway.
- drumdance 12y agoI'm a web programmer. I feel like what you do is true engineering, and I have immense respect for it.
- noname123 12y agoPratt, Rolls or GE?