Junior 2 Senior

Junior 2 Senior is a technical course where I unload all my knowledge for younger computer engineers that want to speed up their career path.

The goal is to provide all the necessary notions and mental models to work around problems for people to be hired in high-tech companies.

The course is based only on fundamental concepts. We will focus only on those concepts that were important 20 years ago, are important now, and will be important for at least the next 20 years.

We will cover very broad topics without going too deep into any, there are already a lot of resources, references and articles to dive deep into all the topics we will cover. The purpose of this publication is to uncover organically all the small things that senior computer engineers should know. It is left to the reader to decide which topic explores further and when.

Some people will need to understand better the internals of compilers, while for others it would be more beneficial to study how the sorting inside a database works. In this course, we will explore both.

We will suggest some exercises to help you learn by doing. Making sure that you understand the main ideas down to the important details.

What it is about

The course is about getting you up to speed with all those topics that are fundamental for computer engineers but to which younger engineers might have not been exposed yet.

It is about making sure you have all the notion to go above expectations.

It is about overcoming imposter syndrome having studied and understood those fundamental topics on which everything else is based.

All the topics covered are much deeper than what could be cover, but it will be up to the reader to keep digging for what it is more interesting.

A different course

Technical books are usually about a specific topic, say "Graphical programming with GPU". Those kinds of books and courses go extremely deeply about the specific topic, teaching all the important and not so important bits. Those resources are fundamental if you are specializing in a particular field.

This course is different, it is about exposing you to the fundamental concepts that any senior engineer should know.

Structure

The course is composed of two-part.

  1. A book

  2. A community

The book is digital and you will have access to all the versions and the errata. It is in presale here.

The community is about sharing solution with the exercises, clarify part of the books that are not clear, ask further questions, suggest new topics, and helping each other. It will also be possible to ask support during technical interview preparation. The community is still not open.

Outline

The outline of the book is in progress, new topics will be added and stuff will be moved.

But this is a rough idea.

  1. The web basics: Learn the fundamental blocks of the modern web

    1. What is a web request

    2. DNS

    3. Sockets

    4. UDP

    5. TCP

    6. Media Streaming

  2. Understanding low-level memory: How memory works and what are the implication

    1. Memory

    2. Strings

    3. Pointers

    4. Data Structures

    5. On-disk data structure

    6. Disk Storage vs Memory

    7. Caches

  3. How code runs: How do we go from source code to make computers do stuff

    1. Compilation

    2. Interpretation

    3. Stack vs Heap

    4. Memory layout

    5. Shared libraries

    6. Building Software

  4. Multiple cores: CPU are not getting any faster, but we are getting more of them, how to use them

    1. Threads

    2. Process

    3. Communication

    4. Atomic variables

  5. Linux: Working with the basic Linux API

    1. glibc

    2. IO

    3. Filesystems

    4. Software Installation

Process

Understanding the concept of processes is fundamental when working with computers. Most articles tackle the issue from a quite shallow perspective or the wrong point of view. We will try to study them from what I believe is the most useful point of view for a senior computer engineer. What processes are Processes are a computational unit. This definition is neither precise nor completely correct, but it helps in understanding.

Read more →

DNS

In the first article, we describe what is a web/HTTP request. Requests are directed toward a host and a port. The port is defined by the protocol, HTTP goes to port 80, HTTPS goes to 443. The host is defined by the request as a string. A possible host is "google.com" another is "facebook.com". However, packets are routed over the internet using IP addresses, numbers, while hosts are strings.

Read more →

Always check your resources before to free them

Today I fixed a minor bug in our production code. The software is written in Go(lang) and makes extensive use of the defer statement. The defer statement, take a function invocation and run it after the current function returns. They are very handy for clean-up tasks. A classical example is the acquisition of a lock. Or closing a file. Without defer you would get your resource at the beginning of the function, use it, and then clean-up.

Read more →

Database Fundamental

Databases are fundamental in all web application, website, API, CRUD. Lately, new software around databases starts to blossom. An example is GraphQL. It provides a more handy, mobile-friendly, interface to access data. Often on top of classical databases. New tools don’t allow us to skip the underneath fundamental knowledge. But they force us to understand how things work under the hood much deeper. Now, it is even more important to understand why some queries are slow and why some are fast.

Read more →

What is a Web Request

The web and internet as a large are fundamental for today’s world, but how does it work under the hood? In this article, we will talk about HTTP requests that are the fundamentals blocks that make the modern web possible. We will explore how tools like Python requests or Ruby Net::HTTP or again the Go package net/http or any other library that you may use in any other language works.

Read more →

Junior 2 Senior

Junior 2 Senior is a technical course where I unload all my knowledge for younger computer engineers that want to speed up their career path. The goal is to provide all the necessary notions and mental models to work around problems for people to be hired in high-tech companies. The course is based only on fundamental concepts. We will focus only on those concepts that were important 20 years ago, are important now, and will be important for at least the next 20 years.

Read more →


Signup to receive notification about new articles