Building the foundation

Building the foundation

I'm two months into my learning program for boot.dev. It's been a humbling and fun process so far, with me learning some new things about Python, Git, and the shell/terminal. The first couple of courses offered have been simple but also challenging enough for me to learn a few new things. I'll share some of my findings so far, which should help experienced people realize the importance of keeping up to date with the tools they are using. I'm doing as much of the courses as I can during the week. Some weekdays I do nothing and some I can do two hours. Mostly the focus is on learning and having fun.

It's fun coding in Python

I hadn't touched Python code for about 7 years. The last serious Python code I wrote was in university while taking some algorithms courses. Even then, I never really wrote Object-Oriented Python code. It was mostly focused on imperative and some functional Python code, mainly smaller programs implementing specific algorithms. Suffice it to say, I've never used Python for any full solutions, and so far I'm enjoying seeing what it's capable of. I'm excited to build out a full backend. But before I get there, I took some fundamental courses in Git and the command line where I picked up some new learnings.

Command line tricks

Learning a couple of shortcuts for the command line has been the most rewarding part of the start of the course. From the start of my career, I've probably not spent enough time learning the intricacies of the command line. Mostly, I know enough to be dangerous and to write scripts that can automate repetitive tasks. A lot of command line functions have also been taken over by IDEs like Visual Studio Code, causing you to never really leave the IDE. Of course, working more in the operations space has forced me to learn more about multiple sets of command lines (none of them in great depth). Here are some things I learned during the course.

  • A lot of the core shell programs are written to be very functional in a specific thing. Meaning that you can learn programs like grep, find, curl, head, and tail really well.

  • Learn your own package manager well. On top of this, it is good to know apt as you will encounter it at some point.

  • Command line tools are fast because they don't use a Graphical User Interface. You should leverage this when you can.

  • You can spend your whole life configuring your perfect dotfiles, but most likely someone has a pretty good one you can use already.

  • Shortcuts and aliases are nice, but be sure you know how to use the base tools. You won't always be using your own computer.

Gitting into it

I've used git since the start of my second job. At the beginning, I felt like I learned enough to be competent and understand the core concepts of git. Today, I have a working knowledge and know the core features and how it interacts with GitHub fairly well. I was surprised to learn some new things in the course nonetheless.

First, the course went into the details of the file structure in the .git folder and, more particularly, how git solves the issues of changes and multiple branches. In its design, git doesn't cater to large monorepos, which is why Facebook doesn't use it.

Second, I learned about the introduction of a safer command to switch between branches. I've always had to teach junior developers the pitfalls of using the checkout command and how it can do more than just switch branches. I won't go too much into the differences between switch and checkout because this article already does a good job. While checkout is not deprecated yet and switch is an experimental command, I'll enjoy using switch for now knowing that it does exactly what it says.

What's next?

Next, I'll be diving into two core programming paradigms that I've reviewed recently. While I'm familiar with both Object-Oriented and functional programming from before, it's good to review that knowledge and make sure that I can still program effectively in both paradigms.