December 8th, 2024

The Need to Grind Concrete Examples Before Jumping Up a Level of Abstraction

Engaging with concrete examples is essential for understanding abstract mathematical concepts, as it fosters deeper comprehension and intuition, preventing superficial learning and misconceptions in education.

Read original articleLink Icon
The Need to Grind Concrete Examples Before Jumping Up a Level of Abstraction

The article by Justin Skycak emphasizes the importance of engaging with concrete examples in mathematics before attempting to understand abstract concepts. Skycak argues that jumping straight to abstract ideas is akin to a child reading quotes about life without having real-life experiences; it leads to a superficial understanding. He suggests that true comprehension in math comes from accumulating a variety of concrete examples, which provide the necessary intuition and depth. Without this foundational experience, learners risk missing the true power and purpose of abstract ideas, which are meant to encapsulate a wide range of concrete instances. The author encourages a hands-on approach to math, advocating for the necessity of grappling with practical problems to develop a deeper understanding.

- Engaging with concrete examples is crucial for understanding abstract mathematical concepts.

- Superficial learning can lead to misconceptions and a lack of depth in understanding.

- Real-life experiences enhance comprehension, similar to how life experiences deepen understanding of quotes.

- A hands-on approach in math education is essential for developing intuition and insight.

Link Icon 19 comments
By @xg15 - 4 months
> What a lot of math learners fail to understand is that grinding through concrete examples imbues you with intuition that you will not get if you jump directly to studying the most abstract ideas.

I feel that's more a lesson for a lot of math teachers to understand. I remember some frustrating linear algebra, calculus and computational complexity courses where the lector basically threw some formulas onto the blackboard, went line-by-line through a formal proof of their correctness and then called it a day. Giving actual examples of the application of the formula was an afterthought left to the student aides. Giving examples that could explain the derivation of the formula was not even considered as an idea.

It always reminded me of someone teaching an "introduction to vi" course but then just scrolling through vi's source code without any further explanation - and in the end expecting the students to be able to fluently use vi.

By @praptak - 4 months
That's the same principle which makes it wise to first do some copy pasting before you abstract stuff into a common library. Gathering some (more than two) concrete use cases before you factor out the common functionality makes much better library functions.

A common sign of prematurely deduplicated code is a common function with lots of boolean flags and other knobs to tweak its behaviour for every use case added after it was written.

By @awongh - 4 months
This is presumably about math problems, but I always approach programming problems this way.

One issue I have with math problems is that sometimes I wish I could immediately go down one level of abstraction and see something like a physics or programming problem that applies that specific or related problem I'm working on. I haven't found a resource like this yet.

By @skobes - 4 months
Ironically, this post would benefit from showing some examples.
By @joshdavham - 4 months
This was something that really lacked in my statistics degree. We were always learning different distributions, proofs and estimation methods but very rarely applied them to actual problems. I feel like you can kinda get away with this type of thing in math more, but in statistics, it makes things super hard to learn.
By @ww520 - 4 months
I’m adopting an Example Driven Development approach in my latest project. The project is a library/framework with a public interface. EDD is great in this case. To explore and experiment new features, I turn the use cases into runnable examples and use those to drive the internal implementation. This combines feature implementation, documentation, examples, and testing in one shot.
By @Handprint4469 - 4 months
Yes, exactly. See [0] for a concrete example of an abstraction that can't be grokked without grinding concrete examples, and how people who have already grokked it forget this fact.

[0]: https://byorgey.wordpress.com/2009/01/12/abstraction-intuiti...

By @schneems - 4 months
A concept I learned about in Knowledge Based AI (gatech ONSCS) is called “version spaces” where instead of starting at specific examples and moving to be more general or the other way around you do both as a kind of knowledge bidirectional search. I feel humans work that way too. We need both specific examples and generic models to help us converge to a deeper understanding of topics.
By @billyp-rva - 4 months
Relatedly: struggling is learning [0].

[0] https://news.stanford.edu/stories/2019/09/embrace-struggle-e...

By @mmastrac - 4 months
This applies to code as well. I worked on an internal PostgreSQL protocol driver for work and I've been focusing on understanding the binary message format inside and out, then the server state machine and query behaviour, and only then building a driver.

Don't underestimate the value of time spent grinding the low levels for code that is fundamentally important to what you are doing. You come away with a much stronger understanding than if you just hack a solution, cargo culting some existing code and just shipping it.

By @erikerikson - 4 months
The author is generalizing their preference here to say it's "right". Some brains need this, others need the abstraction before the examples provide the most benefit.

As noted by others this preference influences how one learns code effectively too. It's a pretty basic trait.

The author's stated preference is most common but it is not the only one.

By @aqme28 - 4 months
Yes. I think I did well in math/physics classes in college and grad school just because I found the most effective way to study, for me, was to grind out as many problems as possible. Go through the old homework, old exams, books, anywhere you can find relevant problems with solutions to check against.
By @huijzer - 4 months
Makes sense. I always intuitively understood that going from for example electronic engineering to computer science is probably easier than the other way around, but this article makes a great point. Without some low-level knowledge, you do not fully understand the higher level. Then you can only parrot the higher level (I’m also looking at you here LLM).
By @PeterStuer - 4 months
It depends. Some people most certainly grasp things better if they are concrete, grounded in their perception of reality. For others, they see each 'example' as a mere partial projection at best that completely fails to capture the true essence of the abstraction.

That said, in sloppy engineering we often see the reverse. 'Here's a meta-model I cooked up overnight. Now if you spend the next 3 years gathering all the domain knowledge and expressing it in my nifty notation, you can have the outline of a potential candidate for your question. I'll write up a journal paper tomorrow about how I solved your problem'. There was a lot of that around when I was in academia.

By @amelius - 4 months
With history classes in high school I wish they bumped up the abstraction level a little sooner. All those dates and names of important figures, almost completely useless information imho.
By @k__ - 4 months
I need to grind concrete examples before jumping to theory.

Don't know how I finished my CS degree, because most of the theory I just understood years after leaving university and doing some hands on work...

By @antipaul - 4 months
That's how I make my grind easier, in Leetcode. Go direct to solutions first, to get intuitions.
By @otikik - 4 months
And then the author gives zero examples
By @nhlx2 - 4 months
Similar to grinding scales on a music instrument.