
Python's simplicity lets you become productive quickly, but often this means you aren't using everything it has to offer. With the updated edition of this hands-on guide, you'll learn how to write effective, modern Python 3 code by leveraging its best ideas. Don't waste time bending Python to fit patterns you learned in other languages. Discover and apply idiomatic Python 3 features beyond your past experience. Author Luciano Ramalho guides you through Python's core language features and libraries and teaches you how to make your code shorter, faster, and more readable. Featuring major updates throughout the book, Fluent Python, second edition, covers: Special methods: The key to the consistent behavior of Python objects Data structures: Sequences, dicts, sets, Unicode, and data classes Functions as objects: First-class functions, related design patterns, and type hints in function declarations Object-oriented idioms: Composition, inheritance, mixins, interfaces, operator overloading, static typing and protocols Control flow: Context managers, generators, coroutines, async/await, and thread/process pools Metaprogramming: Properties, attribute descriptors, class decorators, and new class metaprogramming hooks that are simpler than metaclasses
I will take a look at Python Crash Course.
But here are some titles:
* Kleppmann, Designing Data-Intensive Applications
* Nand2Tetris. Computers from first principles, often fills in a lot of gaps. Possibly preceded by Code: The Hidden Language of Computer Hardware and Software if they need even more grounding.
* SICP if I think they'd be ready for it
* Crafting Interpreters
* If they're working with Python I'd give them Fluent Python by Luciano Ramalho. For whatever other language(s) pick a book that allows them to go from intermediate to advanced in that language and really understand it inside out.
* Ousterhout, A Philosophy of Software Design
* Data and Reality
* The Staff Engineer’s Path by Tanya Reilly to demystify the upper IC track. Or The Manager's Path by Camille Fournier.
If you are really interested in "advanced Python", though, I would recommend the book Fluent Python by Ramalho. I have the first edition which is still highly relevant, including the async bits (you just have to translate the coroutines into async syntax). There is a second edition which is more up to date.
I would also recommend checking out the functools[0] and itertools[1] modules in the standard library. Just go and read the docs on them top to bottom.
It's also worth reading the first few sections of Python Data Model[2] and then bookmarking this page.
[0] https://docs.python.org/3/library/functools.html
1. Pro Git, by Scott Chacon and Ben Straub (https://git-scm.com/book/en/v2)
- Skill: Git, covering both high-level aspects (commiting, branching, GitHub/GitLab, etc) and its internals (objects, references, packfiles, protocols, etc)
- Kind of material: free e-book, book and website
- Why is it good: easy to read, even when approaching the inner aspects. It's very unlikely that you won't learn something new and amazing after reading it. The Git internals chapter is a gem, providing and demonstrating the plumbing commands that manipulate the internal data structures.
2. Learn you a Haskell for Great Good by Miran Lipovača (https://learnyouahaskell.com/)
- Skill: Haskell
- Kind of material: free e-book, book and website
- Why is it good: covers the language and functional programming in a very fun and informal way. Reading it and learning Haskell made me a better programmer in other languages (specially in Python and Kotlin)
3. intro_x86-64 by Luana Martins (https://gitlab.com/luamfb/intro_x86-64)
- Skill: x86 assembly (NASM)
- Kind of material: tutorial mixed with code
- Why is it good: covers the x86-64 assembly using the NASM syntax, explaining the basic instructions, the stack, function calls, syscalls and so on. Easy to read, with some exercises. The chapters themselves are valid NASM code that you can assembly and run in your machine.
4. Putting the you in CPU by Lexi Mattick (https://cpu.land/)
- Skill: operating systems and program execution
- Kind of material: website
- Why is it good: explain what happens when you run a program, covering syscalls, multitasking, memory management, fork, exec, ELF and so on. Everything written in a very fun and informal way
5. Fluent Python by Luciano Ramalho
- Skill: Python, but for those who already know Python and want to improve their skills
- Kind of material: book
- Why is it good: explains in depth several Python concepts, sometimes even showing the bytecode.
I do appreciate you taking the time to read my mind for false modesty and vaguely insult me though, thank you!