CodeBreakthrough

Caleb Curry

Hey fam, it's Caleb from CodeBreakthrough!

Today I would like to take the time to crash course with you 3 topics every software engineer should know as a preview of my new Fundamentals course - we'll cover operating systems, types of languages, and binary. In my new course you'll get all of this and way way more.

Let's dive right in!

If you're not interested in this 7-day fundamentals series and you'd like to unsubscribe from it, unsubscribe here. [3/7]

Also, don't forget I am running an early-bird 30% off on my new Software Engineering Fundamentals course (<5 days left) if you decide this course is a good fit for you.

Count down to 2025-07-15T04:00:00.000Z​

​Get Software Engineering Fundamentals​

Operating Systems

The operating system is software the runs on the computer hardware. It is an abstraction layer, allowing us to build software for a particular operating system instead of a specific set of hardware.

The main 3 operating system categories you should be familiar with are:

  1. Windows
  2. MacOS
  3. Linux/Unix

Technically MacOS is a Unix operating system, however Apple has built so much on top that it’s basically its own thing. You’ll be able to use many of the same commands in the terminal, though.

I prefer to use MacOS or Linux (such as Ubuntu). This will allow you to use Linux commands in the terminal.

If you are on windows you will want to install Ubuntu on WSL.

To confirm everything is setup, you should be able to launch a terminal and run "ls" .

New to Linux? When we deploy software it will likely be on a Linux server, so you might as well get used to it now.

Within the Linux / Unix category there are many different operating systems. Ubuntu is a classic go-to for getting started.

Types of Software

Let’s first look at deployment destinations for software. Software can be hosted in a variety of locations, the most common being desktop, over the internet (client/server), or mobile.

Desktop Software

Software that is installed on your computer that has an executable would include software like Adobe Photoshop, Games downloaded from Steam, or Google Chrome. The benefit of this is that the software runs direct on the PC and can perform quite well. The challenge here is that we have to worry about the specific operating system and the CPU architecture. The software is compiled for that specific platform.

Virtual Machine Desktop Software

Some software will run in it’s own environment, such as Java. This is still desktop software but has an additional layer of abstraction.

Web

An alternative approach is to have a server that takes requests, does computation, and gives back a result. In this situation, we access the app through a web browser like Google Chrome.

This is a client/server approach because you act as the client making a request from your computer and the server responds to those requests.

The benefit to this is that we do not have to worry as much about the specifics of the hardware of the client because it is abstracted away with the use of a web browser. As long as the computer has a supported web browser we should be good to go.

Mobile

Another option is to deploy an app on mobile devices like iPhone and Android. This works quite similar to desktop software but instead of a desktop it is a mobile phone. This requires you to work directly with the app store for whichever platform you are deploying to.

Hybrid

A common approach is to have a single web application, but allow it to be accessed through multiple platforms. For example, we can have a downloadable desktop software, but the desktop software is really just a window in to a web application (such as Electron with React). This is a common approach for mobile applications as well.

Binary

Computers work with binary, but what does this even mean?
Binary is just a number system with a different base. Instead of base 10 (decimal), it is base 2 (binary).

Base 10 has 10 possible numbers: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Base 2 has only 2 possible numbers: 0, 1
This means as we want to represent higher and higher numbers, we start to add more digits:

​

You may see the joke “there are 10 types of people, those who understand binary and those who don’t.”

Every place value in decimal is often called a digit. In Binary, we call it a bit.
​
You can calculate the value of a binary number by counting its bit position. Here is a practice exercise: Convert 10110 to decimal:

10000 = 16
00100 = 4
00010 = 2

The total is then 16 + 4 + 2 = 22 in decimal.
Or, use an online calculator.

Working with Binary in Software Development

When working with a binary number it is quite common to prefix it with 0b, such as 0b10110. This way the reader knows how to interpret the number. Otherwise, is 10110 representing twenty two (base 2), or is it representing ten thousand one hundred and ten (base 10)?

You may also see subscripting for this same idea: 10110₍₂₎ however this is not possible within code, so we prefix with 0b as needed.

Data Types

This is a great time to explain data types.
All values in code are typed.
Not only will we have the binary that is stored in memory, but we need to know what type the binary represents.

Think of it like this: If the computer can ONLY store binary, how does it know if the binary represents a number, a character, a string, or something else? We need type information.

Even in dynamic languages like Python and JavaScript literals are still typed. The dynamic is referring to the ability for a variable to change what type of data is assigned to it. You may start with a number 5 and change to a string hello. This is in contrast to a statically typed language which enforces a variable to remain the same type throughout the program execution.

The type determines how the binary is converted in to meaningful data.
Here is an example: 0b01000001

This can be interpreted as the Capital letter A or it can be interpreted as the number sixty five.

What's Next?

I'd love to hear from you what other fundamental topics you're struggling with.

Respond to this email and let me know what else you'd like to learn, maybe I could include it in my course!

​Unsubscribe | Update your profile | Caleb Curry 500 Westover Dr #17334, Sanford, NC 27330-8941

Built with Kit​