4 ms·
I feel like you have to know a little bit about a lot of things. Like, yeah, you have to have a basic understanding of SOME graph theory when programming comput
by OskarS 9y ago
I feel like you have to know a little bit about a lot of things. Like, yeah, you have to have a basic understanding of SOME graph theory when programming computers, but you don't really need anything too advanced. Yes, I guess you need to understand SOME category theory to be able to use advanced typing systems effectively, but it's a very surface level understanding of a very deep field. Same thing with most of the other fields mentioned.
One thing that wasn't mentioned: if you're doing any kind of graphics programming, you use a huge amount of basic linear algebra every day. Vectors, matrices, dot/cross products, affine transforms, spaces and subspaces, that kind of thing. If you're doing more advanced stuff, a working knowledge of how to solve large linear systems (i.e. things like Gauss-Seidel/Jacobi methods) and the physics of light transmission is also useful. If you're doing physics simulations, obviously you need a working familiarity with calculus.
Again, though, all of these things are massively deep fields that people dedicate their lives to understanding, but as a programmer you just need to skim the surface, generally speaking.
- jcadam 9y agoI agree. Writing spacecraft simulation software you use a lot of 3D math as well: matrix math, euler angles, quaternions, etc (being thrown into writing a simulation model for an attitude determination and control system with no prior exposure to orbital mechanics was great fun). Didn't have to become an expert (we had PhDs on staff for that), but had to gain an understanding of the basic concepts in order to get the job done. I've also worked on some signal analysis stuff -- had to learn about FFTs and basic filtering (band-pass filters, etc.) -- it's all math. But had books and the internet to look up those algorithms. I have several books on my bookshelf for these things, including an old copy of "Numerical Recipes in C" :)
- totallynotadev 9y agoIf I may ask, how does one get "thrown into writing a simulation model for an attitude determination and control system with no prior exposure to orbital mechanics"? I always wanted to write software that deals in some way with spacecraft, but always thought one needs to have some physics degree for that.
- jcadam 9y agoRight place, right time. My career path has been a little weird. I got into the aerospace industry because after leaving the Army in 2006, I had a 4-year old CS degree and no work experience - but I did have a clearance, so I was able to land an entry-level SW job with a small aerospace company working on 3D visualization stuff. After a couple of years with that employer, I was hired on with a huge aerospace company working on a large satellite program. As to the how, consider that if finding good software engineers is hard (debatable), finding them with clearances is even harder (definitely true). The interviews for defense and aerospace jobs are easy compared to your standard technical interview at Netflix, Google, et al. They really don't want to risk screening folks out for trifling things like "competence" when they have billets to fill (because they're selling man-hours of labor to the govt, even a mediocre engineer can be profitable). But you should also know, that while working on a large satellite program may sound cool, the maddeningly slow and byzantine bureaucratic development processes (I'm currently on a waterfall-driven project) inherit in such programs will suck every last ounce of joy out of your working life. So, there's that...
- ivanhoe 9y agoIMHO you need just enough to be comfortable using math as a tool applied to your particular every-day practical situations, but you don't need to go into the academical depths like e.g. a scientist would have to. And you also need to have at least some faint idea what are the available options, so that, if needed, you know what to google for.
- professor_plum 9y agoYeah, I'll never tell someone not to learn something for the sheer enjoyment. But this article is downright pretentious. It gussies up a lot of simple day-to-day tasks with off-putting terms and would not be helpful to a beginner.
- chillee 9y agoI'm not sure that's true. I think it's pretty tough for somebody who doesn't understand a field to assert that understanding the field deeper is not necessary. You'll see many non-programmers assert that it's not necessary to get trained programmers to do a certain task (say, automation). However, they don't understand all the software engineering considerations and issues that you'll run into if you don't have a programming background. It's only when you truly understand a field that you can see when that field is applicable to the task at hand.
- mrybczyn 9y agoWhen you say "field", do you mean algebraic field, or professional "field".
- tomsmeding 9y agoI suppose "professional field" here, even though the other interpretation seems more fun.
- hinkley 9y agoAnd yet I’m constantly surprised by people knowing nothing of set theory. Occasionally someone who doesn’t know logic (evidenced by nasty, over-complicated Boolean logic) Or my current favorite: a very senior and very optimistic person who apparently doesn’t believe in decidability, the halting problem, or NP completeness.
- andrewflnr 9y agoLike, they think computers are just invincible problem solvers, or can't even really comprehend the question? I can't grok what it means to not believe in NP completeness.
- hinkley 9y agoThat developers can do anything if we stop complaining and get to work. No, in fact we've proven there are a lot of things we can't do, and oceans of things that are theoretically possible but completely impractical to do (another class of people mistake intractable for impossible, but for small enough N sometimes it is both possible and worthwhile).
- wolfgke 9y ago> Or my current favorite: a very senior and very optimistic person who apparently doesn’t believe in decidability, the halting problem, or NP completeness. Undecidability and the halting problem is usually analysed for Turing machines (I am aware that there also exists literature on these problems for other types of automata). The problem is: It is impossible to build a Turing machine. Every computer that has been built up to know is just some kind of finite state machine. So the halting problem is perfectly (in a mathematical sense) deciable for real computer programs. The problem is: We have no idea how to do this in general in a timespan that is suitable for practical purposes.
- Tobba_ 9y agoThe secret to linear algebra is homogenous coordinates together the exterior algebra. plus matrices sprinkled in. If you use those for everything all your problems simply disappear.