├── LICENSE └── README.md /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Palash Nigam 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Best Practices Checklist 2 | 3 | ## Table of Contents 4 | 5 | - [Best Practices Checklist](#best-practices-checklist) 6 | - [What is this](#what-is-this) 7 | - [Why this repo](#why-this-repo) 8 | - [What counts as an acceptable entry](#what-counts-as-an-acceptable-entry) 9 | - [Language Specific Resources](#language-specific-resources) 10 | - [C](#c) 11 | - [C++](#c-1) 12 | - [Clojure](#clojure) 13 | - [Common Lisp](#common-lisp) 14 | - [C#](#csharp) 15 | - [D](#d) 16 | - [Dart](#dart) 17 | - [Erlang](#erlang) 18 | - [Elixir](#elixir) 19 | - [F#](#fsharp) 20 | - [Go](#go) 21 | - [Groovy](#groovy) 22 | - [Haskell](#haskell) 23 | - [HTML/CSS](#htmlcss) 24 | - [Java](#java) 25 | - [Javascript](#javascript) 26 | - [Kotlin](#kotlin) 27 | - [Nim](#nim) 28 | - [Objective-C](#objective-c) 29 | - [OCaml](#ocaml) 30 | - [Pony](#pony) 31 | - [Prolog](#prolog) 32 | - [Python](#python) 33 | - [R](#r) 34 | - [Ruby](#ruby) 35 | - [Rust](#rust) 36 | - [Scala](#scala) 37 | - [Shell](#shell) 38 | - [SQL](#sql) 39 | - [Swift](#swift) 40 | - [Vimscript](#vimscript) 41 | - [XML](#xml) 42 | - [Zig](#zig) 43 | 44 | ## What is this? 45 | 46 | This is a collection of language specific resources that can be used to look up the best practices followed by a particular language's community. 47 | 48 | ## Why does this repo exist? 49 | 50 | I dabble into multiple programming languages and I wanted to have a central place that I can refer to whenever I am looking up best practices for a particular language. 51 | 52 | ## What counts as an acceptable entry? 53 | 54 | It could be anything from articles to books to videos that describes: 55 | 56 | - how to write idiomatic code in a particular language 57 | - what build systems / package managers to use and the best practices surrounding these aforementioned tools 58 | - how to good write unit/integration tests 59 | - different styles, design patterns & idioms of a language 60 | - new language section (if you find that the resources for your favourite language are missing feel free to create a new section and add them) 61 | 62 | **Note:** If you are adding a book to the list make sure that it is a free ebook. Amazon links to buy books will not be accepted. 63 | 64 | ## Language Specific Resources 65 | 66 | 67 | 68 | ### C 69 | 70 | - [C Coding Style](https://developer.gnome.org/programming-guidelines/stable/c-coding-style.html.en) 71 | - [C Style](https://github.com/mcinglis/c-style) 72 | - [Making The Best Use of C](https://www.gnu.org/prep/standards/html_node/Writing-C.html) 73 | - [Recommended C Style and Coding Standards](https://www.doc.ic.ac.uk/lab/cplus/cstyle.html) 74 | 75 | ### C++ 76 | 77 | - [ISO C++ Core Guidelines](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines) 78 | - [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html) 79 | - [Mozilla Style Guide](https://firefox-source-docs.mozilla.org/tools/lint/coding-style/coding_style_cpp.html) 80 | - [C++ style guide (Fuchsia)](https://fuchsia.dev/fuchsia-src/development/languages/c-cpp/cpp-style) 81 | 82 | ### Clojure 83 | 84 | - [Clojure Style Guide](https://github.com/bbatsov/clojure-style-guide) 85 | 86 | ### Common Lisp 87 | 88 | - [Standard CL Symbols](https://www.hexstreamsoft.com/articles/notes-tips-standard-common-lisp-symbols/) 89 | - [Google Common Lisp Style Guide](https://google.github.io/styleguide/lispguide.xml) 90 | 91 | ### CSharp 92 | 93 | - [Open-source library guidance](https://docs.microsoft.com/en-us/dotnet/standard/library-guidance/) 94 | - [C# Programming guide](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/) 95 | - [.NET Microservices: Architecture for Containerized .NET Applications](https://docs.microsoft.com/en-us/dotnet/architecture/microservices/) 96 | - [C# Coding conventions](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/inside-a-program/coding-conventions) 97 | - [Unit testing in .NET Core and .NET Standard](https://docs.microsoft.com/en-us/dotnet/core/testing/) 98 | - [Google C# Style Guide](https://google.github.io/styleguide/csharp-style.html) 99 | - [ASP.NET Core Performance Best Practices](https://docs.microsoft.com/en-us/aspnet/core/performance/performance-best-practices?view=aspnetcore-5.0) 100 | 101 | 102 | ### D 103 | 104 | - [The D Style](https://dlang.org/dstyle.html) 105 | - [Pragmatic D Tutorial: Idiomatic D](https://qznc.github.io/d-tut/idiomatic.html) 106 | 107 | ### Erlang 108 | 109 | - [Spawned Shelter (a list of various Erlang resources)](http://spawnedshelter.com) 110 | - [Erlang Patterns (the site is no longer accessible but one can read the md files in the repo)](https://github.com/gar1t/erlang-patterns) 111 | 112 | ### Elixir 113 | 114 | - [Fast Elixir - Idioms for writing performant code](https://github.com/devonestes/fast-elixir) 115 | - [Credo's Elixir Style Guide](https://github.com/rrrene/elixir-style-guide) 116 | - [The Zen of Elixir](https://github.com/tony612/the-zen-of-elixir) 117 | 118 | 119 | ### FSharp 120 | 121 | - [F# style guide](https://learn.microsoft.com/en-us/dotnet/fsharp/style-guide/) 122 | - [Effective F#, tips and tricks ](https://gist.github.com/swlaschin/31d5a0a2c4478e82e3ed60d653c0206b) 123 | 124 | ### Go 125 | 126 | - [Google's Go Style Guide](https://google.github.io/styleguide/go/) 127 | - [Clean Go](https://github.com/Pungyeon/clean-go-article) 128 | - [Idiomatic Go - Sourcegraph](https://about.sourcegraph.com/go/idiomatic-go) 129 | - [Idiomatic Go - by dmitshur](https://dmitri.shuralyov.com/idiomatic-go) 130 | - [Go package style guide by Rakyll](https://rakyll.org/style-packages/) 131 | - [Go Advice](https://github.com/cristaloleg/go-advice) 132 | - [Domain Driven Design in Go](https://github.com/marcusolsson/goddd) 133 | - [Effective Go](https://golang.org/doc/effective_go.html) 134 | - [How to Write Go Code](https://golang.org/doc/code.html) 135 | - [The Uber Go Style Guide](https://github.com/uber-go/guide) 136 | - [Golang Standards](https://github.com/golang-standards/project-layout) 137 | - [Advanced Testing Patterns Talk](https://www.youtube.com/watch?v=8hQG7QlcLBk) 138 | 139 | ### Groovy 140 | 141 | - [Style guide](https://groovy-lang.org/style-guide.html) 142 | 143 | ### Haskell 144 | 145 | - [Programming Guidelines](https://wiki.haskell.org/Programming_guidelines) 146 | - [Things to Avoid](https://wiki.haskell.org/Haskell_programming_tips) 147 | - [Useful Idioms](https://wiki.haskell.org/Blow_your_mind) 148 | - [Haskell Mini Patterns Book](https://kowainik.github.io/posts/haskell-mini-patterns) 149 | 150 | ### Java 151 | 152 | - [Principles of Lean Java](http://www.ameyalokare.com/software/2018/01/13/lean-java-principles.html) 153 | - [Google Java Style Guide](https://google.github.io/styleguide/javaguide.html) 154 | - [Java Code Conventions](https://www.oracle.com/technetwork/java/codeconventions-150003.pdf) 155 | 156 | ### Kotlin 157 | 158 | - [Coding Conventions](https://kotlinlang.org/docs/reference/coding-conventions.html) 159 | - [Google Kotlin Style Guide for Android](https://developer.android.com/kotlin/style-guide) 160 | 161 | ### Nim 162 | 163 | - [Nim Style Guide](https://nim-lang.org/docs/nep1.html) 164 | - [Nim Notes](https://scripter.co/notes/nim) 165 | 166 | 167 | ### OCaml 168 | 169 | - [OCaml Style Guide](https://github.com/lindig/ocaml-style) 170 | 171 | 172 | ### Pony 173 | 174 | - [Pony Patterns](https://patterns.ponylang.io/) 175 | 176 | 177 | ### Python 178 | 179 | - [Hitchhiker's Guide to Python](https://docs.python-guide.org/) 180 | - [Python API Checklist](https://github.com/vintasoftware/python-api-checklist) 181 | - [Design Patterns Implementations](https://github.com/faif/python-patterns) 182 | - [PEP8](https://www.python.org/dev/peps/pep-0008/) 183 | - [Elements Of Python Style](https://github.com/amontalenti/elements-of-python-style) 184 | - [Design Patterns Toptal Blog Post](https://www.toptal.com/python/python-design-patterns) 185 | - [Google Python Style Guide](https://google.github.io/styleguide/pyguide.html) 186 | - [Mozilla Style Guide](https://firefox-source-docs.mozilla.org/tools/lint/coding-style/coding_style_python.html) 187 | - [Python style guide (Fuchsia)](https://fuchsia.dev/fuchsia-src/development/languages/python/python_style) 188 | 189 | ### Ruby 190 | 191 | - [RSpec Best Practices](https://github.com/abinoda/rspec-best-practices) 192 | - [Let’s Read! — Eloquent Ruby](https://medium.com/@baweaver/lets-read-eloquent-ruby-ch-1-b2115d1416a6) 193 | - [Ruby Style Guide](https://rubystyle.guide/) 194 | - [Best Ruby](http://franzejr.github.io/best-ruby/) 195 | - [Fast Ruby - Idioms for writing performant code](https://github.com/JuanitoFatas/fast-ruby) 196 | 197 | ### Rust 198 | 199 | - [Elements of Rust](https://github.com/ferrous-systems/elements-of-rust) 200 | - [Official Rust Guidelines](https://github.com/rust-lang/api-guidelines) 201 | - [Rust Language Cheat Sheet](https://cheats.rs/) 202 | - [Rust Cookbook](https://rust-lang-nursery.github.io/rust-cookbook/) 203 | - [Rust By Example](https://doc.rust-lang.org/rust-by-example/macros/overload.html) 204 | - [Cargo Guide](https://doc.rust-lang.org/cargo/guide/) 205 | - [Idiomatic Rust](https://github.com/mre/idiomatic-rust) 206 | - [Unsafe Code Guidelines](https://rust-lang.github.io/unsafe-code-guidelines/) 207 | - [Rust Performance Book](https://nnethercote.github.io/perf-book/title-page.html) 208 | - [Rust Fuzz Book](https://rust-fuzz.github.io/book/introduction.html) 209 | - [Test Idioms](https://github.com/spacejam/test-idioms) (an example crate showcasing idiomatic test layout for Rust projects) 210 | - [List of Idiomatic Rust Resources by Corrode](https://corrode.dev/blog/idiomatic-rust-resources/) 211 | - [Maintenance Checklist for Production Grade Rust Codebases by Corrode](https://corrode.notion.site/Rust-Maintenance-Checklist-3fa116db4c6149cbacbe3c16f81c6bb0) 212 | - [Secure Rust Guidelines](https://anssi-fr.github.io/rust-guide/) 213 | 214 | ### Scala 215 | 216 | - [Scala Idioms](https://leanpub.com/scalaidioms/read) 217 | - [Scala Best Practice Idioms](https://alvinalexander.com/scala/scala-best-practices-idioms-cookbook) 218 | - [Scala School](https://twitter.github.io/scala_school/) 219 | 220 | 221 | ### Javascript 222 | 223 | - [Eloquent Javascript](http://eloquentjavascript.net/) 224 | - [You Don't Know JS](https://github.com/getify/You-Dont-Know-JS) 225 | - [JS: The Right Way](https://jstherightway.org/) 226 | - [Google JavaScript Style Guide](https://google.github.io/styleguide/jsguide.html) 227 | - [Mozilla Style Guide](https://firefox-source-docs.mozilla.org/tools/lint/coding-style/coding_style_js.html) 228 | - [An AngularJS Style Guide for Closure Users at Google](https://google.github.io/styleguide/angularjs-google-style.html) 229 | - [Airbnb Style Guide](https://github.com/airbnb/javascript) 230 | 231 | ### Dart 232 | 233 | - [Effective Dart](https://dart.dev/guides/language/effective-dart) 234 | - [Dart style guide (Fuchsia)](https://fuchsia.dev/fuchsia-src/development/languages/dart/style) 235 | - [Style guide for Flutter repo](https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo) 236 | 237 | ### SQL 238 | 239 | - [SQL Style Guide by Simon Holywell](https://www.sqlstyle.guide) 240 | 241 | ### Objective-C 242 | 243 | - [Google Objective-C Style Guide](https://google.github.io/styleguide/objcguide.html) 244 | 245 | ### Swift 246 | 247 | - [Google Swift Style Guide](https://google.github.io/swift/) 248 | 249 | ### R 250 | 251 | - [Google R Style Guide](https://google.github.io/styleguide/Rguide.html) 252 | 253 | ### Shell 254 | 255 | - [Google Shell Style Guide](https://google.github.io/styleguide/shellguide.html) 256 | 257 | ### HTML/CSS 258 | 259 | - [Google HTML/CSS Style Guide](https://google.github.io/styleguide/htmlcssguide.html) 260 | 261 | ### Vimscript 262 | 263 | - [Google Vimscript Style Guide](https://google.github.io/styleguide/vimscriptguide.xml) 264 | 265 | ### XML 266 | 267 | - [Google XML Style Guide](https://google.github.io/styleguide/xmlstyle.html) 268 | 269 | ### Zig 270 | - [Zig Design Patterns](https://github.com/SuperAuguste/zig-patterns) 271 | 272 | ### Prolog 273 | - TODO 274 | --------------------------------------------------------------------------------