21 comments

[ 3.1 ms ] story [ 57.3 ms ] thread
Generally, there is huge gap in Distributed Systems courses (I've encountered) between the theory/books they follow and the practical lab projects...

Can anyone recommend some good DS course oriented for working engineers with hands-on projects which the course (theory/book) itself follows closely?

Have you looked at the linked material? I went through all of it myself and I found that although there are a lot of slides with code in them, you are given a good balance between Go code and theory.

You can just brush through the slides that have code in them. The comments are good enough.

There's a cloud computing class[0] launching on Coursera taught by Prof. Indranil Gupta which will cover all concepts such as fault tolerance, consensus etc. I'd suggest you can give that a shot. If you can't wait, you can checkout the course page[1] and get started right away.

You can take a look at other DS courses here - https://github.com/prakhar1989/awesome-courses/#systems

Lastly, you also have the option of working on assignments in MIT's DS class[2] (git clone git://g.csail.mit.edu/6.824-golabs-2014 6.824)

[0] - https://www.coursera.org/course/cloudcomputing

[1] - https://courses.engr.illinois.edu/cs425/

[2] - http://css.csail.mit.edu/6.824/2014/index.html

Coursera Cloud computing class is a great news! I guess I'll wait for this. As an added bonus, programming is done in C++ (compared to plain C/Glib as in original course). I hope that author means modern (or at least real) C++ and not just C with classes.
I guess using Erlang would be cheating...
Yes, I also had similar feel while using Erlang - "hardcore" part was just gone and I thought I was just writing config scripts to some underlying system (which it is) :)
I don't know much about Erlang. Can you explain why it's so easy?
Message passing paradigm and no shared state on one hand, on the other the Open Telecom Platform (OTP) framework that implements many DS behaviours (server, supervisor and supervisor trees, etc.).
Erlang VM's does most of of the distribution for you combine that with Erlang's primitive for distribute coding and it's just cheating. The language it self have many construct and primitive for distributed programming that it make it seems like cheating, the code itself is very nice to read once you get the hang of it and you don't have messy code like Node.JS with the nested call back. You first class citizen distributed stuff. Messaging passing and pattern matching for PID for example made stuff easy. Actor model is also easy to mentally solve compare to Node.JS non blocking stuff.

I'm only picking on Node.JS because Node.JS and Erlang is what I've used. Mostly Node.js and a little bit of Erlang.

Thanks. I just learned Node.js so it made your comment more helpful.
I would love to see a course that explains all the DS theory alongside its implementation in Erlang.
so sad, that course have no video lectures.
so sad, that course have no video lectures.
Also relevant is the "Distributed Algorithms" course at Royal Institute of Technology in Sweden. Seems to be a little bit more theoretical, but might be an interesting complement to a more practical course.

YouTube playlist: https://www.youtube.com/playlist?list=PL700757A5D4B3F368

Course page: http://www.ict.kth.se/courses/ID2203 (appears to be down at the moment though)

Given Prof. Stefan Nilssons "Fundamentals of concurrent programming", which is taught in Go [1], it would be interesting to see whether not the distributed systems course will adopt Go as well, in the near future.

[1] http://www.nada.kth.se/~snilsson/concurrency

Well, otherwise, I tried to get some help collecting nice Distributed system links and news in the relevant Google+ group: http://bit.ly/distsys
I'm taking this course next semester! However, it mostly likely will be taught in C/Java.