Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/wcygan/practice

learning stuff
https://github.com/wcygan/practice

algorithm algorithms computer-science concurrency data-structures go golang java learning learning-by-doing learning-java learning-notes learning-resources learning-rust parallelism programming property-based-testing rust scala software-engineering

Last synced: 2 months ago
JSON representation

learning stuff

Awesome Lists containing this project

README

        

# Practice

How I am learning about [Rust](https://www.rust-lang.org/), [Go](https://go.dev/), [Java](https://dev.java/)
, and [Scala](https://www.scala-lang.org/) (and other things)






## Table of Contents

- **[Repositories](#repositories)**

- **[References](#references)**

- **[Community](#community)**

- **[Miscellaneous](#miscellaneous)**

# Repositories

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](https://www.jetbrains.com/all/) IDEs.

## Rust

[I am trying to learn Rust](https://www.wcygan.io/post/learning-rust-in-2023/) better.
Here are some projects that I've created to learn about Rust:

### Network Programming
- [Crawler](https://github.com/wcygan/crawler) - Web Crawler
- [Chat](https://github.com/wcygan/chat) - TCP Chat Server
- [Yeet](https://github.com/wcygan/yeet) - UDP Chat Server
- [Dns](https://github.com/wcygan/dns) - DNS Server
- [Load-Generator](https://github.com/wcygan/load-generator) - Load Generator for Load Testing

### Asynchronous Programming

- [Tokio-Utils](https://github.com/wcygan/tokio-utils) - Utilities for Tokio
- [Tub](https://github.com/wcygan/tub) - async pool
- [Shutdown-Async](https://github.com/wcygan/shutdown-async) - gracefully shutdown async tasks
- [Async-Throttle](https://github.com/wcygan/async-throttle) - async rate limiting
- [Async-Stdin](https://github.com/wcygan/async-stdin) - read from stdin asynchronously

### Miscellaneous

- [lib-wc](https://github.com/wcygan/lib-wc) - playground for learning Rust

## Go

[go-practice](https://github.com/wcygan/go-practice)

## Java

[java-practice](https://github.com/wcygan/java-practice)

Before I got into Rust, I liked Java for a little bit. This repository contains some remnants of that.

## Scala

[scala-practice](https://github.com/wcygan/scala-practice)

# References

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](https://teachyourselfcs.com/) if you are struggling to find a way to learn a certain topic in Computer Science.

[O'Reilly](https://www.oreilly.com/) and [Manning](https://www.manning.com/) are great resources to find books and projects!

### General

- [The Algorithm Design Manual](https://www.algorist.com/) (highly recommended)
- [The Art of Multiprocessor Programming](https://www.oreilly.com/library/view/the-art-of/9780123705914/) (highly recommended)
- [Designing Data-Intensive Applications](https://dataintensive.net/) (highly recommended)
- [Introduction to Algorithms](https://mitpress.mit.edu/books/introduction-algorithms-third-edition)
- [Advanced Algorithms and Data Structures](https://www.oreilly.com/library/view/advanced-algorithms-and/9781617295485VE/)
- [Modern Operating Systems](https://www.pearson.com/us/higher-education/program/Tanenbaum-Modern-Operating-Systems-4th-Edition/PGM80736.html)
- [Cracking the Coding Interview](https://www.crackingthecodinginterview.com/)

### Rust

> See [Learning Rust in 2023](https://www.wcygan.io/post/learning-rust-in-2023/), a blog post I wrote about learning Rust

- [The Rust Programming Language](https://nostarch.com/Rust2018) (highly recommended)
- [Rust Atomics and Locks](https://marabos.nl/atomics/) (highly recommended)
- [Zero2Prod](https://www.zero2prod.com/) (highly recommended)
- [Rust in Action](https://www.manning.com/books/rust-in-action)
- [Rust for Rustaceans](https://nostarch.com/rust-rustaceans)
- [Command-Line Rust](https://www.oreilly.com/library/view/command-line-rust/9781098109424/)

### Go

- [Powerful Command-Line Applications in Go](https://pragprog.com/titles/rggo/powerful-command-line-applications-in-go/) (making command line tools is a lot of fun!)
- [The Go Programming Language](https://www.gopl.io/) (highly recommended)
- [Learn Go with Tests](https://quii.gitbook.io/learn-go-with-tests/) (highly recommended)
- [Concurrency in Go](https://www.oreilly.com/library/view/concurrency-in-go/9781491941294/) (highly recommended)
- [Network Programming with Go](https://nostarch.com/networkprogrammingwithgo)
- [Distributed Services with Go](https://pragprog.com/titles/tjgo/distributed-services-with-go/)

### Java

- [Java Concurrency in Practice](https://jcip.net/) (highly recommended)
- [Effective Java](https://www.oreilly.com/library/view/effective-java/9780134686097/) (highly recommended)
- [Optimizing Java](https://www.oreilly.com/library/view/optimizing-java/9781492039259/) (I recommend it if you want to learn about the JVM and its internals)
- [Java Performance](https://www.oreilly.com/library/view/java-performance-2nd/9781492056102/)

### Scala
- [Hands on Scala](https://www.handsonscala.com/) (highly recommended)
- [Programming in Scala](https://www.artima.com/shop/programming_in_scala_5ed)

# Community

Learning from others is a good strategy! Here are resources from people in various communities that I look at every now and then

### Rust

- [Jon Gjengset](https://www.youtube.com/@JonGjengset?themeRefresh=1)
- [matklad](https://matklad.github.io/)
- [fasterthanlime](https://fasterthanli.me/)

# Miscellaneous

## Obsidian

[Obsidian](https://obsidian.md/) 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"](https://github.com/MaggieAppleton/digital-gardeners).

### Obsidian + Git

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.