Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/wcygan/practice
- Owner: wcygan
- Created: 2021-09-04T02:26:07.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2023-02-18T07:52:12.000Z (almost 2 years ago)
- Last Synced: 2023-03-09T23:06:47.054Z (almost 2 years ago)
- Topics: 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
- Homepage: https://www.wcygan.io/
- Size: 453 KB
- Stars: 4
- Watchers: 2
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
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 filesI'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.