[HN Gopher] Ask HN: Programming Courses for Experienced Coders?
       ___________________________________________________________________
        
       Ask HN: Programming Courses for Experienced Coders?
        
       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?
        
       Author : trwhite
       Score  : 264 points
       Date   : 2023-12-29 13:23 UTC (9 hours ago)
        
       | pmarreck wrote:
       | I'm guessing that anything functional-language-focused aimed at a
       | higher level would work. But I would also like to know the answer
       | to this (and also am focused on Elixir).
       | 
       | Informally I just tend to write tight modules that loosely adhere
       | to hexagonal architecture and are easy to unit-test.
       | 
       | I'm at a startup that is hiring, btw (I would be the one to reach
       | out to). Seeking someone that is... probably like you, actually.
       | Interested in Elixir but trying to aim higher as a self-motivated
       | learner.
        
         | lobo_tuerto wrote:
         | How do one get in touch with you? :)
        
         | Avicebron wrote:
         | Hi, nice to meet you. I'm an early adopter of Elixir (coming
         | from Haskell/OCaml) and I will second another comment here,
         | I've found the best way for me to learn Elixir is to be
         | frequently building tooling that I either need or want, one
         | habit I started was to migrate small projects I had previously
         | over to Elixir, the community is a pretty good place to go for
         | questions/inspiration. https://elixirforum.com/
        
       | drwl wrote:
       | My take is that there's such variance in people's skill levels
       | and so it's really hard to cater educational programming content.
       | Personally, I've found getting introductory books/courses and
       | skimming through it until you hit something that you don't
       | understand and then diving deeper into that bit.
        
         | bee_rider wrote:
         | It is interesting, though, that you can easily get intermediate
         | training and coaching in basically any sport. But the thing you
         | do for money? Take this very ad-hoc approach.
        
           | drwl wrote:
           | I'm sure you can find individual coaches but the cost will
           | exceed what most people are willing to spend or invest. Take
           | executive coaches for example, they exist but from what I
           | understand they're largely private coaching and cost $$$.
        
           | 082349872349872 wrote:
           | People age out of being competitive athletes themselves and
           | coaching is a natural way to stay involved with the sport.
           | 
           | Old coders who love coding don't have to do so indirectly.
        
           | zihotki wrote:
           | Concepts and excercises in sport don't change that frequently
           | comparing to programming. Programming is very ad-hoc indeed,
           | it has way more variables for the intermediate level so that
           | the coach won't have enough time to digest the details.
        
       | Q6T46nT668w6i3m wrote:
       | 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 wrote:
         | Do you have any book recommendations for those topics?
        
           | hiyer wrote:
           | 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/
        
             | Jtsummers wrote:
             | 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).
        
             | hectormalot wrote:
             | There is a similar crafting an interpreter[1] and
             | compiler[2] pair of books for Go. I've heard good things
             | about it, didn't work through it myself though:
             | 
             | 1. https://interpreterbook.com
             | 
             | 2. https://compilerbook.com
        
             | Derbasti wrote:
             | Man, that book was _so_ good! What a tremendous achievement
             | in clarity and insight. I loved it!
        
           | __mp wrote:
           | "Computer Systems: A Programmer's Perspective" is a great
           | introductory systems textbook on everything going on in a
           | computer.
           | 
           | For more advanced C/C++ developers I can recommend "The Linux
           | Programming Interface" - (https://man7.org/tlpi/). It is a
           | GREAT compendium for writing code against the POSIX API. I
           | have a (legal) copy of this book on all the computers I have
           | access to.
           | 
           | "The Database Redbook" - (http://www.redbook.io) is a
           | valuable source on database implementations.
           | 
           | "Compilers: Principles, Techniques, and Tools" (Dragon Book)
           | is a great starting point. The book is out of print and but I
           | think it should still hold up for most basic use-cases.
        
           | blueblueue wrote:
           | I really enjoyed http://www.emulator101.com/. It is a hands
           | on tutorial on how to write an emulator for an Intel 8080 CPU
           | that can run the original Space Invaders. The code examples
           | are in C, but you can find implementations in other languages
           | on GitHub as well.
        
           | 3pm wrote:
           | This is a really good fundamentals resource:
           | https://teachyourselfcs.com/ They list books and videos.
        
       | cassianoleal wrote:
       | Specifically for Elixir, I found the first edition of Elixir for
       | Programmers [0] by Dave Thomas to be very good.
       | 
       | It's now on the second edition which I haven't done.
       | 
       | [0] https://codestool.coding-gnome.com/courses/elixir-for-
       | progra...
        
         | trwhite wrote:
         | Thanks! I'll check that out
         | 
         | Edit: Exactly the kind of thing I was looking for
        
       | sbarre wrote:
       | 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..
        
       | imjonse wrote:
       | 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 wrote:
         | It is also very interesting to watch an accomplished computer
         | scientist write code and solve problems.
        
       | barracutha wrote:
       | In this regard, has anyone tried codecrafters.io? Is it worth it?
        
         | simtel20 wrote:
         | I've been using it and it's been fun for learning rust. I've
         | only done DNS and web server modules so far, but it has helped
         | a lot in giving me goals that are achievable
        
         | rohitpaulk wrote:
         | (disclaimer: I work at CodeCrafters)
         | 
         | CodeCrafters is a bit light on Elixir support at the moment
         | (only 2/8 challenges support it so far). We're planning on
         | expanding Elixir support soon.
         | 
         | Currently, we're a great fit for Rust / Python / Go - we
         | support a variety of challenges for those, and there's lots of
         | example code from other users to review and learn from.
        
       | __mp wrote:
       | 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.
        
         | bidandanswer wrote:
         | If it does hallucinate, you can just paste it the latest
         | documentation and the hallucination rate goes to nearly zero.
        
           | reactordev wrote:
           | Or it apologizes profusely, tells you you're correct, and
           | fails to fix its reasoning or the examples it gives you.
        
             | fauigerzigerk wrote:
             | I told it to stop apologising all the time. It apologised
             | for doing that :)
        
               | Zambyte wrote:
               | Did you also try telling it what it should do instead?
        
               | fauigerzigerk wrote:
               | No, because there is nothing I wanted it to do instead.
               | Perhaps what I should have done was to change the system
               | prompt to something like "You are a helpful assistant
               | that will admit its mistakes but never apologise for
               | them."
        
               | ZeroClickOk wrote:
               | probably chatgpt is Canadian :)
        
             | davidw wrote:
             | I was trying to get it to write some Elixir code to handle
             | Erlang B calculations and it just couldn't figure it out,
             | but it was pretty confident with the wrong things it was
             | printing out.
        
               | bidandanswer wrote:
               | The rust borrow checker often requires too much critical
               | thinking for ChatGPT, as well.
               | 
               | LLMs confer a tremendous productivity boost. You just
               | have to understand their limits and know when it's faster
               | to think through and write the solution yourself.
        
             | block_dagger wrote:
             | Sounds like you need to add some custom instructions to get
             | the tone, accuracy, and concision you want.
        
           | JimBlackwood wrote:
           | Does it actually consume the documentation? You could
           | (haven't tried in a while) also have ChatGPT tell you
           | anything you wanted aslong as you stated "It's been posted on
           | Wikipedia after your last consumed date".
           | 
           | I feel like telling it that it's wrong and linking
           | documentation is the same as referring to Wikipedia?
        
         | adonese wrote:
         | >Just be aware that it tends to hallucinate APIs.
         | 
         | It gives you nice little hints and a different perspective on
         | your api design itself. I'd have a chat with chatgpt and
         | sometimes I'd miss to share specific code and it just assumes
         | or hallucinate on that.
        
         | justin66 wrote:
         | 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.
        
           | __mp wrote:
           | 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.
        
       | snicker7 wrote:
       | SICP. Lectures are on YouTube.
        
       | AlchemistCamp wrote:
       | 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/
        
       | dinvlad wrote:
       | For Elixir, take a look at Phoenix LiveView course from
       | https://pragmaticstudio.com - they don't start from the
       | beginning, and assume you are already familiar with Phoenix from
       | the guides.
        
       | dartos wrote:
       | 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 wrote:
         | Yay author here, and this made my day <3.
        
           | Arubis wrote:
           | Any chance of a revised version one of these days? I, too,
           | loved this book, but the ecosystem has moved far in the
           | meantime & many of the examples no longer compile.
        
       | User23 wrote:
       | 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/
        
       | eatonphil wrote:
       | 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
        
       | netbioserror wrote:
       | 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.
        
         | bloaf wrote:
         | But "which methods, semantics, and modeling tools are
         | preferred" is probably what you're trying to learn.
        
           | netbioserror wrote:
           | 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.
        
       | trmpakufnfee wrote:
       | I would not call myself experienced, but I often find myself
       | glancing over documentation first (building a mental model and a
       | map of what features are offered by this thing), then trying to
       | build something, rather than sit through a slow paced course.
       | This may or may not work for you.
        
       | _ast wrote:
       | Yeah, I see this problem. And I found some solution for this
       | issue. We need to promote coaching relationships between starters
       | and experienced engineers.
        
       | weatherlight wrote:
       | Dive into the BEAM VM. https://github.com/happi/theBeamBook
        
       | cobertos wrote:
       | 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/
        
         | soultrees wrote:
         | What an amazing resource. Thank you for this. And even more
         | thanks to whoever put this together.
        
           | culi wrote:
           | The project was created and is maintained by Adam Bard, but
           | is open sourced with over 1.7k contributors since 2013
           | 
           | https://github.com/adambard/learnxinyminutes-docs
        
             | soultrees wrote:
             | Haha yeah, I saw that after. In that case, great job
             | everyone!
        
         | archsurface wrote:
         | You consider this to be "for experienced coders"?
        
           | nerdponx wrote:
           | Yes. It's not useful for beginners. It's a good way to get a
           | quick introduction to the syntax and idioms of a language
           | you're unfamiliar with.
        
       | onetimeuse92304 wrote:
       | 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.
        
         | nerdponx wrote:
         | The problem with a $200 book is that it's hard to tell the
         | difference between a book that contains $100k of knowledge and
         | a book that contains $100 of knowledge.
        
           | johnnyanmac wrote:
           | ideally that's what reviews and word of mouth are. But I
           | imagine like other sectors that book publishers are risk
           | averse.
           | 
           | But if anyone is like me and interested in taking a risk on
           | those $80-150 tomes, CRC Press' books have been more hits
           | than misses for me.
        
           | onetimeuse92304 wrote:
           | Hey, here is a thought I realised while buying yet another
           | cookbook. If you buy a cookbook and find _ONE_ recipe that
           | you will like and will be using regularly for the rest of
           | your life, that cookbook was already worth it.
           | 
           | Even if you found zero recipes, that does not mean you wasted
           | time. Maybe if you think in terms of results for that
           | particular cookbook investment, but it is pretty arbitrary
           | way to look at it. What if you tried to measure your return
           | for investment on a single page of a cookbook? For half a
           | dozen coobkooks? For a shelf of cookbooks?
           | 
           | If you continue buying and studying cookbooks, you will find
           | some good recipes in some cookbooks and what you need to look
           | for is the total return on the total of investment. I spent a
           | ton of money on cookbooks but my life is much better for it
           | and I have zero regrets even if many of these cookbooks
           | yielded zero results.
           | 
           | So now back to technical books.
           | 
           | Some of these books will yield new knowledge and some may
           | yield very little or even none at all. You may not know
           | before you buy a book whether it will pay for itself, but you
           | know if the whole business of buying books and learning from
           | them is worth it. I chose to buy and read books even if some
           | of them yield little results because I think I am a better
           | person and a better developer for it. I learned a lot of
           | useful stuff even if I completely ignore majority of
           | everything I read and then forget majority of everything I
           | thought valuable.
        
             | emmo wrote:
             | This sort of seems to assume that time and money in
             | infinite, though. Buying a recipe book for one recipe seems
             | like a profound waste of resources.
        
               | onetimeuse92304 wrote:
               | This sort of seems to assume that it is at all possible
               | to gain knowledge and experience without making mistakes.
               | 
               | Hiring people who do not perform seems like a profound
               | waste of resources. Doing projects that fail seems like a
               | profound waste of resources. Learning technology that
               | will not be helpful later in your life seems like a
               | profound waste of resources.
               | 
               | When was the last time you found a cookbook where a
               | significant portion of recipes stayed with you for the
               | rest of your life?
        
             | thorin wrote:
             | You've just reminded me that o reilly used to publish quite
             | a lot of cookbooks, I think there was a bash one, perl,
             | python etc. That kind of book would probably be quite
             | useful for getting advanced concepts I guess as a lot of
             | more advanced books are quite abstract.
        
         | LouisSayers wrote:
         | > people will not buy a $200 book even if it had $100k worth
         | knowledge in it.
         | 
         | I remember paying crazy amounts for books at university and
         | wouldn't have been surprised to have to pay $200 for a book. As
         | it was I bought mine second hand to save on cost.
         | 
         | When people can expense such items then I also imagine a $200
         | book selling well when properly targeted and marketed.
         | 
         | What sells even better though are courses, and there are many
         | courses out there aimed at corporates which are in the
         | thousands of dollars so again, $200 doesn't seem crazy at all
         | in comparison.
        
         | aleph_minus_one wrote:
         | > And it happens that people will not buy a $200 book even if
         | it had $100k worth knowledge in it.
         | 
         | If this were the case, such a book would be an immediate buy
         | for me. The problem is that you will have to show me that such
         | a book will bring me this value in my culture/country (i.e. not
         | USA) with a very high likelihood - this will be very hard.
        
         | dmoy wrote:
         | > There is a general lack of advanced materials in software
         | engineering
         | 
         | I wonder how much this is true in other areas (not counting
         | academic papers).
         | 
         | It's not exactly true in law due to the plethora of giant
         | treatises in any specific subject of law, as far as I know that
         | might be a one-off due to US law putting such an (insane?)
         | emphasis on precedent. Basically need a professional
         | lawyer+historian to compile all the relevant stuff.
         | 
         | But other engineering or science disciples? I have no idea one
         | way or the other.
        
           | elicksaur wrote:
           | Not sure a treatise is exactly a good comparison. That would
           | be more like documentation, where the question here is more
           | "how to get better at programming?". A treatise isn't going
           | to tell you how to be a better lawyer.
           | 
           | I'm not sure there's great content like this for lawyers
           | either even with mandated continuing education requirements.
           | They're typically a bore and surface level. About the same
           | quality as your average "What's new in Elixir 1.15" blog
           | post.
        
         | corethree wrote:
         | I highly disagree. There's a huge amount of material out there
         | for advanced software engineering. The problem is this material
         | is exponentially harder and most programmers aren't interested
         | in this stuff.
         | 
         | What OP is talking about is essentially learning a new language
         | which is sort of trivial and not advanced. It's sort of a
         | parallel track and he likely wants something that doesn't start
         | at the very beginning. Something called: "Learning elixir for
         | experienced programmers". This kind of thing isn't "advanced".
         | It's more like "convenient". Most programmers spend there
         | entire careers in this zone just learning new languages and new
         | technologies. They are sort of moving horizontally through the
         | field rather then upwards.
         | 
         | True advanced stuff is hard af, and the more advanced you get
         | the less and less relevant it is to your job.
        
         | psadauskas wrote:
         | > 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.
         | 
         | I think, even aside from the incentives, its a matter of
         | interest and time. Earlier in my career, when I was learning at
         | a rapid pace, I also had the time and motivation to write blog
         | posts about what I discovered, as did many of my peers. Its
         | also easier to write about beginner concepts, because they're
         | simpler.
         | 
         | As I've advanced in my career, the things I'm learning and
         | doing are more and more complicated, and/or require much more
         | prerequisite knowledge. Not only do I have less time, there's
         | also a corresponding increase in difficulty in writing
         | concisely and coherently about the more advanced concepts.
         | 
         | About once a week I read a blog post in a field I'm familiar
         | with, and recognize it as something I myself would have written
         | 10 years ago. But I also now see in it the potential problems
         | and pitfalls, and tweaks to make to avoid them. I think to
         | myself "I should write a blog post about that", and sometimes
         | even jot down some notes or a draft, but the topic is just so
         | complicated, and the potential problems so subtle, that it
         | takes a large amount of effort just organizing it, and I get
         | bored/distracted and move on, never finishing it.
         | 
         | Talking to those same peers now, they feel much the same. And
         | even with the experts that do manage to write about expert
         | topics, that's become their full time job. Then after a few
         | years of full-time writing instead of full-time doing, I find
         | when they write about a topic that I've been full-time doing
         | while they were writing, there's gaps in their knowledge or new
         | techniques and tradeoffs they've missed.
         | 
         | I don't know how to solve this problem, except maybe figure out
         | a way to give the knowledgeable experts a sabbatical or
         | something, where they can take a break and write. Good luck
         | getting a startup to agree to that, though.
        
           | johnnyanmac wrote:
           | That seems to be why the most popular advanced topics are
           | conference talks instead of books. Still takes prep and you
           | lose the quality of a tome, but an hour long talk (possibly
           | with decently annotated slides for later viewings) is
           | probably better worth for the speakers and audiences alike.
           | conference foots the bill with the costs gathered from
           | participants, participants get a variety of talks (so they
           | aren't paying for one tome but maybe a dozen nuggets to serve
           | as jumping off points. Which may be all an advanced
           | participant needs), and the industry gets
           | advertising/potential recruiting from the staff they
           | dispatch.
           | 
           | Of course, I'm sure I don't need to explain the downsides of
           | a talk, Especially one presented by very knowledgable people
           | but not ones who are necessarily expert speakers. But at the
           | same time, that lack of polish may be a light in the darkness
           | that is false platitudes in every other ad.
        
         | someguy5281 wrote:
         | > Personally, I just read a lot.
         | 
         | What books would you recommend? I find it hard to learn real
         | world patterns and codebases.
         | 
         | Smaller patterns like inheritance, composition, traits,
         | functional monads, async coroutines, RAII, MVVM, dependency
         | injection, and semaphore synchronization, are easy to learn,
         | but seemingly unhelpful in the grander scheme. Nobody seems to
         | completely adhere to the rules. As a result, these small
         | patterns never seem to lead to clean code.
         | 
         | I loved coding as a child and pursued CompSci in college. But
         | having worked a few years in the industry, I really think I do
         | not know how to solve anything. At one point I felt as if
         | everyone is gaslighting me. But if multiple people from
         | different companies say I need to learn, then I should.
         | 
         | Right now I want to read to know what exactly I am missing in
         | my knowledge about how code works in large codebases
         | 
         | (Edit: Thanks for the reply!)
        
           | onetimeuse92304 wrote:
           | > (...) are easy to learn, but seemingly unhelpful in the
           | grander scheme. Nobody seems to completely adhere to the
           | rules. As a result, these small patterns never seem to lead
           | to clean code.
           | 
           | Good. That is very useful state of mind to be in.
           | 
           | Because these things do not produce cleaner code. They are
           | _tools_ to solve problems.
           | 
           | Coders are like photographers. The ones who like talk the
           | most shoot walls head on and then peep at pixels and mostly
           | discuss hardware. The ones who know how to make good photos
           | do not care about who uses what kind of camera. A camera is
           | just a tool to capture light field.
           | 
           | Clean code is what happens in your mind and as a result of
           | your mental process.
           | 
           | Patterns, composition, inheritance tricks, and so on -- these
           | are things you add to your toolbelt to use it when it is
           | needed. You should continue adding tools to your toolbelt to
           | be able to solve wider variety of problems and have more
           | alternative solutions. But on its own, more tools do not mean
           | mastery and do not lead to clean code.
           | 
           | If anything, more tools without knowledge how to use them
           | leads to _less_ readable code. This happened to me for the
           | first half of my career..
           | 
           | What get you to mastery is by building taste for simple code
           | and ability to self reflect on your work. Taste for simple
           | code means you know why code needs to be simple and you know
           | how clean code looks like.
           | 
           | Self reflection is trying to be objective and judgy about
           | your results. When you write the code, you keep refactoring
           | until you like the results. You write a module, then you
           | polish it until there is nothing else to remove and it does
           | exactly what it is supposed to be doing. You do it long
           | enough and you will have experience to start it closer to a
           | clean result. You may never get to be able to write clean
           | code on the first try but you might get better at having much
           | cleaner first approximation.
           | 
           | Ideally, you also take some responsibility longer term for
           | what you produced. You compare your initial ideas with how
           | they fared over time. You learn some things you thought smart
           | weren't so smart at all. You learn what works and what
           | doesn't work in general.
           | 
           | There is one more way and this is mentoring. I do pair
           | programming with people where we design and implement
           | solutions to progress. Lets me get to know the person better
           | and the person gets to observe the process which can be a
           | huge shortcut in the process of learning to write clean code.
        
             | ahoka wrote:
             | The next step is to realize that there is no clean or
             | unclean code.
        
           | jansimonek wrote:
           | I found the book Growing Object-Oriented Software Guided by
           | Tests to be very inspiring. The book demonstrates how to
           | evolve the code architecture, how and when to add new
           | concepts and abstractions, how to listen to the tests, when
           | to refactor etc. The tech in the examples is dated, but the
           | gist of the book is very relevant.
           | 
           | Another classics are: - Working effectively with legacy code
           | - Refactoring: Improving the Design of Existing Code
           | 
           | All of these books have a lot of depth to them
        
         | amadeuspagel wrote:
         | Is this a problem in other fields?
        
         | tcmart14 wrote:
         | For me I think it is a little different. There are tons of
         | beginner material and even quiet a few advanced materials, I
         | find the middle (or intermediate) materials lacking. For
         | example, with rendering. Tons of great content with indepth
         | explanations of how to draw a triangle. You can also find lots
         | of good tutorials about advanced procedural generate
         | techniques, but they (correctly) assume a lot of knowledge that
         | is above the simple task of rendering a triangle. There isn't a
         | lot of content to help you get from rendering a triangle to the
         | knowledge you need for some advanced rendering techniques.
        
         | bityard wrote:
         | > And it happens that people will not buy a $200 book even if
         | it had $100k worth knowledge in it.
         | 
         | It is not at all unfashionable to pay $50k for a master's
         | degree, however.
        
       | crabbone wrote:
       | 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.
        
       | spicemonger wrote:
       | 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/
        
         | zjmil wrote:
         | I have also taken the "Rafting Trip" course and enjoyed it.
         | Second that it is for more experienced developers.
        
         | cvhashim04 wrote:
         | Thank you, looking into it
        
         | ayhanfuat wrote:
         | How was the participation (number of people, interaction
         | between the instructor and participants and interaction among
         | participants)?
        
         | najmlion wrote:
         | Sold out :(
        
         | pajep wrote:
         | 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)?
        
         | notdonspaulding wrote:
         | 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.)
        
         | zenburnmyface wrote:
         | I've also taken David's compiler course, and it was excellent.
         | I highly recommend taking any course he offers that interests
         | you.
        
       | sltr wrote:
       | 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/
        
         | kilroy123 wrote:
         | I took his course as well. It is indeed advanced. I certainly
         | learned a fair amount from it. (coding for 15 years)
        
         | krilcebre wrote:
         | Is it programming language agnostic?
        
           | 100k wrote:
           | Yes. The concepts apply to all programming languages. The
           | exercises use multiple programming languages. For example,
           | one exercise has you explore the Git source code (which is in
           | C) to learn how to use a program's data structures to
           | understand an unfamiliar codebase. Other examples have you
           | find bugs in Python code or write Java.
        
         | tejohnso wrote:
         | I'd also recommend Mirdin. I did a short interactive course a
         | while back, and I'm considering doing the full interactive
         | course soon.
        
         | miguendes wrote:
         | That looks interesting. If you don't mind me asking. What did
         | you learn there that you couldn't learn from books or talks?
        
           | sltr wrote:
           | Same difference between reading a textbook vs taking a
           | lecture. He brings it to life. There's also personal
           | feedback. His content isn't available in any other format I
           | know of.
           | 
           | Do have a look at the testimonials. He hits the nail on the
           | head on many ideas I could intuit but didn't have words for.
           | 
           | I don't know of any books or speakers to compare him to. He's
           | a unique bridge between academia and industry. I suppose you
           | could say his teachings are available in the many academic
           | papers he sources, but those papers are dense. His curation
           | and contextualizion gets the ideas in a form I can comprehend
           | and apply at work.
        
       | weinzierl wrote:
       | Besides most courses being beginner-focussed, there are at least
       | two other related problems:
       | 
       | - Most advanced courses sell themselves dishonestly as beginner-
       | friendly even if they aren't after the first couple of lessons.
       | On the free market everyone is after every single potential
       | customer, no matter what.
       | 
       | - Everything is stretched out so much that information density is
       | annoyingly low. Again free market pays per page and minute and
       | not value.
       | 
       | You might have more luck looking at resources produced free from
       | these constraints and the best place I know is university
       | courses. Still, good ones are hard to come by, but I learned a
       | ton at uni I'd never had learned outside.
        
       | whalesalad wrote:
       | 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 wrote:
         | Possibly mistaken but from what I understand 2023 was the last
         | year of Strange Loop - I was hoping to attend 2024's
        
           | whalesalad wrote:
           | I am going to pretend I didn't see this ='(
        
           | gorjusborg wrote:
           | Was there bot enough demand for the content? It seems like
           | the strange loop content was often top notch.
        
         | epiccoleman wrote:
         | +1 for Dave Thomas's course. Very refreshing and fun.
        
       | zaptheimpaler wrote:
       | There are so many great books on specific domains but it depends
       | on what you want to learn and you can then search for that.
       | "Programming" is obviously too broad a category for experienced
       | people.
        
       | cpursley wrote:
       | This is a pretty great Elixir course that goes into advanced
       | topics: https://kamilskowron.gumroad.com/l/cSGdY
       | 
       | "Hands-on Elixir & OTP: Cryptocurrency trading bot"
        
       | andix wrote:
       | Advent of Code (https://adventofcode.com/)
       | 
       | It's not a programming course per-se, but it's a great resource
       | to master the skill of coding and problem solving.
       | 
       | It's just one part though, it won't teach you anything about
       | architecturing a bigger system.
        
       | Jtsummers wrote:
       | More towards the advanced side I'd recommend Fred Hebert's
       | _Property-Based Testing with PropEr, Erlang, and Elixir_ -
       | https://pragprog.com/titles/fhproper/property-based-testing-...
       | 
       | It's also one of the best resources I've come across on property-
       | based testing and is something I recommend to non-Erlang/Elixir
       | programmers as well.
        
       | jantypas2 wrote:
       | Well, I don't know how advanced I am (except in age). But I have
       | found the best advanced training is the same as it was in
       | college. No book makes up for the late night hours. I find other
       | projects and offer to help -- there's always a shortage of coding
       | labor (especially if it's free). You learn what the book or
       | course never discusses -- things like "What the heck was the
       | person trying to do here?" and "Even God doesn't know how this
       | code works!" You know you're in trouble when you see "Oh God!
       | What an evil hack! But it works... don't touch anything!" or
       | "Good luck future Matt! You KNEW this was a horrible job, but did
       | you come back in time and stop me?"
        
       | revskill wrote:
       | No, there's no such thing as "advanced". It's just that people
       | "forgot" fundamentals of things, then they see those
       | "fundamentals" as advanced.
       | 
       | I do think, teaching is hard. It basically turned "advanced" into
       | "fundamentals" with correct teaching/learning approach.
        
       | GuestHNUser wrote:
       | computerenhance.com is a course focused on understanding how to
       | measure and write high performance software. It's a great course
       | targeting experienced programmers.
        
       | angarg12 wrote:
       | 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.
        
       | christofosho wrote:
       | The ideas shared in the post replies are great. My approach has
       | been more hands-on and puzzled together recently. I've been
       | digging into harder problems on sites like leetcode to learn more
       | math, and solidify some algorithm and data structure concepts. It
       | has really helped me feel more confident and erase some of the
       | lingering imposter syndrome around the algorithm-side of
       | programming. A great guide that got me started on this was the
       | tech interview handbook[1], which helped me dig into specific
       | concepts instead of just randomly targeting. I've found my
       | ability to review code has also improved through this, as I am
       | picking up different libraries and concepts that I wouldn't have
       | otherwise.
       | 
       | 1. https://www.techinterviewhandbook.org/algorithms/study-
       | cheat...
        
       | anonymoushn wrote:
       | 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/
        
         | zengid wrote:
         | I was going to say check out something from Casey too. Maybe
         | just randomly jump into one of the 600+ videos for handmade
         | hero and try to see what he's doing. I think Casey is a great
         | educator, even if he has a lot of hot takes.
        
       | enduku wrote:
       | Mirdin[0] can be helpful too.
       | 
       | [0] https://self-service.mirdin.com/products/advanced-
       | software-d...
        
       | Arubis wrote:
       | Getting more focused on a particular subtopic seems to be a good
       | way to get somewhat more advanced material. PragProg has a bunch
       | of books for the Elixir ecosystem that might be up your alley
       | (https://pragprog.com/titles/smgaelixir/genetic-algorithms-in...,
       | for example).
       | 
       | I recently went through the Typescript resources over at
       | https://executeprogram.com and found them really effective at
       | solidifying the edges of that particular language for me; wish
       | that was available for more ecosystems.
        
         | archsurface wrote:
         | That book is recommended quite often - I don't agree, I was
         | disappointed. If you know the just the basics of the two topics
         | you won't learn anything new.
        
       | mmmBacon wrote:
       | If you're looking for advanced courses in Python, I highly
       | recommend a workshop or class from James Powell.
       | 
       | https://www.dontusethiscode.com
        
       | LouisSayers wrote:
       | I was quite impressed with Ardan Labs go tour[1] (free) for
       | learning go.
       | 
       | More of an intermediate resource, but was really good for helping
       | to nail down some golang basics.
       | 
       | Would be interesting to hear from people that have taken their
       | courses.
       | 
       | [1] https://tour.ardanlabs.com/tour/eng/list
        
       | demon-code-999 wrote:
       | are you talking about learning better ways to organize code /
       | systems to buy into? i mean literally just pick up books on IL
       | and there you go. I dont understand what "experienced" coder
       | means here... you should be able to research on your own @ 10
       | years+
        
       | theusus wrote:
       | I will suggest doing SICP. It teaches good FP patterns, and might
       | complement another FP language well.
        
       | falcor84 wrote:
       | Here's a "life hack" - get a good book that doesn't make any
       | assumptions about your background but otherwise goes deep, and
       | then use an LLM's "talk to pdf" functionality (e.g. via the paid
       | ChatGPT subscription). You can then describe the LLM your
       | particular background and ask it to walk you through the book
       | while skipping through "the boring parts" you are already
       | familiar with.
        
       | jugjug wrote:
       | Lately, I have been struck by pragmatism of approaches discussed
       | in https://clojuredesign.club/
       | 
       | For example, one can start separating pure functions from side-
       | effects, aiming for aggressively minimal side-effecting
       | functions. Applying this approach to calling REST APIs, one would
       | first create a full request (including the http method, body,
       | headers, etc) in a pure function, and only then send that request
       | to the wire. With such a split, one can easily unit-test the
       | request construction (it's a pure fn), and also explore the
       | request.
       | 
       | It was mind-bending to me when I first heard it. The podcast is
       | full of such approaches and it seems that Chris and Nate, the
       | hosts, have quite some battle scars to source from.
        
         | eterps wrote:
         | I'm intrigued. Could you provide some pointers on where to
         | start at https://clojuredesign.club?
        
       | carom wrote:
       | 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_...
        
       | bmac wrote:
       | https://www.destroyallsoftware.com/screencasts are classics and
       | the content and presentation have aged quite well over the years.
       | 
       | The topics demonstrate intermediate/advanced web development/tdd
       | concepts in Ruby but the lessons can easily be applied in other
       | languages. There are even a few videos that show this approach
       | with Python and C.
        
       | Jeaye wrote:
       | I'm hijacking a bit, but one thing I've been really wanting is
       | some advanced optimization material for C++. There's so much that
       | goes into data locality, branch elimination, faster ways to copy
       | word-aligned data, and so on. I've picked up all I know on the
       | fly, but would love some great resources which go deep into this.
       | Is there something more instructive than Intel manuals?
       | 
       | Closest thing I found recently is this:
       | https://agner.org/optimize/optimizing_cpp.pdf
        
         | bboreham wrote:
         | I really enjoyed "Speed Is Found In The Minds Of People", a
         | talk by Andrei Alexandrescu.
         | 
         | At first he is just showing simple stuff, but stay with it, he
         | goes deep.
         | 
         | https://m.youtube.com/watch?v=FJJTYQYB1JQ
        
       | sberens wrote:
       | I've heard good things about Bradfield CS[0] and CSPrimer[1]
       | (both run by the same person).
       | 
       | [0] https://bradfieldcs.com/
       | 
       | [1] https://csprimer.com/
        
       | dceddia wrote:
       | For Elixir specifically, I liked Dave Thomas' Elixir for
       | Programmers. https://codestool.coding-gnome.com/courses/elixir-
       | for-progra...
       | 
       | For learning about performance and low level stuff, Casey
       | Muratori's Performance Aware Programming course has been great.
       | https://computerenhance.com
       | 
       | For higher level software design stuff (beyond just GoF
       | patterns), check out James Koppel's writing at
       | https://www.pathsensitive.com/ and his courses at
       | https://mirdin.com
        
       ___________________________________________________________________
       (page generated 2023-12-29 23:01 UTC)