Jamal Awad

almost 6 years ago • 2,081 • 5 minutes read • 0


As software developers, we are frequently confronted with new and unfamiliar technologies, with various people telling us that they are the "next big thing" and that we must learn them. In this article, I will outline the technologies that I believe are essential for every good developer. Over the years, I have identified specific patterns that constitute a suitable abstraction of the technologies that should be in every developer's toolbox.

First and foremost, I believe in the full-stack developer mentality. While there is undoubtedly room for specialists or full-time developers who specialize in specific technologies, I believe that the best developers are the ones who are proficient in multiple technologies and who keep their learning skills sharp and their minds open by working with a diverse range of technologies. With that said, here are the basics that I believe every good developer should have in their toolbox:

  1. A Web Framework
    Regardless of the specific technology used, a web framework is essential for creating, reading, updating, and deleting data from a database in response to a given HTTP request and providing an appropriate response. It might also kick off background tasks or add data to a queue/stream to be processed later.
  2. A Task Runner/Scheduler
    A task runner is essential for running tasks at a future time or schedule, such as processing a file upload or sending an email when a process is completed. The specific technology used, such as Cron, Sidekiq, or Verk, is less important than learning that some tasks need to happen relative to time or a request but can be performed at a later time.
  3. Queue Software
    Queuing software, such as RabbitMQ or Amazon SQS, enables backend producers to put data in the queue to be consumed by consumers. This allows you to start or stop more consumers based on the load on your server.
  4. Stream Software
    Streaming software, such as Kafka or Amazon Kinesis, allows blobs of data to flow past like a river, with many consumers reacting to what they see go by. While similar to queuing, there are substantial differences that are worth learning about.
  5. A Frontend Framework
    Knowing a frontend framework, such as EmberJS, Angular, React+Redux, Vue.js, or even jQuery, is vital for learning about browser quirks, trans/compilation of languages, web debugging/inspecting, responsive design, de/serialization of data, and UI/automated testing.
  6. A Mobile App Framework
    While not essential, learning at least one mobile platform, such as iOS, Android, or Windows 10 Phone, as well as Cordova, React Native, or Unity, can teach a lot about programming with technical constraints and weighing up user experience trade-offs, such as small screen size, battery life, and privacy.
  7. A Scripting Language
    Knowing at least one scripting language, such as AppleScript, Bash, Powershell, Python, or Ruby, helps automate tasks for one-offs or run them periodically with Cron or similar.
  8. A Relational Database
    Learning about relational databases, such as MySQL, PostgreSQL, MS SQL Server, or similar, is crucial for understanding how they work and how records are stored and searched for. It is also beneficial to learn about the benefits of stored procedures vs. in-code procedures and what kinds of optimizations can be made at storage and retrieval time.
  9. A Non-Relational Database
    Understanding the differences between NoSQL databases and SQL databases, such as ElasticSearch for search or Druid for time-based data, and more general-purpose NoSQL databases, such as MongoDB or DynamoDB, is essential for gaining insights into the specific optimization techniques for each.
With these technologies in your toolbox, you could probably build anything you want or contribute to almost any software business. However, the modern developer's toolbox is not limited to the technologies and frameworks mentioned above. In addition to these fundamental technologies, several other tools can make a developer's life much easier and more productive.

For example, version control systems such as Git or SVN are essential for any software development project. They allow developers to track changes to code over time, collaborate on code with other team members, and manage code repositories.

In addition to version control, many developers rely on various integrated development environments (IDEs) and text editors to write and debug their code. Some popular IDEs include Visual Studio, IntelliJ IDEA, and Eclipse, while popular text editors include Sublime Text, Atom, and Vim.

Another essential tool for modern developers is containerization technology, such as Docker or Kubernetes. Containers allow developers to package applications and dependencies in a lightweight, portable way, making it easier to deploy and manage applications across different environments.

Finally, software development teams increasingly need continuous integration and deployment (CI/CD) tools. These tools, such as Jenkins or Travis CI, help automate software testing, building, and deployment, allowing developers to quickly and safely release new features and updates.

In conclusion, the modern developer's toolbox is constantly evolving and expanding. While the fundamental technologies and frameworks mentioned above are still essential, new tools and technologies are constantly emerging to make developers more productive and effective. By staying up-to-date with the latest tools and technologies, developers can stay ahead of the curve and build better software faster.

You must be logged in to comment on this blog.
Questions / Comments: