Tech and Tools I Use on a Daily Basis
Being a software engineer in an early stage start-up —fortunately seeing an enormous growth of demand— and as an unsparing developer, I constantly search for new tools that can support the ultimate goal of being as time-and-resource-effective as possible. However, it's natural to settle down on a set of tools that can fulfill a wide range of our needs, aiming for consistency and organization. In this post I'm gonna share with you my picks, the why's, and potential alternatives.
There are 2 (let's say 2½) languages that allow me to solve basically every problem I've ever needed to. The first one being the coolest kid on the block nowadays: Python 🐍; which serves my needs for scripting, web development and data science/machine learning related stuff Such a versatile and beautiful language should come as no surprise, as lots of developers are adopting the language for multiple reasons, such as the aforementioned.
There is two frameworks that I love to use for develop fast —but also scalable— backend applications, one for each of my two currently favorite languages. With the previous description and given the most popular languages for web development nowadays, you might have a sense of what's coming.
In The Pallets Project website, Flask is introduced as:
A lightweight WSGI web application framework. It is designed to make getting started quick and easy, with the ability to scale up to complex applications.
And I couldn't agree more. You can create a minimal RESTful API with one simple
pip install and a few lines of code.
With this in mind, you might get a hint of why we use Flask for our services-based architecture, as the flexibility Flask provides for the design makes it easy to start small when a potential business opportunity arrives, and scale it as needed. Flask also facilitates separating the framework logic from the domain (with tools like flask-injector), hence implementing clean architectural patterns, such as Hexagonal Architecture. Of course, the simplicity —but also the robustness— of the Python programming language also is a huge plus for Flask.
Another advantage of Express is that there is a lot of resources on the internet on how to develop full stack applications with stacks like MERN (Mongo, Express, React and Node) or MEVN (The same, but with Vue). It's really hard to come across an issue that has not been solved before, hence facilitating the development process, specially for developers that are trying to get into web development.
In the Python world, the other big framework is Django, which comes with a set of tools and paradigms out of the box, reducing the amount of decisions the developer has to make, but sacrificing flexibility as a consequence. I would say Django could be the better alternative in cases where you have to develop a web application with traditional patterns like MVC, and you don't want to bother with setting up an ORM, internationalization, authentication, etc.
One of the downsides of Pure React, is that Client-Side rendering (which react uses) is not as performant as traditional Client-Side rendering; you can read more about this in my previous article, in the section of The Development Process. That's when NextJS comes into play. This framework allows you to optimize your React applications with out-of-the-box features like server-side rendering and Static Site Generation, internationalization, smart bundling, route pre-fetching, among others. On top of that, the deployment process for applications built with this framework is also a breeze when done through the Vercel platform. Overall, the development experience with Next is something I've fallen in love with, and I almost always prefer it over pure React, client-side rendered, applications.
One could argue that NextJS is actually a backend framework, which is partially true, as it does execute backend code. However, this code works through lambdas, technology that is more associated to serverless development, paradigm that aims to execute certain pieces of code through ad-hoc functions, rather than building a full backend server. In any case, Next blurs the line between frontend and backend, but ultimately abstracts that overhead from the developer, letting them focus on building a performant User Interface.
Scripting and Data Science
Finally, I also use Python a lot to automate repetitive tasks. It is arguably the simplest way to create the most simple script, but also more complex CLI programs, specially if you're already familiar with the language. It has built-in libraries to interact with the file system, csv files, command line arguments, etc.
Lately, I've been using it to automate a lot of Data Analysis tasks at work, with the variety of tools available for this area (specially pandas), it is super fast and more reliable than doing data analysis manually, or even with tools like Excel.
Following up with these, I've also been diving into Data Science and machine learning, and with numpy, matplotlib, pandas, sci-kit learn —among others—, I've been able to get through some projects like Heart Disease Classification or Bulldozer Price Prediction. I have also used tools like R for this, but I prefer Python for its easiness to integrate with real life applications like web development, or scripting, in contrast to R, which is more academic.
For this use cases, one alternative that I've looking forward to explore is shell scripts, but they lack the variety of libraries that Pyhton has. Another option would NodeJs scripts, it could get the job done for many cases, but given the data-analysis nature of my scripts I would still pick Python for the amount of relevant packages there is for the language.