My Developer Toolkit
With the world development changing constantly, it’s important to stay up to date and keep your skills sharp. Building on your skills and knowledge is key to growing and succeeding as a developer. Putting together a toolkit for developing software is not an easy task. With so many languages, frameworks, libraries, IDE’s, editors, and other tools, it’s easy to get lost in such a vast yet still growing world.
I’m going to talk about what I use in my day-to-day coding life and why I use it. I also will put in a couple to things that I plan on learning to add to my toolkit. I will discuss everything from databases, to low level languages, to scripting languages, and even to my editors. Although you can use my toolkit as a guide for yourself, I wouldn’t recommend copying it entirely. My tools that I use work for the things I need them too. I may be using one thing for something different than what you would use it for. You may not even like some of the tools I use and that’s okay. That’s part of the beauty of development. You can choose what works for you.
There are really three database technologies I use. For personal projects, my go-to are either PostgreSQL or MongoDB. At work, I use MSSQL and Azure SQL Server. All of these tools serve a specific purpose in my stack and I don’t really use them interchangeably.
This is probably my favorite and first choice for a database. I use it in all my personal and side projects. It’s fast, easy to configure, easy to work in, and scales really nicely. It has a lot of different field types that can handle almost every kind of datatype I could need. The other really nice thing about this database is that it’s open source, meaning you don’t have to pay for a license to be able to use it. You just need a machine to run it on and you are good to go. Speaking of running it, it can run on about every operating system you can think of. I have it running on my Windows 10 machine that I do my development on and usually spin up instances in AWS, but I have run it in Docker containers and on Linux machines. This is a great piece of technology to know.
MongoDB was my first database software. I liked it a lot for it’s ease of use and it’s JSON like structure. You see, MongoDB is what’s known as a NoSQL database. Records are not stored tables, but rather, documents. Each database record is stored in a JSON like format called BSON. There also is no rigid schema you have to follow. If you need to add or remove a field, you can do it with ease. It also scales really, really well.
That being said, it does have some drawbacks, the biggest one being nested objects. Say you have a user with a friends field. In a relational database, you would have a table called user and one called follower. The follower table would have a column for the user_id who added a follower and column for the follower_id, the user who was friend. In your code, you then query the database and add the users to an array, probably called “followers”. Because of Mongo’s structure, what can happen is when a user adds a follower, his whole follower array gets saved along with each followers follower array. And what if they follow each other? There are ways around this sure, but its a rather large pitfall when you are just getting started.
MSSQL and Azure SQL Server
I grouped these two together because they are very, very similar. These databases are owned and developed by Microsoft and unlike Postgres, are not open source. The price for a MSSQL license is pretty steep. That said, these databases are usually used in business environments, so the need to use it is side, small, or personal projects is pretty unlikely.
The bread and butter for MSSQL comes from how beautifully it integrates with other Microsoft tools and technologies. It’s so seamless getting setup with a .NET project and using it in conjunction with Entity Framework, Microsoft's ORM for .NET. It scales really nicely as well. It doesn’t have all the bells and whistles that Postgres does in terms of data types, but it’s management tool beats our Postgres by miles. SQL Sever Management Studio (SSMS) makes creating, managing, and querying database super easy. PG-Admin gets the job done, but it is nowhere near the levels of power that SSMS provides.
These pieces of technology are good to know if you ever go into enterprise and business development, especially if they’re using Microsoft tools. Chances are they’re using MSSQL as well.
Want to Learn: Cassandra
Cassandra is another NoSQL database, but unlike MongoDB with its JSON structure, Cassandra is what’s known as a Wide Column database. It is also distributed, meaning a single database can be running on multiple machines pointing at a single parent node. Cassandra is very good at handling lots of transactions at a time. On the surface it looks like SQL, but its not. Unlike SQL however, it does not support JOIN statements, so using a relational schema is not your best bet here. It is very good at sifting through huge amounts of data and for processing it.
Low Level Languages
The only low level language I know comfortably enough to use is C++. I do know some C and Assembly, but not enough to add to my toolkit. That being said, I hardly use C++ anymore anyway for a number of reasons.
C++ is a low level object oriented language that has been around for quite some time. C++ is mainly used today for game and game engine programming, along with embedded devices and processes that are extremely performance heavy. The “gotcha” with C++ is you have to manage your memory yourself. They’ve come a long way with making things like pointers safer to use, but you can still cause memory leaks if you aren’t careful.
I used to use C++ a lot more when I was interested in game engine design, but I stopped going that and moved onto more web and mobile based projects. I also don’t find it as nice to work in as C# or Python. Whenever I was building projects, I felt like I was reinventing the wheel every time I went to do something. Sure you can add dependencies to your project, but have fun with the compiler if you did it wrong!
I don’t hate C++ by any means and it is and it is a good language to know just for wanting to know how things work under-the-hood. There is also C, which which will show you a greater view of how computers work, and Assembly, which is writing code that gets translated directly to machine code. These are good things to know, but not the most important in my stack.
What I want to Learn: Rust
Rust is the future of low level languages. It’s fast, easy to pickup, and also memory safe without needing a garbage collector. It also is compatible with Web Assembly or WASM. WASM is the next step in web technologies. I don’t know enough about it to discuss it, but I do know Rust is the up and comer in that field and gaining in popularity each day.
My two mid-level languages are Java and C#. On the surface these two languages are very similar, but under the hood are very different. Both of these have use cases that are similar, but also different enough to warrant me discussing them separately.
Java — Spring
I’ll be quick here, but I use Java with Spring to build web applications. Spring is a very powerful framework that provides support for building Microservices, RESTful API’s, Model View Controller sites, and much more. Spring Boot makes it very easy to get going with and the documentation is very good.
I do, however, like Java itself less than C#. Java requires a lot of boilerplate code to get going with, which consumes a lot of time. There are tools to that make this faster, like Project Lombok, but there are still parts of writing Java that feel repetitive and somewhat boring.
Java is still widely used today in enterprise and Android development. If you want to go into either field, Java is a very safe bet.
C# — .NET
C# is one of the nicest, most elegant languages I have worked in. It’s fast, nice to write, beautiful to look at, and has a ton of uses. C# gets a bad wrap due to it being developed by Microsoft, but with .NET going to open source and cross platform, there isn’t a better time to learn it.
C# can be used in the Unity engine for building games, Xamarin for building IOS and Android apps, .NET for building web apps, microservices, desktop apps, and more. It also, in my opinion, has a better package management system than Java does and seems to be better performing with a smaller hardware footprint.
C# has a ton of use cases and it’s fantastic that it and .NET are now open source. However, a lot of enterprise companies are still on .NET Framework, which is not open source and only runs on Windows. C# is a great language to know for it’s wide use case and for building salable applications.
What I Want to Learn: Go
I have heard nothing but good things about Go for the past year or so. Developed at Google, it’s very fast, does not require a virtual machine or runtime, and supports concurrency out of the box. It’s a simple language that serves it’s purpose very well. It is a beast at managing lots of request at once. Go will only grow in popularity so this is a big one to learn.
High Level/Scripting Languages
I also wanted to have both Angular and React on here because that battle is still going on. Both of them have their own use cases and neither one is better than the other. Angular is a framework that enforces rules across the app. This makes it very stable and secure. It uses typescript and a true HTML template system. This makes your app less prone to errors. That being said, it takes a lot more time to get started with and has a steeper learning curve. React on the other hand is a library, so you need to pick and choose what functionality you need in your application. It’s fast to learn and develop in. The downside is it can be hard to scale if you don’t structure your application right.
Python — Django
I use Python for web development using Django. It’s a wonderful framework that lets you build and scale web applications quickly. The more I work in it, the more I love it. There is also Flask, which is a more bare bones framework where you have to setup more of it on your own. Either one works great, I personally prefer Django for my own applications.
Python has a ton use cases that you are bound to encounter it at some point. This is another tool to add into your toolkit.
Bash is a scripting language for Linux systems. That’s really all it is. It’s usefulness comes from being able to automate tasks. You can write scripts to pull GitHub changes, run repetitive tasks, and even generate new projects for you. Bash runs on Linux and also MacOS, which is Unix Based. On the Windows side, you can run Bash under WSL or GitBash, but otherwise you will have to learn a tool like Powershell. Knowing these are also key to being a well rounded developer.
Editors, IDE’s, and Other Tools
I will keep this short because all of this is more opinionated than the languages. Why? Because some people prefer bare bones text editors and other prefer full blown IDE’s. There are pros and cons to each, but at the end of the day, the all get the job done.
Version Control — Git, GitHub
IDE’s — PyCharm, Intellij Idea, Visual Studio
Text Editors — Visual Studio Code, VIM
Database management — DataGrip, PG-Admin, SSMS
Terminals — Powershell, CMD, ZSH
Cloud — AWS, Azure
These are the tools I use along with my languages. They fit into my toolkit because of my languages. I would not use full blow Visual Studio for a simple HTML page or DataGrip for MSSQL. Each tool fits into what I’m developing.
My advice for Fullstack development is to not get stuck in one language or framework and to not stop learning. As you can see, I have a huge selection of tools and languages I use. But there is not one-size-fits-all for software development. Having this broad range of tools allows me to better pick the right tool for the job. I do have my favorites in this list of things that I wish I could use for everything, but that isn’t how software works. It’s always growing, always changing. The best way to be successful with it is to grow with the changes and learn new things. Expanding what you know helps you grow and be a better developer.