Hey, I'm Marco and welcome to my newsletter!
As a software engineer, I created this newsletter to share my first-hand knowledge of the development world. Each topic we will explore will provide valuable insights, with the goal of inspiring and helping all of you on your journey.
In this post I would like to introduce you to some technologies that I think are very important for web development today, recommending some free and non-free material.
I purchased each course I recommended and used it to study the subject matter. Please note that I do not profit from these recommendations.
⭐️ Quickview - your Crypto Newsletter
Are you interested about the world of cryptocurrencies but you don't have time to stay up-to-date? I have created a newsletter where I share daily video summaries of the most influential creators, sign up now!
1) 📚 Learn, learn and learn
During middle and high school, I was not particularly studious. As school ended, I had always done a lot of physical activity, which consumed much of my time and left me too exhausted to immerse myself in books when I got home. However, two subjects managed to capture my interest: math and computer science.
Math has fascinated me since elementary school; my passion for computer science began when I first understood the concept of the for loop statement. This understanding emerged when I applied it to an exercise involving counting people in a hotel chain, using information about the number of hotels, floors and rooms. This experience not only helped me understand the concept, but made me aware of the power of programming in problem solving and its ability to simplify life through the creation of projects such as management systems, to-do lists, shopping lists, event notification systems, projects that many people can find themselves with.
Motivated by this passion, I graduated with a bachelor's degree in computer engineering from the University of Roma Tre, simultaneously working in a startup and finally earning a master's degree with honors in 2021.
In my first experience in the company, I realized that at least half of the technologies used I had no idea what they were, the few things I had studied that were used in the company were completely different from how I had approached them in college. Yes, I felt quite stressed and scared.
However, my college years have taught me that dedication and study can defeat any learning curve, no matter how difficult. Whenever I am faced with something I do not know, whether it is due to a new job or exploration of a promising technology, I always look for video tutorials to acquire the basics.
2) 🛠️ Technologies and learning materials
I want to share with you some material that I have used in approaching these technologies that I think are very important for a developer in 2023 to know about.
1) 🐳 Docker
Docker is like a magic box for your software. Instead of having to set up your programs on different computers and hoping they work the same everywhere, Docker lets you put everything your software needs into a special container. It's like a package that includes all the tools, files, and settings your program requires to run smoothly. Docker makes it easy to share and move your programs without any hiccups, making life simpler for developers and their creations.
I have to admit that I had a very hard time understanding it, I don't know everything, but at least all the fundamentals that allow me to work and debug the applications that I manage.
I have taken several paid courses, but the best resource I can recommend is this series of free YouTube videos for a total duration of about 3 hours. Again, you won't become a guru at least you will be able to create images, containers, etc. without any problems.
As an exercise I decided to dockerize an application I had developed so that I could run it on a container rather than installing all the dependencies on my machine, it has served me well, especially in my corporate work!
2) 🚀 Node.js
Node.js is a runtime environment that allows you to run JavaScript on the server side. It's built on the V8 JavaScript runtime and operates on a non-blocking, event-driven model. What makes Node.js powerful is its ability to handle many connections simultaneously, making it well-suited for building scalable and real-time applications. It's particularly adept at managing I/O operations efficiently, making it a popular choice for web servers and applications that require high concurrency and low-latency responses. With Node.js, developers can leverage a single language (JavaScript) for both client and server-side development, streamlining the development process and enhancing code reuse.
I wrote a post of why I moved from Rails to Node.js and why I think it was a good decision, if you missed the post you can find it:
I took this course on the Udemy platform https://www.udemy.com/course/nodejs-the-complete-guide/, a little long, about 40 hours, but done very well. There is to say that specific to Node.js the duration is much less, as other technologies such as NoSQL databases, Orm, GraphQL and Websocket are also addressed. Knowing them is definitely a plus, I recommend it!
3) 🔄 Git
Git is a distributed version control system designed for tracking changes in source code during software development. Git allows multiple developers to collaborate on projects efficiently. It operates with a decentralized model, where each contributor has their own complete repository, including the entire project history. Git's strength lies in its ability to efficiently manage branches, enabling parallel development and easy merging of changes. It ensures data integrity with cryptographic hashing and provides a robust framework for version control, facilitating collaboration, tracking changes, and enabling the seamless integration of new features into software projects.
The various experiences in the companies have helped me in finding what the best way and workflow of how to use Git.
I will soon publish a post with my typical everyday usage, the commands I use most often, the aliases I've configured, and a list of classic problems and how to solve them.
Stay tuned! 📺
4) 🔍 Elasticsearch
Elasticsearch is a distributed search and analytics engine. It's designed to handle and analyze large volumes of data quickly and in real-time. Built on top of the Lucene search library, Elasticsearch uses a distributed architecture, allowing it to scale horizontally across multiple nodes. Its primary strength lies in its ability to index and search vast amounts of data with remarkable speed. Elasticsearch is commonly used for full-text search, log data analysis, and as a powerful tool for implementing complex search functionalities in various applications. Its versatility, speed, and scalability make it a popular choice for businesses dealing with extensive data sets.
I used it to implement a user-submitted string search system to search both with exact and full text search using custom analyzers and tokenizers. This system has two indexes, one of 10 million, the other of 150 million documents.
I recommend this course on Udemy: https://www.udemy.com/course/elasticsearch-motore-di-ricerca-full-text/
5) 🗄️ Redis
Redis is an in-memory data structure store often used as a cache or message broker. Unlike traditional databases that store data on disk, Redis keeps its data in RAM, allowing for extremely fast read and write operations. It supports various data structures such as strings, hashes, lists, sets, and more, making it versatile for different use cases. Redis is known for its simplicity and high performance, making it an ideal solution for scenarios where low-latency access to data is crucial. Commonly used in caching, real-time analytics, and task management, Redis provides a reliable and efficient way to handle and process data in memory.
I used it in a travel system to cache scheduling results for planes and trains to avoid doing the same searches at close times. I also use it to handle concurrency on shared resources, Redis offers primitives that operate atomically.
I recommend their documentation https://redis.io/docs/ and this course on Udemy that I took: https://www.udemy.com/course/learn-redis-from-scratch/
6) ⚛️ React
React is a JavaScript library for building user interfaces, particularly for single-page applications where user interactions are crucial. Developed and maintained by Facebook, React follows a component-based architecture. Developers can create reusable UI components, which are small, self-contained building blocks. One of React's key features is its virtual DOM (Document Object Model), a lightweight representation of the actual DOM. React efficiently updates and renders components by only manipulating the parts of the DOM that have changed, resulting in a more responsive and performant user interface. With its declarative syntax and unidirectional data flow, React simplifies the process of building complex and interactive web applications.
Although I don't do frontend work I also think it is very important to know the tools that are used, to get a more complete picture of the overall functioning of the system.
I took this course: https://www.udemy.com/course/react-the-complete-guide-incl-redux/, very long, but really well done.
And that’s it for today! I hope you find this episode useful in your work or personal projects.
If you are finding this newsletter valuable, consider doing any of these:
🍻 Read with your friends — Implementing lives thanks to word of mouth. Share the article with someone who would like it.
📣 Provide your feedback - We welcome your thoughts! Please share your opinions or suggestions for improving the newsletter, your input helps us adapt the content to your tastes.
I wish you a great day! ☀️
Marco