Let’s skip the reasons and motivations that make you decide to be a developer; it may be because you’re interested, or it’s just about money, or perhaps life is pushing you to it. This post is intended to provide you with some guidelines to navigate this road.
Developers are likely the heroes in the games you play. What skills should that hero have? How do you level up? Which criteria should you allocate points to after leveling up? Which bosses should you defeat? The most important thing is whether you understand the story behind the game you are playing in order to enjoy it!
Let’s start with the story of a developer.
1. Software Developer World Map
Developers, specifically software developers, create applications to solve real-life problems and serve human needs. Finding these needs is a difficult task as well and deserves to be discussed in another post.
There are many kinds of applications. The names of application types depend on where they run and how they run. It is up to you to choose to follow one or many.
- Desktop application : Applications that run on computer / laptop with UI for user to interact with
- Web application : Applications that put in a server and you access by using web browsers. There is 2 parts of a Web application called Client side & Server side. Technology used in each side is different too.
- Mobile application: Applications that run on mobile phones now include Android and iOS.
- iOT application : Applications that run on multiple devices connected to each others in some network model
Imagine this is the hero class selecting phase of the game you are going to play. Let’s thank God because you don’t have to name your character :)). However, each kind of application requires you to use appropriate toolsets.
There is another kind of developer class defined when the client-server application model is dominant nowadays:
- Front-end developer: Is one who takes care of the Graphical User Interface (GUI) for users to interact with. It includes Desktop Applications, Mobile Applications, and the client side of Web Applications.
- Back-end developer : Is ones who take care of something like system architecture, database, etc, things that are not visible to normal users.
To create any application, you are required to know:
- A programing language for your kind of application
- An Integration Development Environment (IDE)
- A framework or libraries for your kind of application
- A database for your kind of application
- A package management tool for your kind of application
- Know how to deploy/release your kind of application
- Know how to test your applications
1.1. Languages
Programming language is your weapon. It will determine what kind of applications you can build. Below are the most popular languages at the time of this post.
- Java : well-known as a cross platform language, Java can be used to create desktop application, server-side of web applications, Android applications
- C#: for desktop applications on Windows
- Javascript, HTML, CSS : This combo is essential for client-side of web application
- Python : good for build tools but also good to build Web application
- NodeJS : built upon Javascript, well-known for server-side of web application
- Kotlin : well-known for Android development and as a replacement for Java in mobile world
- Object-C, Swift : well-known for iOS development
- PHP : well-known for decades in web application development
A lot of languages, right? Everyone wonders which is better than the others. The answer is none. Each language has its own benefits and use cases that we will discuss later. Nowadays, it is very normal for a developer to use more than one language.
1.2. IDE
IDE (Integrated Development Environment) is the software built for developers to make their lives easier when dealing with common problems while writing code:
- Remember syntaxes
- Remember boilerplate codes
- Command lines
- Compile code, debug & run
- Set up environment
- Search usages of a function or varible
- Search a piece of code / text among a bunch of files in a project
- Organize project
- Format your code for readability
- ….
The most of IDEs provide features like code suggestion or auto-complete that help you type faster, more correctly, and more readably to avoid most typos. They also have excellent text searching features that are really helpful for troubleshooting problems with your code. Some advanced IDEs can even suggest what you need to do next based on what you are doing. And debugging support—this will save you a lot of time. Sometimes you have no idea what you are writing; trust me :)), debugging is the only way to figure it out. Below are the most advanced IDEs currently:
- IntelliJ : the best at my point of view, but it is not free. But you may find some crack somewhere :))
- NetBean : Free, very equal to IntelliJ
- Visual Studio : Free, most popular IDE, usually used in academic courses
- Android Studio : Dedicated for Android developing
- XCode : Dedicated for iOS developing
- …
Learning to use an IDE may take time, but it is worthwhile. It helps you be more efficient and look professional too.
1.3. Framework / Libraries
Language is a weapon, but knowing how to use it deadly is important too. Imagine it’s likely you need to learn kung-fu even though you already have arms and legs. A framework is built by top-level developers and is embedded with programming experience spanning decades. It provides ready-to-use structural solutions for very common programming problems, a kind of best practices. A little different from a framework, a library is a set of tools that helps you solve programming problems but is not strict in a predefined structure like a framework; you are the one who is responsible for that structure. Below are some of the most popular frameworks/libraries nowadays. The popularity here depends on demand in the job market: (the order has no meaning)
- JavaFX : built from Java, for Desktop application
- .NET : built from C# ,well-known good to build Desktop application, but it also can build Mobile Application, Web Application and iOT application too.
- Spring : built from Java, for server-side of Web application
- ExpressJS : built from NodeJS, for server-side of Web application
- ReactJS, AngularJS, VueJS : built from Javascript, for client-side of Web application
- Android Studio itself contains a framework to develop Android application
- XCode itself contains a framework to develop iOS application
- Laravel : built from PHP, for Web application
- Django : built from Python, for Web application
1.4. Database
Database to store data. Depending on your purpose, it can be the most advanced storage technology or just simple files.
Below are some popular database technologies to learn about for web application development:
- SQL : Typical relational database. Relational database means it requires data to be stored in a structured way, with clear relationships between them. SQL offers strong transactional queries (that we will learn later) that ensure consistency of data. SQL is a good candidate for applications that prioritize data consistency over other features (like banking systems, accounting systems, for example).
- MongoDB: Typical non-relational database (NoSQL), easy to scale but requires extra setup effort. MongoDB can be a great choice if you need scalability and caching for real-time analytics; however, it is not built for transactional data. MongoDB is frequently used for mobile apps, content management, real-time analytics, and applications involving the Internet of Things. If you have a situation where you have no clear schema definition, MongoDB can be a good choice.
- PostgreSQL: like SQL, but more advanced with additional features.
- Couchbase : NoSQL type, with Sync Gateway allowing to synchronize data between server and client side seamlessly. If you need an application with realtime data update, Couchbase can be a good choice.
- Cassandra : NoSQL type, supports scaling out-of-the-box. If you need a database that is easy to set up and maintain regardless of how much your database grows, Cassandra can be a good option. If you work in an industry where you need rapid growth of your database, Cassandra offers easier rapid growth than MongoDB.
- …
Databases for web applications are usually hosted on a dedicated server for the best performance, serving hundreds to millions of requests per minute.
Different from web application databases, client-side applications like desktop applications or mobile applications require more lightweight solutions to store data locally. Data that client-side applications usually store includes application settings, user preferences, static data, and cache data from a remote database (if it has a server side), etc.
- SQLite : SQL type
- Realm : NoSQL type and faster than SQLite in common operations
- Couchbase Lite : a counter part with Couchbase database in server side, with builtin sync features
- …
Thanks to the community, each language today has its own libraries to interact with databases. Unlike programming languages, you should know more than one type of database, at least one in SQL and one in NoSQL, to explore different ways to solve a problem.
1.5. Package management tool
Building an application means solving a lot of problems. Thanks to the community and the world of open source, most of the problems are solved and packaged out there. When you build an application, you always need a few or many of them.
To manage the structure of the project and to bring more autonomy to the application-building process, each language usually has its own package manager tool(s) to:
- Install/Update/Uninstall packages
- Create a building cycle of the application for continuous development and integration
- Manage project structure in consistent way but easy to expand too
Below are some package management tools for each language:
- For Java application : Maven
- For Android application : Gradle
- For Javascript application : NPM
- For HTML & CSS : Bower
- For PHP application : Composer
- For Python application : pip
- For C# : NuGet
1.6. Deploy/Release process
This is the critical phase of building an application. It is bringing what you built to the real world, where people can access it and use it. It depends on the kind of application that we use the terms “deploy” or “release.” If you are building a server-side application, we use the term deploy because you are going to send your application to a server to execute it. If you are building a client-side application, like a desktop app or mobile app, we use the term release.
- Android & iOS applications have their own release processes that you can find in official documents. IDEs usually support the application release process. Then, you have to learn the process for uploading your applications to the Play Store (for Android) and the Apple Store (for iOS).
- The desktop application is the easiest; the version you build during development can be used as the release version already. Your next task is to introduce it to your customer.
- The deployment process is more complicated. Because the server mostly runs on Linux OS nowadays, it is highly recommended to learn how to operate a Linux OS. At the very least, you should know how to connect to a remote Linux server via SSH and execute command lines when a tutorial instructs you to do so. More details about Linux will be in another dedicated post. The deployment process depends on the language or technology you choose, as each has a different deployment process. We will mention them in other posts on a case-by-case basis.
1.7. Test your application
Last but not least, testing your application before delivering it to the real world is an important phase that ensures you don’t disappoint people or lose customers.
The most basic technique of testing is manual testing. Yes, you try your application in every case and in every way to make sure it does not crash.
The more advanced technique is automation testing, where you write code to simulate every use case with your applications. This method is more professional and efficient, but it also requires more skill.
In automation testing, there are a few subtypes as well. I will name here only the kinds I mostly use:
- Unit test : is to test the correctness of functions or a set of functions.
- Integration test: is to test the correctness of functioning for a group of components in your application. In an integration test, you have to simulate every action in the UI to interact with the application.
To learn about automation testing, below are some libraries for conducting tests in various languages:
- JUnit : Unit test library to test Java program
- Chai & Mocha : Unit test library to test Javascript program
- PHPUnit : Unit test to test PHP program
- unittest : Unit test library to test Python program
- Selenium : great tool to do integration test for Web application. It is a browser basically but controlled by developers
- AutoIt, Appnium : great too to do integration test for Desktop application
- Espresso : included in Android Studio, to do integration test for Android application
- XCUITests : included in XCode, to fo integration test for iOS application
2. Wrap it up
You may be concerned about why the iOT application is rarely mentioned in the above lists. It is because the iOT application includes many applications across various devices. Depending on the type of device, you can choose any of the tools mentioned above to develop. For example, if you have a phone to control the electric circuit in your house, you will need to develop an Android application and a Java application on the device controlling the circuit, such as a Raspberry Pi.
To wrap it up, I note down below some popular skill sets currently available for your upcoming hero to choose from:
| Application | Technology Stack |
|---|---|
| Web application — Java | Linux, Java, Servlet, Maven, JUnit, Selenium, ReactJS, HTML, CSS, PostgreSQL |
| Web application — JavaScript | Linux, NodeJS, ExpressJS, NPM, Mocha, Chai, HTML, CSS, ReactJS, Selenium, MongoDB / Couchbase |
| Web application — PHP | Linux, PHP, Laravel, HTML, CSS, JavaScript, PHPUnit, Selenium, SQL / PostgreSQL |
| Android application | Kotlin, Gradle, Espresso, Realm / Couchbase Lite |
| iOS application | Swift, XCUITest, Realm / Couchbase Lite |
To be proficient in any skillset is time-consuming; it can take you years, but don’t worry; most companies don’t require you to master all of this before applying for a job, unless you are applying for a senior position. Most of the time, people master their skills through their jobs. So keep learning and stay on the right track.
Build – Secure – Evolve with the-tech-lead.com
