A Step By Step Plan To Learn Linux..!

How to start learning Linux being a complete beginner to Computer Science?

How long will it take to learn Linux?

Why is Linux so hard to learn?

Which distro should a complete beginner use?

These are questions that have no single correct answer. If you ask these questions to a Linux professional you will get an answer which starts with the phrase “it depends…”. If you are reading this article then I guess you are looking for answers to these questions, which is a good thing as it says that you are ready to learn Linux..!!

In this article I am trying to answer these hard questions with a simple step by step approach to arrive at the best possible step by step plan for yourself, keeping in mind the various reasons you might have in your mind on why you would like to learn Linux.

Below are some of the most common reasons users have to learn Linux

  • Category#1: To improve your knowledge and get proficient in computer science and Linux
  • Category#2: Just as a fun nerdy project to tinker with Linux
  • Category#3: To get a job as a Linux professional
  • Category#4: To get a user-level understanding of Linux for your hobby projects

So which one are you?

Depending upon the answer to that, I have suggested 4 different paths you can take to learn Linux.

Let’s see each path in more detail with how to start, what to learn, in which order to learn them and possible time estimates for each step in the plan. You can jump to the section of interest using the table of contents below. You can also read the entire thing if you are confused about which path is best for you.

A note on recommended resources

I have divided the recommended resources into 3 categories

  1. Short reads
  2. Reference books and
  3. Online courses

I suggest you to read the short read cover to cover and keep the references for when you need to solve specific problems (if you have time you can go ahead and read the references also cover to cover!).

If you are a visual learner and into online courses then I have provided some courses which I believe are high quality. I suggest you give them a look. I hope you find this article useful!

To improve your knowledge and get proficient in computer science and Linux

This path is going to be a challenging one, not because it’s hard or full of obstacles, but because it is a long road and requires lots of passion and interest from your side to actually complete this marathon.  

Before we see what this long road consists of, let’s start with what lies at the end of this road!

End results

Yes it’s a marathon, but once you have done this, you will be able to do anything in the world of Linux which include, but not limited to, the following

  • Get any Linux certification with minimum preparation
  • Ability to do any job that needs Linux knowledge
  • Starting your own company based on Linux
  • Making your own distro
  • Configuring and compiling the Linux kernel to run on any hardware platform with enough resources
  • Contributing to the Linux source code
  • Work on any and all operating systems not limited to Linux

In fact, if you measure the amount of knowledge you get as compared to the other routes mentioned in this article you will get the most bang for the buck in terms of hours spent vs knowledge acquired..!!

This is because you won’t have to waste hours scratching your head trying to solve a problem by googling it and trying out various solutions in stack overflow as once you have all this knowledge, if something doesn’t work the way it has to, you will be able to identify it yourself and fix them..!!

The path you must take must start with learning all the core concepts of computer science which are used to build Linux before you are ready to start learning Linux. These are the core concepts of computer science that are used to build Linux.

  1. Operating System Concepts
  2. Software architecture
  3. Hardware architecture
  4. Data structures and algorithms
  5. Computer Programming and
  6. Software management

Let’s have a brief look at each of the topics mentioned above, the various useful resources to learn them and have a look at a rough estimate on how long it will take to complete this path of the road.

If you are already familiar with some of the topics, you can always skip them and go on with the unfamiliar ones.

STEP#1: Data structures and algorithms

This is the core of computer science. No matter what particular area of computer science you are in and no matter what particular problem you are trying to solve, there will always be some sort of data structure and algorithms involved in it. Example use of algorithms in Linux is the kernel’s implementation of the scheduler, which schedules processes based on various criteria using algorithms.

This subject will challenge your ability to solve problems and produce solutions that are the most optimal. If you are a complete beginner to computer science, I suggest you start with this subject..!

Recommended resources for learning Algorithms and Datastructures

Short reads

Recommended Short Read 1

Grokking Algorithms: An illustrated guide for programmers and other curious people by Aditya Bhargava (link to Amazon)

This book focusses on only the basics but gives the reader a good understanding of the topics discussed. It’s considered to be a good book for beginners. I recommend you give it a go.

Estimated time to complete: 50 hours

Recommended Short Read 2

Operating System Algorithms by Nathan Adams (link to amazon)

This is a rather short one at just 110 pages, but it’s a book dedicated to learning algorithms that are used in operating systems so I thought you should have a look at it.

Estimated time to complete: 30 hours

Reference books

Recommended Reference book 1

Ask anybody and they will recommend you this one book on data structures and algorithms for reference.

Introduction to Algorithms  by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein (link to amazon)

It’s famously known as the CLRS book, named after the initials of its 4 authors. It is a must-have book for any serious computer science enthusiast..!

This book will take you about a year if you want to read it cover to cover, so if you are excited enough you can do that! I propose you to read just the introductory chapters of each section and try solving a few problems and move on to the next subject/course.

You can always come back to it if you need to refer something!

I suggest you spend no more than 40 hours on this book.

Recommended Reference book 2

Introduction to Algorithms: A Creative Approach by Udi Manber (link to Amazon)

I have not personally read this one myself but I have heard great things about it and hence I thought it’s worth mentioning. This book doesn’t just show you the available algorithms and explain how it works, instead it focusses on the aspect of designing algorithms and it’s a great book if you want to go do some research on algorithms in the future and not just implement ones that are already available. This is a rather expensive book, if you can’t afford it, I suggest checking it out from your local library or buying a used one.

Online courses

Recommended Online Course 1

The website Coursera has a specialization on algorithms (link to Coursera)

Offered by UNIVERSITY OF CALIFORNIA SAN DIEGO and it worth checking out.

Estimated time to complete: 192 hours (as recommended by Coursera)

Recommended Online Course 2

Data Structures & Algorithms (link to udemy)

The thing I like about udemy is instead of having a subscription model, purchasing courses here is equivalent to buying a book. Buy it once and it’s yours for life. The above course is a good one for beginners in computer science.

Estimated time to complete: 60 hours

Other online content:

Other than the above 2 there is always MIT’s open courseware, where you can get world quality lectures for free. Though these are basically videos and not designed for online education, the material delivered there is world-class and I highly recommend them.

MIT 6.006 Introduction to Algorithms, Fall 2011 (link to youtube)

MIT data structure and algorithms 2015, Matt Wong (link to youtube)

STEP#2: Computer Programming

Once you have gathered enough knowledge on algorithms and data structures, computer programming is going to be an easy task!

I recommend you start with the C programming language as it is the language used by Linux and all other operating systems. 

Recommended resources for learning C programming

I believe in using books for learning programming languages as most of the online courses take on a different approach in the sense that they get you used to the language, in other words they give you a good introduction to the language and its features, but not to master it.

If you are a complete beginner then I would recommend the book

Recommended Book 1: Let us C (link to amazon

This book helps the reader get a basic grasp of computer programming in general in a simple to understand manner. This was in fact the first-ever book I read on programming!

Estimated time to complete: 60 hours

If you already had taken some introductory computer programming course already and you wish to improve your skills then I recommend taking a look at

Recommended Book 2: Head first C (link to amazon)

Estimated time to complete: 60 hours

If you already have some programming experience in C say through some hobby projects, you can go straight for the book written by the creators of the C language

Recommended Book 3: The C Programming Language by Kernighan and Ritchie (link to amazon)

Estimated time to complete: 80 hours

Once you finish this last book you would reach a good level of understanding of C works and how to navigate in the C world.

Once you have mastered C I suggest you proceed to python, the object-oriented programming language with lots of open source software and learning resources online. You can build many powerful Linux apps using python.

Recommended resources for learning Python

Since you already have some experience with programming in general as you have just finished learning C, learning Python will not be a very steep learning curve. The book I would recommend for learning is again from the head first series of books as these books are very good self-learning resources if you are planning to learn a new language.

Recommended books
Object-oriented programming

Since you are moving from C, which is a procedural language, first you need to understand the philosophy behind object-oriented programming.

Recommended book 1: The Object-Oriented Thought Process (link to Amazon)

Estimated time to complete: 40 hours

Recommended book 2: Head First Object-Oriented Analysis and Design (link to Amazon)

Estimated time to complete: 40 hours

These books teach you the basics of object-oriented programming and how the entire philosophy works.

Even though I am a big fan of the “Head first” books, this time it did not make it to the top of the list, since the book “The object oriented thought process” by Matt Weisfeld is really a good short one teaches the essence of object oriented programming concepts in a rather nice manner, hence I suggest you go ahead with that one first. Then if you have time you can go ahead and read the second one too, as it will have some exercises to help you solidify the concepts learned.

Python

Now that you have learned object-oriented programming in general, the next step is to start learning the Python language

Recommended book: Head First Python (link to Amazon)

This is a good book for self-teaching as it makes you think how each step works. As the philosophy behind these “Head first” books says, more you understand the less you need to memorize! 

Estimated time to complete: 80 hours

If you like learning through online courses then the below 2 courses are very good.

Recommended course 1: Complete Python Bootcamp: Go from zero to hero in Python 3 (link to udemy)

Estimated time to complete: 80 hours

Recommended course 2: Learn Python Programming Masterclass (link to udemy)

Estimated time to complete: 120 hours

The above 2 courses in udemy teach you the basics of python programming language and both are very good, but one of them is enough for learning python. I suggest you go over to udemy and see the preview of both these courses and select one for yourself.

Now that you have learned C, Python and Algorithms & Data structures, you have crossed the most difficult part of this path. All that you need to do now is to learn some of the engineering concepts and then your basics will be as strong as any computer science graduate!

STEP#3: Software architecture and Design Patterns

Software architecture is all about designing good software which will be easy to read, modify and maintain. It all about learning and applying good engineering principles. I have worked with projects that had good designs and bad designs. I completely hated my job when I was working with poorly designed software and I loved my job when the design was good and I believe this is a universal feeling among software developers. This is due to the fact that nicely designed software is easier to understand, add features to, solve bugs and maintain.

Recommended resources

Recommended Short read: Head first Design patterns (link to amazon)

Estimated time to complete: 40 hours

Recommended Reference book: Design patterns: Elements of reusable object-oriented software (link to amazon)

STEP#4: Computer Hardware

You may be thinking when you are working with an operating system like Linux, why you should learn hardware. The main job of any operating system is to abstract the hardware and as such basic knowledge of hardware is essential. You don’t need to learn this one in too much detail, just get the basics strong and then you can move on to the next one.

Recommended resources

Recommended book 1: Essential Computer Hardware Second Edition: The Illustrated Guide to Understanding Computer Hardware (Computer Essentials) (link to Amazon)

This is a very short and simple read and it will give you a gentle introduction of the various hardware that is used in computers.

Estimated time to complete: 10 hours

Recommended book 2: Make: Electronics: Learning Through Discovery (link to Amazon) (Optional)

This book is an excellent book if you are interested in learning electronics, but you never managed to find the correct resource. It is an optional read if your main aim is to learn Linux as it basically teaches you stuff which is at a very low level, like how the components in your motherboard work, but its a fun read!

Estimated time to complete 80 hours

STEP#5: Operating System Concepts

Linux is an operating system and hence it is absolutely essential to start learning what operating systems are, what is their place in computer science and what features and capabilities they provide to the end-user.

What is an operating system? Academic people named it as “Operating Systems” but these are just a group of programs and algorithms, whose collective duty is to virtualize the available hardware resources and manage them.

To give you a simple analogy, operating systems are similar to managers in a modern office environment. Its duty is to manage the work performed by all the employees of the organization. A good manager will be able to satisfy the clients of a company. Similarly, a good operating system will provide a nice experience for the end-users(us) to use the computer and make it do what we want it to.

It basically does the below 3 activities

  1. Virtualization: So that the application programmer need not worry about CPU and Memory
  2. Concurrency: To run multiple programs in a parallel manner.
  3. Persistence: To keep the files and data from getting corrupted and to maintain a good working condition.

Remember those days where you need to reinstall the operating system and reinstall all the apps and copy the data from backup every few months to keep the computer working smoothly! This last point is about avoiding that..!

Recommended resources

Recommended book 1: Operating System Concepts (link to Amazon)

This book, also known as “The Dinosaur Book” (due to the pictures of dinosaurs on the cover) is considered to be one of the best books on operating systems for beginners as it uses easy to understand language and covers all the important concepts.

Estimated time to complete: 120 hours

Recommended book 2:

I got the 3 points, mentioned a little above, from the book on operating systems  “Operating Systems: Three Easy Pieces”  by Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau (link to amazon). This is a very good book that lays a strong foundation of knowledge about operating systems and I completely recommend it.

You can also read this book for free at this link as the authors

Estimated time to complete: 80 hours

This is a rather thorough book of about 600 pages on operating systems that will probably take you about 60 to 100 hours to complete (The exact time duration depends upon your reading speed, concentration, etc. )

STEP#6: Software management

So the next step in the path is to learn software management skills. When I say software management, I don’t mean project management (development plans and meetings), rather I mean version control and DevOps.

What is version control? Tool and techniques used for managing and keeping track of the changes you make during software development.

In software engineering, when you building a project, you can often find yourself in a place where something which was working fine suddenly breaks because of some changes you made recently. This is where version control software like git comes in.

Here every change you make will be recorded and you can easily see the exact changes you did and undo those changes if needed. This will save you tons of time, so I recommend you to learn a bit about it. I myself had wasted days trying to figure out the change I made that crashed the machine, but once I started using a version control system I was much more efficient! Now I can’t imagine writing code without a version control system!

I recommend you learn git, the opensource version control system developed by Linus Torvalds, who started it as a supporting project for Linux, but now git is used in everything from writing computer programs to poetry!

Recommended resources for Git

The udemy course “Git & GitHub Complete Masterclass: Beginner to Git Expert” (link) on git is a good informative course

Estimated time to complete: 25 hours

What is DevOps? DevOps stand for development operations, which involves 2 steps namely Continuous Integration and Continuous Delivery.

When you are working on a large team(like say on the Linux Kernel project) you need to be able to test the code from the contributors before adding them to the project. Manually testing each and every change is a time consuming and inefficient process. This is where DevOps comes in.

DevOps help you automate this process of testing and integrating changes made by your team members to the project and then releasing the software to the end customers.

What is Continuous Integration? Continuous Integration, the first step of DevOps, refers to the various steps involved in automating and testing. It involves code quality checks and unit tests that need to be done for source code that is added to a big repo.

What is Continuous Delivery? Continuous delivery, the last step of DevOps refers to the various steps involved in automating the delivery of tested and integrated code to the end-users.

Recommended resources for DevOps

Recommended online course: Gitlab CI: Pipelines, CI/CD and DevOps for Beginners  (link to udemy

This one will give you a brief overview of what can be done using CI/CD and gitlab. It teaches you enough of the basics to get yourself started with automating your hobby project’s build and deploy process.

Estimated time to complete: 20 hours

Recommended book: Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation (link to amazon)

Estimated time to complete: 80 hours

Once you have learned all these concepts, your skillset is at the level of any software developer. The next step is to join the big boys and start learning Linux. This road will be an easy one as you have already a very good foundational knowledge on computer science. Linux is basically 5 parts

  1. The Linux kernel
  2. Drivers
  3. GNU utilities that come with the operating system
  4. Bash scripting to control and automate the system using the GNU utilities
  5. The various APIs for writing your own apps on Linux, be it a command-line app, desktop app, smartphone app, embedded app or a cloud app.

Let’s have a brief look at each of the topics mentioned above, the various useful resources to learn them and have a look at a rough estimate on how long it will take to complete this path of the road.

STEP#7: GNU utilities and Bash scripting

Even though this is the 4 on our list I recommend learning this one first.  Basically, as you learn bash you will learn a lot about Linux and the GNU utilities that it comes with and it’s a lot of fun..!

What is GNU? The name “GNU” is a recursive acronym for “GNU’s Not Unix.” “GNU” is pronounced g’nooIt is a collection of many programs, applications, libraries, developer tools, and games whose source code is on the internet for everyone to see and improve upon.

As Linus Torvalds was working on Linux Kernel, there was another team of people in another corner of the planet trying to make a free replacement for the then famous “Unix operating system”. They made the apps for it, but they needed a kernel to run it on. And that’s where Linus Torvald’s Linux kernel came in..! The kernel and the apps were made to work together and modern-day Linux (or as its officially called GNU-Linux) was born.

If you are going to be using Linux the odds are you are going to be working with a lot of GNU utilities, so it is important to practice using them to get to know their capabilities.

What is Bash? Bash is the GNU’s replacement for the famous Unix shell “bsh” which stands for Bourne Shell named after its developer. Bash stands for Bourne Again Shell(Again a wordplay..!). It is a text-based user interface for users to interact with the operating system.

What is a shell? In olden days there was no graphical desktop user environment and users only had a text-based interface to the operating system called a shell.

These days, Professional users still prefer the shell to the graphical user interface because of its simplicity and efficiency.  It is a powerful tool for interacting with the operating system and hence it’s very important to learn it.

Recommended resources

Recommended book: Linux Command Line and Shell Scripting Bible  (link to amazon)

This book is a rather long read, but it will take you from being a beginner to an expert in using the Linux command line. I recommend reading this book cover to cover and try to understand the concepts that this book teaches. You don’t need to memorise everything, as this is a skill gained through practice, so read it, understand the concepts and come back to this book from time to time when you need some specific information.

I myself have tried some short reads, but they left me with a feeling of incompleteness, and since our goal is learning Linux, this book is a must-read IMHO.

Estimated time to complete: 120 hours

Linux application programming

So now you have learned how to play in the command line and automate tasks using the shell and GNU utilities. This is the next piece of the puzzle which is to learn how to write your own Linux apps. Examples of application programs or apps include word processors, image editors, video editors, web browsers, etc.

To develop apps on Linux, the operating systems provide several APIs to make full use of the capabilities of the machine. By learning those you will be able to write your own apps on your machine. The difficulty level of this step depends on the app you are planning to write but compared to the other steps this one is a rather easy task.

What are application programs? These are simple executables, that can utilize the system resources and run code. They have limited capabilities when it comes to hardware access, in the sense that they need to ask the kernel for access to the hardware resources, and the kernel keeps the control over the level of access given to the application.

Recommended book: Linux Application Development  (link to amazon)

This book teaches you linux app development with some good information of practical skills needed and some potential mistakes you can make as you work on some projects. 

Estimated time to complete: 120 hours

Recommended reference book: The Linux Programming Interface: A Linux and UNIX System Programming Handbook (link to amazon)

This book is a rather hefty one at 1552 pages, but the intent  of this book is to be used as a reference while you are working on a project and I hope it is widely accepted in the industry as a good reference.

STEP#8: Linux systems programming

So now you know how to use bash and other GNU utilities to automate processes and how to write your own Linux apps. This is the next piece of the puzzle which is to learn how to talk to the kernel and the hardware to make the hardware do what we need it to do. Essentially here you are learning to build programs that are on the same level as the GNU utilities. Examples of system programs include disk management utility, network management utility, task manager, device manager, GUI interface, etc. 

What are system programs? These are programs that talk directly to the kernel and can control, manage and monitor the hardware of a given computer system.

Recommended book: Linux System Programming: Talking Directly to the Kernel and C Library (link to amazon)

This book by Robert Love is considered to be the industry standard for Systems programming in Linux. It teaches you file handling, I/O handling, Memory and process management, Interprocess communications as it is implemented on Linux, both basic and advanced. Since you are already familiar with these topics as you learned them as you went through step 5 while learning Operating systems concepts, this one will be a rather easy read and you would be able to go through it and understand the material presented in a much faster time frame, which is one of the advantages of going through this step by step process.

Estimated time to complete: 90 hours

STEP#9: Drivers

So far you have mastered the command line, you can make your own user applications and system programs. The next step is to learn how to add hardware to your system. In order for the kernel to control the newly added hardware, it needs a program to talk to that can act as an interface between the kernel and the hardware and these programs are called drivers.

What are device drivers? These are programs that act as an interface between given hardware and the kernel of the operating system.

Just as are system programs are considered part of the operating system, device drivers are a part of the kernel.

In other words, if you want to add some custom hardware to your Linux machine, then you need to write the driver code for it and load the code into the machine so that the kernel can control your custom hardware. So to do that you need to learn how to write Linux drivers.

Recommended book: Essential Linux Device Drivers (link to amazon)

Estimated time to complete: 120 hours

STEP#10: The Linux kernel

This is the last piece of the puzzle, the Linux kernel. So far you have learned to talk to the kernel directly (via system programs), indirectly (via user applications) and you have managed to add your own pieces of code into the kernel (via Linux drivers). The next step is to understand the inner mechanisms of the kernel itself so that you can understand it better and you can port the kernel to other hardware if you need to.

What is a kernel? It is the core of any operating system and its duty is to the management of resources like CPU, memory, and IO and allocates them to the processes that ask for it in an efficient manner so that high priority processes and low priority processes can coexist and share the system resources.

If you ever need to port the Linux kernel to some custom hardware that has limited resources like CPU and RAM, then you need to know the inside working of the Linux kernel, so that you can port only the modules that you actually need to make it run on resource-constrained hardware. Hence it is important to learn about the Linux kernel.

Recommended book: Linux Kernel in a Nutshell: A Desktop Quick Reference (In a Nutshell (O’Reilly))(link to Amazon)

This is a rather short read and it teaches you how to download and compile the kernel source code and how to optimize and configure it for your particular use case. It will show you the potentials and possibilities of using the Linux kernel.

So if you are interested in the end results listed at the beginning of this section and want to master Linux, then this is what it takes to get there..!! You can either look at it as a lot of pending work or as endless hours of fun over the next couple of years..!

But hey once you have done it, you are as knowledgeable as any computer science graduate is and you will be able to do pretty much anything in the world of Linux!

2. Just as a fun nerdy project to tinker with Linux

If you are looking for a fun nerdy way to learn Linux, then you need to go through the following steps. I am not giving estimated times in this section as deadlines spoil the fun and taking your own time as you tinker around is part of the fun..!

STEP#1: Take a laptop and try out various distros and pick one

What are distros? Distros, short for Distributions, can be simply thought of as packages of the Linux kernel and some applications grouped together for easier installation. These packages differ from one another and are made keeping in mind the different kinds of end-users.

Some users need a server with no GUI (industrial users) while others need a fancy GUI like Windows and Mac OS (home users), while some others need a lightweight operating system to run smoothly on their very old hardware like the ones used to run Windows XP!, and some other users need to install Linux on an ARM-based system (like Raspberry Pi and its Raspbian).  There are also distros focusing on ethical hacking, with all the tools you will need to do penetration testing on a system..!

A single package will not suffice all of these users and hence the open-source developers of the Linux community have provided us with various packages for the variety of systems that Linux can run in. These packages are also called as distros.

Some of the popular distros include the following

  • Ubuntu Desktop (for home users)
  • Ubuntu Server (for servers)
  • Lubuntu and Puppy Linux (for resource-constrained hardware)
  • Kali Linux (for penetration testing) and
  • Raspbian (for Raspberry pi)
  • OpenELEC (for home entertainment systems)

An exhaustive list of all available distro will have more than 100 names on the list. I leave it up to you to google and find one that will work best for you!

The best part about this step is trying out distros has become easier than ever! You don’t need to completely replace the operating system you are running with Linux.

There are basically 3 options you can try

  1. You can install Linux using a virtual box and play with it
  2. You can install Linux on a USB drive and boot your laptop from the USB drive
  3. You can install Linux alongside your main operating system and choose which one to use each time you turn on your computer.

If you have a fairly powerful machine, I suggest you use the first option of trying distros out using the virtual box option. Here the operating system will be installed inside a virtual environment and you can boot up and use Linux just like you would use any other application, say like chrome or Microsoft word..! The entire process will not take more than an hour (provided you have a fast enough internet connection!).

There is plenty of tutorials online on how to do this, and I leave it up to you to google and figure it out since this process of figuring it out for yourself is part of the fun of going through this tinkering process of learning Linux..!

If virtual box performance seems slow on your system, you can always do it using Live USB or dual boot.

STEP#2: Then customize the distro to do whatever you want

So now that you have chosen a distro, the next step is to customize it to behave just the way you need it..! Just google “Getting started with <your distro’s name>” and you will find plenty of articles to do just that. You can try out several fun projects on the distro like

  • setting up your own web server at home,
  •  Share files on your home network,
  • automate apps to run at specific times
  • Change the desktop package to use a desktop from another package

Just think of some fun projects that you can do with Linux and try doing that through online research..!!

STEP#3: Learn Bash scripting

By now you should be already familiar with the shell environment and how it works. But trust me, you have only scratched the surface of what you can do with shells..! Even though it might not sound like a lot of fun, I suggest you take up an online course or read up a book on bash scripting.

Recommended resources

Recommended book: Linux Command Line and Shell Scripting Bible  (link to amazon)

This book is the same one I recommended for category#1 of users whose goal was “To improve their knowledge about computer science and Linux” as this is considered to be the best book on bash and shell scripting.

Recommended Online Course: Linux Mastery: Master the Linux Command Line in 11.5 Hours  (link to udemy)

But since you guys are in a “fun path” I would also recommend this course on udemy which teaches the basics of using the Linux terminal. For advanced topics, you can always use the above book as a reference.

STEP#4: Try out various fun projects based on Linux

In step 2, you followed some online tutorials to build things. In this step, I recommend that you go back to those projects and make it do more than what the online tutorial showed you, by using the skills you have developed thus far.

At this point, you may need to learn some programming languages to bring your projects to life. I suggest python for this as it is very easy to learn with tons of online resources and fun open source projects available on github.com

Recommended resources

Recommended book: Head First Python (link to Amazon)

This is a good book for self-teaching as it makes you think how each step works and as the philosophy behind these “Head first” books says, more you understand the less you need to memorize! 

Recommended course 1: The Python Mega Course: Build 10 Real World Applications (link to udemy)

This course focuses on learning python by making apps. I guess if you wish to learn python the fun way this one is the best bet as learning material.

Recommended course 2: Complete Python Bootcamp: Go from zero to hero in Python 3 (link to udemy)

Recommended course 3: Learn Python Programming Masterclass (link to udemy)

The above 2 courses in udemy teach you the basics of python programming language and both are very good, but one of them is enough for learning python. I suggest you go over to udemy and see the preview of both these courses and select one for yourself.

Once you have learned python, you can build apps based on python, start with small command-line apps and proceed to more complex ones.

STEP#5: Keep playing, Keep Exploring and Keep Learning..!

You should have now reached a level where you don’t need to google every 5 mins to figure something out, and you have become an independent user of Linux. At this point do whatever you feel is fun, do some projects, do more tutorials, keep playing and keep learning..!

Make sure you don’t always follow online tutorials, I recommend taking some ideas online and without looking at their solution, do some research and try to reproduce the same solution yourself. If you get stuck at some point you can always go back to the solution and find how the original developer implemented it.  Or if you have some ideas you can always do some projects from scratch and post them online as tutorials..!

Now you have reached a stage where you can make your Linux machine do what you want and in the process, you have also learned how to make your own applications in Linux using python.

Then if you need to up your game, say you need to make your own distro or make Linux run on custom hardware, I suggest you take a look at the “To improve your knowledge and get proficient in computer science and Linux section above and see where you lack, and which course feels more interesting and what skills you would like to gain and go do that next..!

To get a job as a Linux professional

If you want to make a career in Linux, and your first goal is to get a job as soon as possible then what you need to do is to take a certification path.

If you are a fresher in this field without any computer science background in education, then I would recommend that your first goal should be to enter the job market as a Linux system administrator. The activities you do will involve taking care of all the employees’ computers, make sure everything works as it is expected, install Linux on the new machines purchased by the organization and maintain records of the employees and their devices, etc.

If you have never taken any courses related to computer science, then I would highly recommend going for the CompTIA certifications first.

CompTIA stands for the Computing Technology Industry Association, it’s a worldwide association of academics and industry professionals aimed at improving the IT industry.

They have 2 certifications namely

  • CompTIA Information Technology Fundamentals certification and (link)
  • CompTIA A+ certification (link

which are aimed at complete beginners.

These 2 certifications will teach you all the basics you will need to learn to work with computers, maintain them and even repair them, both hardware and software repairs!

STEP#1: CompTIA Information Technology Fundamentals

According to CompTIA’s website,

The CompTIA IT Fundamentals exam focuses on the essential IT skills and knowledge needed to perform tasks commonly performed by advanced end-users and entry-level IT professionals alike, including:

  • Using features and functions of common operating systems and establishing network connectivity
  • Identifying common software applications and their purpose
  • Using security and web browsing best practices

This exam is intended for candidates who are advanced end users and/or are considering a career in IT. The exam is also a good fit for individuals interested in pursuing professional-level certifications, such as A+.

What this basically means for us is, if you need a career in Information Technology, but you don’t have an educational background in it, then this certification will teach you the essential knowledge needed to get started.

Recommended resources

Recommended online course 1: CompTIA IT Fundamentals+ (FC0-U61)  (link to udemy)

This is a free course at udemy and it covers all the necessary topics in detail hence its worth giving a look!

Estimated time to complete: 40 hours

Recommended online course 2:  CompTIA IT Fundamentals; FC0-U61. The Total Course  (link to udemy)

This one is a rather short course on the same certification, with just 5.5 hours of video, from the brand named “Total seminars” which is a trusted brand in the CompTIA certification training industry, and hence it’s worth a shot.

Estimated time to complete: 20 hours

Recommended book 1: ITF+ CompTIA IT Fundamentals All-in-One Exam Guide, Second Edition  (link to Amazon)

This book is again from Total Seminars and it can be used for reference as you follow the online courses mentioned above

Recommended book 2: CompTIA IT Fundamentals (ITF+) Study Guide: Exam FC0-U61  (link to Amazon)

This is another good reference book and it comes with some downloadable flashcards and 2 online practice tests and hence it can prove to be a good resource for your certification prep.

Recommended Practice tests: CompTIA IT Fundamentals (Exam: FC0-U51) : Practice Tests (link to udemy)

It is a good idea to take some practice tests before you go for the actual exam as it gives you the exam experience and identifies your weak areas for you to improve upon before you go to the test. This will also make sure that you pass the certification in one go and not waste too much time and money on the exam prep. Also I recommend you take it from a different instructor than the ones you used for the prep so that you see which areas need more prep.

STEP#2: CompTIA A+ certification

According to CompTIA’s website, a candidate with a CompTIA A+ certification will be able to

  • Demonstrate baseline security skills for IT support professionals
  • Configure device operating systems, including Windows, Mac, Linux, Chrome OS, Android and iOS and administer client-based as well as cloud-based (SaaS) software
  • Troubleshoot and problem solve core service and support challenges while applying best practices for documentation, change management, and scripting
  • Support basic IT infrastructure and networking
  • Configure and support PC, mobile and IoT device hardware
  • Implement basic data backup and recovery methods and apply data storage and management best practices

What this basically means for us is, once you get this certification, you will be able to handle software, hardware and network issues that might typically come up in an organization. Also, you will be able to build a computer from scratch with just the motherboard and components like processor, RAM, SSDs, and Hard-disks.

If you have these 2 certifications, you will already be eligible for so many entry-level jobs.

Recommended resources

Recommended online course: CompTIA A+ 2019 Certification 1001. The Total Course  (link to udemy)

This one is a very comprehensive course on the A+ examination, I have personally tried it and the instructor Mike Myers does a very good job at keeping the content both informative and interesting.

Estimated time to complete: 40 hours

Recommended reference book: CompTIA A+ Certification All-in-One Exam Guide, Tenth Edition  (link to Amazon)

This is another book from Total seminars, which you can use as a reference to understand the difficult topics. I recommend you to take the course and go through the book in a parallel manner as you go through your prep.

Recommended Practice tests: CompTIA A+ Core/2 220-1002 Practice Test (link to udemy)

Choice of Linux certifications

Since your goal is to get into Linux, so you need to do a couple more certifications..!

I guess it can be a bit overwhelming to do certification after certification, but just think of certifications as college-level courses that you need to pass. If you need a break, then you always go for a job with the A+ certification and do then Linux certification 6 months or 1 year later maybe..!!

You can either go for  CompTIA’s Linux+ certification (link) or if you are serious about Linux, then the Linux Professional Institutes certifications are better, as Linux Professional Institute certifications are purely for Linux enthusiasts and you can always improve your skills by going through their next levels of certifications

You can see the list of the certifications offered by Linux Professional Institute below.

  • Linux Essentials (010-160)
  • LPIC-1: Linux Administrator
  • LPIC-2: Linux Engineer
  • LPIC-3 300: Linux Enterprise Professional – Mixed Environment
  • LPIC-3 303: Linux Enterprise Professional – Security
  • LPIC-3 304: Linux Enterprise Professional – Virtualization & High Availability
  • DevOps Tools
  • BSD Specialist

So this path of certification will lead you to become a Linux professional in no time..!

To get into the Linux industry and get a job as a Linux administrator, you just need to complete the 1st two certifications in the above list, i.e the Linux essentials certification and the LPIC 1 certification.

STEP#3: Linux essentials certification

According to the Linux Professionals Institute’s website, to get certified with the Linux essentials certification the candidate must

  • have an understanding of the Linux and open source industry and knowledge of the most popular open source Applications;
  • understand the major components of the Linux operating system, and have the technical proficiency to work on the Linux command line; and
  • have a basic understanding of security and administration related topics such as user/group management, working on the command line, and permissions.

So once you have completed this one, you would be having a strong foundation for your Linux career and you are almost there to get a job as a Linux administrator.

Recommended resources

Recommended online course: LPI Linux Essentials (010-160) Complete Course and Exams  (link to udemy)

This is rather the only course on this topic I could find on udemy at the time of writing this article, and it seems to cover the exam objectives in a brief manner and give the student a good overview of the basic concepts on Linux. This course also include some practice tests to help you prepare better.

Estimated time to complete: 20 hours

Recommended reference book: LPI Linux Essentials Certification All-in-One Exam Guide  (link to Amazon)

This book is again by Total seminars that you can use as a reference as you study for the certification.

Like I mentioned previously, it’s a better idea to take practice tests from a different instructor just to identify weak areas and hence I recommend taking this one.

Recommended Practice tests: Practice Tests for LPI 010-160 Linux Essentials Exam (link to udemy)

STEP#4: LPIC-1 certification

According to Linux Professionals Institute’s website, to get certified with the Linux LPIC-1 certification the candidate must

  • understand the architecture of a Linux system;
  • install and maintain a Linux workstation, including X11 and setup it up as a network client;
  • work at the Linux command line, including common GNU and Unix commands;
  • handle files and access permissions as well as system security; and
  • perform easy maintenance tasks: help users, add users to a larger system, backup and restore, shutdown and reboot.

Once you have completed this certification, you are eligible to get a job as a Linux administrator and start your career as a Linux professional..!

Recommended resources

Recommended online course: The Complete Linux LPIC-1 Certification Course Exams 101-102  (link to udemy)

This course is one of the few detailed courses on LPIC 1 available on udemy. Though some of the topics are not covered to the depth you would like to, the instructor has managed to cover most of the topics required for the certification in enough detail and its the only course available! Hence you would need a study guide to go with the course.

Estimated time to complete: 40 hours

Recommended reference book: LPIC-1: Linux Professional Institute Certification Study Guide (link to Amazon)

This is a good study guide for the exam, but it is a study guide and hence it will only touch on the areas that the author felt are important for the exam. I would suggest you to use the book below too. 

Recommended book: Linux Command Line and Shell Scripting Bible  (link to amazon)

This book is the same one I recommended for category#1 of users whose goal was “To improve their knowledge about computer science and Linux” as this is considered to be the best book on bash and shell scripting.

Recommended practice tests: LPIC-1 Linux Professional Institute Certification Practice Tests: Exam 101-500 and Exam 102-500 (link to Amazon)

Once you start your job and stabilize yourself in a good position by gaining some experience, you can always do the next levels of LPIC certifications part-time and level-up your career..!

To get a user-level understanding of Linux for your hobby projects

If you are doing some hobby projects based on Linux and you wish to learn more about the Linux environment, there is always the approach of using some example application, modifying it and if you get stuck then going to stack overflow and post questions and move to the next step. But I don’t recommend it for complete beginners as I myself did it and I did not learn so much and wasted a lot of hours in the process.

The one thing that I actually learned is that the problem with this approach is you would not know “what to google” unless you understand the basics of the technology you are working on!

Hence the path I recommend will include 2 steps that involve a little bit of learning.

STEP#1: Learn to work on the Command Line Interface

Step#1 is to learn the basics of Linux, which involves reading and understanding how to work with the Linux terminal since whatever your current and future project maybe, it will involve some work on the terminal.

Recommended Online Course: Linux Mastery: Master the Linux Command Line in 11.5 Hours  (link to udemy)

Since you are mainly interested in doing this as a hobby, the above course is the most suitable for you as it covers the basics pretty strongly, so that next time you read some code on stack overflow, you will get a good idea of what the code does. 

Estimated time to complete: 20 hours

The next step depends upon the type of project you are doing and what part of Linux is being used in that particular project. Hobby Linux projects can be broadly classified into the following categories

  1. Making some Linux applications
  2. Making some networking related Linux Projects
  3. Adding custom hardware
  4. Making Linux run on some custom hardware

STEP#2: Make some Linux applications

If your project involves creating an application that runs on Linux, then obviously you would need to sit and write code for it. But which language to choose depends on which language you already know and which language you are interested in learning. For complete beginners, I would recommend Python.

Recommended resources

Recommended Books

Head first Programming (link to amazon)

Before you start learning python programming, it’s a good to read the above book to get a feel for what programming is and how its accomplished, especially if you are a complete beginner. 

Head first Python (link to amazon)

This is a good book for self-teaching as it makes you think how each step works and as the philosophy behind these “Head first” books says, more you understand the less you need to memorize!

Recommended course: The Python Mega Course: Build 10 Real World Applications (link to udemy)

This course lets you build real-world applications as you learn python hence I guess it’s a good way to learn it since you wish to do it as a hobby.

Estimated time to complete: 80 hours

Then once you are comfortable with writing code then you can move onto learning to make applications on Linux.

Making some networking related Linux Projects

If you are interested in making some networking Linux applications, say running a home media server or a NAS, or just some file sharing service, the first step is to learn about computer networks in general. Once you are comfortable with the whole idea of networking, you can learn the Linux implementation of networking.

Recommended books

Computer Networking: Collection Of Three Books For Computer Networking: First Steps, Course and Beginners Guide. (All in one) (link to Amazon)

This is a rather short read at just 150 pages and it is a good book to get yourself started on learning about computer networks. Once you have read and understood the concepts presented in this book, you will be ready to understand the Linux implementation of these concepts and you would be able to work on your hobby projects.

Adding custom hardware

If you wish to add some custom hardware to talk to your Linux machine, you should gain some knowledge about how the Linux kernel works and how to add your own driver modules to it. In addition to that, you need to learn how to write Linux drivers. You also need to have a working knowledge of operating systems.

This is going to be not a hobby project as it will test your skills and consume a lot of time. The path I would recommend to people wishing to accomplish such a task is the same path that I recommended for category 1 people To improve your knowledge and get proficient in computer science and Linux above.

Making Linux run on some custom hardware

IMHO this is not a hobby project for a complete beginner, as for a Linux professional it will take maybe a year to complete this kind of a project successfully as this involves compiling the kernel for the specific processor architecture and then making all the necessary drivers to talk to the hardware and then writing the applications on top of that to have a completely working Linux machine.

The path I would recommend to people wishing to accomplish such a task is again the same path that I recommended for category 1 people To improve your knowledge and get proficient in computer science and Linuxabove.

Alright, I guess that covers all the paths, I hope you found this article valuable.

Feel free to share it with your friends and colleagues!

If you have any questions or suggestions you can also email us or contact us through this link!

Photo of author
Editor
Balaji Gunasekaran
Balaji Gunasekaran is a Senior Software Engineer with a Master of Science degree in Mechatronics and a bachelor’s degree in Electrical and Electronics Engineering. He loves to write about tech and has written more than 300 articles. He has also published the book “Cracking the Embedded Software Engineering Interview”. You can follow him on LinkedIn

Comments are closed.