17 ms·
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?
- fuzztester 3y agoPublishers like Wiley, Addison-Wesley (?), Pearson, Springer Verlag, etc. used to publish some good quality books on advanced topics, at least some years ago. Don't know how it is these days.
- hoenie 3y agoYou might like https://exercism.org/ https://exercism.org/ Learning by doing, with the help of mentors. Excellent way to learn a next language (as you are already familiar with the programming concepts).
- 8BitArmour 3y agohttps://app.codecrafters.io/catalog https://app.codecrafters.io/catalog not exactly a course but worth doing it
- drwl 3y agoMy 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 3y agoIt 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 3y agoI’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 3y agoPeople 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 3y agoConcepts 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.
- pmarreck 3y agoI'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 3y agoHow do one get in touch with you? :)
- pmarreck 3y agomy first name @ my last name dot com, first name is peter
- Avicebron 3y agoHi, 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/ https://elixirforum.com/
- Q6T46nT668w6i3m 3y agoThe 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 3y agoDo you have any book recommendations for those topics?
- hiyer 3y agoCrafting 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/ https://craftinginterpreters.com/
- Jtsummers 3y agoIt 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 3y agoThere 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 https://interpreterbook.com 2. https://compilerbook.com https://compilerbook.com
- Derbasti 3y agoMan, that book was so good! What a tremendous achievement in clarity and insight. I loved it!
- __mp 3y ago"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/ 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 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.
- cassianoleal 3y agoSpecifically 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-programmers-2 https://codestool.coding-gnome.com/courses/elixir-for-progra...
- trwhite 3y agoThanks! I'll check that out Edit: Exactly the kind of thing I was looking for
- sbarre 3y agoWhen 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..
- MightyBuzzard 3y ago[dead]
- imjonse 3y agoPeter 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--cs212 https://www.udacity.com/course/design-of-computer-programs--...
- barracutha 3y agoIn this regard, has anyone tried codecrafters.io? Is it worth it?
- simtel20 3y agoI'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 3y ago(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.
- snicker7 3y agoSICP. Lectures are on YouTube.
- __mp 3y agoWhen 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 3y agoIf it does hallucinate, you can just paste it the latest documentation and the hallucination rate goes to nearly zero.
- reactordev 3y agoOr it apologizes profusely, tells you you’re correct, and fails to fix its reasoning or the examples it gives you.
- fauigerzigerk 3y agoI told it to stop apologising all the time. It apologised for doing that :)
- Zambyte 3y agoDid you also try telling it what it should do instead?
- fauigerzigerk 3y agoNo, 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."
- Zambyte 3y ago> because there is nothing I wanted it to do instead. "Simply do not say anything and move on" is something to do instead.
- AlchemistCamp 3y agoThe 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 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/ https://pragprog.com/categories/elixir-phoenix-and-otp/
- dinvlad 3y agoFor Elixir, take a look at Phoenix LiveView course from https://pragmaticstudio.com https://pragmaticstudio.com - they don't start from the beginning, and assume you are already familiar with Phoenix from the guides.
- dartos 3y agohttps://www.manning.com/books/the-little-elixir-and-otp-guidebook 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 3y agoYay author here, and this made my day <3.
- Arubis 3y agoAny 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 3y agoWell 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/ https://www.cs.utexas.edu/users/EWD/ [2] https://dafny.org/ https://dafny.org/
- sn9 3y agoYou 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/ https://www.cs.ox.ac.uk/publications/books/functional/ [1] https://www.cs.ox.ac.uk/publications/books/adwh/ https://www.cs.ox.ac.uk/publications/books/adwh/ [2] https://mitpress.mit.edu/9780262546232/program-proofs/ https://mitpress.mit.edu/9780262546232/program-proofs/
- User23 3y agoOne of the real eye openers for me along that journey was realizing that Eclipse refactors were (mostly, except for some rough edges) automated semantic invariant preserving code transformations, which is to say a kind of simplified equational reasoning resting solely on the equivalence. Equational reasoning is borderline magical, and I look forward to the day when it's as pervasively taught as basic logic. I have this fantasy in my mind of a language/editor combination that begins with the empty program and only allows legal equational development. Without explicit predication that would just maintain the invariants of the language itself, so no undefined behaviors, but with user supplied predicates would allow a kind of exploratory programming with safety nets. One way to look at it would be explicit symmetry breaking, although I'm not sure that's a good way to describe it to typical working programmers. The idea though is that for a program with the empty specification all code transformations are symmetrical with respect to the spec. And then as the specification is added to certain transformations become symmetry breaking and thus illegal, with said illegality being statically checked. Clearly I'm waving my hands quite a lot here, and I have no clue if it's actually practicable.
- eatonphil 3y agoDavid 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 https://www.dabeaz.com/courses.html
- netbioserror 3y agoAside 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 3y agoBut "which methods, semantics, and modeling tools are preferred" is probably what you're trying to learn.
- netbioserror 3y agoUnfortunately, 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 3y agoI 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 3y agoYeah, I see this problem. And I found some solution for this issue. We need to promote coaching relationships between starters and experienced engineers.
- weatherlight 3y agoDive into the BEAM VM. https://github.com/happi/theBeamBook https://github.com/happi/theBeamBook
- onetimeuse92304 3y agoThere 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 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 3y agoThe 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 3y agoideally 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.
- worthless-trash 3y ago
- cobertos 3y agoI'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 https://learnxinyminutes.com [1]: https://learnxinyminutes.com/docs/elixir/ https://learnxinyminutes.com/docs/elixir/
- soultrees 3y agoWhat an amazing resource. Thank you for this. And even more thanks to whoever put this together.
- culi 3y agoThe 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 https://github.com/adambard/learnxinyminutes-docs
- soultrees 3y agoHaha yeah, I saw that after. In that case, great job everyone!
- archsurface 3y agoYou consider this to be "for experienced coders"?
- nerdponx 3y agoYes. 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.
- xtracto 3y agoThe 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.
- crabbone 3y agoI 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 3y agoI'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/ https://dabeaz.com/
- ayhanfuat 3y agoHow was the participation (number of people, interaction between the instructor and participants and interaction among participants)?
- spicemonger 3y agoMost of the content was delivered as a 30min to 1hr lecture and then 3ish hour time to implement what was covered. So that portion was basically heads down, though I guess you could have connected with someone to chat while you were working. But there were some small group breakouts to discuss the topic and get to know one another. And David would try check in with each person one-on-one every day to answer questions, give tips, and say hi. So generally, I'd say this is not a high interactivity course like a group project or something. Everyone is working on a separate implementation. Though, I took the courses online. And, it looks like that's how he's offering them now. But around the time I took the 2 courses, he had just switched to doing that because of COVID. Presumably, the in person courses offered a lot more time to socialize and go out for a drink in the evening.
- zjmil 3y agoI have also taken the "Rafting Trip" course and enjoyed it. Second that it is for more experienced developers.
- deleted 3y ago[deleted]
- sltr 3y agoIt'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/ https://www.mirdin.com/
- kilroy123 3y agoI took his course as well. It is indeed advanced. I certainly learned a fair amount from it. (coding for 15 years)
- krilcebre 3y agoIs it programming language agnostic?
- 100k 3y agoYes. 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 3y agoI'd also recommend Mirdin. I did a short interactive course a while back, and I'm considering doing the full interactive course soon.
- miguendes 3y agoThat looks interesting. If you don’t mind me asking. What did you learn there that you couldn’t learn from books or talks?
- sltr 3y agoSame 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 3y agoBesides 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 3y agoI 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 3y agoPossibly mistaken but from what I understand 2023 was the last year of Strange Loop - I was hoping to attend 2024’s
- gorjusborg 3y agoWas there bot enough demand for the content? It seems like the strange loop content was often top notch.
- whalesalad 3y agoI am going to pretend I didn’t see this =‘(
- epiccoleman 3y ago+1 for Dave Thomas's course. Very refreshing and fun.
- codewithcheese 3y agoStrange loop, one of the few conferences where videos from 10 years ago are still relevant today, will be missed. Retrospective https://www.youtube.com/watch?v=suv76aL0NrA https://www.youtube.com/watch?v=suv76aL0NrA
- zaptheimpaler 3y agoThere 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 3y agoThis is a pretty great Elixir course that goes into advanced topics: https://kamilskowron.gumroad.com/l/cSGdY https://kamilskowron.gumroad.com/l/cSGdY "Hands-on Elixir & OTP: Cryptocurrency trading bot"
- andix 3y agoAdvent of Code (https://adventofcode.com/ 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 3y agoMore 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-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 3y agoWell, 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 3y agoNo, 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 3y agocomputerenhance.com is a course focused on understanding how to measure and write high performance software. It's a great course targeting experienced programmers.
- angarg12 3y agoAs 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 3y agoThe 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-cheatsheet/ https://www.techinterviewhandbook.org/algorithms/study-cheat...
- anonymoushn 3y agoHello, 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-aware https://www.computerenhance.com/p/welcome-to-the-performance... [1]: https://en.algorithmica.org/hpc/ https://en.algorithmica.org/hpc/ [2]: https://github.com/lancetw/ebook-1/blob/80eccb7f59bf102586ba362c17626f02275168a9/02_algorithm/Hacker's%20Delight%202nd%20Edition.pdf https://github.com/lancetw/ebook-1/blob/80eccb7f59bf102586ba... [3]: https://people.freebsd.org/~lstewart/articles/cpumemory.pdf https://people.freebsd.org/~lstewart/articles/cpumemory.pdf [4]: https://danluu.com/3c-conflict/ https://danluu.com/3c-conflict/
- zengid 3y agoI 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.
- krapp 3y agoIt's worth pointing out that Handmade Hero is not an example of how anyone should approach making a video game, and even Casey would say that, since that isn't his goal. Use libraries. Use frameworks. Don't use C++ but reimplement the stdlib because you hate C++ and assume it was designed by morons. Don't spend... how many years has it been now, nearly ten? On a debug room that looks like a high school CS project.
- robaye 3y ago
- deleted 3y ago[deleted]
- enduku 3y agoMirdin[0] can be helpful too. [0] https://self-service.mirdin.com/products/advanced-software-design-self-service/categories/ https://self-service.mirdin.com/products/advanced-software-d...
- Arubis 3y agoGetting 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-elixir/ https://pragprog.com/titles/smgaelixir/genetic-algorithms-in..., for example). I recently went through the Typescript resources over at https://executeprogram.com 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 3y agoThat 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 3y agoIf you’re looking for advanced courses in Python, I highly recommend a workshop or class from James Powell. https://www.dontusethiscode.com https://www.dontusethiscode.com
- LouisSayers 3y agoI 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 https://tour.ardanlabs.com/tour/eng/list
- demon-code-999 3y agoare 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+
- headphoneswater 3y ago[dead]
- headphoneswater 3y ago[dead]
- theusus 3y agoI will suggest doing SICP. It teaches good FP patterns, and might complement another FP language well.
- falcor84 3y agoHere'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 3y agoLately, I have been struck by pragmatism of approaches discussed in https://clojuredesign.club/ 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 3y agoI'm intrigued. Could you provide some pointers on where to start at https://clojuredesign.club https://clojuredesign.club?
- jugjug 3y agoI've been thinking about this, but I don't really know. The podcast is a lot of Clojure, which by itself might be an interesting language to learn. Some people report that learning Clojure was different than other languages, eg Uncle Bob, Gene Kim (see "Love Letter to Clojure") or I think even Paul Graham. Maybe the Effectively Isolated Serie might be interesting (ep 021-027). Oh, and Cooking Up Composition, about composing functions (ep 093-098).
- carom 3y agoThis 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 https://ringzer0.training/index.html 1. https://www.blackhat.com/tr-24/training/schedule/index.html https://www.blackhat.com/tr-24/training/schedule/index.html 2. https://karpathy.ai/zero-to-hero.html https://karpathy.ai/zero-to-hero.html 3. https://youtube.com/playlist?list=PLSkhUfcCXvqH2sgJa8_gnB41_hO485Lsl&si=HHLHl2T380lpavlT https://youtube.com/playlist?list=PLSkhUfcCXvqH2sgJa8_gnB41_...
- bmac 3y agohttps://www.destroyallsoftware.com/screencasts 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 3y agoI'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 https://agner.org/optimize/optimizing_cpp.pdf
- bboreham 3y agoI 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 https://m.youtube.com/watch?v=FJJTYQYB1JQ
- Jeaye 3y agoAh, I'm familiar with Alexandrescu. Thanks for this suggestion!
- rramadass 3y agoYou might want to check out Fedor Pikus' The Art of Writing Efficient Programs. Also see Victor Eijkhout's books : https://theartofhpc.com/ https://theartofhpc.com/
- sberens 3y agoI've heard good things about Bradfield CS[0] and CSPrimer[1] (both run by the same person). [0] https://bradfieldcs.com/ https://bradfieldcs.com/ [1] https://csprimer.com/ https://csprimer.com/
- dceddia 3y agoFor Elixir specifically, I liked Dave Thomas’ Elixir for Programmers. https://codestool.coding-gnome.com/courses/elixir-for-programmers-2 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 https://computerenhance.com For higher level software design stuff (beyond just GoF patterns), check out James Koppel’s writing at https://www.pathsensitive.com/ https://www.pathsensitive.com/ and his courses at https://mirdin.com https://mirdin.com
- jasonjmcghee 3y agoBoth of Robert Nystrom’s books are awesome and don’t feel beginnery http://stuffwithstuff.com/ http://stuffwithstuff.com/ Building games and interpreters both feel niche, but i really love working on dramatically different problems than usual. Really helps expand my perspective
- sn9 3y agoA little known book that many might find interesting is Cristina Lopes's Exercises in Programming Style which takes a single problem and solves it in 40 different ways using Python. [0] https://www.amazon.com/Exercises-Programming-Style-Cristina-Videira-dp-0367360209/dp/0367360209 https://www.amazon.com/Exercises-Programming-Style-Cristina-...
- roumenguha 3y agoOn a similar note, does anyone have any resources for traditional computer vision, SLAM, and computational geometry?
- weaksauce 3y agothe Architecture of open source applications is a pretty interesting book to see real world examples of design https://aosabook.org/en/index.html https://aosabook.org/en/index.html
- 7sidedmarble 3y agoWhat would you be interested in learning about Elixir? I'm writing educational content now.
- aristofun 3y agoThere 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?
- rubicks 3y agoHere's a heuristic that works for me, for $foobar, any language and/or sufficiently complicated tech: Within the documentation, find the sections that deal with the following topics: * extending $foobar * embedding C in $foobar * embedding $foobar in C * packaging/distributing $foobar * porting/cross-building $foobar In my experience, these topics are inherently hardest to implement, last to be documented, and trickiest to understand. As such, they make for worthwhile reading for advanced practitioners.
- tomjakubowski 3y agoThe Practice of Programming by Kernighan and Pike. Intermediate-ish level the latter part of the book is especially good. chapters on performance and notation stand out
- jventura 3y agoIf 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 https://github.com/joaoventura/full-speed-python
- aradove 3y agoCan you recommend a resource for learning socket programming?
- jventura 3y agoI don't have any significant recommendations. With my students I usually build three applications with sockets: a chat server/client, an HTTP webserver and an HTTP webserver serving JSON. Here's an example of an HTTP server using sockets [1], maybe you can follow and understand a little bit more about sockets. [1] https://joaoventura.net/blog/2017/python-webserver/ https://joaoventura.net/blog/2017/python-webserver/
- freetonik 3y agoGary Bernhardt's Execute program is a nice resource https://www.executeprogram.com/ https://www.executeprogram.com/
- neillyons 3y agoFor Elixir Dave Thomas has a video series https://codestool.coding-gnome.com/courses/elixir-for-programmers-2 https://codestool.coding-gnome.com/courses/elixir-for-progra... For a general programming book I recommend Unit Testing by Vladimir Khorikov https://www.manning.com/books/unit-testing https://www.manning.com/books/unit-testing which was recommended by Saša Jurić