If you could quantify the relationship between being good at formal stuff(discrete math proofs, linear algebra etc.) and being good at making software, what would that number be?
Posted by Intrepid_Witness_218@reddit | learnprogramming | View on Reddit | 17 comments
let's say from 1 to 10, 1 being no effect whatsoever, 10 being that skill in programming softwares is basically equivalent to skill in formal stuff.
I've been coding for almost 7 months now, and I came across this youtube video of this guy basically arguing that skill in formal stuff == skill in programming
PoMoAnachro@reddit
So here's the thing - you can't put it to just a single number for two reasons:
The first is it depends on what you're building. Some things it is super relevant to, some it is not.
But more importantly, there is a degree to which it is relevant to all of programming but in an indirect way - how good are you at putting sustained mental effort into solving problems and understanding frustrating concepts? Because that matters to all of software development.
I think most people (not all, but most) people who are bad at math aren't bad because they're incapable but because they're mentally lazy and they just cannot be bothered to sit down for a couple of hours and give something dedicated mental focus. And if you're mentally lazy, you'll suck at programming too.
Heres' my analogy for you - this is kind of like asking "Does being a really good good powerlifter make you better at playing team sports?" And one hand, yeah, it does depend on the team sport - for some, that kind of strength can be really important, whereas for others having a lot of muscle is pretty irrelevant. But on the other hand, just the fact you're disciplined and motivated enough to train every day and to build your diet and lifestyle around success in a sport puts you miles ahead of a couch potato.
tl;dr: They're sometimes directly related, sometimes not, but people who are good at one tend to be good at the other because the underlying quality of "not being mentally lazy" is important to both.
Intrepid_Witness_218@reddit (OP)
i suck at math but i work on projects for 2-3 hours a day
xoredxedxdivedx@reddit
What “good at making software” isn’t something people agree on, for example, I think that 99% of programmers are bad at making software, not because they don’t have the ability to, but because academia and corporate codebases tend to be quite poor.
I could write chapters about it but I won’t belabor the point, the only advice I can give is don’t buy into the hype about what makes a codebase “clean”, just try all paths and types of practices and architecture, and through variety and practice you will learn what is true for you and what isn’t.
Aside from that learn bottom up from hardware at some point, from the general parts of hardware, how the OS sits on top of those and how that hardware is exposed to you. Take a day or two to learn some assembly.
generic_excuse_x@reddit
man, this is such a great analogy. I'm a beginner (just finished my first CLI tic-tac-toe) and you convinced me to look into this. Any recommendations where to begin? I was thinking of checking some CS degrees syllabus
Svorky@reddit
I am not good enough at math to do that.
Discodowns@reddit
It's a 1. You don't need to be good atatha to be good at programming, but if you are good at maths you will almost certainly be good at programming
setq-default@reddit
i
esaule@reddit
It really depends what it is you are making.
You are not going to write an ML model training engine without deep formal skills.
You are not going to write a good compiler without deep formal skills.
A show case for your local restaurant? Probably doesn't matter much.
Intrepid_Witness_218@reddit (OP)
i dont need to go into that complex stuff tho, and honestly that stuff needs a certain level of intelligence i simply don't possess, i'm interested in stuff like backend web development, ethical hacking and a bit of arduino
esaule@reddit
But that's the question really. I wrote solvers for a while, then you need to know a lot of discrete math.
If you do backend work, all databases work is fundamentally algebraic work. You don't write it like this, but that's what it is. Decent understanding of tree structures, language equivalencies, this type of thing is helpful. Many questions of data integrity, normalization, transactions are rooted in discrete math.
Fuzzing tools are all discrete math based. Compilation/decompilation is quite discrete math really.
For low level, work. Performance is quite an algorithmic problem.
The theory bits are going to be there. So if you stay shallow in these problems, probably not terribly helpful. If you need to do deeper, probably quite helpful.
Intrepid_Witness_218@reddit (OP)
but that's not math tho, it's nothing formal like proofs, i just write steps in english, optimise those steps according to library quirks when turning it into code and visualising the next step of what the code should do. how have i survived in coding and made a few projects for this long while sucking at college-level math(i'm doing stats rn, which i dislike, and i've heard that's the easiest of all maths in college)
esaule@reddit
What you are not seeing yet is that it's all math really. You just haven't looked behind the curtain. What you are saying is "I can use library". Yes you can use library your entire life and have a career.
There are different depth level of what you do which we generally call "technicians, engineers, and scientists" in STEM. Think about the analogous argument in other fields.
"Do we need to understand theory to be build houses? You pound nails into wood and see how it goes. That structural engineering class doesn't seem useful."
"Do I need to take genetics? When they bleed, you clean the wound and put a bandage on it."
And yeah, field medics exist and they are not doctors. And yes carpenters exist and are not architects.
If you want to be the carpenter of software. Then yeah you probably don't need much discrete maths. And you can have a great career and be very happy.
Intrepid_Witness_218@reddit (OP)
i can't become naturally smart so my only path is to be skilled
esaule@reddit
In my experience, it's not a question of being smart. It is a question of putting the time in and having put the time in the past. You can learn it now if you want. It might feel difficult because you may not have done the things you needed to do in the past.
It is really "time in the saddle". Please don't think you are stupid. You most likely are able to learn it if you do the work. I've been teaching CS for 13 years. I've only ever met 3 students I could not teach these things too. And I don't think these 3 were stupid, I just think their brain works differently so the common strategies didn't seem to work on them. But they weren't idiots, they were actually quite good in many ways.
Dazzling_Music_2411@reddit
So what is your actual question then?
Dramatic_Win424@reddit
In general, we can say that people who are good at really abstract formal stuff tend to have no problem working in a wide range of fields making software. They tend to grasp concepts in any domain faster because they can transfer abstract notions and structures from one to the other.
People who do not have that face huge hurdles once they venture outside of their comfort zone because they lack the toolbox to learn how to do things in domains that rely on math.
The thing is: How often do you change your domain and how often is it a math heavy one?
If we focus on a single non-math domain then I would say a low number, maybe 3. A person who can do all the formal stuff well is not better at programming a shopping cart website for garden furniture compared to someone who isn't that great at the formal stuff but is just an experienced coder.
But if I task both of them to switch into making data analysis functionality for satellite imaging software, the one who isn't great at the formal stuff will likely struggle more than the other person. So in that domain, I would say it's more like a 7.
Intrepid_Witness_218@reddit (OP)
i've always sucked at things that cant be visualised, whether that's math or philosophy, i'm learning backend development right now, but i would also like to get into arduino and ethical hacking