software Posts

The Toptal Engineering Blog is a hub for in-depth development tutorials and new technology announcements created by professional freelance software engineers in the Toptal network.
Subscribe for daily updates today and check out the wealth of technical resources published by the Toptal network.
Andrei Smirnov
A Vital Guide to Qmake

Qmake is a build system tool shipped with Qt library that simplifies the build process across different platforms.

In this guide, Freelance Qt Developer Andrei Smirnov describes the most useful qmake features and provides real-world examples for each of them.

Continue reading →
Konrad Gadzinowski
Creating Truly Modular Code with No Dependencies

Complex, tightly-coupled, and fragile interdependent code. We’ve all written it. The kind of code where fixing one bug creates seven more. Have you ever wondered how to create independent modular code?

In this article, Toptal Freelance Software Engineer Konrad Gadzinowski walks us through the different types of architectural paradigms you can adhere to and how to write modular and decoupled code where changes to one module have minimal impact on the overall application.

Continue reading →
Timofey Nevolin
Eight Rules for Effective Software Production

While working at different stages of the software development lifecycle you often realize that software production isn’t easy. It takes consistent effort to make something great. However, it doesn’t have to come at the cost of working through nights or weekends.

In this article, Toptal Freelance Software Engineer Timofey Nevolin shares eight simple, yet powerful rules for effective software production.

Continue reading →
Dmitry Ryazantsev
Time Management Secrets of an Efficient Engineer

Freelancers work flexible hours, but this convenience comes at a price: They have to manage their time better than on-site professionals. However, it also means they’re free to optimize their routine and achieve exceptional efficiency.

In this post, software engineer Dmitry Ryazantsev will guide you through the ins and outs of personal time management, leaving little to chance. What good are great rates if you waste hours each week?

Continue reading →
Jack Kinsella
The Art of Building Self-Service Admin Areas

Software is regular and predictable, so it seems paradoxical that practically every web app needs a sizable administrative area. The explanation for this paradox lies in software’s interaction with humans. While you probably can’t build a fully automated system, there’s a lot you can do to save time and money.

In this post, Entrepreneur Jack Kinsella explains what you can do to streamline administration, thus saving valuable time and making your projects more profitable. Adminimisation is the word of the day!

Continue reading →
Alexander Gaidukov
An Introduction to Protocol-oriented Programming in Swift

Most modern programming languages, in the hopes of enhanced maintainability and reusability of code, offer some constructs that help the developer keep the definition of behavior and its implementation separate.

Swift takes the idea of interfaces a step further with protocols. With protocols and protocol extensions, Swift allows developers to enforce elaborate conformity rules without compromising the expressiveness of the language.

In this article, Toptal Software Engineer Alexander Gaidukov explores Swift protocols and how protocol-oriented programming can improve the maintainability and reusability of your code.

Continue reading →
David Fox
The Zen of devRant

Let’s face it: Sometimes you just need to rant. Fortunately, there’s an app for that. It’s called devRant, and it’s the place for developers to vent about clients from hell, non-technical friends and family, and clueless recruiters.

In this roundup, devRant Co-Founder David Fox shares his favorite collection of rants since launching. Some will make you laugh. Others will make you laugh so hard you cry. And just about all of them will make you empathize with the author.

Continue reading →
Punit Jajodia
The Definitive Guide to DateTime Manipulation

In the realm of software development, time and date manipulation is considered by many to be a difficult task. Complicated time zone rules, leap seconds, differences in locale-specific formatting, etc., force us to immediately resort to popular time and date manipulation libraries. We often use these libraries without thinking about how exactly they work, which can lead to all sorts of obscure bugs in our software.

In this article, Toptal Freelance Software Engineer Punit Jajodia gives us an in-depth introduction to some concepts and best practices to avoid a few of the obvious issues related to changing the time and date in our applications.

Continue reading →
Zachary Goldberg
The Six Commandments of Good Code: Write Code that Stands the Test of Time

How do you define good code? Is it 100% test coverage, or is it backwards compatibility with decade-old hardware? We may not be able to reach an end to this debate yet, but good software always seems to conform to a few certain qualities of code.

In this article, Toptal Freelance Software Engineer Zachary Goldberg walks us through six simple ideas that can help you make better, more maintainable software.

Continue reading →
Nermin Hajdarbegovic
Spectacular Crowdfunding Fails And Their Impact On Entrepreneurship

What’s the biggest problem with crowdfunding today? Everyone wants a sweet slice of the crowdfunded pie, but nobody wants a single crumb of responsibility. As a result, crowdfunding platforms, the tech press, and the geek public have picked up a track record filled with spectacular crowdfunding failures.

In this article, Toptal Technical Editor Nermin Hajdarbegovic takes a look at the state of crowdfunding today and explains why the industry needs to do more to clean up its act and get rid of bad apples in crowdfunding.

Continue reading →
Andrey Shalitkin
Write Tests That Matter: Tackle The Most Complex Code First

In today’s world, code is expected to change as quickly as requirements do, and tests play an important role in making that possible. Many modern projects boast great test coverage, making them more resilient to regression issues. However, that is not true for all projects - especially some legacy projects which have little in the way of testing.

In this article, Toptal Freelance Software Engineer Andrey Shalitkin discusses two metrics, coupling and cyclomatic complexity, that are important in identifying which portions of code to include in test coverage.

Continue reading →
Bruz Marzolf
Hunting Down Memory Issues In Ruby: A Definitive Guide

Memory issues in programs can be quite frustrating whether you’re the user or the developer attempting to solve the problem. In Ruby, the garbage collector plays a vital role in managing your program’s memory so that you can focus on other important things. However, it is often possible to overwhelm the garbage collector or end up with sneaky resources that cannot be freed, which can lead to all sorts of memory issues.

In this article, Toptal Freelance Software Engineer Bruz Marzolf explains why certain memory issues arise in Ruby applications and how to tackle them easily.

Continue reading →
Tomasz Czura
Introduction to Kotlin: Android Programming For Humans

Java has been a dominant programming language for ages, but modern times call for modern languages. Meet Kotlin, a modern, clear, and expressive programming language powered by the same virtual machine technology that powers Java.

In this article, Toptal Freelance Software Engineer Tomasz Czura takes us for a spin through the world of Kotlin and shows us how it can be used to make an Android application with an elegant architecture without compromising the very qualities of the code that Kotlin aims to provide.

Continue reading →
Carlos Ramirez III
Keep Calm And Transition To A New Development Team

Many product owners don’t have a technical background and thus often find themselves unprepared and scrambling when it comes time to bring on a new development team. This often results in hindered progress, wasted time, and frustration for everyone involved. If this sounds like it could be you, either now or in the future, then you should be somewhat concerned.

In this blog post, Toptal Freelance Software Engineer Carlos Ramirez III will walk you through the various steps of a typical transition process in project management so you can prepare for this eventuality and make the transition as smooth as possible.

Continue reading →
Vasily Koval
Jumpstart Your PHP Testing with Codeception

Would you like to test your PHP code like a boss? Do you feel that basic unit tests and PHPUnit just don’t cut it anymore? If your answer to both questions is yes, you might want to try Codeception, a mature and well-documented testing framework designed to outperform PHPUnit and Behat.

In this post, Toptal Freelance Software Engineer Vasily Koval describes how he came to take the plunge and start using Codeception, and he explains why you should check out Codeception for your PHP testing needs.

Continue reading →
Federico Pereiro
Declarative Programming: Is It A Real Thing?

In a nutshell, declarative programming consists of instructing a program on what needs to be done, instead of telling it how to do it. This approach involves providing a domain-specific language (DSL) for expressing what the user wants. This DSL shields users from messy low-level constructs while still achieving the desired end-state.

While declarative programming offers advantages over the imperative approach it replaces, it’s not as straightforward as it may seem. In this comprehensive article, Toptal Freelance Software Engineer Federico Pereiro outlines his experience with declarative tools and explains how you can make declarative programming work for you.

Continue reading →
Marko Dvečko
Introduction To Concurrent Programming: A Beginner's Guide

Concurrency allows programs to deal with a lot of tasks at once. But writing concurrent programs isn’t a particularly easy feat. Dealing with constructs such as threads and locks and avoiding issues like race conditions and deadlocks can be quite cumbersome, making concurrent programs difficult to write.

In this article, Toptal Freelance Software Engineer Marko Dvečko gives us an overview of some concurrent programming models. He explains how each of these models gives structure to the programs we write and shows how to avoid certain concurrency issues that can come with these models.

Continue reading →
Peter Goodspeed-Niklaus
Eliminating the Garbage Collector: The RAII Way

Manual memory management is a nightmare that programmers have been inventing ways to avoid since the invention of the compiler. Programming languages with garbage collectors make life easier, but at the cost of performance.

In this article, Toptal engineer Peter Goodspeed-Niklaus gives us a peek into the history of garbage collectors and explains how notions of ownership and borrowing can help eliminate garbage collectors without compromising their safety guarantees.

Continue reading →
Federico Tomassetti
Creating Usable JVM Languages: An Overview

Java Virtual Machine (JVM), the powerful virtual machine behind programming languages like Java and Scala, provides a platform-independent environment for executing compiled bytecode. Programming languages built for the JVM can be used to write programs that can run on a wide range of platforms without modification and can even leverage all the libraries and frameworks that exist for the JVM.

In this article, Toptal engineer Federico Tomassetti presents an overview of the strategy and various tools involved in creating our very own programming language for the JVM.

Continue reading →
Ivan Voras
Guide to Multi-processing Network Server Models

In this article, Toptal engineer Ivan Voras provides a useful overview and comparison of multi-processing network server models, with the goal being to take some of the mystery out of writing high performance networking code. The article is intended for “system programmers”, i.e., back-end developers who will work with the low-level details of their applications, implementing network server code.

Continue reading →
Adel Fayzrakhmanov
Single Responsibility Principle: A Recipe for Great Code

Maintainable code is something we all desire and there are no shortage of coding principles that promise it. It is not always apparent how tremendously useful these principles are during the early stages of development. Nonetheless, the effort put in to ensure these qualities certainly pay off as the project grows and development continues. In this article, Toptal engineer Adel Fayzrakhmanov discusses how the Single Responsibility Principle is one of the most important aspect in writing good maintainable code.

Continue reading →
Nermin Hajdarbegovic
Slow Android Wear Adoption Is Stifling Development

Several factors conspired to stifle Android Wear growth, ranging from lack of Google development, to inadequate hardware. Some of these problems have been addressed, some are being addressed, while others cannot be addressed with currently available technology.

Continue reading →
Nermin Hajdarbegovic
Toptal's List Of Top Free Programming Books

The Internet is mankind’s biggest repository of knowledge, information, useful (and useless: think of cat pics) digital content. Today, we will be taking a quick look at something useful and down to earth: free online programming books.

Continue reading →
BREANDEN BENESCHOTT
Advanced Tactics for Highly Collaborative, Remote Teams

Any time you’re physically out of the office or working with someone who isn’t next to you, you’re working remotely. At Toptal, working remotely is a productive and efficient reality that we evangelize to our clients, while practicing what we preach.

In this article, Toptal COO Breanden Beneschott shares great tactics in operating highly collaborative remote teams.

Continue reading →
Martin Chikilian
Buggy Python Code: The 10 Most Common Mistakes That Python Developers Make

Python’s simple, easy-to-learn syntax can mislead Python developers – especially those who are newer to the language – into missing some of its subtleties and underestimating the power of the language.

In this article, Toptal’s Martin Chikilian presents a “top 10” list of somewhat subtle, harder-to-catch mistakes that can trip up even the most advanced Python developer.

Continue reading →
Hyam Singer
In Search of the Elite Few – Finding and Hiring the Best Software Developers in the Industry

Effective interviewing and hiring is as much of an art as it is a science. Nonetheless, approaches and methodologies do exist for evaluating the more subtle dimensions of a software developer’s skills and abilities. When used collectively, these techniques yield a highly effective screening process with a proven track record of success. That process is what this post is all about.

Continue reading →
Naftuli Kay
An Introduction to Mocking in Python

More often than not, the software we write directly interacts with what we would label as “dirty” services. In layman’s terms: services that are crucial to our application, but whose interactions have intended but undesired side-effects—that is, undesired in the context of an autonomous test run.

For example: perhaps we’re writing a social app and want to test out our new ‘Post to Facebook feature’, but don’t want to actually post to Facebook every time we run our test suite.

The Python unittest library includes a subpackage named unittest.mock—or if you declare it as a dependency, simply mock—which provides extremely powerful and useful means by which to mock and stub out these undesired side-effects.

Continue reading →