The Miner’s Guide to Crafting Code: Gearing Up!

The year was 2021. The mines and quarries of Codeminer42 were vast, brimming with untapped veins of innovation, and glittering with the promise of digital gold. Seasoned developers were scarce, their numbers dwindling amidst a booming tech landscape that seemed to demand more than the industry could supply. Teams were stretched thin, projects teetered on the edge, and the hum of the codebases grew quieter each day. It became clear that traditional methods were no longer enough. Where could we find miners to unearth the precious nuggets of code buried deep within the rock?

At the heart of this challenge, the Miners made a bold decision: if they couldn’t find enough skilled miners, they would train them. From the ground up, they would cultivate a new generation of coders, individuals who would wield their keyboards like pickaxes, chiseling away at complexity to craft brilliance.

Thus, the Codeminer42 Trainee Program was born—a beacon for those eager to learn, to grow, and to join the ranks of the most passionate developers. It is a call to arms for aspiring programmers to step forward and seize the opportunity to shape their futures, one line of code at a time, and…

Okay, sorry… I got a little carried away… ┐( ̄ヮ ̄)┌

First of all: HAPPY NEW YEAR!

We are delighted with all the feedback and progress we made in 2024 and are eager to start 2025 with renewed strength in sharing our expertise with you, dear reader, and giving back to the community! ٩(。•́‿•̀。)۶

As we enter this new year, I bring you some exciting news!

As some of you may know, here at Codeminer42, we have a Trainee Program that goes way back to 2022. Since then, we’ve had four editions of the program (the fifth having just started!), and at each step, both the participants and we, as a company, have learned a lot. And I mean A LOT! Many participants have learned to code alongside seasoned developers, engaging daily to provide guidance, avoid common pitfalls, and make the learning process as seamless as possible.

Our goal has always been to ensure that, by the end of the program, we’d have capable developers who could creatively tackle any kind of problem. Because more than just teaching how to code, our philosophy is teaching how to learn.

Over the years, a lot of material has been produced and refined. These resources will be used in the 2025 edition of the program as well! And so, we had the idea to bring this content to you, dear reader! We know that not everyone can dedicate themselves to a program like ours. Or maybe you just don’t have the qualifications quite yet. But that should not stop you from learning — NEVER!

And just like that, "The Miner’s Guide to Crafting Code", hereby known as "TMGTCC" or, my favorite: "The Miner’s Craft" (pun 100% intended) was born! Here, you will find guides produced by dozens of highly talented and accomplished developers ready to be read by you!

So gear up and get ready! We’re about to embark on a journey of learning to code!

What You Can Expect

This is not a course. You won’t have teachers available to answer every question, but that’s part of what’s expected from you. We expect you to be curious and take the initiative to find the answers we haven’t provided. While participants in our program do have access to the expertise of an entire company, they are also expected to find some (if not most) of the important answers on their own. We’re here to guide this journey, not to carry you. This is part of the process of "learning to learn". (☞ ͡° ͜ʖ ͡°)☞

Now, what can you expect from us? We’ll have several posts divided into three major "paths." The first path will be common to both frontend and backend enthusiasts, with one post released each week. This foundational path will cover shared knowledge. Then, we’ll ramp up to two posts a week for the specific paths: one for Frontend and one for Backend. The frontend path will focus on JavaScript and React, while the backend path will dive into Ruby and Rails. Also, most of the posts will have challenges and hands-on activities to help put everything you will learn here into practice.

Likely, we’ll eventually release additional paths covering different technologies, but for now, this is our starting point. We’ll deliver at least a dozen posts for each path, along with several other general posts.

Finally, this post will serve as the central hub for the series. You’ll find a summary of all the posts here, along with links to them as they are released. You’ll also get a sneak peek at upcoming topics.

Let’s get started—the journey begins now! ┌(^▽^)┘

Gearing Up!

0. Unix and WSL

Learning to program on Linux or other Unix-like Operating Systems, such as macOS is an invaluable experience. Among the many benefits, some are that they offer an open-source environment that provides direct access to the system’s core components, enabling users to gain hands-on experience with the terminal, file systems, and system configuration. Additionally, many programming tools, servers, and frameworks are designed to run on Linux, making it a preferred choice for developers in the industry. Starting with Linux helps new programmers build a strong foundation, fostering an understanding of the tools and workflows that professionals rely on every day.

So, the bottom line is:

  • If you use Windows and are REALLY not keen on letting it go or dual-booting, use WSL2
  • If you have no experience with Linux, start with Ubuntu, Linux Mint, or Pop!_OS.
  • If you already use Linux or MacOS, keep going!

1. Learn to Use the Terminal (Command Line)

Learning to use the command line is essential for gaining more control over your system and improving efficiency. It allows for faster task execution, better automation through scripts, and direct management of files and software. Many programming tools and frameworks rely on the command line, making it a crucial skill for anyone in tech. Additionally, it helps with troubleshooting and problem-solving, offering a deeper understanding of how computers work. Here’s a great tutorial to get started with the Ubuntu command line: Command Line for Beginners
For a cool, simple-to-use terminal emulator I’d recommend Terminator

2. Learn to Use Your Operating System’s Package Manager

An operating system’s package manager is a tool that automates the process of installing, updating, and managing software packages on a computer. It allows users to easily download, install, and remove programs from a central repository, ensuring that the software is up-to-date and properly configured. Package managers help simplify software management by handling dependencies, version control, and installation configurations.

  • Ubuntu / Pop!_OS / Linux Mint: APT
  • Arch Linux / Manjaro: Pacman
  • MacOS: Homebrew

3. Install the Version Manager for Programming Languages

Using a version manager like asdf allows you to install multiple versions of a programming language on the same machine.

  • asdf Version Manager: https://asdf-vm.com

  • For Ruby:

    1. Install plugin:
      asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git
    2. Install the latest Ruby version:
      asdf install ruby latest
  • For JavaScript (Node.js):

    1. Install plugin:
      asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
    2. Install the LTS version:
      asdf install nodejs lts

4. Install Git

Git is essential for modern software development, as it allows developers to efficiently track and manage changes in their code over time. It enables collaboration by allowing multiple people to work on the same project without overwriting each other’s work.

With features like branching, merging, and version history, Git makes it easy to experiment with new ideas, revert to previous versions, and collaborate seamlessly in both small and large teams. Its widespread use across the industry makes it a vital tool for any programmer. Git Downloads

5. Choose Your Code Editor

A good code editor is essential for writing and managing your code. Some popular options are:

  • VS Code, for an all-in-one-package well rounded sollution. Quite heavy on resources, however.
  • Sublime Text: same as above, but lighter. A little bit of DIY is required, however; and
  • NeoVim, for the command line aficionados.

Pick the one that feels best for you!

I may be biased, but I’d suggest Sublime… (☞⌐■■)☞_

6. Install Docker

Docker is a tool used to create and manage containers for software. To get started with Docker on Ubuntu:

Don’t worry if Docker seems confusing right now — we’ll revisit this topic eventually!

7. Get Started with Exercism

Exercism is a platform with practice exercises and mentoring to help you learn programming languages.
Create an account for free here

Summary of Posts: The Miner’s Guide to Code

General Posts

  1. Gearing Up! [YOU ARE HERE]
  2. [Project Activities and the Codeminer42 Way]()
  3. [Docker and Containerization]()
  4. [Introduction to "Clean Code"]()
  5. [Programming Paradigm Concepts]()
  6. [Anatomy of an HTTP Request and Web Development]()
  7. [Code Review and Team Communication]()
  8. [REST, RESTful APIs, and API Documentation]()

Frontend Posts

  1. [JavaScript Language]()
  2. [Static Analysis and Formatters]()
  3. [Introduction to React]()
  4. [Async Code, Fetch API, Promises, and useEffect]()
  5. [Debugging Techniques for Frontend Apps]()
  6. [Consuming APIs and Async Code]()
  7. [Accessibility and Responsiveness]()
  8. [Design Patterns in Frontend Development]()
  9. [TypeScript]()
  10. [State Management with Redux]()
  11. [Internationalization in React Apps]()
  12. [Design Systems]()
  13. [Web Vitals, SSR, and Deployment]()

Backend Posts

  1. [Introduction to Ruby]()
  2. [Ruby Tools for Web Development]()
  3. [Relational Databases and SQL]()
  4. [Introduction to Ruby on Rails]()
  5. [Web Development with Rails]()
  6. [Debugging Techniques for Backend Apps]()
  7. [REST APIs with Rails]()
  8. [Database Relationships]()
  9. [Design Patterns in Backend Development]()
  10. [Background Jobs, Emails, and Caching]()
  11. [Internationalization in Rails Apps]()
  12. [Deploy (CI/CD)]()

Next Up: [Project Activities and the Codeminer42 Way]()

We want to work with you. Check out our "What We Do" section!