Math, Programming, and Language Learning
An anonymous reader writes: There's often debate amongst modern programmers about how much math a professional developer should know, and to what extent programming is math. Learning to program is often viewed as being on a spectrum between learning math and learning spoken/written languages. But in a new article, Jeremy Kun argues that the spectrum should be formulated another way: Human language -> Mathematics -> Programming. "Having studied all three subjects, I'd argue that mathematics falls between language and programming on the hierarchy of rigor. ... [T]he hierarchy of abstraction is the exact reverse, with programming being the most concrete and language being the most abstract. Perhaps this is why people consider mathematics a bridge between human language and programming. Because it allows you to express more formal ideas in a more concrete language, without making you worry about such specific hardware details like whether your integers are capped at 32 bits or 64. Indeed, if you think that the core of programming is expressing abstract ideas in a concrete language, then this makes a lot of sense. This is precisely why learning mathematics is 'better' at helping you learn the kind of abstract thinking you want for programming than language. Because mathematics is closer to programming on the hierarchy. It helps even more that mathematics and programming readily share topics."
As a computer programmer who speaks six languages, I disagree, because I'm terrible at math.
The problem with all the articles like this is that they're either written by people who did take math or didn't, and in either case both believe their side is right. The article is clearly written by someone who took a lot of math so, surprise, he thinks math is good for programmers. But I took nothing past Calculus (and have never professionally used even Trigonometry), and I'm a successful programmer, so I think math is unecessary.
Until someone actually does a study on this, it's all gonna come down to "the way I did it was better" ... and that's just noise.
While the ideas of mathematics are (usually) precise, the language is fuzzy, informal and requires a lot of context. Everyone who ever has compared a fully formal proof and one done in the typical style mathematicians use can immediately see that. On the programming side, there is no room for fuzzyness. Or rather, whenever it is found, it typically is a bug and often a security vulnerability.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
Where are these stories coming from ? What's next water is wet ?
You may have a legitimate debate over which is more precise math or particular programming languages but has anyone ever argued a human language is more specific ? I'd love to see people program without understanding the propositional calculus. No strike that I may have actually seen that and it wasn't pretty. Comedy aside, anyone who has ever tried to write a parser understands just how non concrete natural languages are. Something like 90% of your effort is devoted to disambiguation of natural languages.
Does this guy actually have evidence of anyone seriously making the point he is refuting ? I mean it's trivial take a look at poetry and mathematics and programming languages can't even start to deal with the abstract concepts involved.
You did not code your argument in a series of logical steps to arrive at the desired result of demonstrating your conclusion that something here is "insulting". Perhaps that is because you believe such a thing is not to be done with a method of communication!
I hated math and was not that good at it but I did love solving complex problems and puzzles. I've enjoyed a very lucrative 15 year career in computer programming.
Parent and article seem spot on; although, I prefer english and programming to math.
Democracy Now! - uncensored, anti-establishment news
Knowing the concepts may have helped for some work I have done, but, I have never used any advanced math for paid programming.
Five years as a J2EE developer: zero use of any advanced math for work projects.
Numerical methods (using Fortran) was just in school.
Calculus, linear algebra, and such: just in school.
Big-O notation, to pick algorithms and STL objects, sure, but probably doesn't count as 'math' for this article.
Since only a fraction of Computer Science graduates will work at a science shop (JPL, etc), I think some of the math requirements are a bit unfair. Perhaps I am just a low-range "Forrest Gump" programmer, but my personal experience was the actual math was burdensome to do to work towards a Computer Science degree.
Uh, Linux geek since 1999.
As long as we're making gross generalizations...
A big part of organic chemistry in college is "synthesis" problems where you are presented with a molecule and you're supposed to outline the steps (chemical reactions) required to turn it into a different molecule. I find that this closely mirrors programming where we're manipulating data instead of chemicals. We all have access to the same tools and there's more than one pathway that will work, but we're trying to find the most elegant / efficient solution to get from A to B.
Most of the students in my OChem class were premeds and many of them struggled with the synthesis problems. A lot of the premed curriculum involves memorizing and regurgitating huge amounts of information, with less emphasis on problem-solving. I always thought the ones that were good at the synthesis problems should switch gears and become programmers.
az0
... and that's it.
If you're programming litigation, you'll have to pick up some legal knowledge. If it's banking, then finance. If it's science, you'll have to be exposed.
But ... you don't have to be an expert at anything but programming. The experts do all that stuff. They can spec, but they can't code.
It little behooves the best of us to comment on the rest of us.
It was all the shortcuts, left out "intuitively obvious" steps, and sloppy use of variable names and symbols that drove me up the wall trying to learn advanced math from (imho crappy) math profs.
Let me tell you about the lecture with no less than three different Epsilons (a rounded one, a less rounded one, and something in between) used in the exposition of the proofs. That and my slight myopia kind of did me in in that class (or would have if I hadn't cribbed notes from my neighbour.)
Or, when, as a math prof, giving an example of applied math used for something like physics, why don't we just pick completely random variable names, instead, of, say, using m for mass consistently, v for velocity, etc.
I understand some kind of need to force people to think only of the form and not imbue terms with more semantics that aren't necessarily there in a particular mathematical formal system, but holy cow, could you be more obscure? Why yes I could. I will use 's' for mass on this page, and r' for mass on this next page, just to see if you are paying attention. !!!
Where are we going and why are we in a handbasket?
Programming is mathematics, it is the application of decision and discrete mathematics. Not all mathematics is infinitesimal calculus (there are different kinds of calculus), algebra or geometry.
TFA tries to make the case (poorly) that Math involves ambiguities and Programming does not.
The greatest of all mathematicians, Carl Friedrich Gauss, stated, "I mean the word proof not in the sense of the lawyers, who set two half proofs equal to a whole one, but in the sense of a mathematician, where half proof = 0, and it is demanded for proof that every doubt becomes impossible."
Not much room for ambiguity in that.
Are you going to argue that recursion and iteration is not mathematics? Yes you may not understand everything in the branch of mathematics that you are applying, but one is still applying it, that doesn't make it sent less mathematics.
Before you can start formulating them — in any language, even in a spoken one — you need to think through the decision-trees and handling of exceptions and errors.
A "Hello world" program — in any programming language (except, maybe, the assembly) — is vastly simpler than a list of errands you may get from your spouse on a weekend. Heck, a single errand of shopping may be more complex:
In Soviet Washington the swamp drains you.
No you don't need math to write an iPhone App or an interactive website.
You do need math to understand why looking up some keys in a HashMap is much faster than iterating over a vector.
You do need math to understand why some encryption algorithms are better than others
It just gives you the tools to better comprehend what's going on under the hood, so you have more information to make the right choices in how to implement something.
I'll start thinking about this in a serious way.
While I freely admit that most of my programming has been in other areas. In every project I do it seems the day comes when boss says, what we need here is a visual. Where: when I click on it here..., when I drag it their..., when I spin it... What you have to understand (and many here do) is that you screen/window/view is laid out in a coordinate system. So you cannot escape it! You quickly need: geometry, trigonometry, vectors, and if your doing any 3D calculus.
Good luck!
I will not mourn that which I never had to lose. - Unknown
I went for years keeping my math and my programming separate. Often programming involves little more math than x++. But then I really buckled down and learned a pile of math which I now pile into my programming. Interestingly enough when I try to show my algorithms to other programmers they say, "I forgot all that math 1 day after exams." But these algorithms often are cutting thousands of lines of code away and result in answers that are instant instead of a more iterative approach that could take minutes or much longer.
The math that I am referring to is all pretty basic year 1 or 2 stuff. Basic Discrete, basic calculus, etc.
some 20 years ago (yikes, did the math and it's closer to 30). I wanted to do signal processing and such, but I realized MIT grad students were doing all the fun stuff. I now write embedded software, and the only time I use math is when I either go off on a tangent, or sine off on an apology for doing so.
...on my Commodore 64, since we didn't have any games when it came out.
Interestingly enough, I sucked at "school math" and flunked math entirely. Imagine the expression on my math teacher when he saw me coding in assembly at the new computer-park back in the 80s, when he barely could understand basic.
Since, I've made numerous demos in the DemoScene with Amiga, and later on coding robotics AI with MCUs (as a hobby, nonetheless).
So no, you can absolutely learn to code quite decent software and hardware without deep math skills, but it helps if you want to do real advanced stuff like coding your own Render-Engine (but then again, how many are they?) My advice - learn whatever you need to achieve what you want.
What this world is coming to - is for you and me to decide.
IMO programming is almost nothing like natural language.
would be better than math if one is looking for a bridge from language to programming. Absent symbolic logic, math -- especially algebra -- is a good introduction to the concept of computer programming because of its logic component (application of the algebraic hierarchy is a simple logic system.)
For kids, Lewis Carroll's symbolic logic is both fun and useful.
Everything in the Universe sucks: It's the law!
A lot of commenters here seem to be (incorrectly) conflating code which DOES math with code BEING math. Yes there's a lot of products that need high math (i.e. simulations) but there's also a lot of products that are successful when they do extremely complex data movement and organization but very little mathematical transformations.
If programming was so close to math, wouldn't people who are really good at math write the best code? Maybe that's a straw man statement, but in my experience, the people who are really REALLY good at math (e.g. the radio frequency signals processing guys) happen to write the worst code I've ever seen. I've spent much of my career taking prototypes written by DSP engineers and making them go 10 to 100 times faster and use a tenth as much memory. That's not belittling their skills! They did something absolutely amazing that I cannot do, coming up with the steps and crazy weird math required to process signals. (And often, even though I make their code go way faster, I still don't really understand the math behind it when I'm done.) Their code just happens to not take proper advantage of the hardware or other resources. They do the equations so it *functions*, but they don't know how to make it *fast*.
The real skill comes from being able to picture the structure of the data in your mind as complex interconnecting shapes and mentally animate the movement and transformation of data in as few steps as possible without redundancy or useless or redundant transformations; and in many cases, being able to picture multiple workers doing their work in parallel is a plus. I'm not saying every great programmer uses their visual cortex, just that they can keep track of a lot of moving pieces in their mind.
This isn't math. This is more like a visual/spatial skill, like a mechanical engineer designing a complex machine with a lot of moving parts that have to fit together perfectly and move through each other's space in perfect timing. I think it's a different part of the brain from either math OR language.
I have to agree with Kun that complexity analysis (big-O) is absolutely mandatory, though. Saying complexity analysis is "pretty much meaningless" is the dumbest part of Mei's article. Kun also makes good points about recent innovations in DSP, machine learning, etc come from math--but only the *theory* part. You still need people good at the mechanics of programming to *implement* that theory in a productizeable way.
--PK (Tech Junkie / Junk Techie)
A "programmer" can be someone who spends two days putting together a complex Excel macro (poorly), or someone who designs an information systems architecture for a significant enterprise. These are VERY different activities.
On top of that, I'll say that approximately 85% of people doing programming aren't really competent. Compare how often software crashes vs how often cars fail in such a way that they crash themselves. So you have to specify, are you talking about MOST programming, or competent programming? Most programming isn't done competently.
Well-designed and larger software projects require a thorough understanding of a large set of rules, both knowing what the rules are, and understanding WHY the rules are as they are, and when to apply which rules in order to move forward. In that sense, it's very much like math. Also like math, one wrong decision can lead you down a path of futility, from whence reversing course is time-consuming.
Mathematics, chemistry and physics use formal languages. Terms and consequences are concise but rather difficult to deal with. Informal languages such as we speak daily are sloppy but efficient and rather easy to understand by comparison. It is that slop that makes informal languages so useful. Imagine E= MC squared if you have no clue what E, M or C mean at all. It might take decades to ascertain what the equation means..
Until you hit something that does require higher math.
Find the optimal coverage schedule for employees next week given their varied availability
As simple as this sounds, unless you're willing to wait for the computer to churn thru every possibility: you are going to need some higher math know how to program that answer.
In the real world the picking order is more like:
1. Rich parents / Male who is excellent at a popular sport
2. Prestigious law degree
3. Prestigious MBA
4. Good salesman and good at golf
5. Economics/Law majors/MBAs who got into strategic/management connsulting
6. (The rest)
Programming isn't, strictly speaking, math. Not like calculus or algebra is math. It's something else entirely.
I have a rather annoying learning disability, and have suffered from it since I was in first grade: I have a great difficulty memorizing things. Now, even with that rather annoying problem, I managed to be near the top of the class in both grade school and high school. What happened is I learned early on how to analyze the patterns behind the subjects I was expected to memorize and when test-time came was able to reconstruct most of the required information based on those patterns. Perfect example of this is spelling. I figured out what phoenetic combinations ruled English, and used them to pass tests. Armed with those rules, I only had to remember one or two odd words per week. In history, I found myself being able to understand and explain historical trends and influences. Names and Dates, on the other hand, gave me (literally) a headache. Simple math was easy (just a small number of consistent rules, after all). Sort of. Word problems in math, on the other hand, were difficult at best.
After I graduated college, I bought myself a Commodore 64 (they were just on the market) and dove right into both Basic and Assembly language. Both were easy for me to analyze and comprehend. Logic may be a branch of mathematics, but to me it's more obvious than anything in the math textbooks. Calculus is (for me) as obtuse and illogical as it gets. "If a water tank with a height of 15 feet and a circumference of 20 feet is 2/3 full of water, with a 1/8 inch hole a foot above the bottom, how long will it take the water level to drop to the hole?" Just plug the hole, whydoncha? Jeez!
Interestingly enough, I also have problems with computer word problems. Just give me the code (any code -- C, C++, C#, pascal, basic, assembler, SQL) and a little time, and I'll tell you what's causing the bug you're seeing. Now, after all these years, I'm the one everyone comes to when faced with an intractable computer problem that no one else seems able to solve. And I still don't like math.
"My country, right or wrong; if right, to be kept right; and if wrong, to be set right." --Senator Carl Schurz (1872)
Math is mandatory for engineers. In the early years people getting a degree in any way related to computers, hardware, software, programming, playing games while smoking weeds... were all engineers. Now that there is mass separation in the field the importance of math on any particular field is not as obvious. Us that design network gear and program network interfaces need math. Lots and Lots of it.
Having to work for a living is the root of all evil.
TFA is really about the human mind. We understand patterns as different forms of language, music is the most basic and universal, it lights up all areas of the brain, then you have spoken language built on top of musical patterns, then along comes symbolism in the form of writing and icons, math is our most recent and most precise form of natural language.
The take home message is, expose your kids to maths without boring them to death.
And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
Well, of course maths, programming, and natural languages are different, but all of them involve a symbolic language that models something and expresses that model. Kun seems to be focusing just on the differing degrees of precision these symbolic languages employ.
People tend to think of natural language as only a medium of communication, but it is also the way the human mind models whatever it perceives or imagines, and despite the fact we do that mostly instinctively, it is by far the hardest thing about language.
Programming is not math, it is language - a programming language is a language which defines, describes, and expresses an algorithm. Useful programs are frequently express something mathematical, but that is a function of the application, not programming itself.
Maths is just a whole lot of symbolic language. Learning maths is language learning, but it is also learning to describe things with precision and clarity and algorithmically. Some natural language learning is like that (e.g. advanced Latin grammar) and some is not (e.g. introductory conversational courses).
right...and that biases them...same for the coders as you say...
what no one considers is what the Communications people have to say...
see...Communications Theory (as taught today...i'd know...used to teach it as adjunct in grad school) starts with Claude Shannon and his SMCR model: http://en.wikipedia.org/wiki/S...
sure, there is tons of 'soft science' but there is something relevant here: SYMBOLS
it really goes like this:
symbols:logic:math/programming/writtenlanguage
math/code/written language are all on the same "hierarchy" level...then branch according to ****USAGE FUNCTION**** (I hate that TFA uses that ontology!!!!)
all math, all code...it's ALL SYMBOLS...and, from a cybernetic perspective, they can all be grouped together when trying to answer questions that TFA poses
Thank you Dave Raggett
it starts with symbols...then goes to 'logic'...then math/code/language
here's one way we can know this is true (besides using the SMCR model)...
it mirrors human development
humans use symbols before we know what they mean...before we can use **logic** to manipulate symbols in real time to get what we want (aka talking/writing)
we first mimic the symbols around us like a parrot...we just repeat what we hear
then we **associate** symbols with things...
that association allows for us to use logic...logic tells us what symbols result in what actions around us
***THEN*** we choose from all symbol systems available to us the best for the situation...
that's your answer to TFA
Thank you Dave Raggett
Language is a method of communication, not a coded series of steps arranged to achieve a desired result.
The latter requires a way for those steps to communicate with each other. Unsurprisingly, a language is just what is required for that!
Ezekiel 23:20
Computer programming can be seen as more rigorous than mathematics because if the written program is not correct, the executable will not run; whereas a mathematical proof may contain elements that are not completely described but part of mathematical lore. However we do not possess a compiler for mathematics. Conversely language may be more abstract than mathematics because language, in addition to mathematics, may express information that is not mathematics, e.g. poetry, imagerie, etc. However mathematical abstraction is also very rigorous, which is not the case of poetry or other literary constructs.
Mathematics is unique in requiring both a high level of abstraction and rigour at the same time, yet this must be performed without any artificial help like a debugger or compilers. In addition, creative mathematics require a high level of intuition and the capacity to concentrate on a specific problem for long periods of time (months, sometimes). Altogether, mathematics requires specific talents that are fairly rare and not necessarily found in programmers or writers.
Fortunately we are not all alike.
I'm going to go with this:
The vast majority of programming is fairly simple manipulation of states and symbols, which are themselves a small subset of numbers. yes and no are 1 and 0, etc.
The way those manipulations work together quickly becomes very complex.
You can do a boatload of things with just that knowledge. Entire video games. Many types of process control and dedicated controllers. Most reasonable scripting jobs, most "webby" stuff, database stuff, etc.
But then adding some knowledge of math, in the purely technical sense, gives us more symbols to manipulate, and more ways to manipulate them, and this, like any major skills enhancement, definitely makes you a better programmer. Some mid-level math concepts -- very simple in nature, actually -- amplify what you can do so much it's just amazing.
I suspect -- I can't actually tell you because my math is only mediocre to fairly good, nor have I ever knowingly come in contact such a person -- that *really* advanced math skills combined with *really* advanced programming skills (which I can lay claim to) would combine to create a true monster programmer.
But...
I think there's something about the essentially concrete nature of programming, and the incredibly abstract nature of higher math, that makes these dual-facet powerhouses the rarest of the rare. In my experience -- admittedly, just one person's career -- serious math heads tend to be pretty lousy programmers. Lots of bugs, poor structure, little to no sensitivity to shortcuts and loading. Then really great programmers seem to be only sorta capable with math (although what they can do with what they have tends to be quite surprising.) Just an IMHO based on my experience. Something I've found interesting enough to contemplate many times. Having said that, I sure would like to meet Mr. or Ms. combination-o-both. :)
I've fallen off your lawn, and I can't get up.
(That) Such is the nature of the problems we currently have, that mathematics isn't really a separate language, and should not be considered and labelled as one - instead being merely a consistent part of every other language, that now shares a set of (standard) labels. If this wasn't the case - then every language would not have their own labels for numbers etc., which act as the foundation of mathematics, itself.
(Note: There is a difference between what we perceive (of the universe around us), the information of this, and how we represent such information to allow communication between us. Language is ONLY an application of the latter - any consideration of mathematics being defined as and by the former information and perception, automatically means it has nothing to do with language, directly, at all. Unfortunately, some still like to confuse them.)
Programming languages are applications of both mathematics and logic, whilst often using additional elements of another language, (to make them easier to read by humans), in order to allow computers to function, by transferring the information they require to do so. (Calling them languages is consistent with what language is/how languages function, and not a problem.)
'Stupidity is an often fatal disease' - R. A. Heinlein
For most programmers, recursion seems to be a tool to completely -- but unpredictably -- blow out the stack. Cynical, I know, but that's been my experience.
Although I gotta tell ya, one of my favorite recursive things is a particular area fill routine for rectangular pixels. Simple and beautiful. Just elegant as all get out. Once I understood how it does what it does, it was like someone washed my mental windshield with Windex. That was a great day. :)
I've fallen off your lawn, and I can't get up.
Computers are essentially big calculators. The CPU instruction sets consists essentially of math operations, branch control, and input/output.
Nobody seems to have mentioned cryptology. Surely every programmer (or more general IT type) is going to be asked sooner or later, "Is it safe?", "Can the NSA read my code?", "What are the chances of that random() call giving the same answer twice?". It seems to me if you don't have reasonable math you are just going to regurgitate something you have read somewhere.
I find that what many people think of when they think of "math" is really just calculating (solve for this variable, optimize this curve, etc.)---what I like to call end-user math or craft-math. It's more akin to cooking or repairing an engine than it is to writing software. The other kind of math, the real kind, if you will, is proof writing. It's a creative process, both goal-oriented and expository, and subject to principles of elegance and efficiency. All of these features it has in common with software development.
The best book I have ever read on DSP is "The Scientist and Engineer's Guide to
Digital Signal Processing" - pdfs are on http://dspguide.com/. All of the sample code is in BASIC - yes, BASIC! I have successfully then gone on and implemented many of the ideas presented in many languages, and even in hardware. This highly useful maths can be presented in the what is arguably the worst of programming languages, and it is still very informative,
Some important areas of programming have very little maths at all. For example math does not care if you just name all your variables "aaaaaa" through "zzzzzz" - the answer is just the same.
In short both sides of the argument are wrong. Programming and math sit beside each other, with quite a bit of overlap. When working on problems that are in this overlap, you have a bias towards seeing it as solving maths with a programming tool, or programming with maths as a tool.
The big thing holding back computing is that computer programmers tend to think only in terms of algorithmics, and not in terms of (mathematical) computation. Computation in mathematics allows all sorts of funky stuff, and the only area where it is commonly applied is in vector manipulation. Applying matrices to matrices to matrices allows us to create infinite combinations of reusable transforms, which can then be applied to all the vertices in a 3D model at a low cost. Applying a series of algorithmic procedures to manipulate the same data would be unworkably slow. Algothmic programming results in lots of unintended interactions, and hard-to-track phantom bugs in the code. Computation is harder to start with, but it scales so much better and results in much more stable projects.
Got them moderator blues I blieve I walk out the do', With these mod-points I been gettin', I 'most never post no mo'
Subject line says it all.
Give a hand, not a hand-out.
Logic comes 1st with programming, nothing else.
Math or "Maths" is really a secondary skill which allows you to expand on your logic. You can essentially program with minimal knowledge of maths whilst simply using more if/else statements and logic to make up for it.
I had a GCSE D in maths (lower than average), but i've always been very logical. I learnt the required maths by using my logic to test and understand what i needed, not the other way round.
Programming without logic is nothing, programming without maths is something google can help you with very easily, or you will pick up yourself using logic.
A more fruitful question to ask is how many classes in informatics subjects a mathematics student should take to warrant a degree in Computer Science (instead of general or applied mathematics).
Informatics consists mostly of GÃdel's incompleteness theorem and Turings halting problem with a bit of propositional logic and lamda calculus thrown in; the rest of computer science is really electronics. A few experiments in electronics and programming may help students to visualise the theory a bit.
Not everybody needs to understand computers. Almost nobody needs to 'use' a computer.
Some arts colleges have courses where you can study 'User eXperience Design'. No computing required - just bring some crayons and paper and study old paintings for inspiration.
Probably the most eye opening math class I took that really made my coding skills take off was called Applied Math in high school. The focus was just what the title says: application of knowledge learned. It really taught me how to think outside the box when it came to solving problems with math. Solutions I've written for games left me asking myself where the hell I learned the solution to the problem: applied math.
Chewbacon
The Bible is like Wikipedia: written by a bunch of people and verifiable by questionable sources.
I am surprised that more people are not better at Math, since language is almost entirely Math. Think of the words we use that denote math terms: Quantity (more, less, many, one, few, all, none, etc.), space (large, small, besides, etc.), relationships (on, in, with, by, all, included, etc.), ..and the list goes on.
I strongly recommend a book called, "What Linguists Always Wanted to Know About Logic..* (*But were Ashamed to Ask!)" by McCawley.
http://www.amazon.com/Everythi...
Incidentally, this book has one of the BEST descriptions of Lambda Calculus I've seen so far.
I can easily see the disconnect between language and programming; it s pretty much the same as the disconnect between language and good thinking. Language contains many distortions, deletions and generalizations the people who know the language process unconsciously (sometime to their detriment) to complete their understanding of the communication. Computers cannot, at this time, do a good job of imputing the missing components to fully complete the instruction.
Good programmers are simply better at complete and precise thinking.
"The mind works quicker than you think!"
Maths can be very concrete (simple arithmetic) or very abstract (number theory, which is also called arithmetic).
Programming can be very concrete (assembly) or very abstract (pure functional)
Human language can be very concrete (dog training) or very abstract (philosophy)
Maths can be very lax (estimation) or very rigorous (formal proof)
Programming can be very lax (visual programming) or very rigorous (certified code)
Human language van be very lax (slang) or very rigorous (poetry)