Skip to content

Instantly share code, notes, and snippets.

@loganknecht
Last active June 28, 2019 00:42
Show Gist options
  • Save loganknecht/e5e95a09461c4014e62702f7d7d7cd00 to your computer and use it in GitHub Desktop.
Save loganknecht/e5e95a09461c4014e62702f7d7d7cd00 to your computer and use it in GitHub Desktop.
Suggested Reading Material

Overview

This is a "living" general document of noteworthy resources and information that I've found to be personally helpful.

Table of Contents

Table of Contents generated with DocToc

Architecture and Design

Key Words For Use in RFCs to Indicate Requirement Levels

Resources

Description

This is a short request for comments (RFC) that I really like because it can be used to establish standards for keywords.

When designing and collaborating it's important to align on definitions so that everyone is working from the same mental model.

For example: Say you're desiging a rest api and saying it should perform specific functionality. How do you know that people reading understand the nuance of the specifications you're giving? This allows you the ability to point to an atomic description so you don't have to repeatedly explain.

I wouldn't give this too much thought, but it's very helpful to point to when you need to align on something during design.

12 Factor Design

Resources

Description

This is a document that provides some design standards on how a code base and product should be developed for software-as-a-service-apps.

It is a very powerful tool to help guide how to think about design, and arguably, if followed will help foster a product that is incredibly flexible in development, deployment, and scalability.

I'm a very, very, big proponent of this way of thinking, as are many other engineers. However, I'll be the first to admit that I've come up short trying to adhere to it. It's very important when developing to take a step back and ask yourself how close you're getting to these principles.

If you're straying from them, it's important to reflect on the reasons for that and if it is a legitimate set of reasons.

Blue-Green Deployment

Resources

Description

This is an article from Martin Fowler on Blue Green deployment. I really enjoy it because it’s a brief high-level discussion about a specific deployment strategy.

This was written in 2010, so there’s actually a lot of technology now that supports this kind of deployment very easily. In particular, there is now a concept of architecture and resources being treated as cattle vs pets that makes this a really good idea to shoot for when configuring deployment.

Type Systems - What to Know Before Debating Type Systems

Resources

Description

I absolutely love this article. It takes a very enjoyable approach to engaging readers who want to participate in type system discussions and helps clear up aspects that they may not be familiar with.

Personally, I never had a chance in my undergraduate to build a compiler. I've tried multiple times since to get started on it, but time constraints, a lack of mentorship, and a lack of drive for a pet project left me with pieces project that never really came together.

I think regardless of who you are, if you're programming it's a fantastic article to read so you have at least a starting point to engage the discussion.


Specifications

Open API 3.0

Resources

Description

TODO

The Bare Minimum That Should Be Understood About Character Encoding

Resources

Description

This is a historical and enjoyable piece to help simplify the explanation about character encoding in modern systems.

This was written by Joel Spolsky who you might know as the co-founder and CEO of that small site Stack Overflow. He is pretty popular in the software industry. So enjoy it, but understand it's just a high-level discussion.

What Every Programmer Absolutely, Positively Needs to Know About Encodings and Character Sets to Work With Text

Resources

Description

A VERY thorough and incredibly wonderful explanation about character encoding.


Programming Languages

Python

Python Main Site

Resources

Description

This is the main site for Python.

Python - PEP8

Resources

Description

This is the Python style guideline created by the "benevolent-dictator" Guido van Rossum. I really like this because while it may not be the best to follow this word for word, there is a lot of value to be gained from it when trying to direct a team.

Python - PEP20

Resources

Description

This is a popular, small zen write-up, that is well known for helping provide a nice way to approach Python development. It's pretty important on account that is succinct in describing how to treat the language without providing strict rigidity in its usage.

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

TypeScript

TypeScript Main Site

Resources

Description

This is the main site for the, Microsoft developed, TypeScript.

TSLint

Resources

Description

This is a popular linter for TypeScript. In my experience it's very helpful for development.


Development Environments and Development Tools

Git

How to Write a Git Commit

Resources

Description

This is a document that explains how to write git messages, and tends to be my initial kick off point for requesting how a team writes commit messages.

Most organizations and developers now use Git as the tool of choice for version control. Because of that there are now development considerations needed to be accounted for. For example: how to perform commit messages to align with organization standards.

Because Git commit history is essentially a graph of product evolutions notated with commit messages at each node, it's important to make sure that each commit provides incredibly clear insight to the changes that occurred. It's a "history book" detailing your product.

It's a lot like life. If you're messy about archiving photos, successes, and benchmarks it becomes incredibly difficult to gauge how you arrived at your specific location. If your git history is messy, you're not going to understand how your system grew either.

That's why I like to use this as a starting point for that discussion.

Docker

Docker Website

Resources

Description


Web Development

Can I Use - Determining Browser Support and Functionality

Resources

Description

This is a site that lets you check browser support for CSS features you're trying to use. It's fantastic if you're trying to determine support and don't want to try hard in confirming anything.

Cheat Sheets

How to Use Different Languages and Features

Resources

Description

These are cheat sheets to demonstrate how to use syntax and features of programming languages, without bogging you down in a lot of reading. They should be considered as a reference point to help your comprehension.


Books

A quick disclosure.

There are a lot of things that are suggested in the software industry, that in my opinon I feel are a bit overstated. While I am recommending these books, I've found in my experience that their topics can be easily summarized and the contents of the book are just simple stories, experience, or data to re-iterate the points being discussed.

So, while I am suggesting these books, I don't feel like these are gospel. I do think they provide interesting discussion pieces that can be helpful in being more reflective about what it means to deliver software.

Mythical Man Month

Resources

Why It's Good

It's famous for coining the phrase mythincal man-month in order to describe tasks that are unpartitionable in order to articulate development bottlenecks. It has been also described using child birth as an example stating:

“The bearing of a child takes nine months, no matter how many women are assigned.”

There's a lot in here that is oriented towards management and soft skills. It uses a lot of stories from "back in the day". But, surprisingly it hold true regardless of the time period.

Bullet Points

  • See [the wikipedia article] for a summary.

Pragmatic Programmer

Resources

Why It's Good

This is honestly just an ok book for me. But, I think it's one of the few books that really gets at the idea of respecting software development as a craft. I agree with it by an large, but I think my biggest disagreements with it are its choice of analogies.

It does a great job articulating areas to emphasize as a software engineer, and it's always helpful to have something like this around to reflect against. It is my understanding there is a 2019 re-release/update on the way on the way.

This is a great book for organizations trying to get a better mindset for optimizing their software engineering efforts.

Bullet Points

Effective Engineer

Resources

Why It's Good

I really like this book when it's paired with Pragmatic Programmer. The reason for this is because Effective Engineer is focused a bit more on the process and less on the software engineer. However they overlap quite a bit.

This is a great book for organizations trying to get a better mindset for optimizing their software engineering efforts.

Bullet Points


Cloud Architecture

Understanding The Raft Consensus Algorithm

Resources

Description

The Raft consensus algorithm is used for many solution. My experience with it has been using Docker Swarm and seeing how it builds general consensus across manager nodes in a Docker Swarm.

Being able to visually understand this algorithm is super helpful for engaging with it.

Unfiled Design Patterns

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment