Article


A Guide to Low Level Programming for Beginners

By Liz Eggleston
Last Updated March 23, 2020

What is low level programming

High-level languages like JavaScript and Python may be the most popular programming languages today, but there’s no argument that these languages are doing a lot of work for the developer, from memory management to runtime interpretation. On the other hand, low level programming has very little abstraction – you’re writing code much more closely to the computer. So why would you want to learn low level programming? In this guide, a mentor and student from Holberton School answer all of your questions about low level programming!

What You Need To Know:

  • Low level refers to code written directly for the computer – ie. Machine Code and Assembly

  • Is C a Low Level Language? Opinions are mixed!

  • Why Low Level? Understanding low level programming is key if you want to work in Machine Learning or the Internet of Things. On top of that, understanding what’s going on under the hood makes anyone a better developer. 

Meet The Experts

  • Olivier is a mentor at Holberton School where he helps students when they have questions related to low level programming. He’s also the Chief Software Architect at FutureOn in the oil industry. In the past, he’s lead the development of GIS (mapping) libraries for mobile and built video games like Age of Conan. 

  • Arthur Damm spent 7 years working as a private tutor in math, science, and programming (and had a year-long technical intern gig developing Java Android). Arthur chose Holberton School because of the accessibility of the ISA, the cool San Francisco campus, and a rigorous full-stack curriculum (which of course includes low-level programming). Arthur is currently in the final Specialization phase of Holberton School.

What is low-level programming? 

Arthur: In modern times, low level programming is any language in which you handle memory management. Any language where that memory management or garbage collection is done for you, which is now most languages, is considered “high level.” 

Olivier: Low level programming is basically everything that is close to the hardware you are running your code on. It can have different meanings depending on your target. If you construct a building, you always start with the foundation and build on top of that. Low level development is that foundation – if you start with high level programming, then you don’t understand what’s going on underneath.

Pro Tip: Garbage Collection is when the system cleans up for you. In C programming, you have to clean up after yourself. 

Examples of low level programming languages

Arthur: In the old days, C was considered a high-level language. Today, many engineers might laugh at that because C is so low level. C and C++ are now considered low-level languages because they have no automatic memory management. 

Olivier: The definition of low level has changed quite a bit since the inception of computer science. I would not qualify C as a low or high level language, but rather more like an intermediary language. The only true low level programming is machine code or assembly (asm). Assembly is as close as possible to what the CPU (the computer's processor) can execute, as it is literally a text translation of the binary code which the CPU understands. For example, compression libraries are typically built in C, and very specific parts would be built using assembly, but the amount of assembly is getting lesser because compilers are getting so much better at optimization. 

Arthur: I consider C a low-level language nowadays. Certainly, it is the primary language that Holberton uses in the low-level curriculum. So for me C is low level because when using it we have to manage our own application memory, it is not managed for us by the language. This requires us as engineers to take total responsibility for our actions. This means our mistakes will tend to be catastrophic but the rewards are substantial in terms of efficiency and power consumption on whatever device runs our code. Also, being a C programmer can be inherently satisfying if you like to understand the technical details of your work.

Low Level Programming vs High Level Programming

Olivier: Generally speaking, high level means that you can use a lot of abstraction to accomplish what you want to do. In low level, you will only have a standard set of functions. Low level languages also give you a lot of freedom.

Examples of High Level Languages: 

Arthur: In the first nine months of Holberton School, we learned two high-level languages, Python and JavaScript. All higher level languages like Python, Javascript, etc, are built out of C. By understanding how they work under the hood, I can better write my high-level code to act in accordance with its internal design, providing superior application performance with deeper awareness of errors. Also, because C is so rigorous, when switching to a higher-level language the programmer has the feeling of taking off weights and experiencing a sense of expressive ease.

Pro Tip: When you want to add new features to Python, that's called an extension. And those are actually written in C! For some of Holberton’s advanced assignments, students actually write the C code that goes underneath Python, and then test them together to see it working.

If most high-level languages are doing memory management and garbage collection for you, then what's the point of knowing low-level programming?

Arthur: In engineering, there are no perfect solutions. There are only trade-offs. When a language handles memory management, it’s way easier for the engineer to work. Your messes are cleaned up for you. However, the trade-off is that this generally creates less efficient code, which is more computationally intensive. Practically, that means it will cost more power on a cell phone, laptop, smart sensors, or components in a smart appliance. The amount of energy a device uses is actually very important in embedded systems and in wearables.

Low level programming becomes especially important in the Internet of Things (IoT) and wearable devices, where efficiency in power consumption is actually the most important consideration.

Secondly, all of the high-level languages are built off of low-level languages. You’ll need low-level programming to sustain and keep developing those high-level languages.

Olivier: While there is a big push to be able to use high level language to be able to write low level things like drivers for graphics cards, low level languages are still needed for performance. For example, everything relating to encoding or decoding and encryption will probably use low level programming, with C and probably some assembly to use extended instruction (like AVX, SSE, etc). Basically, everything that needs high-performance and fine tuning will require a bit of low level programming.

Jobs That Require Low Level Programming

Olivier: Any job related to embedded software development, and building code that needs to run fast. If you understand low level programming, you will probably understand anything that goes above. When I’m recruiting and the applicant gets stuck on a React problem, I want to see that the developer is able to read code and understand what the library is doing.

Also, if you want to work in GPU programming using “high level” languages like CUDA or OpenCL, you’ll need to understand low level programming. In GPU (graphical process unit),  everything is massively parallel and the way you format your memory is actually as important as the actual code.

Arthur: I'll be looking for jobs in the Internet of Things or embedded systems. My goal is to work on an interesting project and, of course, to apply my low-level C programming skills. 

How to learn C or Low Level Programming

Should you learn low-level programming before learning a high-level language like Python or JavaScript or Java? 

Arthur: The answer to that will depend on the type of engineer you want to become. If you want to optimize the shortest training time, you should ignore low level, go straight to JavaScript or Python and just practice that one thing and get good enough at it to start working.

But I’ve really grown to appreciate the idea of Holberton School – they’re an alternative to a traditional four-year computer science degree, which is inherently a more rigorous and technical level of engineer. In that case, I think starting with C is ideal, because it requires you to understand all the details in a very relevant way. For example, by learning C first, we actually become much more capable when we move on to Python.

Olivier: If you want to improve your skills as a developer, you need to understand how the computer is working, even when the details are hidden from you. If you learn how to program in C first, then you will have a much easier time with high level languages later on. 

Do you need to know math for low level programming? 

Arthur: Computer science breaks down into numbers, so we can't get away from math in low-level programming. You should become familiar with advanced algebra. You won't need calculus-level mathematics, but you will need at least full high school mathematics when you're dealing with certain problems as a low level engineer. 

Low Level Programming at Holberton School

Arthur: Our first nine months (called Foundations) is a full stack curriculum, meaning we learn low-level and high-level languages. Foundations are an excellent general introduction to all layers of the stack, that is: low-level, high-level, devops, databases, and portfolio projects. We learn almost exactly three months of C programming. And then in Specialization we pick up wherever we left off in that part of the Foundations stack. In my case we continued with technical systems programming in the low-level C language. So we learn how to write our code in the way that is written for Linux, which is considered the standard operating system of the engineering world. 

Olivier: The foundation of C is important, because it gives Holberton students the base to build upon. If you know C, there is a high probability that you will be able to understand any imperative language thrown at you. As a plus, you will understand how memory works. Holberton School’s 9 month specialization is basically a condensed kickstarter to help you become better faster in the branch of computer science you like. 

Example of a Low Level Programming Project 

Arthur: For the most part so far, we've been replicating components that exist in the Linux operating system. Linux is considered a work of engineering art. Currently, we're working on the shell or the command line. That involves quite a bit of advanced system programming.  

At Holberton, although we don't have instructors teaching us on a regular basis, we are assigned projects with automated testing, and this is one of the projects. Then, later on, we will have our own portfolio projects where we get to choose what we would like to create. 

For our weekly algorithm practice, we recently studied a very interesting pattern matching algorithm called the KMP, Knuth–Morris–Pratt substring-search. It's really technical, but also surprisingly accessible. I always get a little mental buzz when I first learn a new algorithm and really start to understand it.

How can someone get started in Low Level Programming?

Olivier: We are lucky to live in a time where information is everywhere. I recommend a book called The C Programming Language by Dennis M. Ritchie and Brian W. Kernighan (the creators of C). 

My advice to every student is to read code! In the beginning, this is hard, but you’ll become better at it. My foundations in C have helped me so much over the years. 

Find out more and read Holberton School on Course Report. This article was produced by the Course Report team in partnership with Holberton School.

About The Author

Liz pic

Liz is the cofounder of Course Report, the most complete resource for students researching coding bootcamps. Her research has been cited in The New York Times, Wall Street Journal, TechCrunch, and more. She loves breakfast tacos and spending time getting to know bootcamp alumni and founders all over the world. Check out Liz & Course Report on Twitter, Quora, and YouTube!

Not sure what you're looking for?

We'll match you!

related posts


Ultimate Guide


Network Engineering 101

Skills, Certifications, and Salaries – Jacob from NexGenT explains it all!

Network engineering 101

Guide


How is Python Used for Data Science?

Kim Fessel, Instructor at Metis, answers all of your questions about Python in this video Q&A!

What is python for data science

Guide


Cyber Security Analytics vs Engineering

Two Flatiron School instructors explain: "What's the difference between Analytics and Engineering?"

Cybersecurity 20analytics 20vs 20cybersecurity 20engineering