Hacker News new | ask | show | jobs
by btschaegg 3379 days ago
But that's already the problem: You start by ignoring instead of explaining things.

If you start with

  print("Hello world!")
you can already start explaining your subjects everything they've just written and build from there.

So, you'll get around faster to teaching the mindset of programming instead of explaining access modifiers. Those are not needed for that.

Also, if you would start an explanation of anything new to me now with "oh, that's magic, just ignore it.", I still would walk away from your course if you can't explain that within a week.

1 comments

I think you're being a little bit aggressive about the when's and the how's. I think there's nothing wrong with saying "Don't worry about that until next week, we'll be discussing that in another lecture" as long as it does in fact get explained. I don't think the statement should be "it's magic, ignore it," ever.

At most universities I've seen, CS101 assumes no programming experience, so if you want to show a real Java code block there's going to be a lot of stuff a student's never seen before.

I also think this is why languages with REPLs and relatively few syntax modifiers (like Python) are good for intro courses. You can fire up a REPL and type `print "Hello World"` and it'll do just that. The students don't have to see any "don't worry about it" type stuff.

edit We may have been agreeing about the "print Hello World" part and the Python part. The problem is that some universities (like my Alma Mater) had the hard requirement of all CS and IT students started with Java.

Yeah, that's exactly my point (I'm not sure if we're misreading each other here?). If you want to teach someone how to program, there is much to be had if you start with simplicity and consistency. Algol-derived languages pretty much all struggle with this, whereas Python, Javascript etc. have a much more sane base to learn from.

(NOTE: Only a base. Both Python and JS get very complicated and magic-y if it comes to details. But those are not what you'll want to teach. You'll want to explain scopes, variables, functions, objects etc.)

In both, the basic file is a scope. In both, you can write "Hello World" without fluff, because that scope is executed. It is consistent on a starter level. Then you move to variables. Then to loops. Then to functions showing how you can modularize code. And you didn't have to write `public`, `static`, `class` or whatever. Your students don't even need type theory beyond "that's a string" and "that's a number".

> The problem is that some universities (like my Alma Mater) had the hard requirement of all CS and IT students started with Java.

Mine did too (still does, AFAIK). Incidently, they also did also basically nothing to guarantee any didactic quality in any of their courses. Go figure ;-)

I still maintain the opinion that people defining rules like this overestimate the effort that comes with switching languages. If you're teaching solid fundamentals instead of "Language X", you shouldn't have too much of a problem teaching the same students something like Java at a later point. But the way to get the basic understanding will be much smoother.

As an anecdote: Shortly before I finished my masters I would help out a bachelor student on his first project. He had the problem that they only had started out in Java a semester before, but he had to use Python (because of the tooling and libraries involved). He asked me a couple of questions that mostly equated to "how do I best do X in Python" (the hardest being non-performance critical parallel tasks - simple threading stuff). A couple lines of code later, his reaction basically was "Really? That's it?!". His impression seemed to be that most tasks must* be very difficult and complicated, since they were presented this way in his Java class...