Profile

austin_dern: Inspired by Krazy Kat, of kourse. (Default)
austin_dern

January 2026

S M T W T F S
     1 2 3
4 5 6 7 8 9 10
11121314151617
18192021222324
25262728293031

Custom Text

Most Popular Tags

The department meeting started a half-hour late; the chair overslept. I feel a bit better about oversleeping now and then.

Frighteningly, I'm now scheduled next term to teach the freshman programming class, taken by around 250 students to satisfy science or mathematics requirements. By luck and AP credits I avoided all but one humongous (i.e., more than 40 students) class as a student, and I've never taught a levée en masse class like this before. Even as a TA I never had more than 90 students in one term.

More, it's a programming class. I never learned to program; I just started doing it at age eight. Only computer class I ever took was a one-credit course learning Fortran 77 syntax and quirks from a great professor. (First person I ever heard admit that flowcharting is a really useless superstition cared about primarily by bad textbook writers.) But see my earlier comments about not knowing how to grade an essay; how do you grade a program? And to make it more intimidating, the language of choice is C++. I've never done anything nontrivial in C++, and know mostly its syntax and logic assembled like the moon Miranda.

The early comedy returns are good: the person assigned to the course following mine the next-next term met with me right after, asking how far I planned to go in the course? I don't know; my syllabus is usually two-thirds improvisation and one-third nonsense and we end up where we end up. Will I cover pointers? I don't know; I barely know what a pointer is myself. Will I use the standard notes? I didn't know there were standard notes. What book will I use? I don't know; what can students probably get as used books from the co-op? He'll meet with me later when my plans are better made. I hope he doesn't expect that'll be this week.

Trivia: Renowned author Isaac Asimov died of complications from HIV. Source: It's Been A Good Life, Isaac Asimov, edited by Janet Asimov.

Currently Reading: Innocents Abroad, Mark Twain.

(no subject)

Date: 2004-04-06 08:10 am (UTC)
From: [identity profile] xolo.livejournal.com
Grading a program should be easier than grading an essay. A program is written to perform some action, therefore you have an objective standard for success. A good program is one that works, however crufty it may be. A bad one doesn't work, regardless of how elegantly it's designed. If it works AND is well-commented and easy to follow, that separates the top grades from the passing grades.

(no subject)

Date: 2004-04-06 07:28 pm (UTC)
From: [identity profile] austin-dern.livejournal.com

Well, just working isn't quite enough either -- this is a computational sciences department, so that programs not only have to do a specified job, but have to be efficient in one way or another. That can be using an algorithm easy to remember and implement, or one that's particularly efficient in the average case, or one that's typically efficient with a well-marked region of danger.

But I also know that I wouldn't use anything before about the third draft of any program I write for work I cared about; I'll never convince 250 freshmen to even do a second draft.

(no subject)

Date: 2004-04-06 08:19 am (UTC)
From: [identity profile] chipuni.livejournal.com
I hope you don't mind some suggestions from someone who's been there, done that:

If you don't know pointers, don't teach C++. Pointers are essential to C, and C++ is just an extension of C. (There is syntactic sugar, called 'references' in C++, that make pointers less obvious at times in C++. Don't be fooled: they're still pointers.) Pointers aren't hard -- but they require knowing a lot of things, all tied together.

There are some other languages that you might look into for teaching:

Java
Advantages: It's available on every operating system. There's lots of books about it, many aimed toward beginners. It's similar to C++, but it doesn't have pointers. It includes graphics. Your students will look in newspapers and see jobs that ask for Java skills.
Disadvantages: It's tough to build a pretty interface; it's all text. It's tough to get input from Java until you've built the pretty interface.

Visual Basic
Advantages: There's lots of books about it, all aimed at beginners. It includes graphics. Your students will look in newspapers and see jobs that ask for Visual Basic skills. It's extremely easy to build a pretty interface.
Disadvantages: Visual Basic is a proprietary language, only available on Windows machines. Further, it is dissimilar to most other languages used: what's learned in Visual Basic doesn't transfer well. It is only graphical.

Python
Advantages: The language is simple, powerful, and designed to teach good skills. It is available across every platform. It can create both text-mode applications and graphical applications.
Disadvantages: It's not used commercially much. Books on this language are much rarer than Visual Basic or Java.

LISP, Scheme, Haskell, OCaml, or SML/NJ
Advantages: All of these languages are simple, extremely powerful, and designed to teach excellent computer skills. They are all available across all platforms. Further, they will stretch the minds of your students. They are the languages taught to the first year of MIT students.
Disadvantages: They are not used commercially, except in specialized cases. Books on these languages are rare. Graphics are not standardized on these languages (though all have graphics extensions.)
Note: These languages are "functional languages": a very different thought-process than most "object-oriented languages". If you can stand the idea of teaching recursion within the first two lectures -- and putting off why you can't have interactive programs until late in the course -- they're excellent things to learn.

If you want suggestions of books for beginners for any of these languages, let me know.

(no subject)

Date: 2004-04-06 07:37 pm (UTC)
From: [identity profile] austin-dern.livejournal.com

Sad to say, language isn't negotiable. If it were I'd pick either Java -- for portability and its generally harmonic implementation, even if using the math features has a static sticking point -- or Fortran 77 -- since it's hard to get a simpler widely-used language that does mathematics. But the course is intended for computational science, and while most students won't go on past this, those that do will be fed into courses that demand C or C++.

I've got suspicions the confusing aspects of the course have focused on what I'd regard as irrelevancies. One recitation section I attended last term got bogged down on some question like ``what is the standard behaviour of a loop with start for (int i = 0; (i+=2) < 10, ++i) '' or so (I forget the details).;I can't think where I've ever needed to do anything fancy in a for header like that, and certainly wouldn't do that if I were still teaching people how looping works. I also suspect a homework assignment consisting of drilling questions about complex chains of operators (``what is the outcome of j = 2; j++++-=3>2''?) is focusing on quirks rather than useful programming tools, rather than stuff they need to know right from the start.

(no subject)

Date: 2004-04-07 01:45 am (UTC)
From: [identity profile] xolo.livejournal.com
By all means, concentrate on the things that people will actually use, and deal with odd and rare cases if and when they natually arise in the course of the learning. All of the best classes I've ever had worked that way.

(no subject)

Date: 2004-04-07 05:28 am (UTC)
From: [identity profile] austin-dern.livejournal.com
Oh, sure. I've always tried to teach as few new things at a time as I can manage. Granted I don't come from a computer science background, but I'm of the school of thought that if you need to halt and ponder what a line of code means -- just parsing syntax, never mind what role it serves in the algorithm -- then you probably didn't understand it when you wrote it, and you certainly won't be able to debug it. So I wouldn't have j++*=j<k?1:0 in the first place. Algorithms need to sometimes be unobvious, but that means they have to be blocked out thoughtfully.

Expand Cut Tags

No cut tags

Style Credit