As a software company, you want to deliver software that does exactly what the customer asked for and preferably without any bugs. Unfortunately we don’t live in that ideal world and the customer often receives the software package that needs aftercare. However: it is possible to limit the amount of aftercare with some precautions
In this article, I’ll try to talk about a couple of things you can do as a developer to grow: developer habits and tools that can be used. But also what companies can offer. Since GDK Software heavily makes use of Delphi, the Delphi developers will have the main focus. However, I think that developers using other programming languages can benefit!
Individually
First: something about habits. I’m not talking about enough sleep (although this is important!), but about habits while coding. I compiled a list with ideas I found on the Internet and added my own experiences.
Know the language! Know the standard libraries. To be honest: even after 6 years of working with Delphi I still find functions of which I’m surprised I didn’t find them before! Like finding the date one month before: IncMonth(now, -1), or converting a string to a number (StrToInt or StrToIntDef). If you don’t know these things you’ll find yourself spending too much time browsing StackOverflow instead of writing code. I do use StackOverflow, of course. I think that nowadays every developer will use it, but do use it when you’re asking yourself HOW to solve something, not about things like converting strings to numbers.
Try to fix all hints and warnings! When you do this then all new hints will immediately catch your eye! I worked with projects that produced a couple of hundreds of warnings and projects with none at all! In the latter case working was so much enjoyable and it gives you a more positive feeling at the end of the day (providing the code does what you want ).
When creating an object immediately write the code to free it again. So if you write a Create statement somewhere, then add the Free. This prevents really nasty bugs that produce exceptions randomly!
Write defensive code wherever possible. That means that you don’t assume anything about variables. Check if it’s Nil before you use it! This prevents errors occurring in production because you tested it with a testset that contained certain assumptions! It also makes you more think more about how users will use your code: can a user do something that makes this crash?
Think about variable- and functionnames! Keep in mind that you are probably the person to check the code again in case of bugs. That means that you have to dive into the code again in a couple of weeks (or even months). In the meantime you wrote so much code that you forgot all about this function. It would be a pity if you have to ‘learn’ the code all over again.
Don’t be scared to change code! You can do this by refactoring and committing little bits of code. If you have difficulties changing little pieces of code then large changes will definitely a problem. Bonus: you get ‘feeling’ with the code. It also happens a lot (for me at least) that I regularly see code that I wrote a month earlier and thing: “Did I do that? Really??” Dare to repair.
Do a programmer test before delivering a piece of code. With this I don’t mean: run the software, enter a value and get the correct value back. But: go through the code step by step (debug!) so you can check one last time if the code you wrote actually does the correct things. It gives more confidence.
Also a fun one, that not every developer does: do a programming challenge before you begin your workday. There are a lot of websites nowadays that offer challenges like codewars.com or codecademy.com. I have done this for a while and in my case it gives you a feeling of satisfaction, even before the day began
What I tried and still do: try out another programming language. You need to do this in your own time. Your employer won’t like it if you start working with COBOL while instead you’re supposed to write state of the art Delphi code! The advantage of doing this is that it affects your thinking process when you pick up new challenges. Like those handy reduce functions in functional programming languages. Can you write them in Delphi? And will they perform? And what about readability?
The last item in this (not complete) list: be up to date! Have some feeling with the SOLID principles. Know a couple of design patterns. This really gives you an advantage when picking up new tasks. And your colleagues should have that knowledge too so it makes it easier to talk about code.
Tools and frameworks
Fortunately we don’t have to build every application from scratch using standard libraries. Otherwise every project would have a pretty slow start, even if we work Agile (are we?). There are quite a few frameworks, tools and libraries on the market that can be used for every type of project. I’m not going to state which project is optimal for which type of project! Instead I’ll tell which frameworks I use myself in my every day’s job. as a result the tools are aimed at Delphi developers.
IDE Fix Pack (https://www.idefixpack.de/blog/ide-tools/ide-fix-pack/). Actually, I never worked in a Delphi XE IDE that didn’t have this plugin installed. The purpose of this plugin is solving performance issues with compiling and debugging your code.
GExperts (http://www.gexperts.org/). This is a collection of tools that is really valuable to every Delphi developer. It contains so many tools that it needs an article in itself explaining everything. The tools I use the most are the grep and component replace tools. I highly recommend this one.
DDevExtensions (https://www.idefixpack.de/blog/ide-tools/ddevextensions/). A plugin that adds a few nice settings to your Delphi IDE. I use this one specifically for the Form Designer setting to not store Explicit* properties in the dfm.
MadExcept (http://madshi.net/). This tool is used for sending information and data about crashes and exceptions that happen in the production environment to the developers. Another tool that can be used for this is Eurekalog (https://www.eurekalog.com/). I used both and I don’t have a clear preference. But at least: use one of them.
Spring4D (https://bitbucket.org/sglienke/spring4d/wiki/Home). A Delphi framework containing classes for various purposes: Collections, Dependency Injection, Encryption and more. Often only the Dependency Injection is used in projects, but there is so much more. Especially the Collections classes are very usesful (e.g. Lists of interfaces)
There are various database frameworks containg components. Well known are the TMS products (tmssoftware.com) or Devart (devart.com). I used both and they work really well! In case of the TMS products, I also used the ORM component (Aurelius). I like this way of working! Instead of writing (and maintaining) SQL queries you assemble the query by using function calls. Of course this is a personal preference and it really depends on the project!
And then there are component sets. They exist commercially, like DevExpress (devexpress.com) or Open Source like the JEDI components (https://github.com/project-jedi/jvcl). They both are a good addition to any project that uses GUI components. Please note that the components usually work best with components from the same set, so keep that in mind.
The bigger picture
Until now I listed a number of ideas that developers could use individually. Of course, when you share this everybody profits! Also companies! But also companies can mean a lot to their employees in return.
Every now and then conferences take place. “Thanks to” Corona nowadays even online, so that people don’t have to travel much. Although physically attending a conference definitely has added value. Between the sessions you can have chats with other developers and extend your network!
For smaller companies or companies with a tighter budget there are possibilities too. In the past we gathered together with the whole department for one morning every 2 weeks and discuss a chapter from a book. In this way we went through the book “Clean Code”, written by Robert C. Martin. During those mornings we also determined which hints and tips we wanted to apply to our work. This keeps eachother focused too!
I also worked for a company where they watched a video from Youtube every now and then, instead of discussing a book. The only thing missing was popcorn But when you are there and watching it with 30 people you definitely pick something up. Especially the videos of Uncle Bob. Check his website (http://cleancoder.com/products). It contains links to videos about subjects from his book “Clean code”.
In order to not make everybody think I’m an Uncle Bob Fanboy I also recommend videos from Martin Fowler (less Delphi oriented) or just a subject. Nowadays there are tons of sessions of more than an hour each on Youtube. I believe there is something for everyone!
And of course there are online courses like Udemy (https://www.udemy.com/) or Coursera (https://www.coursera.org/) or Pluralsight (https://www.pluralsight.com/). The best thing about courses is that it is better focused on the subject itself and there are less comments that are not relevant. And you don’t get commercial breaks!
It is very important that the content of the course is actually used. And shared among colleages! It sticks when there is discussion about it. Better than just watching a few movies and continue like before! Therefore: keep each other focused! This can be done from the management, but also between colleagues. Codereviews are very useful here. These are moments where programmers are looking at code they didn’t write themselves! Maybe you come up with an other approach. Don’t keep it to yourself. That code is on its way to production!
Finally
In this article I tried to offer some suggestions that could improve your productivity and bring more fun to your daily work. I also added a few suggestions for companies to profit from. I’m not going to say the I know it all and there probably are a few that are not useful to some! However: if there is something that you like and try to make you better and more productive in your work from this article then it was definitely worth the effort!