Live data from Hacker News

Why did we ever think a student's first programming language didn't matter?

m-cacm.acm.org

71–80 of 286 posts

Re: Why did we ever think a student's first programming language didn't matter?

#71

If a student has trouble transferring their knowledge of programming fundamentals from one language to another, it seems far more likely they didn't really understand them to begin with, which is a failure of teaching and testing, not some sort of 'limitation' in the student.

I would say it took 10 years of professional work across many languages where I can say I feel that comfortable.

Maybe I was a shitty student but I think I went to a general well taught undergrad program that grounded me in the various concepts (although not functional programming and lambda calculus - that was a pure CS-only thing at the time). It took a long time to actually build that level of intuition through experience. I wouldn’t expect someone who is just out of college to have that trait but it is to me a strong signal of seniority (eg you can start helping someone proficient in the language/more familiar with a codebase try to spot tricky system performance issues because you know what kinds of things to Google). Similarly language fluidity is a skill that not everyone develops (due to whatever mix of available time, interest, or natural talent) and that’s also OK. There are plenty of meaningful contributions made by people who only specialize in expressing all the CS concepts in one language and that’s OK too (or even just building useful tools/OSS contributions that are unrelated to CS topics).

Re: Why did we ever think a student's first programming language didn't matter?

#72

"Matter" to what end? That is, if you do not have a specific goal in mind when learning a language, then of course it doesn't matter. On the other hand, if your ultimate goal is to learn a myriad of languages so that you can jump around fields, then of course it matters, as you will likely have difficulty learning advanced concepts without understanding the basic ones. (Just as you would likely not dive into calculus…

>I also don't understand the article's interest in decoupling programming from math

It's an unfortunate side effect of America's long acceptance of anti-intellectualism. And people like this perpetuate it by coddling Americans who were somehow allowed to get through high school without even a basic understanding of the fundamentals of math. I am also a victim of this defeatist way of thinking, and have worked hard to appreciate math and learn it on my own to undo the trauma instilled in me by math teachers who simply taught formulas for us to remember to pass tests that we immediately cleared from our memory afterward.

Re: Why did we ever think a student's first programming language didn't matter?

#73

Earlier quoted context omitted.

This is an argument for teaching intro programming with Scheme.

No, it is an argument for teaching intro programming in C so they better understand what operations a computer is capable of doing. When you are used to C most other languages feels like a library that automates tedious tasks rather than something alien, you are well aware of the things needed to happen in the background so that the code you write in other languages can do what it does.

C imparts a very specific architecture onto your code. Scheme is more of a blank slate upon which many different paradigms can be taught.

Re: Why did we ever think a student's first programming language didn't matter?

#74

I think you should teach assembly language first, and then build a few simple high-level langauges on top of that. I suspect it would prevent a lot of mental dross from forming.

At UT Austin, undergraduate electrical and computer engineering students spend roughly the first half of the first semester building up from bits/binary to transistors to logic gates to latches and flip flops and registers. The second half of the semester finally moves on to understanding a "toy" ISA called the Little Computer 3, or LC3, and writing programs in its assembly language.

It's a much sharper and better motivated method to teach computer architecture, in my opinion.

Re: Why did we ever think a student's first programming language didn't matter?

#75
It wasn’t my first programming language, but I declined to attend a college programming course in Pascal because I thought Pascal was outdated and I wanted to learn JavaScript. It was 1997, and it seemed like the future to me. The teacher told me I should just learn Pascal and the same principles apply, but I felt like I didn’t want to waste my time and mental space on a language I wasn’t going to use.

I probably should have done it anyway as I didn’t end up getting seriously into development until 2008.

Re: Why did we ever think a student's first programming language didn't matter?

#76
post #18

If a student has trouble transferring their knowledge of programming fundamentals from one language to another, it seems far more likely they didn't really understand them to begin with, which is a failure of teaching and testing, not some sort of 'limitation' in the student.

> If a student has trouble transferring their knowledge of programming fundamentals “Programming fundamentals” isn’t the same from language to language. It’s inconceivable that a student who learned to program with python would develop the same type of fundamental understanding as a student who used C (to develop an understanding of memory-level APIs) or Haskell (to develop an understanding of type and semantic theor…

Expanding on this a bit...

You could think of there being a universe U of programming fundamentals. Each language uses a subset of U as the language's fundamentals (no language uses all of it), and each language uses a different subset.

Some languages have subsets that overlap, but that isn't always obvious, because they clothe the same thing in different syntax and, sometimes, different semantics. Even when the semantics are the same, they talk about the semantics using different terms.

So the problems with transferring knowledge of the fundamentals from one language to another are that they aren't the same fundamentals (different subsets of U), and that they are expressed in different terms and in different syntax. That can make it hard to recognize that the parts that are in common actually are the same. And then there's the new parts.

Now here's a class in C#. One student comes in knowing Haskell; one comes in knowing Python; and one comes in knowing C. The "fundamentals to transfer" differ from student to student. It's asking a lot for the teacher to be able to help each student recognize what part of their background transfers, what part of C# it transfers to, and what the deeper fundamentals are that are expressed in both languages. An exceptional teacher could certainly do so, but as the adjective implies, such teachers are the exception.

But it's not really fair to blame the student, either. It's asking a lot of a 19-year-old to understand deeply enough to make those connections.

My own guess is that this happens best after working as a professional for several years, and in more than one language. Then it's somewhat easier to see what's going on "under the hood" of the languages.

Re: Why did we ever think a student's first programming language didn't matter?

#77

I think you should teach assembly language first, and then build a few simple high-level langauges on top of that. I suspect it would prevent a lot of mental dross from forming.

I think they should teach assembly in parrallel but I disagree with the evolution you're suggestion. High level languages are expressing informational logic that actually can have nothing to do with computers, formally. The way that the language maps to assembly, memory, cpus etc. is obviously incredibly important, but that's crossing a major boundary of abstraction. Assembly is an under the hood implementation detai…

One of my favorite computer jokes is "Computer Science could be called the post-Turing decline in the study of formal systems."

Your criticism is valid, I think, because the chips are now so complex "under the hood" that assembly is, in practice, no longer the thin abstraction it used to be, eh?

Re: Why did we ever think a student's first programming language didn't matter?

#78
I think the mistake in teaching languages is to start students with a blank page. I learned by typing in code from a magazine, and thus started from a working program to tinker with. So, when my then 9-yr-old son wanted to learn, we spent a weekend hacking the Minecraft code. We did the first change together: making it so the Endermen didn't kill you for looking at them. Then I left him to it. By the end of the weekend he was flying around on the Ender dragon.

Re: Why did we ever think a student's first programming language didn't matter?

#79
post #18

If a student has trouble transferring their knowledge of programming fundamentals from one language to another, it seems far more likely they didn't really understand them to begin with, which is a failure of teaching and testing, not some sort of 'limitation' in the student.

> If a student has trouble transferring their knowledge of programming fundamentals “Programming fundamentals” isn’t the same from language to language. It’s inconceivable that a student who learned to program with python would develop the same type of fundamental understanding as a student who used C (to develop an understanding of memory-level APIs) or Haskell (to develop an understanding of type and semantic theor…

> “Programming fundamentals” isn’t the same from language to language. It’s inconceivable that a student who learned to program with python would develop the same type of fundamental understanding as a student who used C (to develop an understanding of memory-level APIs) or Haskell (to develop an understanding of type and semantic theories).

I think this is a pretty good point and it touches upon something I was thinking about: what language you use to introduce students to computer science says a lot (not everything!) about your pedagogical attitude towards what "computer science" is. If you think that it's fundamentally about humans interacting with machines, then low level languages make sense. If you think it's fundamentally about math, then functional languages make sense. If you think it's about building things which provide a lot of real-world value, then something like Python makes sense. Now of course (1) students probably need to learn about all three at some point; and (2) there are a number of other factors here, perhaps most importantly making the material enjoyable, approachable, and rewarding for students such that they'll want to delve into each of these aspects.

Re: Why did we ever think a student's first programming language didn't matter?

#80
post #70

Earlier quoted context omitted.

> I don’t think everyone can understand computer science. This is a bold claim. None of us are special for working in tech. Our life has presented us the opportunity and passion to invest ourselves deeply in the field, often at great opportunity cost. Saying that a bad teacher makes no difference in student outcomes is equally ridiculous as saying an excellent teacher makes no difference in student outcomes. If that'…

The person you responded to didn't make any claims about bad teachers or good teachers. The claim is that not everyone can understand computer science. As an extreme example do you think a person who is mentally disabled can understand computer science? From my perspective it's clear to me that not everyone can understand computer science and the same applies to many academic areas.

Not everyone can understand computer science, but I think the OP meant that your socioeconomic status matters more - gradual learning from age 10 makes college-level education a breeze compared to being disadvantaged well into high school and only using computers in order to live and use essential services.

I agree that the whole bad vs. good teachers thing is off-topic, though.

Post reply on HN