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.
Languages
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.
And the second one is, of course, Javascript. Every web developer must have at least a notion of the language, even if working entirely on Backend. In my case, because I like to work on both ends, Javascript is a great alternative to work with the same language across runtimes. And here comes the remaining half: I use Typescript to strongly type my javascript code (among other features). Since I adopted this superset of JavaScript, I've found the developer experience to be nicer, as it makes the code more intuitive and expressive —therefore easier to debug and scale—, without falling into the excessive verboseness of languages like Java.
Backend Frameworks
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.
Flask
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.
Express
Another lightweight backend framework, this time based on JavaScript. Outside work, I also use Express when I'm tempted to just write Javascript code 🌚. Express is very similar to Flask in the sense that it allows you to start super fast and scale as needed.
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.
However, for applications that I know are gonna need to grow a lot, I still prefer Flask, as I haven't found a straightforward approach to apply patterns like Hexagonal Architecture with JavaScript/Express. Of course that's just my preference, as it's still easy to apply other patterns like MVC when that's enough to fit the needs.
Other Alternatives
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.
On the side of JavaScript, we have alternatives like Meteor and NestJS, being these options full-fledged as Django. Both of them follow the principle of “convention over configuration”, meaning they are opinionated and leave less decisions in the hands of the developer. In the case of NestJS, it is actually TypeScript based (I guess NestTS doesn't sound that good), and it uses a system of annotations similar to that from Angular in the frontend.
Frontend Tools
I have only used one framework (or library as its official site states) so far for developing FrontEnd applications, and it has been more than enough. React is lower level than other frameworks like Vue, meaning it's more similar to developing in pure JavaScript, and it's not as cumbersome as Angular.
Being the most popular framework right now —which comes with an endless amount of adapted libraries and resources to learn— React offers an amazing developer experience for building scalable, component-based frontend applications. Once you get through the small barrier of learning JSX, which is a syntax extension to JavaScript for writing HTML inside JS files, and a couple of quirks of React, it's a breeze to develop and take advantage of the library features to fit any needs you might need for your frontend.
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.
In summary
Even as a developer who likes to discover and adopt new technologies and tools, I've settle down on Python and JavaScript as my go-to languages, given the wide range of posibilites and the flexibility that these two provide. Even narrowing down, I've chosen tools like Flask, Express and React to develop the majority of my web development projects. It is natural to prioritize specialization on certain tools over little knowledge on a wide variety of them, as this allows us to develop solutions quickly and consistently. I hope every one of you find what's the most comfortable for you, without necessarily negating the possibility of learning new tech. And that is all for now, see you next time ✌️.