About a year ago I joined C/C++ compiler team at Intel. And some people asked me how to become a compiler developer, because I assume that for many C++ developers compiler is just a piece of magic. Now, I don’t consider myself an expert in this field, but still I decided to share with others what learning resources do I use. And it’s not limited to compilers, but in general. I hope that someone will find something useful in this post.
I don’t want to advocate for any particular form of learning. It works differently for different people, so I will just place them in the order which works the best for me.
Also I completely accept the fact that the resources I use in 2018 are somewhat different than they were a year ago. I’m starting reading different blogs and listen to different podcasts as my focus moves in different direction.
Coursera - this is my main source of gaining knowledge for years. I finished ~10 online courses so far on this site. I think that it is just an amazing opportunity to study courses from the best universities around the world. Absolutely for free! Some of the courses that I finished:
And it’s not limited to Computer Science disciplines. There are really a lot of interesting courses out there. Usually the course lasts for ~3 months, but it takes me twice as more time to finish it. Anyway, I try to take a least one course every year.
I don’t have experience on other online platforms like Udacity, so can’t really compare them. Also some universities have their own online learning systems. One such course that I took fairly recently was Compiler Class by Stanford University. I would recommend this course for all C++ developers just to have a feeling of what’s going on under the cover of C++ compiler.
CppCast - podcast for C++ developers by C++ developers. I’m their regular listener from the very first episodes. Although I’m not that focused on modern features of C++ than I used to be in the past, but I still listen to this podcast during my way to the office each Friday morning. Even though I’m now not spending my free time on playing with C++17 and such, but it’s really good source of information of keeping up-to-date with the new stuff that’s coming in C++ world. I still consider myself as a part of this community. Rob and Jason are doing really great work!
Simple Programmer podcast - podcast mostly about soft skills. I was so upset when John Sonmez said he will stop doing this podcast. This was a truly gem for me, I really learned a lot from his podcasts. I would recommend his stuff to everybody who want to boost his/her career. After John’s course on making your own blog I restarted my blog, because he really showed me the value of doing it. John usually speaks about simple things, like commit yourself and being consistent on those commitments. Those are simple things, but it’s not easy to follow them. John has his own techniques to deal with such kind of things and I try to apply some of them in my life too.
Programming and Performance with Cliff Click - this is a podcast mostly about Java, but I like to listen to it, because Cliff is really the expert on performance and compilers. He often brings topics about compilers, and that’s quite interesting to me.
Twich (This week in computer hardware), PC perspective - as I’m now working closely with the HW, I need to stay tuned with the latest news and trends that coming up in CPU space. And those two podcasts help me whit that.
SE radio, SE daily - I don’t listen to those two podcasts regularly, but sometimes on those podcasts appear interesting topics that I want to listen. Usually episodes are about general things in SW development, management, new services and tools.
Here is just a list of blogs and sites that I try to follow quite frequently:
I really like to read books as well. This form of gaining knowledge works pretty well for me, but I must say that I used to read a lot more in the past, than I do now. For C++ there is a good collection of books on stackoverflow. I’ve read some of the books from this list.
If you want to familiarize yourself with LLVM I would recommend LLVM essentials - it is a really light read, introducing you a high level concepts of LLVM. I haven’t read the classic dragon book, but I have one good book about compiler optimizations and code generation (not covering front-end) - Advanced Compiler Design and Implementation by Steven Muchnik. Not an easiest book in the world, but very informative.