31 August 2013

The Learning Path - Linux@OpenGyan

If you are an engineering student still in college, you may want to spend time in reading through this post. This is little longer and it may change the way you program (of course with your efforts). If you are a professional, i still feel that you have a bit to learn here :-)

I wanted to write this post for past few months and i had to think about designing a series of workshops that would take a newbie of Linux to expert in Linux. What are various areas in Linux that would make you a good programmer in Linux. While you have many programming languages like Python, Perl, Java, C, C++ and many languages, is there a way in which i can pick one or two programming languages and yet become good in Linux.

If you are a computer science student, you would learn "C" programming language. When you complete your second year of engineering, you would have completed probably a theory and a lab on C programming and you will be fluent enough to solve simple to medium complexity problems in C. If you know "C" and wish to become an expert, here are something that we offer from OpenGyan (yep, we are in Facebook too). Once you follow this path, though it is little difficult, you should be good enough to call yourself as budding system programmer.

I have made these in few easy steps so that you can take these as a capsule and set a milestone. All these steps should take you one to two years of consistent efforts and a strong will power. What you sow is what you reap.

Step #1 - Linux Basics and Commands
This workshop will be a curtain raiser for you and it should give you various inputs on why you should be spending time in Linux. You should be able to understand what is Linux, its architecture, why it is successful, Open Source, Linux's history and basic commands to play around with Linux. After this workshop you need to spend some time in playing with Linux like watching movies, playing music, browsing Internet in Linux, chatting with your friends and do whatever you want. Just be a user of Linux.

Step #2: - Linux Shell Scripting
After spending sometime in Linux, this is the baby step of being a little programmer on Linux. If are typing series of commands and by now you should feel it is boring or tedious and you want to automate it. Shell Scripting will help you to automate tasks and don't think it just automates. Shell scripting can be powerful tool when you want to do stuff when you have slept. This is sure first step towards becoming Linux programmer and don't miss to practice. Do couple of mini-projects before moving on to next phase.

Step #3 - Linux Programming (Part 1)
Linux are based on processes and files. In this first and most important part, you will go through series of topics on Linux API. These APIs are the ways to get things done. You will learn how to create a process, how to run a program, manage the process, learn about memory allocation, learn basic operations of File. If Shell scripting was exciting, this one will be more exciting. Again, spend time here and practice with couple of mini-projects. Do all your data strcutures exercise here to learn how to handle memory. This is the time you should write code that causes segmentation fault and when you go to next stage your code should hardly core

Step #5 - Linux Programming (Part 2)
Human beings talk to each other and so are processes. Do not think you will write standalone processes. Think about the scenarios where the processes wants to interact. In this stage, you should learn various ways of inter process communication and understand how processes in a machine interact with each other. Once you acquire the concepts/skills at this level, your journey from here will be very easy and little faster.

Step #4 - Multi-Thread Programming in Linux
Your mobile is quad core now. And everywhere it is multicore. Multi-threaded programming lets you to write high performance and concurrent systems. You will learn what is thread, how to create and make them to execute a task, synchronize them so that they don't block each other's work. If you are good programmer, multi-threading should make you a great programmer (of course with a lot of practice)

Step #6 - TCP/IP Fundamentals
Today, Internet reached everyone's home. Facebook, Yahoo, Google and many other websites/webservices are reality only because of TCP/IP stack. If you want to program network applications or design network elements, it is very much essential for you to understand how TCP/IP works. Whether you want to write a simple chat server/client or complex web application like Facebook, this is where you should start.

Step #7 - Network Programming in Linux 
This stage is very interesting as you will learn how to write your own network applications using APIs provided by Linux. It should take a while for you to master this. In this stage, you will understand what is socket and what are various different ways of communication. Once you are done with this, you will be regarded as full blown application developer on Linux and most likely you will be an expert in "C".

Step #8 - Linux Kernel Module Programming
If you are system programmer or want to become one, after acquiring above skills, i bet the next thing you would like is writing your own LKM. It gives you an opportunity to play with famous kernel - Linux. You will write modules which is part of Kernel. You will compile Linux kernel and be a true hacker. This will surely quench your thirst of becoming a great programmer and highly sought after.

How much time do you think it will take to accomplish the above training path.
If you are second year or have two more years to complete your degree, you have ample time. With your consistent efforts, it should be really a doable task.

Happy Learning

Watch out the space on how can you build same expertise in Java world.