Was anybody else surprised to see beginners are taught C and spend time reimplementing parts of the standard library. C is pretty low level for introduction to coding no?
Pascal was often used as a teaching language specifically because C was too low-level for many beginners. Python is often used now days. I think it's important to give beginners an easy start where they pick up the mental process of solving problems with code and libraries with steadily increasing rewards & difficulty. C is the wrong start for that.
What I'm uncertain about now is if they should start with dynamic or static language. Starting with something like Python gets them results and basic skills quickly. Might even maintain interest by being a break from the hard stuff in lower-level languages. After Python, something like Oberon or Go that's statically-typed, closer to the metal, and still easy to work with. I'd have said Oberon in past due to simplicity but a Go subset might be better today due to all Python to Go articles. They can do some work in Go to see benefits of static types, do algorithm optimization, whatever. Only then do they learn C with early intro on its pitfalls, undefined behavior, and efficiency advantages. They need to see how each thing helps, hurts, and is properly used. Then maybe a standard library re-implementation starting with a simpler one.
That's how I'm seeing the process in my head. Side-benefit is you get usable, job skills if you make it through any stage. Just don't drop out before done with Python. :)
My introduction to programming was one semester of Pascal in high school (2 years before college). There was a second semester class as well where the teacher just handed us an intro C book and told us all "Go learn it. Make up your own assignments and I'll grade them. I'll be over here teaching the first class if you need help."
I think schools are way too coddling when they teach kids "Pointers are scary. That's why you'll only learn Java here." I don't think my classmates where particularly gifted and yet we all survived C with minimal assistance.
At my university, the first semester's course is taught in Java. We were permitted to use any part of the Java API for all of our work. The one 'but' was that, during exams, we were not allowed to use the internet. We did have a local copy of the Java API though. We weren't really taught data structures in depth, but we did very briefly go through it (i.e. we learned how to reverse an array, what a linked list is, etc.; we did not implement our own data structures and such).
The second semester was taught in C/C++ and we did the things they described in the article (reimplementing the standard library, making doubly linked lists, etc.)
I think my university made the right call with making Java the first language. Even then, the failure (and/or dropout) rate was 30%+ for the first semester. A further 30%+ failed the second semester's course. If we had started out in C/C++, I imagine the overall failure/dropout rate would've been far higher.
Comments
Was anybody else surprised to see beginners are taught C and spend time reimplementing parts of the standard library. C is pretty low level for introduction to coding no?
Pascal was often used as a teaching language specifically because C was too low-level for many beginners. Python is often used now days. I think it's important to give beginners an easy start where they pick up the mental process of solving problems with code and libraries with steadily increasing rewards & difficulty. C is the wrong start for that.
What I'm uncertain about now is if they should start with dynamic or static language. Starting with something like Python gets them results and basic skills quickly. Might even maintain interest by being a break from the hard stuff in lower-level languages. After Python, something like Oberon or Go that's statically-typed, closer to the metal, and still easy to work with. I'd have said Oberon in past due to simplicity but a Go subset might be better today due to all Python to Go articles. They can do some work in Go to see benefits of static types, do algorithm optimization, whatever. Only then do they learn C with early intro on its pitfalls, undefined behavior, and efficiency advantages. They need to see how each thing helps, hurts, and is properly used. Then maybe a standard library re-implementation starting with a simpler one.
That's how I'm seeing the process in my head. Side-benefit is you get usable, job skills if you make it through any stage. Just don't drop out before done with Python. :)
My introduction to programming was one semester of Pascal in high school (2 years before college). There was a second semester class as well where the teacher just handed us an intro C book and told us all "Go learn it. Make up your own assignments and I'll grade them. I'll be over here teaching the first class if you need help."
I think schools are way too coddling when they teach kids "Pointers are scary. That's why you'll only learn Java here." I don't think my classmates where particularly gifted and yet we all survived C with minimal assistance.
At my university, the first semester's course is taught in Java. We were permitted to use any part of the Java API for all of our work. The one 'but' was that, during exams, we were not allowed to use the internet. We did have a local copy of the Java API though. We weren't really taught data structures in depth, but we did very briefly go through it (i.e. we learned how to reverse an array, what a linked list is, etc.; we did not implement our own data structures and such).
The second semester was taught in C/C++ and we did the things they described in the article (reimplementing the standard library, making doubly linked lists, etc.)
I think my university made the right call with making Java the first language. Even then, the failure (and/or dropout) rate was 30%+ for the first semester. A further 30%+ failed the second semester's course. If we had started out in C/C++, I imagine the overall failure/dropout rate would've been far higher.
It's what I was taught back 06 in CS101, though they switched to Java sometime in the next year or two.
When I started university in 2010, we still learned C and C++ for first year.
I was surprised that they start with C without learning about computer architecture first.