David Malan
๐ค SpeakerAppearances Over Time
Podcast Appearances
It's sort of got...
it's got everything but it's also a pretty small language and unless you download third-party stuff there's not a very large standard library in fact so most anything you want you need to build yourself and so we leverage this significantly in cs50 so much so that by mid-semester in week five of the class students are building their own hash tables and we're talking about how you could construct singly linked doubly linked lists uh hash tables and tries uh trees abstract data types like stacks and queues and so many more
And what I think is especially meaningful about C is that you can't just instantiate one of those data structures if you want one like you can in Java and C++ with STL and certain other libraries.
Like if you want it, you're going to have to build it yourself.
And I think that alone is a good educational exercise, not because you're going to need to build that thing again, but because there's value, I think, in really understanding
From the bottom up, what is going on inside of that device so that, one, you can make more informed decisions as to how you want to engineer and design your own data structures down the line.
Two, you can diagnose problems by reasoning through first principles what could possibly go wrong because you understand how the data is being stored and what the algorithms are that are performing on that data.
And three, it's a wonderful scaffold to higher level languages because one of my favorite things from week five to six in CS50 is students go from having written the week in week five, like their own hash tables implementation for adding data, retrieving data and so forth, which is like this many lines of code for some font size.
And it gets whittled down in week six to one line where you just instantiate a Python dictionary.
And you can be productive with a dictionary.
And many courses do teach programming by way of Python alone.
And we too have done it for some of our audiences.
But you really never get around to understanding what's going on underneath the hood.
And our goal in CS50 among them is not to output programmers, but engineers and educated citizens and folks who really understand from first principles
how technology works.
And so C, for instance, strikes, I think, just that right balance.
And for those students who want to go even deeper in a systems class, they can go learn about assembly and compilers and so forth.
But those students who want to go on to web programming or data science stuff or AI nowadays can just build on top of the C and then in turn Python layers that we use in the class.
I don't want to get into a whole internet fight here, but I think that is absolutely the wrong mindset, certainly for a full stack engineer.
I mean, by definition of full stack, you should be understanding everything that's happening among those layers.