Personally curated and opinionated collection of awesome engineering, coding & setup links & useful some snippets for the productive 10X engineer.
- AI
- Books
- Blogging
- Coding & CLI Fonts
- Comparison
- Courses
- Culture
- Design
- Documentation
- EduTech
- External Tools
- IDEs
- Journaling and Knowledge Management
- Languages
- Operating Systems
- Scaffolding
- STEM
- Testing
- Terminal
- Terminal Tools
- UX
- Web Tools
- Workflow Automation
- Chats:
- Code Review: WhatTheDiff AI Code Review and Changelogs
- CLIs:
- node-chatgpt-api Interact with ChatGPT on CLI or over REST
- LLMs:
- Ollama Run large language models locally (https://ollama.com/download)
- Frameworks:
- Langchain Language model training framework
- Jekyll blog-aware, static site generator perfect for personal, project, or organization sites
- Quartz Self-publish your own blog, knowledge base, documentation, or any other type of markdown content
- Favorites:
- Operator Mono Break from the norm, more interesting coding font (PAID)
- Roboto Mono Nice clear coding font
- Fira Code Font with nice ligatures that makes your code more compact and readable
- Hack Font designed for source code
- Lists:
- Nerd Fonts (https://www.nerdfonts.com) All the best fonts brought together in one place pre-patched for terminal with icons
- Programming Fonts (https://programmingfonts.org) All the best fonts brought together in one place and previewable
- Beyond Compare Best file comparison tool (PAID)
- Exercism Learn to code by solving problems
- Project Euler Solve math problems using computational algorithms
- The Hot Co. Awesome coding journals / notebooks and more
- Figma The defacto online UX/prototyping tool
- Figjam: Collaborative whiteboarding and meetings from the creators of Figma with great usability
- Lucidspark Collaborative tool / virtual whiteboard for visual planning and ideation, remote meetings, story mapping, and brainstorming
- Lucidchart Collaborative design tool for creating architectural diagrams and flowcharts
- Mermaid Markdown-like syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and more
- PlantUML UML diagrams for documentation and design utilizing notation to generate them
- sequencediagram.org Use notation to create sequence diagrams (similar to PlantUML)
- draw.io Open source diagramming tool
- codepen.io Code snippets, demos, and experiments for front-end web developers
- Dribble.com Design inspiration
- siteinspire.com Website inspiration
- devdocs.io API documentation for all popular programming languages and frameworks. Includes instant search and works offline too.
- aws command line Official AWS CLI documentation
- mojo stdlib Mojo stand library reference documentation
- gleam stdlib Gleam standard library documentation
- cssreference.io CSS reference
- htmlreference.io HTML reference
- components.gallery A collection of web component references and design systems
- aws command line Official AWS CLI documentation
- macOs command lineA-Z Index of the Apple macOS command line (macOS bash)
- linux command line A-Z Index of the Linux command line: bash + utilities
- powershell command line An A-Z Index of Windows PowerShell command
- Keep a ChangeLog: A curated, chronologically ordered list of notable changes for each version of a project
- Reactive Manifesto: Building systems that are Responsive, Resilient, Elastic and Message Driven
- Cookiecutter (https://cookiecutter.readthedocs.io/en/latest/) A command-line utility that creates projects from cookiecutters (project templates)
- Yeoman (https://yeoman.io) A set of tools for automating the creation of projects, templates, boilerplates, modules and applications.
-
Cmder Console emulator for Windows
-
Hyper Cross platform terminal replacement with plugins
-
Plugins (Awesome):
-
hyperpower completely unecessary but fun cursor (Run:
wow
for extra craziness)hyper i hyperpower
-
hyper-pane Pane navigatio
hyper i hyper-pane
-
hyper-search Search the hyper terminal (Cmd/Ctrl-F)
hyper i hyper-search
-
hyper-tabs: Let's you rearrange tabs by drag & dropping them.
hyper i hyperterm-tabs
-
hyper-capture: Capture the output of hyper to a video file (Run:
togglecapture
to start)hyper i hyper-capture
-
-
Awesome:
- Awesome Hyper: Another curated collection of hyper links
-
Snippets:
- Fix the hyper command on OSX (if you're using ZSH):
zsh: command not found: hyper
sudo ln -s "/Applications/Hyper.app/Contents/Resources/bin/hyper" /usr/local/bin/hyper
- Fix the hyper command on OSX (if you're using ZSH):
-
-
Warp The terminal 'reimagined' - a real game changer for the age old terminal - terminal on steriods!
- httpie Alternative for cURL, wget
- jq Command-line JSON processor
- yq Command-line YAML processor (Also installs xq for XML and tomlq for TOML)
- fkill Cross-platform process killer
- thef*ck Unfortunately named but super-useful for running the command you intended that just failed (you can just create an alias)
- colorls Nice ls with colorful output
- lsd A Rust implementation of ls inspired by colorls
- zoxide A smarter cd command, remembers which directories you use most frequently, so you can "jump" to them in just a few keystrokes (needs fzf)
- fzf Command-line fuzzy finderx
- ripgrep A faster grep that respects .gitignore (filtering can be disabled with rg -uuu)
- hyperfine A command-line benchmarking tool with live feedback, warmup capability, parameterization, and more.
- bat replacement for the 'cat' command with 'wings' including syntax highlighting and themes (e.g. can apply tokyonight)
- powerlevel10k A Zsh theme (and a bunch of other things)
- Excalidraw Hand-drawn style sketching app/whiteboarding with collaboration
- Balsamiq Wireframing tool (PAID)
- Axure UI/UX design tool (PAID)
- Figma UI/UX design tool (PAID)
- figcomponents.com Curated figma components
- material.io Material 3 design kit
- Sourcegraph Code search and navigation tool (PAID)
- Jenkins:
- Plugins:
- BlueOcean (https://plugins.jenkins.io/blueocean) Blue Ocean is a replacement interface for Jenkins that provides a modern and intuitive interface for navigating and interacting with Jenkins.
- Plugins:
-
Frameworks:
-
Tailwind CSS (https://tailwindcss.com/) It's CSS but much faster to write!
npm install -D tailwindcss npx tailwindcss init
-
UI Kit (https://getuikit.com/docs/slideshow) Clean and simple web UI framework
npm i uikit
-
Bootstrap (https://getbootstrap.com/) World's most popular grid system framework, pretty easy to use (v 5 ditched JQuery)
npm i bootstrap
-
-
In-browser UI editor: https://www.codeply.com
-
NativeScript (https://nativescript.org/) Build truly native iOS, Android and Progressive Web Apps with JavaScript
-
Repositories:
- npm: The package manager for JavaScript
-
Testing:
- Cypress (https://www.cypress.io/) Fast, easy and reliable testing for anything that runs in a browser.
-
UI:
- React (https://reactjs.org/) A JavaScript library for building user interfaces
- Svelte (https://svelte.dev/) Cybernetically enhanced web apps (less verbosity than React - uses compiler)
-
CLI:
- Chalk (https://www.npmjs.com/package/chalk) Terminal string styling done right
- Awesome Java
- Gradle (https://gradle.org/) Build tool designed to support build automation across multiple languages and platforms
- gradle-changelog-plugin: Plugin for parsing and managing the Changelog in a "keep a changelog" style
- Documentation:
- Java Docs Java SDK documentation
- Java Almanac Systematic collection of information about the history and the future of Java.
- Guava (https://github.com/google/guava) Google's core Java libraries (especially useful pre-JDK17)
- Spring Boot (https://spring.io/projects/spring-boot) Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run"
- PicoCLI (https://picocli.info/) A mighty tiny command line interface for Java
- Open-Rewrite (https://docs.openrewrite.org/) Large-scale automated code refactoring and technical debt elimination ecosystem
- Testing:
- assertj (https://assertj.github.io/doc/) Assertion library for Java
- hamcrest (https://hamcrest.org/JavaHamcrest/) Matcher library for Java
- TestNG (https://testng.org/doc/) Testing framework for Java (preferred)
- JUnit (https://junit.org/junit5/) Testing framework for Java
- Cucumber (https://cucumber.io/) Behavior-Driven Development for Java
- Selenium (https://www.selenium.dev/) Browser automation framework ideal for testing
- Playwright (https://playwright.dev/) Cross-language browser testing and automation framework
- JMH (https://openjdk.org/projects/code-tools/jmh/) Java harness for building, running, and analyzing nano/micro/milli/macro benchmarks written in Java and other languages targeting the JVM.
- Reactive: (https://www.reactivemanifesto.org/)
- RxJava (https://github.com/ReactiveX/RxJava/wiki) Reactive Extensions for the JVM
- Profiling and Analysis:
- VisualVM (https://visualvm.github.io/) JVM profiling
- Eclipse Memory Analyzer(https://projects.eclipse.org/projects/tools.mat/) General purpose toolkit to analyze Java heap dumps
- Spotless (https://plugins.gradle.org/plugin/com.diffplug.spotless) Keeps code formatting 'spotless'
- Palantir (https://github.com/palantir/palantir-java-format) Java code format extended with Google Style and spotless support
- Awesome Python
- Wheel (https://pythonwheels.com/) Build Python packages that work on Linux, Windows, and Mac
- Virtualenv (https://virtualenv.pypa.io/en/latest/) Virtual Python Environment builder
- Pipenv (https://pipenv.pypa.io/en/latest/) Python Development Workflow for Humans
- Poetry (https://python-poetry.org/) Python dependency management and packaging made easy
- Pip (https://pip.pypa.io/en/stable/) Package manager for Python
- Autopep8 (https://pypi.org/project/autopep8/) AutoPEP8 is a tool that automatically formats Python code to conform to the PEP 8 style guide
- Pylint (https://www.pylint.org/) Python code static checker
- Black (https://black.readthedocs.io/en/stable/) The uncompromising Python code formatter
- Pandas (https://pandas.pydata.org/) Data analysis and manipulation tool
- Scikit-learn (https://scikit-learn.org/stable/) Machine learning library for Python
- PyTorch (https://pytorch.org/) an open source machine learning (ML) framework based on the Python for Deep Learning
- Taichi (https://docs.taichi.graphics/) Python-based scientific computing uses JIT compilation to offload the Python source code to native GPU or CPU instructions for performance
- Requests (https://requests.readthedocs.io/en/master/) Python HTTP Requests for Humans
- Cookiecutter (https://cookiecutter.readthedocs.io/en/latest/) A command-line utility that creates projects from cookiecutters (project templates)
- Homebrew / Niche Libraries:
- Anki CozmoSDK (https://data.bit-bots.de/cozmo_sdk_doc/cozmosdk.anki.com/docs/index.html) Little robot - Cozmo SDK for python
- PyCozmo (https://pycozmo.readthedocs.io/en/stable/overview.html) Python SDK for the Cozmo robot in pure python
- PyATV (https://pyatv.dev/) Python library to interface with Apple TV
- Crayons (https://pypi.org/project/crayons/) Terminal string styling for Python (built atop colorama)
- Awesome Rust
- CBindGen creates C/C++11 headers for Rust libraries which expose a public C API
- Gradle:
- Rust Android Gradle Plugin Cross compile Rust Cargo projects for Android / Java targets.
- Learn Rust Rust Language books and tutorials
- Rust Documentation Rust Language books and tutorials
- Rust by Example Rust by Example
- Inside Rust Blog Rust Language blog
- Terraform (https://www.terraform.io/) Tool for building, changing, and versioning infrastructure
- IntelliJ EduTools Plugin:
- Educator Start Guide: NB : JPGs, MP4s etc. work as well within IntelliJ
- VideoScribe Create video diagrams / animated explainer videos for tutorials.
- carbon.now.sh Simulated/Generated CLI / Code Screenshots (online)
- carbon-now-cli Generated Code/Command line screenshots from the terminal
- High quality animated screencasts:
- GIFs: asciinema (https://asciinema.org/) free and open source solution for recording terminal sessions and sharing them
- SVG: svg-term-cli Share terminal sessions as razor-sharp animated SVG
- High quality animated screencasts:
- ScreenToGif (https://www.screentogif.com/) Free screen recording tool for Windows
- SnagIt Fully-featured screen capture tool (PAID)
- CodeFlask / codeflask.io A micro code-editor for awesome web pages - allows you to add interactive code to web pages.
- Prism prismjs.com Lightweight, robust, elegant syntax highlighting for websites
- Keycastr Open source keystroke visualizer for OSX
- Plugins:
- GREP Console GREP the console in IntelliJ
- GitToolBox Git integration for IntelliJ (e.g. Git Graph)
- Vim Vim emulation plugin for IntelliJ
- Themes:
- PaleNight (Material Theme) Material theme (esp. Palenight) is generally awesome
- NeoVim (https://neovim.io/) Vim-fork focused on extensibility and usability
brew install neovim
- Plugins:
- AI Assistants:
- Cody (https://github.com/sourcegraph/cody) Code search/navigation and ai assistance plugin for NeoVim
- Codeium (https://codeium.com/) AI assistants for Vim
- Lazy (https://www.lazyvim.org/installation) Plugin/package manager for neovim
- Lualine (https://github.com/nvim-lualine/lualine.nvim) A blazing fast and easy to configure neovim statusline plugin written in pure lua
- Mason (https://github.com/nvim-lua/mason.nvim) Package manager for neovim for language servers, formatters
- terraform-lsp (https://github.com/hashicorp/terraform-ls) Terraform Language Server for Neovim
- Nvim-lspconfig (https://github.com/neovim/nvim-lspconfig) Quickstart configurations for the Nvim LSP client
- Oil A file explorer that lets you edit your filesystem like a normal Neovim buffer
- Telescope (https://github.com/nvim-telescope/telescope.nvim) Find, Filter, Preview, Pick. All lua, all the time.
- Trouble (https://github.com/folke/trouble.nvim) A pretty list for showing diagnostics, references, telescope results, quickfix and location lists to help you solve all the trouble your code is causing
- nVim Treesitter (https://github.com/nvim-treesitter/nvim-treesitter) Neovim Treesitter configurations and abstraction layer for more advanced syntax highlighting
- Colorschemes:
- AI Assistants:
- Plugins:
- Themes:
- PaleNight (Material Theme) Material theme (esp. Palenight) is generally awesome
-
VS Code (https://code.visualstudio.com/) Code editor redefined and optimized for building and debugging modern applications
-
Plugins: Awesome VS Code
- Polacode (Marketplace) Produce screenshots of code/files in VS Code
- GitLens (Marketplace) Supercharge the Git capabilities built into Visual Studio Code
- GitHub Pull Requests (Marketplace) GitHub Pull Requests and Issues
- Markdown All in One (Marketplace) All you need to write Markdown (keyboard shortcuts, table of contents, auto preview and more)
- Jira and Bitbucket (Marketplace) Connect to Jira and Bitbucket
- CSS Peek (Marketplace) Peek into CSS
- C++ (Marketplace) C/C++ IntelliSense, debugging, and code browsing.
- C# (Marketplace) C# support for Visual Studio Code
- Gleam (Marketplace) Gleam language support for VS Code
- Draw.io (Marketplace draw.io diagramming support directly offline in VS Code
- Java (Bundle): (Marketplace) Java Support
- Instant Markdown (Marketplace) All you need to write Markdown (keyboard shortcuts, table of contents, auto preview and more)
- Peacock (Marketplace) Peacock makes it easy to switch between your editor theme colors
- Python (Marketplace) Python support for Visual Studio Code
- Kotlin (Marketplace) Kotlin language support for Visual Studio Code
- Todo Tree (Marketplace) Show TODO, FIXME, etc. comments in a tree view
- Docker (Marketplace) Docker extension for Visual Studio Code
- PlantUML (Marketplace) PlantUML integration for Visual Studio Code
- Rust (Marketpace) Rust language support for Visual Studio Code
- Settings Sync (Marketplace) Synchronize Settings, Snippets, Themes, File Icons, Launch, Keybindings, Workspaces and Extensions Across Multiple Machines Using GitHub Gist.
- Sonarlint (Marketplace) SonarLint for Visual Studio Code
- Terraform (Marketplace) Terraform for Visual Studio Code
- Hashicorp Terraform (Marketplace) Terraform for Visual Studio Code
- Vim: (Marketplace) Vim emulation plugin for VS Code
- VSCode Icons (Marketplace) Icons for Visual Studio Code
- VisualVM (Marketplace) Integrates the VisualVM monitoring and troubleshooting tool into Visual Studio Code
-
AI Assistants:
-
Themes:
- PaleNight (Material Theme) Material theme (esp. Palenight) is generally awesome
- Fairyfloss About as far from dark mode themes as I am willing to go. Cozy much?
- jepsen (https://jepsen.io/) "Trust but verify" - Putting distributed systems through their paces - an effort to improve the safety of distributed databases, queues, consensus systems, etc
- TestContainers (https://testcontainers.com/) An open source framework for providing throwaway, lightweight instances of databases, message brokers, web browsers,
- Obsidian (GitHub) A powerful knowledge base that works on local Markdown files
- One Note Note-taking software designed for free-form information gathering and multi-user collaboration.
- Distrobox (https://distrobox.it/) Tool to create isolated environments for development (uses Docker, Pacman)
- Pacman (https://wiki.archlinux.org/index.php/Pacman) Package manager for Arch Linux
- Homebrew (https://brew.sh/) Package manager for OSX
- choco (https://chocolatey.org/install) Windows package manager
- https://www.barbarianmeetscoding.com/blog/2019/02/08/boost-your-coding-fu-with-vscode-and-vim
- https://www.robertcooper.me/elegant-development-experience-with-zsh-and-hyper-terminal
- https://www.maketecheasier.com/install-zsh-and-oh-my-zsh-windows10/
- https://www.labnol.org/internet/useful-tools-for-programmers/29227/- https://medium.com/@ssharizal/hyper-js-oh-my-zsh-as-ubuntu-on-windows-wsl-terminal-8bf577cdbd97
- https://medium.com/@cjolowicz/hypermodern-python-d44485d9d769
- https://neovim.io/doc/user/nvim.html#nvim-from-vim
- Arduino IDE an open-source electronics platform based on easy-to-use hardware and software
- Postman REST Client and API Platform
- Postman Interceptor Capture requests from any website and send them to Postman Client
- n8n Workflow Automation Tool (self-host)
- Ansible Automation tool useful for internal automations, configuration, and setup
- Is OOP relevant today Is OOP relevant today? Discusses the true meaning of OOP and its modern application
- Back of the Envelope Calculations Compare and contrast approachs to bulding architectures based on known latencies
- Consistent Hashing The path to using consistent hashing to solve the scalability of caches
- microservices.io Microservice architectures and patterns including data management, transactional messaging, service discovery and others.
- How S3 Works A dive into the inner-workings of S3
- Learn in Public Whatever your thing is, make the thing you wish you had found when you were learning
- Types of Software Testing Automated testing is a broad term that can refer to a wide variety of testing methods.
-
Clean Code by 'Uncle' Bob Martin - As someone who was a self-taught programmer this was the first time I read a book (and watched a set of eccentric videos) that pulled me out of the mindset of "my code is excellent, it never breaks, so I don't need to write tests for it and I love to write the complex code to try new things", to making functional code that works for the reader and not just the writer. Highly recommend undertanding clean code concepts and SOLID software engineering. NB: Java-centric.
“Truth can only be found in one place: the code.”
“So if you want to go fast, if you want to get done quickly, if you want your code to be easy to write, make it easy to read.”
“One difference between a smart programmer and a professional programmer is that the professional understands that clarity is king. Professionals use their powers for good and write code that others can understand.”
“First Law You may not write production code until you have written a failing unit test. Second Law You may not write more of a unit test than is sufficient to fail, and not compiling is failing. Third Law You may not write more production code than is sufficient to pass the currently failing test.”
-
The Pragmatic Programmer by Andy Hunt and David Thomas - The Pragmatic Programmer is a great book about owning your engineering / development career and focusing on regularly making small changes for continuous improvement. It is aimed at software developers who want to write better code and avoid common pitfalls. The writers were also involved in the creation of the agile manifesto.
“Don't be a slave to history. Don't let existing code dictate future code. All code can be replaced if it is no longer appropriate. Even within one program, don't let what you've already done constrain what you do next -- be ready to refactor... This decision may impact the project schedule. The assumption is that the impact will be less than the cost of /not/ making the change.”
“You Can't Write Perfect Software. Did that hurt? It shouldn't. Accept it as an axiom of life. Embrace it. Celebrate it. Because perfect software doesn't exist. No one in the brief history of computing has ever written a piece of perfect software. It's unlikely that you'll be the first. And unless you accept this as a fact, you'll end up wasting time and energy chasing an impossible dream.”
“All software you write will be tested—if not by you and your team, then by the eventual users—so you might as well plan on testing it thoroughly.”
“"Kaizen" is a Japanese term that captures the concept of continuously making many small improvements.”
"Your ability to learn new things is your most important strategic asset."
-
Design Patterns: Elements of Reusable Object-Oriented Software - Design patterns are a general reusable solution to common problems in software design. A lot of modern languages have first class (or standard library) support for some software design patterns these days but if you have to build them yourself, select the best one for a job, or have a common 'language' for system design features with colleagues, then this book is a good place to start. Don't reinvent the wheel.
“Design patterns should not be applied indiscriminately. Often they achieve flexibility and variability by introducing additional levels of indirection, and that can complicate a design and/or cost you some performance. A design pattern should only be applied when the flexibility it affords is actually needed.”
-
Data Structures and Algorithms by Michael T Goodrich - Books on data structures and algorithms - your basic recipes and building blocks for solving software engineering problems. Many data structures these are first class in modern languages but when you understand them in a more abstract way then you'll make the right decisions about which to use and when.
-
Build Microservices - by Sam Newman by provides you with a firm grounding in the concepts while diving into current solutions for modeling, integrating, testing, deploying, and monitoring your own autonomous services microservices, whilst recognizing microservces are not the solution to everything.
-
Designing Data-Intensive Applications by Martin Kleppmann - Designing Data-Intensive Applications is a book about building scalable, reliable, and maintainable systems. It is aimed at software architects, developers, and system administrators who want to understand how to build scalable, reliable, and maintainable systems. Great for deep, foundational, and internals knowledge.
“Data outlives code.”
"Pretending that replication is synchronous when in fact it is asynchronous is a recipe for problems down the line."
"Working with distributed systems is fundamentally different from writing software on a single computer—and the main difference is that there are lots of new and exciting ways for things to go wrong"
“Consensus is one of the most important and fundamental problems in distributed computing. On the surface, it seems simple: informally, the goal is simply to get several nodes to agree on something.”
"Violations of timeliness are "eventual consistency," whereas violations of integrity are "perpetual inconsistency"
-
Atomic Habits by James Clear
Speaking of "Kaizen", its meaning is change for the better or continuous improvement, an awesome career in engineering is basically an unwritten agreement to continuously learn. So if you don't love that then it's time for a career change! Atomic Habits show how small improvements (e.g. read two pages of a book/article daily) can compound over time and lead to large rewards. It's worth applying that to your learning process - pairs well with the advice in "The Pragmatic Programmer".
“Every action you take is a vote for the type of person you wish to become. No single instance will transform your beliefs, but as the votes build up, so does the evidence of your new identity.”
“The only way to become excellent is to be endlessly fascinated by doing the same thing over and over. You have to fall in love with boredom.”
-
How to Work with (Almost) Anyone by Michael Bungay Stanier - It's a fallacy that 'tech' is just about sitting down 'staring at a screen'. It's entirely possible to code in a silo but engineering is fundamentally a team sport. Whether it's collaborating on an API, a product, in a team, or asking for candid 360 feedback, or working with your manager, you'll find yourself in a situation where you need to work together. This book will help you to achieve your best possible relationship with your colleagues. Just bear in mind it does say 'almost' everyone! (NB: Print > Audiobook)
“The curse of competence traps you doing what you’re good at but not fulfilled by.”
“You do it well, so you don’t wholly trust others to do it. That’s the curse of competence.”
Alternatively, opt for understanding:
-
Emotional Intelligence 2.0 by Travis Bradberry & Jean Greaves - Your IQ will only get you so far in this industry. Relationships count. Emotional intelligence is the ability to understand and manage your own and others' emotions.
“Emotional intelligence is your ability to recognize and understand emotions in yourself and others, and your ability to use this awareness to manage your behavior and relationships.”
“The secret to winning this culture game is to treat others how they want to be treated, not how you would want to be treated.”
“Some of the most challenging and stressful situations people face are at work. Conflicts at work tend to fester when people passively avoid problems, because people lack the skills needed to initiate a direct, yet constructive conversation. Conflicts at work tend to explode when people don’t manage their anger or frustration, and choose to take it out on other people. Relationship management gives you the skills you need to avoid both scenarios, and make the most out of every interaction you have with another person.”
A few books that were awesome for their time but less relevant as a full read for todays engineers - the quotes are still worth reading:
-
Working Effectively with Legacy Code by Michael C Feathers Oldie but a goodie. Not all software development is greenfield, when you find yourself working on a codebase that doesn't have tests, or sufficient tests/testing you may want to read this book! (At least, so long as AI can't explain the whole end to end architecture and implementation intent of the prior developers)
“Code without tests is bad code. It doesn't matter how well written it is; it doesn't matter how pretty or object-oriented or well-encapsulated it is. With tests, we can change the behavior of our code quickly and verifiably. Without them, we really don't know if our code is getting better or worse.”
“Programming is the art of doing one thing at a time”
“Big classes can hide too much. This question comes up over and over again from people new to unit testing: “How do I test private methods?” Many people spend a lot of time trying to figure out how to get around this problem, but, as I mentioned in an earlier chapter, the real answer is that if you have the urge to test a private method, the method shouldn’t be private; if making the method public bothers you, chances are, it is because it is part of a separate responsibility. It should be on another class.”
“The brutal truth is that architecture is too important to be left exclusively to a few people. It’s fine to have an architect, but the key way to keep an architecture intact is to make sure that everyone on the team knows what it is and has a stake in it.”
"Changes in a system can be made in two primary ways. I like to call them Edit and Pray and Cover and Modify...Unfortunately, Edit and Pray, is pretty much the industry standard. We carefully plan the changes, modify and run the system to ensure we didn’t break anything. We hope and pray that we got them right...The idea behind Cover and Modify, is that we work with a safety net when we make changes. Covering software means covering it with tests. When we have good set of tests, we can make changes and find out very quickly whether the effects were good or bad."
- The Code Influencer - Blog by Brian Corbin covering engineering and management
- The Life of Brian Corbin- Engineering - A digital garden including articles and notes on engineering and management
- The Pragmatic Engineer - A blog by Gergely Orosz
Open in the sense of the 'O' in SOLID software engineering. i.e. "open" for extension, "closed" for modification! However, suggestions welcome!