Hacker News new | ask | show | jobs
by mfringel 1865 days ago
I still remember being in my AI class and having the teacher say "This course is taught in LISP. We'll be spending one class on the peculiarities of our system, but otherwise you're on your own. If you don't learn it, you'll fail."

They did eventually realize that teaching some of the basics would actually make for more successful students, and better alumni donations.

In the end, the CS Dept. started offering these things as zero-credit courses as a way to square the circle.

6 comments

It struck me in college that CS departments are getting away with assuming a lot of background familiarity with computers from their incoming freshmen, picked up on those freshmen's own time, in a way that I don't think any other departments do.

I don't know how people coming in not having sunk thousands of hours into computer crap before entering a CS major don't drown in a hurry. It'd be like starting a creative writing degree in a world where reading & writing aren't taught in school, except maybe as a one-semester high school elective, and you're just expected to have picked them up on your own time by age 18, if you're going to be a creative writing major. "OK, you're familiar with stories from watching TV, but now you're going to need to read and write them. If you can't read them here's a book(!) to help you learn to read, in you own time. Good luck anyone who wasn't already a long-time reading-and-writing nerd before choosing this major".

More generally some departments, including CS but not only, get away with picking above average students in a given college and letting other departments get the below average students, through things like "weed out courses" or not teaching actually 101 courses but "assuming a lot of background familiarity with computers", to quote what you say.

Difficulty of any given program at the undergraduate level is completely dependent on university policy. Maybe at the research level, you truly need to be more intelligent / harder working / whatever to succeed in math than in art history, but at the college level, you could do for instance:

- cram all that is taught in current undergrad, MA, and PhD (including the thesis) for art history in 4 years

- let CS students graduate if they can write any working program in any language of their choice

Tada! Art history is now the hardest degree in the college where only the best students aren't weeded out out; and CS is the easiest degree there is.

My point being that CS departments assuming prior levels of CS unlike other departments is merely an instance of a larger pattern.

When I was undergrad, I took a Fortran course. It was basically an intro programming course for non-CS engineering majors. I had taken some BASIC senior year of high school but this course was really literally: We assume you have never touched a computer before. It was 1976, so not a bad assumption.

I'm sure it would be considered a laughable course to teach at an elite school today. (OK. It was a bit harder because we were using punch cards and we had to beg for more computer cycles if we made too many typing errors, but still.) But I'm pretty sure it wasn't because we were a lot dumber back then.

I agree with your basic point though some students do freeze up with even relatively easy math. But, yes, you could put together a relatively easy programming course and call it CS. And liberal arts courses are not necessarily easy today--especially at a good school. You'll be doing lots of reading and writing.

> I agree with your basic point though some students do freeze up with even relatively easy math.

That's the opposite of my point, really.

> And liberal arts courses are not necessarily easy today--especially at a good school. You'll be doing lots of reading and writing.

My point was about the "within university" variance of student levels rather than the "between university" variance. I have no doubt that a liberal arts programs in a good university is more selective than the CS program at a particularly non selective university. However, within any given college, I'd be surprised if the liberal arts program manage to get the above average students and the CS/Math/... programs get the below average students.

Yeah, I had a friend in college who switched majors after constantly comparing themselves to the rest of the class, when a good chunk of us had been programming since our early teens and they had never written a line of code before their first class. It was a bit sad because they were actually doing fine (IMO), but always felt behind because they were comparing against students with years of head start.
I added cs as a second major in my junior year, and I felt that way at first in the java based 101 course. I had actually been using linux since I was a freshman in highschool (before graphical installers were around), and had picked up emacs to use tex-mode for my philosophy papers. But using Java in Eclipse felt completely foreign to me, and I wasn't sure I was going to like CS because of it.

It wasn't until I got past the first few java heavy intro courses that I realized I had a huge leg up on a lot of the other students that only had experience with Windows or Mac. Before that I felt like I was behind behind the curve because I was stubbornly writing Java in emacs because I couldn't stand how dogshit slow Eclipse was, so I didn't have the advantage of the code-completion or project management features.

Looking back on it, the curriculum was actually just holding most students back even further and by using emacs and managing my projects from the command line, I was just increasing the lead I already had over students that didn't have linux experience.

I felt very out of place in my college CS classes. I picked up programming my freshman year and switched to CS from my original major. I was completely green while so many other students - what felt like a majority - had been programming for years and were already extremely familiar with many of the concepts and tools that I was just being introduced to. It was rough for me to feel like I was starting out at such a disadvantage.
I was just thinking about this more, and CS programs kinda remind me more of college sports programs than traditional college majors: if you haven't spent years playing the sport before going to college, you're probably gonna have a bad time. Can you still do it? Maybe, but... damn, it's going to be hard, and take some unusual levels of determination.

Of course some of the problem is that CS programs use computers so much. Which I know may seem like a silly complaint, but I think the fundamental issue is CS-the-science being mashed together with what's really a vocational program (which is what 99+% of students and employers actually want out of it, and its being "real" CS is mostly just an IQ filter). I imagine if you go into, say, a junior college HVAC program not knowing which is the business end of a screwdriver, you'd also be at a big disadvantage compared with most of your peers, and probably feel really out-of-place for quite a while.

Sports or the arts. You probably don't major in music in college if you've never touched a musical instrument.

I took MIT's "Intro" to Programming and Algorithms I think it was called (6.001). I'm not a professional developer but I've written a fair bit of code including Python which is what the class used. I'm pretty sure that, as an undergraduate, had I never seriously used a computer command line before, there is no way I could have gotten through that course.

The same dynamic is largely missing from other engineering courses, as well as the sciences, which don't really expect more than high school classroom work, an interest, and general aptitude.

And it's certainly true that CS (the math degree) gets munged with CS (the engineering degree). MIT's a bit more engineering focused (the degree is in the engineering school). There are also some variants of the degree that are more or less engineering-centric.

To dip my toe into somewhat-dangerous waters, I suspect that if there's a major and highly effective filter other than simple interest (as some data re: more- and less-restrictive societies suggests) keeping women out of CS, it's mainly this preference (by CS programs) for experienced long-time computer geeks in CS freshmen classes, and hostility to those who aren't. Which is still, kind-of, an interest-related filter, but a bit of an odd and harsh one that punishes not having taken a strong interest very early.

You're not going to meet that kind of abrupt and early resistance on the path to becoming a doctor because you didn't spend tons of your free time as far back as junior high reading anatomy books or practicing dissection, for instance.

I don't think it's the only factor but it's been my belief for a long time that it's one factor. If you assume 18 year olds entering CS programs started to widely use computers and game consoles as kids in the mid to late 80s, that lines up well with the decline in women entering CS. [1]

Again, there are almost certainly other factors, and correlation is not causation, but there is at least logical correlation.

To your broader point, a lot of kids enter college with only a broad idea of what they want to do. And high school courses don't really offer much guidance. High school science classes have very little to do with their counterparts at good colleges.

[1] https://www.aei.org/carpe-diem/chart-of-the-day-the-declinin...

> You're not going to meet that kind of abrupt and early resistance on the path to becoming a doctor

It's much more inclusive indeed. If you can afford the mandatory completely unrelated undergrad you need to have completed to even apply to med school and the travel fees to attend your in-person interviews of course.

> I'm pretty sure that, as an undergraduate, had I never seriously used a computer command line before, there is no way I could have gotten through that course.

They don't call it the firehose for nothing. [0]

[0] http://hacks.mit.edu/Hacks/by_year/1991/fire_hydrant/

I'm very well familiar with the firehose :-) But mechanical engineering there, for example, did not require anything more than 1.) The ability to get into MIT and 2.) The normal high school curriculum. It didn't require years of experience in stripping down engines and rebuilding them. and, OK, 3.) Dealing with the firehose. :-)
> I picked up programming my freshman year and switched to CS from my original major. I was completely green while so many other students - what felt like a majority - had been programming for years

There's been some research on this and places like Harvey Mudd solve this basically by dividing the incoming freshmen into 'has any experience at all programming' and 'completely new', which was like 50-50 if I recall. And then tweaking assignments to not be video game focused -- pulling in problems & themes from bioinformatics and other fields instead.

>And then tweaking assignments to not be video game focused

Our only program of any significance in CS101 was a space invaders clone, but because we were so inexperienced, they provided a project template where we really just had to fill in some methods with a bunch of for-loops. When we got to the later courses and had to write our programs from scratch, we really had no idea where to begin because the 101 coursework had done all of that for us.

The video game assignments were asinine because they were beyond our skill level to do from scratch, so their templates handled all the I/O for us and that part of the program was treated like a bunch of magical incantations. As a result, we never fully internalized how all the moving parts fit together, and it kept us from learning useful stuff like how to read/write from files or execute system commands.

I actually hold the opposite opinion: For an advanced class such as AI (I assume you at least need to work on Data Structures before that), students should be comfortable to learn whatever language and tools they need to succeed in a couple of weeks, and even less if needed. They should be able to grasp the basic in a few days and gradually improve their knowledge about the tools and languages along the way. After all I have never seen a univeristy course that assumes excellent grasp of a language.

It is very sad that we need to take two entry level programming language classes in the first year. My university does not allow me to remove it as it's the pre-requisite of pretty much everything else. And I can't "prove" that I know Java, which I didn't but I'm confident that I can get the basics going in one day and the basic-medium stuffs in a week because I already know some C, C++ and Python.

The only class that I think should teach programming languages should be a PL class. An introductive one usually teaches three or more languages in one shot with each an example of a paradigm.

BTW the zero-credit courses sound like an excellent idea. Students do not get credits but still get education out of them. It's a great practice.

The college I went to they would bundle these sorts of classes into other ones. For example my 'C' class was also a how to get around in unix class and it was 1 day a week. But they also had pre-reqs so you had to have the 3 other classes first before you could do that one. So they could assume a particular level of education. When you are on your 2nd or 3rd language sometimes you are not sure what is important in a new one. So sometimes it takes a bit longer to learn. Now having a few under my belt I have a good idea which bits to look at first in a language. If all you knew was java and it was 1-2 classes of it, then being dumped into lisp and picking it up in 2-3 weeks would be a challenge for many.

Java as a language is actually tiny. So are most languages. Most of the pain is in the tools, build chains, and libraries that go along with them. Also sometimes what works very well in one lang is a pain in another. For example the dictionary in python has no real equivalent in C, unless you use some lib or write something yourself. In java you would need a map or hashmap class and knowing it exists sometimes is the biggest hurdle. But at least it is in the std library. So sometimes those sharp edges bite students as they are first starting with new langs and have decent exp in another language.

I agree with you to an extent, but learning lisp is a bit more involved than just picking up another programming language; it's learning to program in a completely new paradigm. I think it's perfectly reasonable to expect students to pick up things like syntax and standard libraries on their own, but to expect everyone to seamlessly pick up the functional paradigm with no help from the instructor is a bit much. For something like this there should be at least one lecture that goes over some of the fundamentals of functional programming and gives students the vocabulary they'll need to find the solutions to any roadblocks they run into.
> "This course is taught in LISP. We'll be spending one class on the peculiarities of our system, but otherwise you're on your own. If you don't learn it, you'll fail."

SCIP (well loved on HN) was designed for as the introductory class for freshpersons who'd never seen a computer before (which was the default case when the course was designed).

The first lecture was about how to program in lisp, using the example of symbolic differentiation. That one lecture was 100% of the introduction to computers and programming: the rest of the semester was spent on computer science.

It’s funny - I can’t think of an equivalent for that sort of thing in any other major. Of course, most other students don’t go in to their major with as much knowledge and experience as a good portion of CS students do.
All liberal arts degrees at UVA require 2 writing courses. The first course is required to be taken in your first year. The second is strongly encouraged to be taken in your second year.

That feels roughly analogous to a CS department requiring a "*nix skills" course or similar, as most liberal arts degrees require a substantial amount of writing.

I assume music (and possibly some fine arts) would require some background in those subjects. They often require a portfolio or audition before entering the program.

Do engineering programs expect students to have taken calculus?

Though with music (and possibly engineering), you likely have to prove ability prior to being accepted into the program.

You can get accepted to a music degree for some majors such as composition without prior proven knowledge but you'd need to do a summer class or similar to learn music theory. It would be rough if you think to learn in a couple of months what most musicians take years, but a friend of mine managed and 2 decades later he's head of the school.
The one big exception I can think of is the arts. But they usually require an audition or portfolio for acceptance. CS majors take anyone but then not until first week of classes is it clear how much pre-reqs are expected.
Oh, music majors in particular are a really good comparison. Though at least music instruction is available in most US school systems over a span of several years, as an ordinary during-school-hours class. Then again if that's the only instruction you've had, you're probably still starting out (maybe hopelessly) behind those who had private lessons outside of school, who are likely the real intended candidates of such programs, and you might not even be able to get into a good program.

[EDIT] incidentally, the arts are also infamous for being dominated, at a professional level, by kids with artist parents and kids with rich parents (who can bankroll years of private lessons and then years of little-to-no income while paying for access to career-makers) so... there's that.

My freshman year of college I took a music course - 'music 101' or something like that. I'd played sax, then guitar and piano, for ... 5-6 years, could read music, write a bit (notation, etc) - took a music theory class in high school - wanted to dive in more.

Of the 22 people in the class, 21 of them were singers - everyone except me. Much of the class was around singing - singing scales, etc. I saw nothing in the syllabus that required singing, but... you had to learn to sing stuff by sight reading, and... I'm not a singer. It was embarrassing for me (and probably for others). I think I managed to drop out before losing all my money on that, but... frustrating. Could also tell most of these people had had voice lessons for years, and were all taking this class as a way of getting in to theater work, not... to play an instrument.

My experience was the opposite. The learning curve for CS classes is steep, but you can go in with zero knowledge. When I took music theory, there was a hard requirement for vocal training experience and I was rather shocked that such an important and uncommon thing was just taken for granted.
Lol.. I had the same version of that class but in Haskell. There were basically zero books on the topic at the time too and we didn't have internet in our dorm rooms. It was a mess.
Not sure how long ago that was, but Lisp is an interesting choice for an AI class.
It makes complete sense depending on the time. My first advisor in grad school was a more traditional "cog sci / comp sci" phd and then I took a "data mining" grad-level course, but aside from that I'm a complete outsider to the field, but here's my take:

Since the 70s, AI was dominated by lisps and nearly everybody was driving at "general" AI by emulating or even attempting to simulate human thought processes.

In the 00s people started putting more weight behind statistical / stochastic methods for arriving at answers without necessarily trying to use any model of human cognition. This was called "data mining" and then "machine learning" (partly, I presume, to distance it from the 40 years of academia's dismal failure to produce working AI) and only in the last ~5 years has it come around to people starting to use the term "artificial intelligence" again.

In the early days of the revamp, it was common to see janky perl and fortran and not much structure holding it all together. Lately, I gather, the ecosystem is nearly entirely python-centric, but this is due to the gravity well around pandas. There's nothing in particular about python that makes it suitable to the task, though it is happily more approachable/accessible for academics than if a pandas equivalent had instead evolved in C++ or Java.

Measured in decades.