What should students learn?

Hi everyone. I was invited to speak about the current state of IT and what students should learn to get into IT and its commercial sector. After the speech, I’ve decided to write an article, hoping someone else can find this useful.

Here, I will explain the basic things you need to know to get a job. I will give you a direction, then you will have to learn on your own.

I make a living as a Developer Advocate at Onix-Systems and have more than 5 years of experience in commercial sector. Developer Advocate acting as a steward of open-source projects that the company starts or sponsors, including performing code reviews, contributing code to the project, and helping drive the direction of that project. Writing public, open-source libraries to wrap APIs for the company’s products and helping to integrate those into existing open source projects that might make use of them.

Let’s start with a simple question — what kind of directions are there in IT at the moment? Obviously, IT has a multitude of directions, but for the sake of simplicity, we will discuss the most popular ones:

  • Backend Development;
  • Frontend Development;
  • iOS Development;
  • Android Development;
  • Embedded Programming;

Necessary qualities and skills

Firstly — patience and ability to continuously learn new technologies and techniques. As soon as you stop learning new technologies, you start to loose your value as an employee. As a result, you may easily be replaced by someone else who’s more adapted to current development technologies.

Secondly — logical thinking. If you can’t structurize information in your head then programming might not be for you. You should have a predisposition to algorithms and math. If I asked you to explain how you walk, I would expect to hear all the details about what it takes to walk.

Those were the basic qualities you should have to be a programmer. Now let’s talk about tools that you absolutely need to know to be efficient at programming.

Linux is a Unix-like and mostly POSIX-compliant computer operating system, assembled under the model of free and open-source software development and distribution. The defining component of Linux is the Linux kernel, an operating system kernel. Almost all workstations, servers, mobile phones, etc… are working under Linux\Unix operating systems. When you know this operating system and know how to use it, it helps a lot in getting a job.

Terminal. The function of a terminal is confined to display and input of data; a device with significant local programmable data processing capability may be called a “smart terminal”. Your knowledge of terminals gives you a big plus. For me, and most other developers for that matter, terminal is essential for work. It helps you automate a lot of things that would otherwise require a lot of clicking, not to mention the overall control of the system you have with terminal.

Git is a widely used source code management system for software development. It is a distributed revision control system with an emphasis on speed, data integrity, and support for distributed, non-linear workflows. Long story short — Git is used by 47% of all developers (at 2014). This system helps you store your source code, record changes history and lets you view that history when you need to know when a change has been introduced, which can be very helpful when fixing bugs. I can recommend this book for a quick start.

Things described above are very important in IT and you absolutely must know them. We can go further and read about specific cases in different IT directions now.

Backend Development

Backend Development it’s a part of web development. Right now, you are reading this article, but… where does medium get it from? Where is it stored? This is where backend comes in. The backend of a website consists of a server, an application, and a database. A backend developer builds and maintains the technology that powers those components which, together, enable creating the user-facing side of the website to even exist in the first place.

In order to make the server (application), backend developers use server-side languages like Ruby, Python, Java, NodeJS. When you need to store some information, databases come in handy. MySQL, PostgreSQL, MongoDB, Neo4j are used to find, save or change data and serve it back to your application.

Backend applications have become a standard way of trading data between mobile devices, websites and other systems which are connected to your backend application.

If you prefer to manipulate data, then your choice is backend development.

Frontend Development

Frontend Development, also known as client side development is the practice of producing HTML, CSS and JavaScript for a website or web application so that a user can see and interact with them directly. All the buttons, menus, etc… you see in your browser is frontend development.

The challenge here is that the tools and techniques used to create the frontend of a website change constantly and so the developer needs to constantly be aware of how the field is developing (continuous learning). Also, it’s complicated by the fact that users now use a different browsers, operating systems and different devices.

There are several tools to help you produce HTML, CSS and JavaScript.

  • HTML: Handlebars, Jade, Mustache and many others, just google “template engine” and find which you likes more;
  • CSS: PostCSS, SASS, LESS which extend CSS language, adding new features that simplify writing CSS. You can use CSS frameworks as well, like Bootstrap or Foundation.
  • JavaScript: TypeScript is a subset of JavaScript that compiles to plain JavaScript. Babel allows to you use the next generation JavaScript which compiles to plain JavaScript guarantee work on older browsers. Frameworks that you can use at the moment: React, Angular.

When you have all the tools that do it, you will also need to know module bundlers. Module bundlers are responsible for building the distribution from your source code, ready to deploy. Here are some of the most popular bundlers: WebPack, Browserify, RollUp.

It’s a hard direction because it changes constantly, but if you like to build things that other people can see and interact with it, then your choice is frontend development.

iOS Development

There is a lot of challenges but not in the learning curve or something like that. The reason is simple. If you want to write applications for iOS, you need to buy iPhone, iMac or MacBook which cost a lot of money. Of course, you have a solution if you don’t have them — hackintosh, but remember, there is no way you can do it legally on other platforms.

Next step is to install Xcode. Xcode is an integrated development environment (IDE) containing a suite of software development tools developed by Apple for developing software for OS X and iOS. You have no possibilities to choose other IDEs or text editors as it can be done in Web Development.

Objective-C and Swift are main languages you can use to write the iOS applications. Preferably Swift, because it was released in 2014 and has many features against Objective-C which was released in 1983.

You can use frameworks to simplify the development process. Apple has one which is called Cocoa Touch. Cocoa Touch provides an abstraction layer of iOS and primarily written in the Objective-C. Cocoa Touch allows the use of hardware and features that are not found in Mac OS X computers and are thus unique to the iOS range of devices.

Android Development

As in case with iOS Development, Android Development needs specific toolsets to write and run your code on Android. Simpler part here is that you don’t need to buy high-priced devices to code for Android. You can have any Android device and any operating system (Linux, Mac OS X, Windows).

Write code in any IDE or text editor you want, but it’s simpler to start with IDE that was made specifically for Android Development — Android Studio. In case of using this IDE, it automatically installs all the dependencies and configure everything that’s needed to start coding applications right away.

Java and Kotlin are programming languages you can use to write the Android applications. Kotlin is the best choice for Android as Swift in iOS, which was released in 2016 and has many nice features. I think, Kotlin will replace Java in nearest future.

Embedded Programming

Embedded Programming is a really hard one and it’s not as popular as other directions, but it really interesting (for me). Embedded Programming is programming of the embedded system — computer system with a dedicated function within a larger mechanical or electrical system, often with real-time computing constraints. It is embedded as part of a complete device often including hardware and mechanical parts. Embedded systems control many devices in common use today. 98% of all microprocessors are manufactured as components of embedded systems.

There is no common practices to start with embedded programming, because there is no standard to it. You need to know many things, starting from “How do microcontrollers work?”. But I can try to give you some basic things you need to know.

Assembler and C are languages widely used in system programming and embedded programming. You definitely need to know them if you want to go into embedded programming.

You can buy micro-controllers like Tessel or Espruino for your first projects. They support NodeJS as a main language, so that you can try to make something with NodeJS and then go further to Assembler and C.

Epilogue

I tried to cover all the popular IT directions at the moment of writing this article. I hope it will help you to choose your “side”. If you have any comments/improvements, please leave a note and I’ll update it.

Thanks Konstantin Batura for helping me edit this article.


Eugene Obrezkov, Developer Advocate at Onix-Systems, Kirovohrad, Ukraine.