
Brian Kernighan's Advanced Programming Techniques Class at Princeton - jenningsjason
http://www.cs.princeton.edu/courses/archive/spring13/cos333/
======
crm416
I'm enrolled in this class now--pretty funny to see it on the front page of
HN.

For anyone who's interested, the lectures generally consist of very high-level
views of various elements of programming; anything from version-control to a
C++.

IMO the best parts of the lectures are Kernighan's anecdotes: he constantly
drops in stories from his time at Bell Labs, and even includes some
correspondences and comments from the very programmers who created the
technologies on which he lectures.

~~~
mlacitation
Do you remember any? I'd love to hear some!

~~~
crm416
I do! Although not totally sure if Professor Kernighan intended for them to
leave the classroom. Occasionally he'll throw an email from a former associate
into the lecture slides (e.g., James Gosling), but I've noticed that he's
removed them from the public-facing slides on the site, which makes me think I
should be somewhat cautious. Maybe eventually, with his permission, I'll write
some up and post them on HN.

------
adamjernst
I took Brian Kernighan's class when I studied at Princeton. As part of the
class I developed www.itrans.info which set me on my way to being an
independent app developer. I'm enormously grateful for his class, his
involvement with students at Princeton, and just how genuine he really is as a
person on campus.

------
CervezaPorFavor
Looking at the syllabus, it looks more like "Miscellaneous Programming-Related
Topics" than anything "advanced".

~~~
SiVal
Any of those topics could be taught at an arbitrarily advanced level. You
could, for example, demand that each one be studied and a non-backwards-
compatible alternative be designed with the wisdom of hindsight and, of
course, implemented in C.

If I were considering that class for a grade, I would _hope_ that those topics
would be mostly introduced rather than dealt with in that kind of depth. (Now,
if it were a non-graded, non-time-limited, free Udacity or Coursera online
course that I could work my through as time allowed, I would rather have the
depth. Just don't make me master one new decades-old technological toolbox per
week and grade me on it.)

------
adamnemecek
Entertaining font choice for lecture slides.

~~~
gms
Comic Sans is the font of choice for CS class lecture slides.

~~~
adamnemecek
Because (C)omic (S)ans? It all makes sense now.

~~~
alok-g
Still doesn't! But OK. :-)

------
maximz
I'm currently trying to choose between Berkeley (Electrical Engineering
Computer Science major) and Princeton for undergrad.

Has anyone here gone through the Princeton CS program?

~~~
tikhonj
I'm currently at Berkeley EECS. It's certainly a very good program, and they
put a ton of effort into undergraduate education. For example, I was recently
talking to people at the ParLab about how they developed a rather popular
class about parallel programming, so undergraduate education is certainly
something of a priority.

Ultimately, it really depends on what you're interested in. From my
perspective, Berkeley seems very good for systems stuff: parallelism,
distributed systems, databases or even computer architecture. The
undergraduate CS classes are all rather good and mostly interesting. (Except
for the stupid Java/OOP/data structures course--that was a big waste of time,
but you can probably just skip it.)

However, the classes really aren't the most important thing. I think there are
two things that trump this. One is simply location: Berkeley is _very_ close
to a ton of startups. I've met some incredibly smart people running
exceptional companies, and even worked at a couple during the year. It's a
great resource that would be hard to duplicate anywhere outside of the Bay
Area. Even if you don't plan to spend much time _working_ at startups, it's
still really cool to occasionally pop down to SF and hang out with hackers;
the community around here is really great.

The other aspect that's more important than classes is research. Berkeley has
a very project-driven approach to research where people decide on applications
first and tailor their research to that. Some projects are _really_ full-
stack: for example, at the ParLab (where I'm doing some undergraduate
research), there was a demo where everything including the hardware, the OS
and the high-level algorithm design all stemmed from active ParLab research,
all integrated together at the very end. If you like that sort of thing, it's
very neat. The other big lab I know about--the Amp lab--operates similarly.

It's also going to depend on what particular subjects you like. From my
perspective, Berkeley is great for all sorts of systems stuff: architecture,
distributed systems, parallelism and so on. It's really a great atmosphere for
that sort of work, with a ton of cool people to talk to.

Of course, this does mean that most of the stuff that's going on is annoyingly
practical. Relatively few people seem to be working on neat theory, and most
of that is in complexity. So if you want to study cool theory just because
it's pretty, Berkeley might not be ideal.

I've found myself inexorably drawn to PL theory--types, categories, algebras
and so on--and Berkeley is really no place for that :(. It's driving me to
distraction. So if you're interested in something along those lines, I'm
willing to bet that Princeton is quite a bit better. And I really do think PL
theory is the coolest field, partly because of how general it--it's applicable
literally everywhere in CS and then spills over into math or even physics--but
mostly because of how _pretty_ it is.

Also, if you like functional programming--another thing I'm very interested
in, unsurprisingly--then Berkeley is also the wrong place. Most people seem to
know literally nothing about it beyond its being somehow related to functions
and a bit wonky, and I've only met a few people who know much beyond that.

Anyhow, I hope that helps you get a good idea of how Berkeley is like. I'm
very biased, but I think my biases cancel out: on the one hand, I go here and
it's great; on the other, the things I actually like are sorely under-
represented and that really annoys me.

~~~
alanctgardner2
I just want to back this up by saying that I've been exposed a little to some
AMP lab projects (Spark, Shark), and they're pretty cutting-edge for the
industry. That lab seems to be focused on tackling the same problems industry
is actively working on, which is rare at my university. If you're interested
in distributed, parallel computing in the vein of MapReduce, I would second
Berkeley.

------
softbuilder
Best one-page "class" ever from BK:
<http://ellard.org/dan/www/libsq/ref/style.html>

------
ExpiredLink
> _• object-oriented programming, C++, STL_

Funny. STL is as anti-OO as you can get.

------
fxfactorial
I am so incredibly jealous of princeton CS students.

------
lyb
I'm wondering if there are lecture videos.

~~~
crm416
No lecture videos as of yet, but perhaps eventually. Princeton began a
partnership with Coursera last year and the CS department has been relatively
active, e.g., our algorithms course is now on the site [1], and I believe that
they actually 'flipped' the course over the past semesters, i.e., students
were expected to watch the lectures online and typical lecture hours were
replaced with professors fielding questions / working through examples.

[1] - <https://www.coursera.org/course/algs4partI>

------
aeon10
I'm not quite sure what the resource here is? Lecture notes and syllabus
overview? No lecture videos? so how is this useful for the rest of us who are
not in Princeton. what am i missing here.

------
msc-o
so when can we expect to see this on Udacity/Coursera/edX? ;)

------
azurelogic
I would have loved to have a class like this in my program. It's basically a
summary of all the things I've learned in my side projects and first year of
my career. I hope this is mandatory for all of their students.

~~~
asafira
I'm a princeton alum --- unfortunately, this isn't mandatory, but it's pretty
popular!

------
asafira
Do other universities offer similar classes?

------
dysoco
Would love to get video lectures for this.

------
Myrmornis
Nit: it bothers me when people call JavaScript a "scripting language". What do
they mean?

~~~
cjh_
Dynamicly typed and interpreted, it is one of the many uses of the term
'scripting language' [1]

[1] <http://en.wikipedia.org/wiki/Ousterhout%27s_dichotomy>

~~~
Myrmornis
Thanks, I hadn't heard of Ousterhout's dichotomy. It sounds unhelpful, and
like an excuse for users of compiled languages to be supercilious about
interpreted languages.

A "scripting language" should, if it means anything, mean a language used for
writing "scripts". So it hinges on the definition of "script". IMO, a
reasonable definition of script might be something like "A computer program
comprising a sequence of commands executed for their side effects, whose
primary purpose is neither reusability as a software library nor to act as a
robust component of a long-running or frequent process, and therefore may not
be thoroughly organized into functions, classes, methods etc."

node.js can be used as a scripting language, but the primary role of
javascript is to run in a web browser and implement a GUI with an event loop,
which is very different from "scripting", if you accept a definition similar
to mine.

