Software Developer Checklist – basic things that every software developer should know

This article is intended to list & discuss the basic things that every software developer should know. Earlier I decided to write a post to discuss about the useful tools and technologies which will help web developer (basically I’m a full stack web developer). When I’m collecting those information, I have got an idea to make a quick checklist of the basic things that every developer should know (so that I post it now).

Is this an unique article? Of course not you can find similar kind list in hundred of post in internet. But this is a article, made up of a list with useful tools and technologies using the knowledge which I have acquired from the past few years (technically 4 years as per experience). OK, let’s jump into list. The items are not listed based on its importance, so feel free to traverse to read any section.

Version control systems

  • The management of changes to documents, computer programs, large web sites, and other collections of information. To
    • Management of code
    • Create repositories, branches
    • Commit code, merge code

Version control is a system that records the changes to documents, computer programs, large websites and other collection of information.

In Software Engineering, version control is a kind of practice that tracks and provides control over changes to source code. When we are working as a team with multiple people in the software development, the source code will undergo multiple version. Version control systems allow multiple developers to edit same file a the same time.

Developers can retain multiple copies of different version of programs or files, and label them appropriately. Version control systems are not limited to software development alone, it can be used anyone who wish to keep track of revision of their files.

How to write

Writing is a key skill for software developers. To write

  • Source code in standard format
  • Business E-mails
  • Commit message
  • Release notes

Content writing is a most difficult and interesting skill. It doesn’t mean every software developer have to be great author who picks magical words to write the content. But at the same every developer should learn how to communicate with clients/team with precise and neat language through business mails.

In the case of software engineer life, writing topic covers the writing standard & readable code as well. The code should be readable for anyone in team to understand the concepts in less time.

Writing proper commit message to every commits happen in project via version control system. The other developer in the team should not spend his time much to understand the commit by digging into repository codes, they should probably get a short and crisp description what the commit is all about.

 

Mostly Software developer are supposed to involve in the process of creating documentation to explain the functionality of system. The documentation may be given to clients or documentation will be used to share information across the team.

Usually, release notes will be shared to clients and top management to provide the information about the changes which is recently happened in the software system. Based on release notes only, the client can able to explore various new features available/ bug fixes happened in system. They can’t see our comments in source code or commit message in Repositories. So content writing is an important skill in preparing release notes to make clear statement on changes happened in system.

Using libraries

In Software Engineering, a library is a collection of non-volatile resources used by computer programs. Mostly libraries include clear documentation, help data, pre-written code samples, configuration data.

  • Using the common feature
  • Using the existing feature

From evolution of programming, the common terminology used in rise of every programming  language is reuse.

Reusing the existing feature is an best practice that most of programmers and technical books recommending. Using libraries is one of the best practice on software development. For example, if you want to deal with some of the mathematics operation like square root, finding Floor/Ceil value of number. You don’t have to create your own methods from the scratch. Reinventing a wheel is not always a best practice. To do those operation, you can probably use some of the existing libraries (choosing suitable library is another big topic, we can discuss that in some other post).

At the same time, you don’t have use the libraries always to done all your actions in your system. If time permits you can create your own custom common library which can be used by other teams in organization as well.

We have to gain proper knowledge and information about the library before using it in our projects. You can gain such knowledge over experiencing by handling multiple projects in your career.

Regular expressions

A regular expression, (regex or regexp ) is in theoretical computer science and formal language theory, a sequence of characters that define a search pattern. Usually this pattern is then used by string searching algorithms for “find” or “find and replace” operations on strings.

  • A sequence of characters that define a search pattern, mainly for use in pattern matching with strings, or string matching, i.e. “find and replace”-like operations.
  • Example: (?<=\.) {2,}(?=[A-Z])

regex.png

In the above image, we are matching a particular pattern or sequence of text from the paragraph. Regular expression will be used by developers in text processing and search algorithms.

Scripting

  • A programming language that supports scripts, programs written for a special run-time environment that can interpret (rather than compile) and automate the execution of tasks that could alternatively be executed one-by-one by a human operator.
  • Example:
    • Renaming the files in a particular directories with the names of files in another directory.

To do particular small level operation in the daily tasks, scripting will be used. Python, JavaScript will be used to perform some quick operations in day to day works. To perform some simple task we should not depend on setting large development environment, those operation should be done by using some scripts or bat files.

Database

Database is a systematic collection of data. Databases support storage and manipulation of data. Databases make data management easy.

  • Store, retrieve and organise data
  • Managing large amount of data

I would recommend every software developer to learn basic knowledge in handling database. Even though if we are not working with database level changes in the software system, it is important have a basic knowledge in database. Database is highly used to manipulate the data. SQL, NoSql or Graph database; the developer should decide and learn at least one database system based on their needs.

Development tools

Using suitable tools is a success factor of the project.

  • IDEs
  • Editors
  • CLI
  • IIS

In the software life cycle, we developers will deal with various tools to perform and complete our task. Developers should acquire some good knowledge in choosing and working with tools.

We will deal with various tools like SRS creating tools, IDEs to code, Editors to quick edit or prepare documentation, CLI, Compilers, Build system, Continuous deployment etc. So every software developer should be familiar with at least one tool which involves in each module in the complete life cycle of software development.

Debugging

Debugging is an art, if you know debugging.

  • Ability to track down problem
  • Stepwise debugging
  • Using print statements
  • Logging the errors

To me debugging is an very interesting part of development. Debugging will help us to learn more new things which is not available most of the top rated programming books. It is a long chain process of continuous learning process.

Debugging will become very hard if you are dealing with someone program which has poor documentation or unmanageable code.

Each and every IDEs come up with some new techniques to track down the values or state of program during debug time in its every release. Simply, debugging is understanding the various state of program with various inputs in different intervals. The formal word “debugging” means identify and remove errors from (computer hardware or software).

Defensive Programming

Defensive programming is a form of defensive design intended to ensure the continuing function of a piece of software under unforeseen circumstances. Defensive programming practices are often used where high availability, safety or security is needed.

  • It is a form of defensive design intended to ensure the continuing function of a piece of software under unforeseen circumstances.
  • Story:
    • On September 21, 1997, a division by zero error on board the USS Yorktown (CG-48) Remote Data Base Manager brought down all the machines on the network, causing the ship’s propulsion system to fail.

Reference: https://en.wikipedia.org/wiki/USS_Yorktown_%28CG-48%29

Making the software behave in a predictable manner despite unexpected inputs or user actions. Developer should sure make that the modules which we code should handle most of exceptions that can happen. Overly defensive programming however introduces unnecessary code for errors impossible to even happen, thus wasting runtime and maintenance costs. There is also the risk that the code traps or prevents too many exceptions, potentially resulting in unnoticed, incorrect results.

Participation

A good way to learn something is to teach or speak about it.

  • Participating in online programming forums
  • Will programming forums help us in learning ?

If you never participated in any online programming forums, just go and get started. This is the right time to start, there are thousands of people waiting for you to discuss various topic which you can answer.

Will programming forums help us in learning? Short answer, Yes.

We can’t get solution for all problem from the official documentation or support team of product. The online forums are the ones which helps developers to discuss about the various problems throughout the world.

 

I think I have covered some of the basic things that software developer should know based on my experience. It would be nice if guys have any item to be add to this list. Please describe those in the comment section below. Let’s have some healthy discussion. Participation is a biggest part of learning.

 

Happy learning!