top | item 38804603

Ask HN: Programming Courses for Experienced Coders?

377 points| trwhite | 2 years ago | reply

Lately I've been learning Elixir. Many of the popular resources seem beginner-focused, which feels a bit tedious when you've been coding for over a decade. Are there any popular programming books or courses for more experienced coders?

182 comments

order
[+] onetimeuse92304|2 years ago|reply
There is a general lack of advanced materials in software engineering. This is one area where market economy works against common good, unfortunately. People who have the knowledge and want to capitalise on it are highly incentivised to preparing beginner level materials and maybe a tiny bit to prepare the something for people who already have a bit of knowledge. After that, the number of people who are your potential target drops off sharply and you would have to increase the price dramatically. And it happens that people will not buy a $200 book even if it had $100k worth knowledge in it.

There are some positions available though. For example, I recently found Let over Lambda by Doug Hoyte. Excellent book if you are that kind of programmer.

Another problem with advanced materials is that frequently people are even unable to recognise them as advanced or valuable. It is easy to look at and evaluate things you have experience with, it is much more difficult to impossible to do the same with stuff that is beyond your experience (also called The Blub Paradox: https://www.paulgraham.com/avg.html).

Personally, I just read a lot. I try to keep an open mind and even if I don't agree fully with the contents of the book, I try to use the ideas as inspirations for my own thinking. You can read codebases written by other people and learn new ideas. Over time, you gather a library of solutions to problems and knowledge of when to and when not to apply them.

If you do enough of it, you will find useful knowledge in unusual places.

[+] spicemonger|2 years ago|reply
I've taken 2 of David Beazley's courses.[1] And, I highly recommend them. If you haven't seen some of his talks, he's very good at explaining things by building them from nothing.

I took 2 courses: "Rafting Trip" and "Write a Compiler". Both were awesome. The Rafting Trip took us through implementing the Raft consensus algorithm from scratch. And the "Write a Compiler" course had us build a small language using LLVM.

Both courses (but especially the Rafting trip one) were definitely for experienced programmers. In the courses I took, people generally had at least 5 years of professional work. And even still, there were a few people that really struggled to stay on pace in the course.

But at the end, most people had a (kinda) working Raft library or compiler!

[1] https://dabeaz.com/

[+] pajep|2 years ago|reply
I enjoyed the "Rafting Trip" as well, side tracking a bit, anyone have course recommendation for ML ranking and ML recommendation courses or probabilistic data structures and algorithm (for example, bloom filter, Freivalds' algorithm that make multiplying matrix to O(n^2) etc.... etc)?
[+] zenburnmyface|2 years ago|reply
I've also taken David's compiler course, and it was excellent. I highly recommend taking any course he offers that interests you.
[+] notdonspaulding|2 years ago|reply
I came here to mention Dave Beazley's courses and talks.

In particular, I recently prepped/ran a week-long, in-house training session of Dave's Python-Mastery[1] course at my day job. We had a group of 8 with a mix of junior and senior Software Engineers and while the juniors were generally able to follow along, it really benefited the senior SEs most. It covers the whole language in such depth and detail that you really feel like you've explored every nook and cranny by the time you're done.

[1] https://github.com/dabeaz-course/python-mastery/

(I enjoyed teaching the class so much that I've considered offering my services teaching it on a consulting basis to other orgs. If that interests anyone, feel free to reach out to the email in my profile.)

[+] ayhanfuat|2 years ago|reply
How was the participation (number of people, interaction between the instructor and participants and interaction among participants)?
[+] zjmil|2 years ago|reply
I have also taken the "Rafting Trip" course and enjoyed it. Second that it is for more experienced developers.
[+] TheAlchemist|2 years ago|reply
I've taken 1 of his course, and I will definitely take more.

As you say, he is very good at explaining things - it's hard to describe, but it just clicks. Highly recommended.

I was a bit worried about the online aspect, but there is a very good flow actually.

[+] yla92|2 years ago|reply
Have taken two of his courses (Compiler and SICP) and highly recommend them. The only thing that is stopping me from taking more is I live at the other end of the world and have to stay awake the whole night for 5 days.
[+] ilrwbwrkhv|2 years ago|reply
+1 to this. Back in the day I read his Python cookbook to get into ML and have found only a few other books since then with that quality.
[+] anonymoushn|2 years ago|reply
Hello, recently I've enjoyed Casey Muratori's Performance-Aware Programming course[0]. You could read Algorithms for Modern Hardware[1] to learn similar set of stuff though. Casey's course is aimed at bringing beginners all the way to a nearly-industry-leading understanding of performance issues while the book assumes a bit more knowledge, but I think a lot of people have trouble getting into this stuff using a book if they don't have related experience.

I've also found Hacker's Delight Second Edition[2] to be a useful reference, and I really wish that I would get around to reading What Every Programmer Should Know About Memory[3] in full, because I end up reading a bunch of other things[4] to learn stuff that's surely in there.

[0]: https://www.computerenhance.com/p/welcome-to-the-performance...

[1]: https://en.algorithmica.org/hpc/

[2]: https://github.com/lancetw/ebook-1/blob/80eccb7f59bf102586ba...

[3]: https://people.freebsd.org/~lstewart/articles/cpumemory.pdf

[4]: https://danluu.com/3c-conflict/

[+] cobertos|2 years ago|reply
I'm still partial to LearnXinYMinutes[0]. It's how I learned enough MatLab/Octave in a couple hours to test out of an intro CS course.

Usually I just use that site in addition to the official tutorial when a concept really stumps me.

Here's their article on Elixir[1]

[0]: https://learnxinyminutes.com

[1]: https://learnxinyminutes.com/docs/elixir/

[+] xtracto|2 years ago|reply
The Elixir one looks to me like a language reference. Nothing wrong with it, in fact I used to love "language reference" books in the 90s to learn a new language.

It's way better than the typical painful language tutorial that is teaching you about how a variable is like a box containing a value... for every new language you want to learn.

For the sake of other people knowledge, if you appreciate this format to learn a language from a book, search for "language reference" books. They are usually succinct and to the point.

[+] archsurface|2 years ago|reply
You consider this to be "for experienced coders"?
[+] soultrees|2 years ago|reply
What an amazing resource. Thank you for this. And even more thanks to whoever put this together.
[+] imjonse|2 years ago|reply
Peter Norvig's programming course from 10 years ago. It says there "no experience required", but it's intermediate-advanced actually.

https://www.udacity.com/course/design-of-computer-programs--...

[+] dpflan|2 years ago|reply
It is also very interesting to watch an accomplished computer scientist write code and solve problems.
[+] amykhar|2 years ago|reply
I was lucky enough to take that class the first time it was offered. Peter Norvig was quite active and had several hangouts with class members.
[+] carom|2 years ago|reply
This is something the computer security industry is great at [0][1] that the software industry really needs to catch up on. I would love a weekend to week long course on writing an SMT solver, building a 2D game, training a neural net on custom data, modern C++, peer to peer networking, integrating the lightning network into an app, building a darkweb application, etc. I have not seen many options for that.

Two free resources are Karpathy's neural net zero to hero [2] and Gamozolab's fuzz week [3]. Even just recordings of people who are top in their domain writing code are so useful.

0. https://ringzer0.training/index.html

1. https://www.blackhat.com/tr-24/training/schedule/index.html

2. https://karpathy.ai/zero-to-hero.html

3. https://youtube.com/playlist?list=PLSkhUfcCXvqH2sgJa8_gnB41_...

[+] sbarre|2 years ago|reply
When I want to take the next step with a new language, I usually find a popular or interesting framework/library for that language, and I do a deep dive into the codebase.

Set it up for local development, then step through calls with a debugger, look at the whole call/request lifecycle, start to tinker with the subsystems..

It's a great way to see the real-world usage of all the core concepts you've been introduced to in the intro/learning courses or tutorials, and be exposed to more advanced patterns.

For Elixir, the obvious choice would be Phoenix if you're on the web app side of things..

[+] sltr|2 years ago|reply
It's not Elixir, but I'm working through Jeremy Koppel's "Advanced Software Design Course". I've been coding for 22 years and it is definitely growing me.

https://www.mirdin.com/

[+] qwrshr|2 years ago|reply
Highly recommend it as well. I'm a junior developer; that course gave me a much better sense for how to design software and answered a lot of software engineering / design-related questions that had coming up over and over again. I'm also just really allergic to handwave-y fluff, and the Mirdin stuff is just so much more concrete and precise than, e.g., the 'clean code' software engineering advice I've seen on the interwebs.
[+] tejohnso|2 years ago|reply
I'd also recommend Mirdin. I did a short interactive course a while back, and I'm considering doing the full interactive course soon.
[+] kilroy123|2 years ago|reply
I took his course as well. It is indeed advanced. I certainly learned a fair amount from it. (coding for 15 years)
[+] sltr|2 years ago|reply
Correction: His name is Jimmy Koppel, not Jeremy. My bad
[+] miguendes|2 years ago|reply
That looks interesting. If you don’t mind me asking. What did you learn there that you couldn’t learn from books or talks?
[+] krilcebre|2 years ago|reply
Is it programming language agnostic?
[+] __mp|2 years ago|reply
When writing a small application in Go I had great success asking Chat GPT specific questions. It helped me figure out which packages I needed to use and how to interact with them.

I understand that this might not fit your use-case, but it's worth a try. Just be aware that it tends to hallucinate APIs.

[+] User23|2 years ago|reply
Well it's not popular (even though it ought to be), but Edsger Dijkstra's A Discipline of Programming is an approachable and informal (by the author's standards) look at solving non-trivial problems in a provably correct way. In fact the entire EWD archive[1] can be arranged into a course pretty readily, although you'll definitely want to skim or skip large chunks of it. Also some of the papers are just acerbic observations on life, which some people like and some don't.

And there's it's big brother Predicate Calculus and Program Semantics by Dijkstra and Scholten that more rigorously formalizes the same approach.

Dafny[2] is one approach out of Microsoft Research that attempts to provide automated tooling around some of those concepts.

All of the above are excellent places to start if you're interested in learning how to write better code with the imperative languages that you're actually going to use professionally.

[1] https://www.cs.utexas.edu/users/EWD/

[2] https://dafny.org/

[+] sn9|2 years ago|reply
You can use Coq to teach yourself many of the same ideas from ADP using Penn's Software Foundations (probably the first two books are sufficient).

A somewhat more modern approach of related concepts to ewd's work is the work of Richard Bird which teaches you about using equational reasoning to take a correct naive algorithm and systematically optimize it into a correct and fast algorithm. [0] [1]

Regarding Dafny, there's actually a new book out that should be approachable to anyone with programming experience. [2]

[0] https://www.cs.ox.ac.uk/publications/books/functional/

[1] https://www.cs.ox.ac.uk/publications/books/adwh/

[2] https://mitpress.mit.edu/9780262546232/program-proofs/

[+] AlchemistCamp|2 years ago|reply
The more advanced a book or course is, the less popular it can be. What are you looking for in a resource that you don’t get from the docs? Knowing that might help narrow down the recommendations.

If you’re looking to understand what makes Elixir different from the most popular languages and how OTP works, I’d suggest Elixir in Action: https://www.manning.com/books/elixir-in-action-third-edition

If you’re already familiar with that, then take a look at the books from Pragmatic Bookshelf. They have quite a few books that cover different aspects of Elixir development including a recent ML-focused one: https://pragprog.com/categories/elixir-phoenix-and-otp/

[+] whalesalad|2 years ago|reply
I don’t have any general course recommendations but the strange loop conference videos have been the most inspiring for me. I hope to attend soon, and a life goal of mine is to have something interesting enough to present there.

For Elixir, Dave Thomas’ coding gnome “elixir for programmers” course skips all the menial BS about “what is a string” etc and goes right into the meat and potatoes of leveraging the language correctly. I loved it.

[+] __oh_es|2 years ago|reply
Possibly mistaken but from what I understand 2023 was the last year of Strange Loop - I was hoping to attend 2024’s
[+] epiccoleman|2 years ago|reply
+1 for Dave Thomas's course. Very refreshing and fun.
[+] Q6T46nT668w6i3m|2 years ago|reply
The obvious “next step” is experiential, i.e., write complicated programs. Books about writing compilers, databases, operating systems, emulators, file systems, etc. are all useful.
[+] whatamidoingyo|2 years ago|reply
Do you have any book recommendations for those topics?
[+] eatonphil|2 years ago|reply
David Beazley teaches weeklong intensive courses on Raft and interpreters and SICP. Good use of a corporate education budget.

I have no affiliation with it I just love the idea and hope to see more like this.

https://www.dabeaz.com/courses.html

[+] angarg12|2 years ago|reply
As others have said, expert-level material tend to not lend itself well to a book format.

Instead I find a lot of advance level knowledge is usually shared in tech blog posts and tech talks. The quality of these tends to vary a lot, so you need a bit of curation and due diligence. I myself found the videos from InfoQ very useful with 15 yoe (particularly in the software architecture track).

And if you want the really advanced stuff, you can also read papers. The barrier to entry is higher and sometimes is difficult to connect them to your everyday problems, but it doesn't get more cutting edge that than.

[+] jventura|2 years ago|reply
If you're learning Python, and know other programming languages, I have this online ebook [1] that I use with my students so that they learn Python fast enough so that I can teach them about socket programming.

Basically, in each chapter I give a small detailed introduction to the topic and then students do some exercises to solidify things.

[1] https://github.com/joaoventura/full-speed-python

[+] dartos|2 years ago|reply
https://www.manning.com/books/the-little-elixir-and-otp-guid...

I read this book years ago when i was first learning elixir. I was coding for about 8 years at the time, so not new to the game.

I liked it a lot. I don't think i wrote every project in the book, but it helped me wrap my head around OTP and how erland/elixir projects are structured.

Highly recommend it.

[+] bentanweihao|2 years ago|reply
Yay author here, and this made my day <3.
[+] aristofun|2 years ago|reply
There are no decent educational resources for experienced programmers (except books for narrow specific technical topics).

I know that from personal experience as an engineer and an educator.

There are strong economical reasons for that:

1. Experienced engineers can only learn something worthwhile from much more experienced ones

2. Extremely experienced engineers are rare kind on its own

3. Being a good teacher is a standalone set of skills and attitudes

4. It is extremely small set of intersection between being good engineer and a good teacher.

5. Courses from such people would cost a fortune to cover time and effort.

6. Experienced developers while being a paying audience, are at the same time extremely picky and hard to educate (because they already feel smart and know how to do things). Which makes situation even worse.

7. At the same time there are millions of noobs ready to consume almost anything you throw at them.

So imagine you are an engineer capable of teaching something. What would you do?