{"id":19989805,"url":"https://github.com/wcygan/practice","last_synced_at":"2025-05-04T09:33:34.408Z","repository":{"id":40256865,"uuid":"402944867","full_name":"wcygan/practice","owner":"wcygan","description":"learning stuff","archived":false,"fork":false,"pushed_at":"2023-02-18T07:52:12.000Z","size":464,"stargazers_count":4,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2023-03-09T23:06:47.054Z","etag":null,"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"],"latest_commit_sha":null,"homepage":"https://www.wcygan.io/","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wcygan.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-09-04T02:26:07.000Z","updated_at":"2023-02-03T01:57:53.000Z","dependencies_parsed_at":"2023-02-15T20:15:56.307Z","dependency_job_id":null,"html_url":"https://github.com/wcygan/practice","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wcygan%2Fpractice","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wcygan%2Fpractice/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wcygan%2Fpractice/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wcygan%2Fpractice/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wcygan","download_url":"https://codeload.github.com/wcygan/practice/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224391390,"owners_count":17303609,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["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"],"created_at":"2024-11-13T04:50:18.722Z","updated_at":"2024-11-13T04:50:19.471Z","avatar_url":"https://github.com/wcygan.png","language":null,"readme":"# Practice\n\n How I am learning about [Rust](https://www.rust-lang.org/), [Go](https://go.dev/), [Java](https://dev.java/)\n, and [Scala](https://www.scala-lang.org/) (and other things)\n\n\u003cp float=\"left\"\u003e\n  \u003cimg src=\"https://rustacean.net/assets/rustacean-flat-happy.png\" width=\"100\" /\u003e\n  \u003cimg src=\"https://download.logo.wine/logo/Go_(programming_language)/Go_(programming_language)-Logo.wine.png\" width=\"100\" /\u003e\n  \u003cimg src=\"https://1000logos.net/wp-content/uploads/2020/09/Java-Logo-500x313.png\" width=\"100\" /\u003e \n  \u003cimg src=\"https://www.scala-lang.org/resources/img/frontpage/scala-spiral.png\" width=\"40\" /\u003e\n\u003c/p\u003e\n\n## Table of Contents\n\n- **[Repositories](#repositories)**\u003cbr\u003e\n- **[References](#references)**\u003cbr\u003e\n- **[Community](#community)**\u003cbr\u003e\n- **[Miscellaneous](#miscellaneous)**\u003cbr\u003e\n\n# Repositories\n\n\nWriting 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.\n\nI typically setup a project as a git repository that is hosted on GitHub. I like to use [JetBrains](https://www.jetbrains.com/all/) IDEs.\n\n\n## Rust\n \n[I am trying to learn Rust](https://www.wcygan.io/post/learning-rust-in-2023/) better.\nHere are some projects that I've created to learn about Rust:\n\n### Network Programming\n- [Crawler](https://github.com/wcygan/crawler) - Web Crawler\n- [Chat](https://github.com/wcygan/chat) - TCP Chat Server\n- [Yeet](https://github.com/wcygan/yeet) - UDP Chat Server\n- [Dns](https://github.com/wcygan/dns) - DNS Server\n- [Load-Generator](https://github.com/wcygan/load-generator) - Load Generator for Load Testing\n\n### Asynchronous Programming\n\n- [Tokio-Utils](https://github.com/wcygan/tokio-utils) - Utilities for Tokio\n  - [Tub](https://github.com/wcygan/tub) - async pool\n  - [Shutdown-Async](https://github.com/wcygan/shutdown-async) - gracefully shutdown async tasks\n  - [Async-Throttle](https://github.com/wcygan/async-throttle) - async rate limiting\n  - [Async-Stdin](https://github.com/wcygan/async-stdin) - read from stdin asynchronously\n  \n### Miscellaneous\n\n- [lib-wc](https://github.com/wcygan/lib-wc) - playground for learning Rust\n\n## Go\n\n[go-practice](https://github.com/wcygan/go-practice)\n\n## Java\n\n[java-practice](https://github.com/wcygan/java-practice)\n\nBefore I got into Rust, I liked Java for a little bit. This repository contains some remnants of that.\n\n## Scala\n\n[scala-practice](https://github.com/wcygan/scala-practice)\n\n# References\n\nHere are books that I've found useful. I've read through most of them \u0026 highlight the ones which have been most impactful to me.\n\nI recommend [teachyourselfcs.com](https://teachyourselfcs.com/) if you are struggling to find a way to learn a certain topic in Computer Science.\n\n[O'Reilly](https://www.oreilly.com/) and [Manning](https://www.manning.com/) are great resources to find books and projects!\n\n### General\n\n- [The Algorithm Design Manual](https://www.algorist.com/) (highly recommended)\n- [The Art of Multiprocessor Programming](https://www.oreilly.com/library/view/the-art-of/9780123705914/) (highly recommended)\n- [Designing Data-Intensive Applications](https://dataintensive.net/) (highly recommended)\n- [Introduction to Algorithms](https://mitpress.mit.edu/books/introduction-algorithms-third-edition) \n- [Advanced Algorithms and Data Structures](https://www.oreilly.com/library/view/advanced-algorithms-and/9781617295485VE/)\n- [Modern Operating Systems](https://www.pearson.com/us/higher-education/program/Tanenbaum-Modern-Operating-Systems-4th-Edition/PGM80736.html)\n- [Cracking the Coding Interview](https://www.crackingthecodinginterview.com/)\n\n### Rust\n\n\u003e See [Learning Rust in 2023](https://www.wcygan.io/post/learning-rust-in-2023/), a blog post I wrote about learning Rust\n\n- [The Rust Programming Language](https://nostarch.com/Rust2018) (highly recommended)\n- [Rust Atomics and Locks](https://marabos.nl/atomics/) (highly recommended)\n- [Zero2Prod](https://www.zero2prod.com/) (highly recommended)\n- [Rust in Action](https://www.manning.com/books/rust-in-action)\n- [Rust for Rustaceans](https://nostarch.com/rust-rustaceans)\n- [Command-Line Rust](https://www.oreilly.com/library/view/command-line-rust/9781098109424/)\n\n### Go\n\n- [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!)\n- [The Go Programming Language](https://www.gopl.io/) (highly recommended)\n- [Learn Go with Tests](https://quii.gitbook.io/learn-go-with-tests/) (highly recommended)\n- [Concurrency in Go](https://www.oreilly.com/library/view/concurrency-in-go/9781491941294/) (highly recommended)\n- [Network Programming with Go](https://nostarch.com/networkprogrammingwithgo)\n- [Distributed Services with Go](https://pragprog.com/titles/tjgo/distributed-services-with-go/)\n\n### Java\n\n- [Java Concurrency in Practice](https://jcip.net/) (highly recommended)\n- [Effective Java](https://www.oreilly.com/library/view/effective-java/9780134686097/) (highly recommended)\n- [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)\n- [Java Performance](https://www.oreilly.com/library/view/java-performance-2nd/9781492056102/)\n\n### Scala\n- [Hands on Scala](https://www.handsonscala.com/) (highly recommended)\n- [Programming in Scala](https://www.artima.com/shop/programming_in_scala_5ed)\n\n\n# Community\n\nLearning from others is a good strategy! Here are resources from people in various communities that I look at every now and then\n\n### Rust\n\n- [Jon Gjengset](https://www.youtube.com/@JonGjengset?themeRefresh=1)\n- [matklad](https://matklad.github.io/)\n- [fasterthanlime](https://fasterthanli.me/)\n\n# Miscellaneous\n\n## Obsidian\n\n[Obsidian](https://obsidian.md/) acts as a powerful note taking app. It markets itself as:\n\n\u003ea powerful and extensible knowledge base\nthat works on top of your local folder of plain text files\n\nI'd have to agree with that; it's pretty freaking good...\n\nI use it as my own personal wiki \u0026 write notes on topics that I'm interested in.\n\nYou can see how other people set their vaults up by looking at [\"Digital Gardens\"](https://github.com/MaggieAppleton/digital-gardeners).\n\n### Obsidian + Git\n\nSince 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.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwcygan%2Fpractice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwcygan%2Fpractice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwcygan%2Fpractice/lists"}