Teaching Girls To Code
Just like in that Rocky movie a good trainer could make a big difference.
The first major shortcut to championship is to really know the basic discrete mathematics, which other people might call “core math”.
Mathematics allow one to solve these Leetcode or Advent to Code problems easily, because almost everything is based on standard mathematical concepts.
Mathematics is an illuminating candle when one tries to master “advanced”
type-system of modern languages such as Scala
or Rust
.
The most important skill in programming is the ability to see through (a veil of) bullshit, to zoom trough the levels of abstraction and recognize the abstraction barriers. Familiarity with some mathematics is how one “sees things as they are” and prunes and discards socially constructed memes and bullshit.
The main principle is of abstraction, and this is when modern advanced mathematics really shine. Mathematicians create precisely defined abstractions without considering its representation or even existence and then study their properties and relations to other abstractions.
It is our burden as programmers to deal with actual representations and implementations, instead of merely hand-waving. We are the next level up.
And, of course, those who know math will naturally embrace the Functional
programming paradigm and even non-strict languages. At least Scala 3
or Ocaml
.
Anyway, there are some universal notions all programming language share with symbolic calculations or Arithmetic and Algebra.
- Lambdas (or functions)
- Bindings (or naming)
- Application (of functions)
- Parameterization (and Currying)
- Precedence
- Nesting (most fundamental)
- Scopes
- ADTs (exactly as Sets defined in math)
- Interfaces (typing)
- Algebraic Types (sums and products)
- Type-classes (a-la algebraic systems)
- Traits (composable sets of interfaces)
- Modules (nested structure of the code)
In the old glorious times they used to teach fundamental principles and concepts at MIT, instead of particulars of crappy imperative OO languages, but all this is long gone. Oldfags like me are the last ones who has been enlightened by the old-school MIT courses.
So, I can be your trainer who will teach you what is important, and will show some good books to read afterwards. Yes, you need basic mathematics, otherwise the reading will be a slow torture, instead of just nodding and smiling softly. I could teach that math too.
When one knows the underlying principles one can easily read a hundred pages per day of any textbook (except C++ or Java, of course, because these are fundamentally fucked up by brain-dead “designers” of the cursed Algol lineage).
The old-time MIT professors even promised you that - their students will be able to pickup any decent programming language in a couple of weeks. They really will.