Hacker News new | ask | show | jobs
by genewitch 1359 days ago
I was a bad student through 8th grade, but managed to get selected for a STEM magnet school. I was supposed to enter 9th grade with Geometry, then algebra II, trig, Calc for the 4 years. But they discovered i'd never passed algebra prior, they put me in algebra, which means i would have finished in trig. Due to a crazy 3.5 years, i never got a high school math education. Calculus makes my eyes glaze over, and all i know about triangles is sohcahtoa.

Every couple of years i try to get some higher math education, but nothing makes sense. It's one of the reasons i [think] i suck at programming - i should note that another reason is i first learned BASIC, then qbasic, then fortran, and then C never made sense to me. At least i can putter around with python and R.

however i can do "basic" math things that generally everyone else has to dig out a calculator app for in my head, percentages, fractions, moving decimals, "making change". Since i suck at higher math, i'm only able to help my kids with basic math, and i try to ensure that they know it fairly well.

3 comments

"[..] and then C never made sense to me"

I had my fair share of higher math, but C never made really sense to me either. It's not us, it's C that's to blame.

C puts the C in Cthulhu.
So which programming language makes sense to you? Dare I say… Rust?
Yes, Rust does indeed and a long time before that it was Pascal. I really love Pascal's syntax, it makes a lot of sense when you approach it with a math background.

- '=' is for equality only

- assignment is ':=' which is the next best symbol you can find in math for that purpose

- numeric data types are 'integer' and 'real', no single/double nonsense

- 'functions' are for returning values, 'procedures' for side effects

- Function and procedure definitions can be nested. I can't tell you what shock it was for me to discover that's not a thing in C.

- There is a native 'set' type

- It has product types (records) and sum types (variants).

- Range Types! Love'em! You need a number between 0 and 360? You can easily express that in Pascal's type system.

- Array indexing is your choice. Start at 0? Start at 1? Start at 100? It's up to you.

- To switch between call-by-value and call-by -reference all you have to do is change your function/procedure signature. No changes at the call sites or inside the function/procedure body. Another bummer for me when I learned C.

Pascal wasn't perfect but I really wish modern languages had syntax based on Wirth's languages instead of being based on BCPL, B and C.

It sounds like you just don’t like C — a perfectly reasonable position — not that you don’t understand it.
It's time-consuming, but there are great resources to learn high school math to a very high level (likely much more effectively in many cases, than actually taking a high school math course, due to thoughtful exercises and more control over the pace of learning).

I learned a lot from the Art of Problem Solving book series because they're highly focused on the reader solving problems to learn, versus giving explanations. Even if you don't finish all of it, you can strengthen any problem areas.

For a less-comprehensive but still great introduction to precalculus (with a great section on trigonometry in particular from memory), Simmons' Precalculus in a Nutshell has a great introduction to this. Then you can read a book like Thomas Calculus, which has a great introduction to trigonometry in the first review chapter.

I would even say that you would be better off working through the books above than if you had the high school classes; the best math students probably took the same approach too (working through books instead of focusing just on the class material). The main obstacle is time, because it's hard to find time when you have work and children to take care of.

Calculus made a lot of it “click” for me but I somehow got through high school and college without ever doing or understanding trigonometry.