I have been involved in the software industry for the last two decades. But given that the field of high tech is simply too vast, i cannot even say for certain that I have gone through as much as I could. New platforms come out every year, another pattern emerges, and a million software versions are rolled out everyday. This is the tough reality that all software developers have to go through every single day of his working life.
In this article, we are going to talk about the things that are essential to everyone vying to join the ranks of the noble software developer profession. Each tip in this guide will have a little dose of my own personal touch from when I was still starting out as a developer. Particularly, when I was creating my first software application an Auto Repair Shop Management Software.
The mere mention of these words can terrify some into tears. And should you be one of those people, then you have all the rights in wanting to become a software developer. Because these concepts need not be your friends but your superiors. These are sacred philosophies and should be treated as such.
With that out of the hand let us discuss exactly what these two monsters are. First of is data structures. Data structures is simply a fancy way of saying how programmers wish to see the information that they are using in their programs. A data structure can basically be anything. As Pythagoras once said, everything can be represented by numbers. And he was, and still is right.
Pythagoras was way ahead of his time and the computers are the timeless proof of this. The rules dictating how data structures should be stored in a computer is called the class construct. This construct varies from language to language but will usually contain three parts. First, the functions, or the definitions of what the data structure can do. The member variables or where the specific piece of information is stored. And the events which are simply functions that the data structure itself performs if a criteria is met.
Instances of classes are called objects. These are the specific data structure that follows the class definition set by the class. For instance, a data structure can be a car, while the object could be a specific Toyota that your dad owns.
While working on my auto repair shop management software, I had a lot of great deal working with data structures. The classes allowed me to represent the information in my database into things that actually makes sense to humans. For instance, one of the requirements was to keep an inventory of all the tools that are used in the shop. This meant that I had to make a class tool, which has specific information for it kept in member variables such as the type of tool and the size and purchase price.
Algorithms on the other hand is what drives the information that is passed in and out of your system. It can range from simple ones which are simple assignment of values from the database or it can be quite complex as in encryption and advanced graphics. Some say that algorithms contain the meat of the development but I beg to disagree. Though complexity is mostly unavoidable especially if you are talking about huge projects, when a project is too convoluted, it usually means that there is something inherently wrong with how the system was designed.
When I was working on the auto repair shop management software, it took me a while to really pinpoint the problem. The feeling was there. It made me feel itchy while looking at the code but there was no way of telling how I could make it better. Then came a few tricks that I have read about while searching for answers. Apparently I was not using design patterns but this is a topic for another discussion.
Every modern development unit, be it a team or an individual needs some form of version control if he or she intends to create a competent software. Nothing really ever rolls out fine on the first try and this is the reason why software has to undergo hundreds up to millions of revisions as long as it is still in development. Some websites for instance release new versions almost everyday, with the major ones releasing hundreds.
At the core of version control is a repository to handle the versioning. The two most popular options are centralized and decentralized. Either way, each and every code will be automatically backed up therefore there would be no chance for you to lose any bit of code that you have written.
In my personal experience while developing the auto repair shop management software, I began using a centralized version control system. This however had a limitation that bothered me which was the inability to take my work home and continue it there. The solution however was simple as I just had to migrate to a decentralized one.
For an aspiring developer, if you are able to choose, you should begin using a decentralized version control. Not only is it much more convenient, it will also allow you to join a community of developers who do not mind sharing their code to others.
At the heart of every worthwhile application is a database system that manages all the information of the software you are selling. Databases are simply multi-dimensional spreadsheets meant to store information for every intent and purpose. Database administration is usually left to the specialists who handle operations but communication with the database through the applications should be mastered by the developer. There are two major kinds of databases which are commonly used today – relational and non relational.