As Developers, we’re often met with many different technologies, all new and foreign to us, and with someone telling us it’s the next big thing and we must learn it. I’ve listened to those people for years now and I’ve found some patterns for a suitable abstraction of what types of technologies should be in your toolbox. So here there are… Firstly, I believe in the full stack dev mentality. I genuinely believe any developer should be able to do any task. That’s not to say there isn’t room for specialists, or full time certain-technology-only-developers, but I believe the best developers are the ones who mix and mingle with other technologies, bringing the patterns back to their “home” language, keep their learning skills sharp and who keep their mind open. With that said, I believe that developers should know a bit of everything, and here are the bases I’ve covered in my career. So what should be in a minimal toolbox for every good developer? A Web Framework This could be , , , , , etc, it doesn’t really matter. The point here is the idea of what a web framework should do — it create, reads, updates and deletes (CRUD) data from a database in response to a given HTTP request, and provides a suitable response. It might also kick off background tasks or add data to a queue/stream to be processed later. Ruby on Rails Node.js PHP Phoenix Perfect A Task Runner/Scheduler As mentioned above, a task runner is good for task that need to be run at some point in the future, or on a schedule. This could be Cron, , , even windows task scheduler. The idea here is to learn that some tasks need to be happen relative to time itself or relative to a request, but can be performed at a later time. As an example, processing a file upload; the response is ‘we got your file, thanks!’ but the background task could be the actual processing of the file and perhaps sending an email when the processing has finished. sidekiq Verk Queue Software This could be or or . The idea here is that some software on the backend are named “producers” and they put data on the queue to be consumed by “consumers”. This lets you start or stop more consumers based on load on your server. RabbitMQ Amazon SQS Azure Queue Storage/Message Bus Stream Software Similar to queuing, where items entering the queue are removed by the consumers, streaming software lets blobs of data flow past like a river and many consumers can react to what they see go past. This could be , etc. The difference between a queue and a stream is also important, but this isn’t the time to cover that. Kafka Amazon Kinesis A Frontend Framework This could be , , , , even ! The idea of knowing a front end framework is to learn such interesting lessons as browser quirks, trans/compilation of languages, web debugging/inspecting, responsive design, de/serialization of data and UI/automated testing. EmberJS Angular React+Redux Vue.js jQuery A Mobile App Framework While not essential, I think it’d be useful to learn at least one mobile platform, such as iOS, Android or Windows 10 Phone. It could also include , , or even . Mobile programming teaches a lot about programming with tech constraints and weighing up a lot of user experience trade offs such as small screen size, battery life and privacy. The IDE support also makes for a pleasant environment to work in. Cordova React Native Unity A Scripting Language There are times where you need something quick and dirty for a bit of scripting. This may be AppleScript, Bash, Powershell, Python or Ruby. Just something to automate a task for a one off or to run every now and again with Cron or similar. Every good dev should know when and where to write something quick and hacky, and having knowledge of how to do so is great. A Relational Database This could me , , or anything similar. The idea here to learn about how relational databases work and how records are stored and searched for. It would be good if you learned the benefits of stored procedures vs in code procedures and what kind of optimisations can be made at storing and retrieval time. MySQL PostgreSQL MS SQL Server A Non-relational database There are more and more of these, and each are optimised to do a certain task, such as for search or for time-based data. This could also include more general purpose NoSQL databases such as or . You should try to understand the difference between NoSQL databases and SQL databases (non-relational vs relational) ElasticSearch Druid MongoDB DynamoDB And that’s your toolbox! With these you could probably build anything you wanted, or contribute you almost any software business. Of course, you don’t have to learn all of them in a week, it’ll take a few years. You also don’t need to be passionate about all of them, you can pick and choose — it’s your career. There’s probably some other technologies worth mentioning that I have forgotten, so gently calmly mention them to me! Good luck :) This is the 12th post in my Junior Developer Diaries blog series. I’m writing more every week, and you can sign up to hear more and read previous posts on my website.