Why use a version control system?
- Collaboration
- Storing versions (properly)
- Restoring previous versions
- Understanding what happened
- Backup
If you need further clarification on any of those points check here.
How?
Visualizing Git Playground
Attlasian's Getting Git Right
Git Branching Challenges
Why Linux/Unix?
Quora's "Why do developers like Linux so much?"
How?
Shell e a história do terminal
Digital Ocean Linux Basics
Cornell CS 2043 Unix Tools & Scripting
Get to really know and master your IDE to be fully productive.
Improve your Terminal experience
Zsh with oh-my-zsh + Guake + Tmux
Checkout my dotfiles for configs
- Understanding What Happens When You Type "google.com"
- High Performance Browser Networking Book
- PagerDuty Security Training for Engineers
- OWASP Top 10 Vulnerabilities
- HTTP headers we don't want
Why learn Algorithms?
Computer scientists learn by experience. We learn by seeing others solve problems and by solving problems by ourselves. Being exposed to different problem-solving techniques and seeing how different algorithms are designed helps us to take on the next challenging problem that we are given. By considering a number of different algorithms, we can begin to develop pattern recognition so that the next time a similar problem arises, we are better able to solve it.
How?
Computer Theory + Complexity + Algorithms:
Illinois CS374 Algorithms and Models of Computation
Why learn operating systems?
Because sometimes when you're programming you can rely on your language or framework to abstract away the details of the hardware and operating system. This allows you to solve easy problems that language/framework designers have anticipated.
Other times, you'll be faced with hard problems that require you to roll up your sleeves and mess with the stuff under the hood. Before you can do this, you need to understand what operating systems do and how they work. If you can write this kind of code, there will be far more problems that you can solve.
How?
Udacity Introduction to Operating Systems
Why learn Compilers?
Compilers is a microcosm of computer science! It contains every single problem, including (but not limited to) AI (greedy algorithms & heuristic search), algorithms, theory (formal languages, automata), systems, architecture, etc.
You get to see a lot of computer science come together in an amazing way. Not only will you understand more about why programming languages work the way that they do, but you will become a better coder for having that understanding. You will learn to understand the low level, which helps at the high level.
If you're not convinced, read Steve Yegge's post about it. "Gentle, yet insistent executive summary: If you don't know how compilers work, then you don't know how computers work. If you're not 100% sure whether you know how compilers work, then you don't know how they work."
How?
Stanford CS1 Compilers
Build Your Own Lisp (C)
Why build/use Distributed Systems?
Think of a sports team. A team has several players; each player has a function on the team. If a player goes down due to injury, the team can replace that player to continue playing. Instead of having one player having to play all the positions at the same time, you have separate players with each performing a specific task. This is essentially a distributed system. Issues are localized and fairly easy to replace in case of a problem.
But the team needs to be very coordinated to score points. This requires planning, strategy and execution. If you had one super player that handled all of these things, you wouldn’t need coordination. So distributed systems needs some sort of coordination to behave as a “team”.
How?
What we talk about when we talk about distributed systems
Four easy reads to understand distributed systems issues
- Code Complete - Steve McConnell
- Clean Code - Robert C. Martin (Uncle Bob)
- Refactoring: Improving the Design of Existing Code - Martin Fowler
- Patterns, Principles, and Practices of Domain-Driven Design - Scott Millett
- Must read articles for a software developer
- The importance of a Microservices oriented architecture
- The Clean Architecture
- Hexagonal Architecture
- Agile
- Microservices
- DIP in the Wild
- The Log: What every software engineer should know about real-time data's unifying abstraction
- Daylight saving time and time zone best practices
- An Appropriate Use of Metrics
- Spotify engineering culture (part 1)
- Spotify engineering culture (part 2)
- A Retake on the Agile Manifesto
- DDD & Microservices: At Last, Some Boundaries!
- The many meanings of Event-Driven Architecture
- A Decade of DDD, CQRS, Event Sourcing
- Keynote: Architecture the Lost Years
- Making Architecture Matter
- The Problem with Time & Timezones
- Internationalis(z)ing Code