Self-Taught Learning

Francesco Ciannavei

Self-Taught Learning

Sep. 2019 - Today

My passion for computer science was born during my high school years, when I had my first encounter with programming through studying Java. What initially seemed like just another school subject quickly transformed into a true vocation. Following lessons wasn't enough for me: I wanted to understand how things worked, I wanted to build something of my own.

First steps: Node.js and Discord

Alongside my school classes, I began exploring the world of programming on my own. I chose Node.js as my first experimentation environment and started developing bots for Discord. These seemingly simple projects taught me fundamental concepts: handling asynchronous events, interacting with external APIs, data persistence, and error handling in production.

Creating something that other people actually used gave me incredible motivation. Seeing my code work in real scenarios, having to fix bugs reported by users, and adding features requested by the community made me understand that programming isn't just about writing code: it's about solving problems for people.

Expanding my skills

From that moment on, I never stopped. I continued to deepen my JavaScript knowledge, exploring both frontend and backend. I studied Python, appreciating its versatility and power for automation and data analysis. I approached Golang, attracted by its efficiency and the simplicity of its concurrency model.

I dedicated significant time to database management systems, particularly PostgreSQL and MySQL. Understanding how to structure data efficiently, optimize queries, and design scalable schemas has become one of my strongest skills.

Every new technology I study doesn't remain theory. I always apply it in concrete projects, even small ones, because I firmly believe that real learning happens when you get your hands in the code and face real problems.

The home server room: my personal laboratory

One of the aspects that most characterizes me is my small home server room. It's not just a hobby: it's my experimentation laboratory, the place where I put into practice everything I learn.

I manage a Linux infrastructure with Docker, automated backup systems, and monitoring. This environment allows me to test configurations, environments, and tools in real contexts, without the limitations of a simple local development environment.

I'm currently working on building an infrastructure dedicated to running and integrating artificial intelligence models. I handle hardware optimization, autonomous workload management, and integration of different services. It's an ambitious project that's teaching me a great deal about distributed systems, resource management, and modern architectures.

The philosophy of continuous learning

To this day, I dedicate part of my free time to study and experimentation. I don't consider learning as something separate from work: it's an integral part of who I am as a developer.

I'm particularly interested in Go for its performance and simplicity, in machine learning for its transformative potential, and in Large Language Models for their practical applications. In my current work, I've already had the opportunity to implement a Retrieval Augmented Generation system, demonstrating that self-study can quickly translate into concrete value for professional projects.

My approach is pragmatic: I don't study technologies for the sake of accumulating knowledge, but to bring value, performance, and maintainability to the projects I work on. Every new skill must have a practical application, must solve a real problem.

This self-taught journey, which began almost six years ago, has shaped me as a professional. It taught me to be autonomous in problem-solving, not to give up in the face of difficulties, and to always keep alive the curiosity that pushed me to write my first lines of code.

Tools and languages used:

Developer PHP

PHP

Developer Golang

Golang

Developer Python

Python

Developer Ollama Api

Ollama Api

Developer Git

Git

Developer Laravel

Laravel

Developer CodeIgniter

CodeIgniter

Developer jQuery

jQuery

Developer Astro.js

Astro.js

Developer Apache

Apache

Developer Docker

Docker

Developer Linux

Linux

Developer Bash

Bash

Developer CSS

CSS

Developer SQL

SQL

Developer JavaScript

JavaScript

Developer Node.js

Node.js

Developer Composer

Composer

Developer Cloudflare

Cloudflare

Developer CI/CD Pipelines

CI/CD Pipelines

Developer Debugger

Debugger