How I am learning about Rust, Go, Java , and Scala (and other things)
Writing and running code is a great way to learn about a language or topic. Below are some projects that I've created to learn about various things.
I typically setup a project as a git repository that is hosted on GitHub. I like to use JetBrains IDEs.
I am trying to learn Rust better. Here are some projects that I've created to learn about Rust:
- Crawler - Web Crawler
- Chat - TCP Chat Server
- Yeet - UDP Chat Server
- Dns - DNS Server
- Load-Generator - Load Generator for Load Testing
- Tokio-Utils - Utilities for Tokio
- Tub - async pool
- Shutdown-Async - gracefully shutdown async tasks
- Async-Throttle - async rate limiting
- Async-Stdin - read from stdin asynchronously
- lib-wc - playground for learning Rust
Before I got into Rust, I liked Java for a little bit. This repository contains some remnants of that.
Here are books that I've found useful. I've read through most of them & highlight the ones which have been most impactful to me.
I recommend teachyourselfcs.com if you are struggling to find a way to learn a certain topic in Computer Science.
O'Reilly and Manning are great resources to find books and projects!
- The Algorithm Design Manual (highly recommended)
- The Art of Multiprocessor Programming (highly recommended)
- Designing Data-Intensive Applications (highly recommended)
- Introduction to Algorithms
- Advanced Algorithms and Data Structures
- Modern Operating Systems
- Cracking the Coding Interview
See Learning Rust in 2023, a blog post I wrote about learning Rust
- The Rust Programming Language (highly recommended)
- Rust Atomics and Locks (highly recommended)
- Zero2Prod (highly recommended)
- Rust in Action
- Rust for Rustaceans
- Command-Line Rust
- Powerful Command-Line Applications in Go (making command line tools is a lot of fun!)
- The Go Programming Language (highly recommended)
- Learn Go with Tests (highly recommended)
- Concurrency in Go (highly recommended)
- Network Programming with Go
- Distributed Services with Go
- Java Concurrency in Practice (highly recommended)
- Effective Java (highly recommended)
- Optimizing Java (I recommend it if you want to learn about the JVM and its internals)
- Java Performance
- Hands on Scala (highly recommended)
- Programming in Scala
Learning from others is a good strategy! Here are resources from people in various communities that I look at every now and then
Obsidian acts as a powerful note taking app. It markets itself as:
a powerful and extensible knowledge base that works on top of your local folder of plain text files
I'd have to agree with that; it's pretty freaking good...
I use it as my own personal wiki & write notes on topics that I'm interested in.
You can see how other people set their vaults up by looking at "Digital Gardens".
Since Obsidian uses plain text files in a folder, you can naturally model your vault as a git repository. This allows you to treat your notes similar to code.