5 ms·
What are the best ways to fill in those gaps? I bet many of us never enjoyed those classes in school, or even had a traditional computing education.
by divbzero 5y ago
What are the best ways to fill in those gaps? I bet many of us never enjoyed those classes in school, or even had a traditional computing education.
- benrbray 5y agoFor me learning Haskell has been a great way to expose myself to things that were previously "unknown unknowns". I do a mix of coding, for intuition, and reading papers, for theoretical context. The papers written by SPJ et al in the 1990-2000s give a remarkably clear history of how certain functional programming concepts jumped the gap from CS theory to practical implementation in Haskell. Just as assembly gives as close to a "bare metal" view of hardware as many of us will ever come, languages like Haskell and Lisp give a "bare metal" view of CS theory.
- vishnugupta 5y agoSeeing SPJ refreshed very fond memories for me :-). I accidentally stumbled onto Haskell in my masters course. On the first day at university I attended a trial class of functional programming[1] course and instantly liked the way professor taught. However, I didn't take the course then and forgot all about it. The next semester I took compilers course and approached that professor for my masters thesis. During a meeting he gave me couple of options one of which was in functional programming domain. This time I took the plunge and went all in. Took the FP course and the professor who taught FP became my thesis advisor. The next two years were the most intense and intellectually satisfying years of my life. Not only did I learn Haskell but also built a compiler for it. I still get goosebumps remembering the rollercoaster ride I had in those two years. During all that, the book by SPJ [2] became my constant companion. The book was actually out of print but my advisor had a book that was signed by SPJ himself :-). And I promptly photocopied it so I have it with me even to this day. Suffice to say Haskell, lambda calculus along with SPJ and my advisor have had a lasting (and continue to) influence my life. [1] https://www.cse.iitb.ac.in/~as/fpcourse/fpcourse.html https://www.cse.iitb.ac.in/~as/fpcourse/fpcourse.html [2] https://www.microsoft.com/en-us/research/wp-content/uploads/1987/01/slpj-book-1987-small.pdf https://www.microsoft.com/en-us/research/wp-content/uploads/...
- utkarsh181 5y agoThanks! this looks really good. The fact that you did your programming class in IIT Bombay further motivates to work hard for my "dreams".
- sum1datduznot 5y agoReading the textbooks that people use in those classes is pretty helpful. Dan Grossman has a great set of courses on Coursera, and a good number of resources are in those discussion boards. https://www.coursera.org/learn/programming-languages https://www.coursera.org/learn/programming-languages
- vishnugupta 5y agoI suggest a combination of theory (videos/books/papers) and practice. For practice; I highly recommend learning Haskell. If you are new to functional programming then learning Haskell is challenging and frustrating but as with any new topic the key is to not give up but keep probing. A good recent development is lot of mainstream languages are beginning to include functional paradigms such as lambda, closures etc., For example Java introduced lambda expressions, Javascript has had them for a while now. But from a first-principles stand point Haskell is as good as it gets so please do learn and code in Haskell if not at work then at least side projects. For theory I've found following material super useful. 0. This[0] is an incredibly awesome lecture where Phil Wadler takes us on a whirlwind tour of computer science. He talks us through different foundational structures on which almost everything (hardware and software) about computer science is built. I watch this lecture once every few months :-). It helps you build up context and ground various topics. 1. The one and only SICP. Book[1] and lectures[2]. 2. Automata theory[3]. This isn't an easy course but gets to the heart of the matter i.e., the meaning of "function" and what how can it be mechanically "computed". 3. Category Theory is where lot of active research is happening in CS theory. This is a very good lecture series[4]. The pace may seem a bit meandering but don't be put off. Bartosz is a gifted teacher and works incredibly hard to disseminate knowledge. For evidence just look at a recent post on HN[5] about an article he published. [0] https://www.youtube.com/watch?v=aeRVdYN6fE8 https://www.youtube.com/watch?v=aeRVdYN6fE8 [1] https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book.html https://mitpress.mit.edu/sites/default/files/sicp/full-text/... [2] https://www.youtube.com/watch?v=-J_xL4IGhJA&list=PLE18841CABEA24090 https://www.youtube.com/watch?v=-J_xL4IGhJA&list=PLE18841CAB... [3] http://ce.sharif.edu/courses/94-95/1/ce414-2/resources/root/Text%20Books/Automata/John%20E.%20Hopcroft,%20Rajeev%20Motwani,%20Jeffrey%20D.%20Ullman-Introduction%20to%20Automata%20Theory,%20Languages,%20and%20Computations-Prentice%20Hall%20(2006).pdf http://ce.sharif.edu/courses/94-95/1/ce414-2/resources/root/... [4] https://www.youtube.com/watch?v=I8LbkfSSR58&list=PLbgaMIhjbmEnaH_LTkxLI7FMa2HsnawM_ https://www.youtube.com/watch?v=I8LbkfSSR58&list=PLbgaMIhjbm... [5] https://news.ycombinator.com/item?id=26991300 https://news.ycombinator.com/item?id=26991300
- bidirectional 5y agoThat post is by a completely different Bartosz.
- swebs 5y agoYou could find a MOOC (Massive open online course) for pretty much any programming language you want. Here's a pretty good one for Haskell. https://haskell.mooc.fi https://haskell.mooc.fi