Nowadays we are living in an era where we are bombarded with a large amount of information every day and second. We, humans, are not created to load a huge amount of information and keep up with the pace of the type of information processing that machines do. We definitely cannot never ever be able to process and memorize that level of information on a daily basis.
In our information age, there is no day that you hear new programming packages, software, libraries, and modules are out and people have started to use them. This is even getting worse for newbies and novices that have just started to get into the field. Now the question is how do they know when to learn what.
People with more experiences and knowledge are good sources of expertise that could be consulted. My attitude is to share my knowledge with you as much as possible. I believe if we all know how much benefit is in sharing, we never stop sharing modestly what we learn with others. In this post, I am going to introduce a set of tools that we would need to have to be able to coherently conduct research and developments in daily routines. The goal is we should enjoy what we are doing and the joy is in comfort and ease. So whatever we do, we have to find solutions and approaches that help us improve our workflows and make it fun for us. The key step towards success is to enjoy what you do.
What I introduce in this post is gathered from all over the field. I learned what to use, how to use, and why to use throughout all these years. I am going to begin with Operation Systems (OS), programming languages, shell scripting languages, environment tools such as virtual environments and package managers, and integrated development environments (IDE). There are lots of details about every single one of them. I don’t plan to provide thorough descriptions and tutorials on each, but rather to give a broad and insightful overview. From there, you are on your own to explore and learn what you are missing in your personal skill set; searching the internet and learning what you are not a master of. Your job starts at this point and you can begin the journey of learning each in depth. Let’s get started.
1. Operating Systems
Operating Systems (OS) are at the core of the development setting. It does not matter if you are developing on an office machine, mobile device, cloud servers, or edge endpoints. One thing in common between all is that you have to develop your software on top of your OS. OS is your middle interface to the machine hardware. It is through the OS that you reserve and allocate resources and release them. OS is like the governing system of any computational system.
The main three OS’s are: Microsoft Windows, Apple MacOS, and Linux. If you ask which one is the best for graphics, you will definitely hear MacOS. Similarly, if you ask which one is the best for AI, you will probably hear Linux. Most packages are always compatible with Linux distributions and new updates are tested and released first for Linux.
On top of the choice of OS, there is the Window Manager (WM) that you can choose from. WM is the graphical interface to your OS. It is the counterpart of the shell terminal that I will talk about in the next sections. The community has developed various WM for Ubuntu. Ubuntu is a popular Linux variant. Gnome, KDE, XFCE, I3, and Awesome are a few to name. I generally rely on the platform I am using. If it is my desktop I have learned to configure I3 and I am pretty comfortable with it. It is a dynamic tiling WM and I like the fact about such WMs that the display space is completely used and you don’t need to care about placing one window somewhere that it does not obscure the other. The other cool nerdy feature is that you would need to use Mouse as little as possible. With command shortcuts you can simply move windows and change window layouts.
2. Programming Languages
There are so many different programming languages that are available nowadays. Each has its cons and pros and is more suitable for one particular application. In scientific programming, the number reduces to a handful number of them. Depending on the application requirements, OS, and other factors, you can easily decide on the most suitable languages you can choose from.
For scientific programming particularly in different fields of AI such as general machine learning, deep learning, computer vision, natural language processing and alike Python, R, and Julia are among the most front-end and human readable ones. Since they are all scripting languages, it is just a matter your choice to begin with. Throughout these years, I learned Python is the most used one. You always find a large number of libraries and packages for scientific computing. R might be ahead in statistical programming specifically some years ago. But if you want to invest in learning a scripting language, you definitely want to look into Python. Factors you need to consider are the spectrum of libraries supported, how frequently libraries get updated for that language, and how much the development tool ecosystem has matured. There is no doubt that Python is the leadership in AI sub-fields and domains. You always get the fastest updates and a large number of tools available to try and explore. We should never forget about the role of classic languages like C/C++ and Java. Depending on the task that you have, whether you are developing smart applications for mobile devices or deploying to cloud, you might need to use other tools, languages, or programming frameworks.
3. Shell Scripting Languages
Once you choose your OS, the question is how do you want to interact with the OS. Graphical User Interfaces (GUI) are the most convenient way of User Interaction (UI) and produce the best User Experience (UX). But wait a second! Once you are developing AI platforms and systems, you should most likely forget about GUI’s and stick to the nerdy way of communicating with machines. You are right that it is through shell with some sort of scripting language.
There are again a large number of options to pick from such as Csh, TCsh, Bash, and Zsh. They have much in common. The question is which one you are most comfortable with and has advanced features. I myself learned all four. But nowadays I heavily rely on Zsh. It is amazing with respect to the fancy and cool features it has and the amount makes your life easy. The most handy feature for me is the smart history and auto-completion it had. As always since these things are usually open-source and a flourished community has evolved around them, some framework managers are developed to make life easier. Oh My Zsh is a community-driven framework to manage zsh configuration on your system.
I will talk about the rest in part II.