It is pretty easy to fix one bug and break the large application in ten different places. Everyone understands that it is impossible to avoid such cases due to the high complexity of the software. However, you can minimize the chance of regression issues by using steps which I usually follow in my day-to-day development activities.
In my opinion, the more time the software developer devotes to “Before” stage, the more experienced he or she is. Usually, junior developers start coding right after reading the bug description, when senior guys follow these steps:
Almost all objects, except for simple or…
Over the past ten years, I have worked with about a hundred software engineers. They are all different with their own strengths and weaknesses.
About half of software engineers I worked with were strong technical guys with good soft skills. However, from my point of view, only a few of them were outstanding engineers because they effectively applied several extremely useful approaches that other engineers partially or completely ignored.
Outstanding software engineers have used those approaches so regularly that it has become a habit. The habit of doing the following 3 things:
QA engineers test software applications, find issues, and report them to bug tracking systems like Jira. The ticket must contain as much detail as possible that the software engineer can use to reproduce the bug. Ideally the ticket which describes the bug should specify the environment where the issue is present, preconditions and steps to reproduce.
Sometimes programmers cannot reproduce the bug, even with comprehensive information. I’m not talking about trying to reproduce the bug in a different environment. This is a common case where the error is present in, say, a UAT environment but not a QA environment. This…
Working on real commercial projects helps software developers become professionals by acquiring practical knowledge. Developers, in addition to reading many books about, say, design patterns, need to understand how these patterns can be used to solve various problems in the real world.
Even the largest projects that developers work on often do not implement all existing approaches, patterns, and software engineering techniques. To learn as much as possible, a developer needs to work on multiple projects at the same time or change projects quite often. …
In C#, reference types can be assigned null
values. This is something that developers will have to live with until they use classes to create software. Unfortunately, the folks at Microsoft cannot simply disallow null
assignment to reference variables at compile time, because that would break the codebase of almost every project.
What is actually wrong with returning a null
reference from the method?
Let’s take a look at this simple method:
The FirstOrDefault
method silently returns null
if no order is found in the database.
There are a couple of problems here:
GetOrder
method must implement null reference checking to…
Performance optimization problems are interesting because they require deep knowledge in various areas of software development such as relational database design, caching techniques, algorithms, data structures, multithreading, and more.
When a developer has to fight for milliseconds, there are countless optimization techniques. However, in web applications, there is usually no need to spend efforts improving performance from 430 milliseconds to 370 milliseconds by applying a bunch of micro-optimizations. A much more common challenge is to fight for seconds, say 3 to 1. To achieve this goal, one or more of the following tips, described below, usually apply.
I remember when I just started learning programming, I didn’t have much difficulty trying to understand different programming concepts or language features. I wrote a Hello World app 30 minutes after I first opened the book. On the same day, I gained a high level of understanding of variables, primitive data types, and arithmetic operators.
Over the course of a few days of training, I implemented several console applications such as a simple calculator and text parser. I’ve used variables, constants, conditionals, methods and even classes. At that moment I was absolutely sure that in two or three months I…
Validating an object by writing conditional statements is a common task in software development. For example, the developer might want to validate a file that the user uploads to the application and then return validation status or save the file to the file system.
Imagine the developer received the following file validation requirements:
Here’s how these requirements can be implemented in code:
The requirements are…
A mature software engineer usually knows several approaches to solving the same programming problem and makes choices through trade-off analysis.
The larger the goal, the more carefully the programmer must approach trade-off analysis to avoid introducing technical debt into the project.
When it comes to writing the data access layer, besides the well-known repository pattern, there are several other options available. Even the repository itself has several types of implementation. Knowing them all is important for the developer to make the most appropriate decision.
Entity Framework is object-relational mapping technology that implements different data access patterns like Unit of Work…
Code reuse is a great thing because the developer doesn’t have to start implementing from scratch every new feature in a project. New functionality can be built on top of components that already exist in the system, such as methods, classes, libraries, or entire microservices.
Code reuse speeds up development time. Also, when new functionality is built on top of existing components, developers feel confident because most likely the components are covered by unit tests and may even be part of production code. This means that the existing code is very well tested.
However, even in a large software system…