I have been a Software Engineer for the last 10 years, and have had the opportunity to work on many projects. With each new one, I had to struggle with new challenges. I believe my unique experience, and lessons learned, provide me with the qualifications to present you with, “10 Things That Every Software Engineer Should Know.”
There are many compelling reasons to be a programmer/software engineer:
- The ability to work remotely.
- There is always something new to learn.
- The pay is great.
- Programming is creative, and allows you to take a concept and materialize it into tangible assets and useful products.
Information Technology is a broad field, one which presents new challenges and concepts to learn daily. For a programmer or software engineer, each project presents an opportunity to expand ones knowledge. As such, learning takes time, and for those just getting started there are some basic things that your University education will not teach you. It is the intent of this article to provide you with practical guidance to utilize in your career.
I have listed these in on order of importance, based on my experience. Depending on your experiences, and current role, and future goals, these could take a different order for you.
Every Software Engineer Needs to Know These 10 Things
Understand Your Customer's Business
How can you design and implement good software without understanding its purpose or use? “If you don’t know the WHAT, you can’t decide the HOW”.
Understanding your customer’s business will provide you with better requirements, designs, implementations and tests. The challenge is to select the functionality that creates business value. The better you know your customer’s business, the higher the probability to implement the best system.
It is good practice to define how communication will flow among your teams.
As a member of one team, an individual software engineer usually works with only some tasks of the overall project. Therefore, communication is essential to accomplish those task and the goals of the project. Even if you receive a minor change request in informal discussion, it is still advisable to put these changes through official channels to inform everybody about these changes, and document them for future use.
As a software engineer, you should develop your ability to set clear expectations. Ensure you have up-front conversations with everyone on your team to clarify doubts and make sure what you are doing is correct. You should make it a priority to give clear direction, set expectations, and define objectives.
Programming Languages and Scripting
Databases provide a way to store, access, manage, and structure data. There are many databases such as Oracle, MySQL, SQL Server, PostgreSQL, just to name a few. You should have familiarity with databases and know how to manipulate data and write multiple queries to retrieve the data your application needs.
Cloud computing is the use of various services, such as software development platforms, servers, storage, and software, over the internet. The infrastructure that supports these activities is often referred to as the "cloud."
Today, cloud computing should be a priority for any software engineer or programmer. Many companies host their systems in the cloud, and more and more companies are considering migrating their systems to the cloud in the near future.
The cloud provides organizations with many advantages, such as:
- Increased security.
- Reduced cost.
- Improved scalability.
- Ease of deployment.
- Improved flexibility.
Source control (or version control), is the practice of tracking and managing changes to code. Source control tools provide a running history of code development and help to resolve conflicts when merging contributions from multiple sources. In addition, source control improves the development process, by allowing different teams to work in parallel. This is because you can work with a copy of the main repository, avoiding modification of the original code base, allowing you to commit changes after they have been tested.
Test Your Code
Testing your code is extremely important, and should never be forgotten, nor neglected. Testing your code is best practice, and could save you a lot of time and problems down the road.
There are different tests that you can perform to avoid huge or critical errors/bugs before you deploy your code such as:
- Unit testing (positive and negative scenarios).
- Integration and system tests.
- Checks of performance and memory with real world data.
- Static code analysis.
- Measure code coverage of test.
- Load and stress tests and peer review.
Basic Concepts of Management
Learning the basic concepts of project management will help you to work on teams, and organize your own tasks. These concepts can help you easily identify who is responsible for each task, and what role each member of the team should assume. Working with Project Managers, Scrum Master’s, or Technical Leads could be difficult if you do not understand their semantics and the way of thinking.
A great example of this is task estimation. If you ask a Programmer or Software Engineer, they will typically provide only the estimates for the technical stuff , resulting in an underestimation of the effort. A Project Manager will also consider the effort to design, develop, test, reviews, deploy, and any unexpected problems, etc. For a Project Manager estimating a task means that every component is considered.
Save Your Code Changes Constantly
This is an important approach to prevent to loss of your data. Many Software Engineers learn this lesson the hard way. I remember a time, about 10 years ago, when I was working on a virtual machine. I spent an entire day writing a script in Oracle to fix a critical problem in production. I was so focused on finishing the script that I forgot to save the changes. A day later, I discovered that my remote desktop had rebooted, and all my changes to the script was lost.
This practice can help you avoid losing data. It sounds like an obvious thing, but trust me, saving your changes every 5 minutes is still not enough!
Technology runs faster than we do. There are always new technologies to learn, and Software Engineer must update their knowledge continuously, to adapt to these new technologies.
Most of us started working on monolithic systems with old programming languages, high licensing costs, and on company owned servers.
These days, Software Engineer’s use microservices, open-source software, infrastructure on the cloud, and better channels of communication. Technologies will keep changing, and we need to learn and adapt, or we too will become obsolete.
Interested in learning how to enable a culture of collaboration within your organization? Check out our latest White Paper, "DevOps Gives Wing to Your Development Efforts," to learn:
- How to Understand DevOps and its Enabling Culture
- How to Build Momentum for Excellent Innovation
- How to Create a Compelling Business Case For DevOps
- How to Get Started With DevOps