Live data from Hacker News

Ask HN: Programming Courses for Experienced Coders?

news.ycombinator.com

41–50 of 192 posts

Re: Ask HN: Programming Courses for Experienced Coders?

#41
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.

Re: Ask HN: Programming Courses for Experienced Coders?

#42
I don't know anything about learning Elixir, so, cannot help on that specific topic.

But, here's how I conceptually think about advancing one's understanding in programming.

First, you can aim for breadth or for depth of knowledge. So, learning another language is, in itself a kind of "advance". However, for depth, you'd usually want to pick a specific sub-discipline in programming and concentrate on that. You will have better luck with choosing theoretical disciplines, because those usually are rooted in math, and so have longer history and more systematic approach. The more "practical" aspects usually follow the arc of having an introductory course (at best) with the next learning stage being an "area of active research" (also, the intro course would typically be bad).

To give you an example: in college I became interested in regular languages. So, I was looking to expand my knowledge on the subject. Out of all things that I could dig up on regular languages two seemed most appealing: approximation of context-free grammars with regular languages and equivalence between generating functions and regular languages. In a short while I realized that I don't have enough of mathematical background to go after the generative functions part, but the approximation part turn out to be fun and interesting. I was able to dig up some papers and even try my hand in doing something with the concept.

You'd have similar success if you went after types in programming languages. There are plenty of publications, and you will have multiple steps ahead of you before you run up the wall of "area of active research". My journey down that path started with Benjamin C. Pierce's Types in Programming Languages.

Another direction you may consider is to try to generalize your knowledge. For example, of programming languages. In this regard, I find the book by Shriram Krishamurthy, Programming Languages: Application and Interpretation to be a good introduction to the theoretical side of crafting and evaluation of programming languages.

There are, also, unfortunately, some areas where a lot of programming work has been done, but very little learning material is available, and, especially nothing deep has been produced. For example, if you want to go down the system programming route... there are books, that's true, but the level of generalization leaves a lot to be desired. It's often boggled in all kinds of "practical advise" and very concrete examples based on Linux Kernel code long ago replaced by something else (or worse yet, but original Unix code etc.)

Or, even worse, if you consider fields like testing. Or even GUI. It's surprisingly common and yet surprisingly without much analysis or structure.

Re: Ask HN: Programming Courses for Experienced Coders?

#43

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.

Do you have any book recommendations for those topics?

Crafting interpreters [1] is one such, where the author walks you through writing an interpreter for a toy language. The book uses Kotlin IIRC, but you can write the interpreter in any language of your choice.

1. https://craftinginterpreters.com/

Re: Ask HN: Programming Courses for Experienced Coders?

#44
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/

Re: Ask HN: Programming Courses for Experienced Coders?

#45
post #26

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.

Yay author here, and this made my day <3.

Re: Ask HN: Programming Courses for Experienced Coders?

#47
post #43

Earlier quoted context omitted.

Do you have any book recommendations for those topics?

Crafting interpreters [1] is one such, where the author walks you through writing an interpreter for a toy language. The book uses Kotlin IIRC, but you can write the interpreter in any language of your choice. 1. https://craftinginterpreters.com/

It uses Java and C. Strictly speaking there's no reason you have to use either language, you can also use the design in the language of your choice (assuming sufficiently matching semantics, like C# or Kotlin instead of Java for Part 1, or a willingness to put in more legwork if you go further afield).

Re: Ask HN: Programming Courses for Experienced Coders?

#48
post #15

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.

The person asking the question seems to be looking for a course or textbook with which to challenge themselves. What you've described is the opposite of that.

I understand. But as a long-time programmer I like to explore new programming languages or APIs by working on a small project. I start with a first prototype to get the feel of the language, before I look into extended documentation. Chat GPT helps with this use-case.

It's also more fun to have something which can be easily extended than to start from scratch.

Re: Ask HN: Programming Courses for Experienced Coders?

#49
post #37

Aside from raw theory, the best thing you can do is try to translate a project you have, maybe a toy project of reasonable complexity, and rewrite it idiomatically in the new language. Use all the preferred methods, semantics, and modeling tools of the target language. Use the language's docs and X in Y Minutes page.

But "which methods, semantics, and modeling tools are preferred" is probably what you're trying to learn.

Unfortunately, that's what language docs are for. Like I said, you can get some theory. If you're learning functional programming, you can find books on lambda calculus and category theory and more. But ultimately you have to learn how to build good software, and there are scant few books about that out there. In the functional world, I know of two and they're both in Scheme. So the best approach tends to be feet-first into the fire using the language's docs, and hopefully the creator(s) has documents explaining theory and practice.

Re: Ask HN: Programming Courses for Experienced Coders?

#50

Earlier quoted context omitted.

Or it apologizes profusely, tells you you’re correct, and fails to fix its reasoning or the examples it gives you.

I told it to stop apologising all the time. It apologised for doing that :)

Did you also try telling it what it should do instead?
Post reply on HN