While this is great, I wonder if something is lost. Specifically I’m remembering when I learned geometry and the class was simply to work through Elements and prove each theorem. This happened when I was in 8th grade (US), and it was a frustrating and similarly beautiful and powerful experience. At the time nothing had quite honed my skills for reasoning about abstractions, loading models into my head, and working with those models like geometry did. Without having spent a semester fighting to earn the right to say “QED”, I don’t know if I would have made as good of progress as I did on becoming a programmer and a mathematician by virtue of having had that earlier experience where I learned the basic methods those callings require.
I guess my concern is that this makes it too easy in a way that rips out part of the difficulty that encourages learning. Learning geometry the way I did was helpful specifically because I had to go through the process of taking dense and difficult to reason about words and build up my models to understand them. The lack of assistive pedagogy like the kind here forced me to work out something like it for myself inside my head.
This is not to make a general argument against assistive devices; often they are helpful if what matters is getting something done. But I didn’t work through Elements to solve geometry problems where the solution had a positive impact on my life, but to learn a thinking process using geometry.
I also don’t mean to make an argument that no one should get to have some pretty pictures that help them learn. I’m sure the use of pictures like these helps many folks learn geometry who otherwise wouldn’t or wouldn’t learn it as well. I only mean to say that I think we give up something of value by making geometry easier to learn.
(FWIW I’ve made the same argument in the context of training programmers, preferring that they have to learn to work with assembly, FORTRAN, and C because the difficulty forced me to understand a lot of useful details that help me even when working in higher level languages that can’t be fully appreciated if you are, for example, trying to simulate the experience of managing memory or creating loops with JUMPIF in a language where it’s not necessary. Not exactly the same as what’s going on here but of the same type.)
FWIW as someone who learned Python first, was exposed to C but didn’t really understand it, and then only really learned C later (by playing around with / hacking on the OpenBSD operating system and also working on a project that used C++ with mainly only features from C), I’ve always found the following argument quite suspect with respect to programming:
(FWIW I’ve made the same argument in the context of training programmers, preferring that they have to learn to work with assembly, FORTRAN, and C because the difficulty forced me to understand a lot of useful details that help me even when working in higher level languages that can’t be fully appreciated if you are, for example, trying to simulate the experience of managing memory or creating loops with JUMPIF in a language where it’s not necessary. Not exactly the same as what’s going on here but of the same type.)
It’s undoubtedly true that I see some difference before & after “grokking” low-level programming in terms of being able to better debug issues with low-level networking code and maybe having a better intuition for performance. Now in fairness, most of my programming work hasn’t been super performance focused. But, at the same time, I found learning lower level programming much easier after having already internalized decent programming practices (like writing tests and structuring my code) which allowed me to focus on the unique difficulties of C and assembly. Furthermore, I was much more motivated to understand C & assembly because I felt like I had a reason to do so rather than just doing it because (no snark intended) old-school programmers had to do so when they were learning.
For these reasons, I definitely would not recommend someone who wants to learn programming start with C & assembly unless they have a goal that requires it. This just seems to me like going to hard mode directly primarily because that’s what people used to have to do. As I said above, I’m fairly convinced that the lessons you learn from doing so are things you can pick up later and not so necessary that you’ll be handicapped without them.
(Of course, all of this is predicated on the assumption that I have the skills you claim one learns from learning these languages, which I admit you have no reason to believe purely based on my comments / posts.)
The main difference is that the original is harder to follow because of shortcomings of the human short-term memory system. You’re still thinking about exactly the same abstract concepts. The potential danger is the lack of exercises, I suspect – that’s where a) first proving things yourself and b) the rederivation habit, come in handy.
I also suspect math students have ample opportunities to crunch through dense thickets of words… why oh why do I suddenly find myself thinking of Munkres’ Topology and Dummit & Foote’s Abstract Algebra?
While this is great, I wonder if something is lost. Specifically I’m remembering when I learned geometry and the class was simply to work through Elements and prove each theorem. This happened when I was in 8th grade (US), and it was a frustrating and similarly beautiful and powerful experience. At the time nothing had quite honed my skills for reasoning about abstractions, loading models into my head, and working with those models like geometry did. Without having spent a semester fighting to earn the right to say “QED”, I don’t know if I would have made as good of progress as I did on becoming a programmer and a mathematician by virtue of having had that earlier experience where I learned the basic methods those callings require.
Why is that missing here?
I guess my concern is that this makes it too easy in a way that rips out part of the difficulty that encourages learning. Learning geometry the way I did was helpful specifically because I had to go through the process of taking dense and difficult to reason about words and build up my models to understand them. The lack of assistive pedagogy like the kind here forced me to work out something like it for myself inside my head.
This is not to make a general argument against assistive devices; often they are helpful if what matters is getting something done. But I didn’t work through Elements to solve geometry problems where the solution had a positive impact on my life, but to learn a thinking process using geometry.
I also don’t mean to make an argument that no one should get to have some pretty pictures that help them learn. I’m sure the use of pictures like these helps many folks learn geometry who otherwise wouldn’t or wouldn’t learn it as well. I only mean to say that I think we give up something of value by making geometry easier to learn.
(FWIW I’ve made the same argument in the context of training programmers, preferring that they have to learn to work with assembly, FORTRAN, and C because the difficulty forced me to understand a lot of useful details that help me even when working in higher level languages that can’t be fully appreciated if you are, for example, trying to simulate the experience of managing memory or creating loops with JUMPIF in a language where it’s not necessary. Not exactly the same as what’s going on here but of the same type.)
FWIW as someone who learned Python first, was exposed to C but didn’t really understand it, and then only really learned C later (by playing around with / hacking on the OpenBSD operating system and also working on a project that used C++ with mainly only features from C), I’ve always found the following argument quite suspect with respect to programming:
It’s undoubtedly true that I see some difference before & after “grokking” low-level programming in terms of being able to better debug issues with low-level networking code and maybe having a better intuition for performance. Now in fairness, most of my programming work hasn’t been super performance focused. But, at the same time, I found learning lower level programming much easier after having already internalized decent programming practices (like writing tests and structuring my code) which allowed me to focus on the unique difficulties of C and assembly. Furthermore, I was much more motivated to understand C & assembly because I felt like I had a reason to do so rather than just doing it because (no snark intended) old-school programmers had to do so when they were learning.
For these reasons, I definitely would not recommend someone who wants to learn programming start with C & assembly unless they have a goal that requires it. This just seems to me like going to hard mode directly primarily because that’s what people used to have to do. As I said above, I’m fairly convinced that the lessons you learn from doing so are things you can pick up later and not so necessary that you’ll be handicapped without them.
(Of course, all of this is predicated on the assumption that I have the skills you claim one learns from learning these languages, which I admit you have no reason to believe purely based on my comments / posts.)
The main difference is that the original is harder to follow because of shortcomings of the human short-term memory system. You’re still thinking about exactly the same abstract concepts. The potential danger is the lack of exercises, I suspect – that’s where a) first proving things yourself and b) the rederivation habit, come in handy.
I also suspect math students have ample opportunities to crunch through dense thickets of words… why oh why do I suddenly find myself thinking of Munkres’ Topology and Dummit & Foote’s Abstract Algebra?