Skip to content

briancorbinxyz/awesome-engineering

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Awesome Engineering

Awesome

Personally curated and opinionated collection of awesome engineering, coding & setup links & useful some snippets for the productive 10X engineer.

Contents


Awesome Tools

AI

Blogging

  • 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

Coding/CLI Fonts

Comparison

Courses

  • Exercism Learn to code by solving problems
  • Project Euler Solve math problems using computational algorithms

Culture

  • The Hot Co. Awesome coding journals / notebooks and more

Design

  • 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

Inspo

Documentation

Scaffolding

Terminal

  • 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:

    • 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
        
  • Warp The terminal 'reimagined' - a real game changer for the age old terminal - terminal on steriods!

Terminal Tools

  • 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 finder
  • ripgrep A faster grep that respects .gitignore (filtering can be disabled with rg -uuu)

UX

External Tools

CIT

Languages

HTML/CSS

JavaScript/Typescript:

Gleam

Java

Python

IaC

EduTech

IDEs

IntelliJ / IDEA IDE

Vim

Visual Studio

VS Code

Icons and Images

Journaling and Knowledge Management

  • 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.

Operating Systems

Linux

OSX

Windows

Interesting Reads:

Web Tools

Workflow Automation

  • n8n Workflow Automation Tool (self-host)
  • Ansible Automation tool useful for internal automations, configuration, and setup

Resources

Articles

Architecture

  • 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

Philosophy

  • Learn in Public Whatever your thing is, make the thing you wish you had found when you were learning

Testing

Books

Engineering Skills

  • 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.

Architectural Skills

  • 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.”

    “ 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.”

Soft Skills

  • Atomic Habits by James Clear

    Atomic Habits

    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 2.0

    “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.”

Archives

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."

Blogs

Contributing

Open in the sense of the 'O' in SOLID software engineering. i.e. "open" for extension, "closed" for modification! However, suggestions welcome!

Contributors

awesome-engineering contributors

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published