Useful Links

Published on February 13, 2017
under Blog

Abstract

When starting a new group project, I often find myself working with people coming from other disciplines, who are not necessarily familiar with some software engineering or computer science principles. This page contains some links that I often share with my teammates (or they share with me) to help people get up to speed. I tried to add some shorts descriptions so you know what each link is about.

Software Engineering (SE)

15 Fundamental Laws of Software Development. This article is more of a food-for-thought thing than an actual guide for software development. It's interesting if you want to think a bit about the philosophy behind SE.

8 Reasons Why Code Breaks. A link that was shared by one of my C++ mentors at Amazon Lab126 - a very good overview of bad SE practices.

UI & UX

125 Easy Tweaks to Optimize Your Website’s UX/UI Today. A collection of some tips and simple diagrams that show you some minor tweaks you can apply to produce a better design. Although there are a lot of diagrams, they are all very easy to understand and will give you a good idea of how to improve UX for your users.

Little UI Details. This page has a lot of neat tips about getting typography, space, and colors right. Personally, I think tweaks like this are what gives your design that "professional" look.

Git

This section will be useful for those who are new to Git. It might also serve as a nice refresher for some Git commands, but if you use Git every day you probably won't find it that useful.

What is Git?. Brief technical introduction to what Git is and how it works.

git - the simple guide. A dead simple introduction to Git commands. I like this guide, but it doesn't really tell you what Git is for (if you know nothing about it). I suggest you quickly Google what Git is and then refer to this link for some guidance.

How to Write a Git Commit Message. Writing good Git commit messages helps other developers understand what you did. This article is a bit long but it tells you about all of the best practices in writing Git messages. If you want something nice and short instead, check out this post.

Oh, shit, git!. This article covers different scenarios where working with Git can go wrong. It's very helpful if you're a beginner trying to understand how to fix common Git issues and mistakes.

A successful Git branching model. This post is a bit more advanced. It talks about a branch structure that you can use for your repository to make developing large (team) projects easier.

Web development

This section talks about everything that can be called web design, including both frontend and backend development.

The 2018 Web Developer Roadmap. Web design in 2018 looks nothing like it was 10 or even 5 years ago. This article has a lot of nice lists and diagrams that will help you understand what tools and technologies you need to learn for a particular task.

Presentational and Container Components. An iconic post Dan Abramov which proposes a convenient way of thinking about different types of components in React. I found this very informative back when I first started using React. I don't always use these concepts in my code, but I find them useful to have in mind.

JavaScript

One could say that Node.js and general JavaScript development belong in the Web development section. Personally, JavaScript is my favourite language so I feel like it deserves a separate category.

denysdovhan/wtfjs. This repository demonstrates some example of weird and unexpected JavaScript behaviour. It's a fun thing to read, but I wouldn't say it's particularly useful - some of the scenarios are quite extreme and are very unlikely to occur in actual code. Nevertheless, there are some interesting edge cases you might wanna check out.

Machine learning

Computer vision and image processing

Camera Calibration and 3D Reconstruction. This page is a part of OpenCV documentation, but it gives a nice and quick introduction to the pinhole camera model and some types of distortion, which is useful even if you're not using OpenCV. Note that some conventions might vary in OpenCV vs. the rest of computer vision community.