CMSC 430: Design and Implementation of Programming Languages
cs.umd.edu
cs.umd.edu
Funny story, I mixed up the due dates for one of the projects and didn't realize the correct date until the day before. Somehow I managed to do the entire project in one sitting, working from about 3pm-midnight. I basically took over an unused room in the math building and scribbled all over the chalkboards until I internalized everything, then the coding wasn't too bad. I even remember ordering DP Dough about halfway through, those were the days haha.
OCaml was one of those languages where I would stare at the problem for an hour, then realize the solution in a sudden epiphany, and it would only require a couple lines of code.
Each module builds on top of the next and has you add increasingly complex features to a toy language. The course I remember was flipped classroom, so it's also entirely possible to do online. On top of that, Jose's video lectures are very well-made and engaging. I would recommend anyone with some free time and even a bit of interest to throw it at this. It's a fun and eye-opening experience if you were like me and knew nothing about compilers before.
the classic text is computer organization and design by patterson and hennessy.
my understanding is that it is a substantial undertaking, especially if you're interfacing with hardware peripherals.
alternatively you could write a mips (subset) emulator and assembler in python and probably get the same understanding in a fraction of the time.
If you'd like to work with real hardware, +1 to the Ben Eater suggestion. He sells kits for all the components for an 6502 machine so you don't get bogged down in sourcing them. Great videos too.
(Quick edit, not 8086, showing my inexperience with hardware!)
Edit: https://www.youtube.com/channel/UCfZ7HFoaeSA7zPoGelA3aiw
They weren't made with the thought of being generally consumed, but I do plan on making videos for the wider CS/programming community in the future.
Honestly, I had a bit of impostor syndrome kick when you mentioned that the 330 course was required, being self taught and all... but I know OCaml so ¯\_(ツ)_/¯
Currently going through the Crafting Interpreters book and this seems like an excellent supplement for my journey into the world of language hacking.
Thanks a lot for posting those, they are very clear and encouraging!
330 is 'required' in the sense that you're not allowed to take 430 at UMD without having taken 330.
Perhaps a better way of phrasing it would have been to list the things we assume students have retained from 330. One of which is OCaml :D
I hope these videos provide some value to you! Always feel free to reach out if there's anything you think I could do better.
Anecdotally, I think UMD has one of the strongest and most interesting CS academic curricula I've seen. One of our projects in a class, CMSC 420: Advanced Data Structures, required us to implement Google Maps' turn by turn navigation using octrees, which was unlike anything I've seen in other school's curricula. UMD also has student-led courses that cover things that the CS program doesn't cover, such as full stack apps with React and NodeJS I believe.
I find many instructors in upper level courses do this. But for introductory courses, most materials are locked in. I don't understand why? Only MIT seems to do this consistently (they have huge amounts of money, it seems).
Another such course is : https://cs3110.github.io/textbook/cover.html. Still upper level.
A set of lower level core courses like intro to programming, intro to low level programming, discrete math, algorithm design, etc. will totally change the game. More and more people would be interested in upper level courses then and we would get more researchers and practitioners in the field to march forward.
I wonder what textbook they use. Is the dragon book still relevant?!
The tiger book, otoh, does a great job of leading the reader all the way from high level stuff to a realistic functional language compiler. And Appel, by the way, is a great technical writer - even his whitepapers are a pleasure to read.
I have great respect for dragon book authors but... their writing un the book and elsewhere is not a pinnacle of clarity.
It was soooo cool. I didn’t take 430 though, favored the classes on network security and protocol design instead.
I'm one of the faculty that teach the current version of this course.
Would you mind getting in contact with us? We would love to learn more about PL/UM. It would mean a lot: {jmct|dvanhorn}@umd.edu
Learning OCaml was wonderful; learning Prolog was a hellish nightmare.
Good professors are more than happy to have you there. One I even asked to take the exam, and get it corrected (to test if I really learned the content). And they allowed me to do that, I got the corrected exam at the end. Of course, it was not written in any book in the university.
So if you're in school (or in some places just a community member) and you want to attend lectures but not do homework or tests, you would audit the class. It's probably less common now with MOOCs and everything that's available on YouTube.