The field of software engineering is vast and there are countless tools and technologies that are available at the disposal of developers. Some tools are more relevant to developers in specific fields, however some tools should be adopted by all regardless of their background.
The single most common factor amongst developers is the activity of writing code. Focusing on this core aspect of development, we can identify some tools and technologies that every software engineer should know about regardless of their field.
This list narrows down the very basic tools every developer should be aware of and if adopted, will improve the efficiency in their ability to write code.
Let’s take a look at 5 fundamental and core tools and technologies that every software engineer should know in 2021.
1. Versioning Control System
Versioning Control Systems (VCS) are technologies that provide a means of managing the files that contain code. Simply put, a VCS allows tracking of changes to your source files for easier comparison between revisions.
Having a versioning system in place is seen as an absolute necessity in ensuring proper control and maintenance of the source files that make up a software project.
Git is the most popular versioning control tool with Subversion and Mercurial being other alternatives.
Git allows handling of files in a convenient manner and provides functions such as tracking logs, version labelling, reverting, branching, and several other functions that allow management of source files. All files managed under a git system are placed under repositories and the concept of git repositories represents the directories where files for a project are stored under.
When working with git repositories it’s also ideal to have a remote server that can act as both a central point and backup for individuals or teams to access their git repositories. GitHub, Bitbucket and GitLab are the most popular git remote repository management servers available.
Versioning control doesn’t just have to apply to source code. Use the same tools to track your project documentation such as READMEs, release notes, spreadsheets, API references and any other files that are relevant to your project.
If you work in a development team, the need for a system that will properly track changes made by individual members becomes increasingly essential. A tool like git provides various functions such as forking and pull requests that provides a process to prevent any clashes that will occur from several developers working on a single code base.
A versioning control system is first on this list of tools and technologies that every software engineer should know about for a reason. If you’re not currently using Git or some system that allows you to manage your project files, then now is the time to start!
Our article What is git? An easy introduction will provide you with a starting point in understanding how git works to manage your project files.
2. Code Editors
As coding is all about writing code, code editors form part of the fundamental tools and technologies that every software engineer should know about.
A code editor as its name describes, is a text-editor application that provides a means to type in the code that makes up a software program.
However, a code editor should be more than just a text editor. The right code editor will also provide supportive functions that will make the activity of writing code simpler.
Such of these helpful functions include:
- Syntax highlighting – The use of different colours and text formatting on key words and phrases of a programming language to help in the reading and interpretation of source code.
- Intelligent code completion – Provides auto completion of variable names, functions and keywords to speed up the process of writing code.
- Cross referencing – powerful search functions allowing navigation between variable references, function definitions and other references in the code base.
- Integrated terminal – Built in access to the command line of an environment used as part of the code development.
- Debuggers – A tool that aids in the detection of errors and bugs in a program.
Code editors are often referred to interchangeably with IDEs (Integrated Development Environments). Code editors and IDEs have mostly similar features with IDEs tending to have more powerful and self-contained features and toolkits to support all development stages of a software project.
Some popular code editors and IDEs to consider using are VSCode, Eclipse IDE, Sublime Text, Emacs, Vim and Notepad++.
Several IDEs and code editors are also optimised for development using a particular programming language or environment. For example, PyCharm is an IDE for writing programs using the Python programming language and Android Studio IDE is for application development on Android platforms.
Scripting is a concept in software engineering that usually refers to programs written to simplify execution of functions in an automated manner.
Scripts are written through scripting languages and technologies. While most programming languages can technically be used to write scripts, there are some languages which are more ideal for scripting purposes and are referred to as scripting languages.
Some scripting languages and technologies include Linux Shell, PowerShell, Python, Perl, VBScript, Tcl and Lua.
A common characteristic of scripting languages is their design to be like ‘glue code’. This design provides a means of putting together various software components. Such scripts can be written to call multiple programs and utilities which may or may not be compatible. The script in this case acts as the ‘glue’ between each component to allow each program to interact with the others.
Scripts can be written and executed without being compiled which speeds up the process of development programs. Scripts are written typically for the purposes of automation, simulation and testing.
Developers tend to shy away from documentation but they should be seen as a necessary part of the development process.
Documents in this case can be seen as a tool that captures as much detail as desired in each stage of a software project. A project can have one, two or tens of relevant documentation depending on its scale and complexity.
For software engineering teams, each contributor to a project has a role to play in ensuring the core aspects of their activities are captured in some form of documentation.
For the architects, this can be making sure the system design and requirements are clearly laid out in design documents and flow charts. For the developers writing code, this can be making sure source code documentation such as API references, READMEs and release notes exist in the source code repository. For validation engineers, this can be having a list of test cases and scenarios and generating test reports that can be shared with the rest of the team.
The documentation itself can exist in many forms such as word documents, spreadsheets, checklists, UML (Unified Modelling Language) diagrams, Markdown files and even as videos.
For more detail on how to handle documentation see our post on 5 Types of software documentation you need for your next project.
5. Task and project management tools
Developers tend to treat tasks as projects and having a task or project management system in place is another tool that should be part of every developer’s toolkit.
Regardless of whether or not you work in a project management role, having a system in place to manage all stages of your software project completes the process of proper tracking of your development activities.
The process of developing software programs is more than just writing code. Ideally, the output should be a program that is not only functional but also scalable, maintainable, documented and useful for the end user.
To ensure the result of a project meets these conditions there are other activities necessary in the creation of software programs which can include:
- Market research
- Requirements gathering
- Specification writing
- Design and architecture
- Feature lists
- Bug tracking
- Regression testing
- Release management
Using a tool that can support the workflow and management of these activities will benefit every developer regardless of their role in the project.
Some management platforms that are suited for software engineering individuals and teams include: Trello, Notion and Jira.
For a closer look at how using these platforms can help with your development tasks, see our article on using Trello to organise your dev projects.
We’ve highlighted the most basic tools and technologies that every software engineer should know about. If you’re not aware of these items, it’s time to seriously consider adding these to your everyday toolkit!
Do you know about any other tools and technologies that every software engineer should know about? Share them in the comments!
See other articles you may be interested in below: