JavaScript
Francesco Ciannavei
JavaScript was the language that marked the beginning of my journey as a developer in 2019. Since then, it has become a fundamental tool in my technical arsenal, used daily for both frontend development and, through Node.js, backend applications.
One Language, Infinite Possibilities
JavaScript's versatility is what makes it unique in the programming language landscape. It is the only language that runs natively in browsers, but its evolution has taken it far beyond the boundaries of frontend. Over the years, I have explored this ecosystem in depth, from the language fundamentals to its most advanced applications.
I have experienced JavaScript's evolution firsthand: from ES5 peculiarities to the ES6 revolution with arrow functions, destructuring, template literals, and native modules, to the most recent features like optional chaining, nullish coalescing, and top-level await. This historical knowledge allows me to work effectively on both legacy codebases and modern projects.
Experience in the Magento Ecosystem
A significant part of my JavaScript experience comes from intensive work with Magento 2, one of the most complex and widespread e-commerce platforms in the world. Magento's frontend architecture is based on a peculiar JavaScript ecosystem that I learned to master over more than two years of professional development.
I have worked extensively with RequireJS, the module loader that Magento uses to manage JavaScript dependencies. Understanding RequireJS's configuration system, its path aliases, shims for non-AMD libraries, and bundling strategies was fundamental for developing and optimizing performant custom modules.
KnockoutJS represents another pillar of the Magento experience. This MVVM framework, although less popular today compared to React or Vue, is deeply integrated into Magento 2's frontend. I have developed numerous custom UI components using Knockout bindings, computed observables, and the template system, gaining deep understanding of the MVVM pattern and bidirectional data binding.
jQuery: Solid Foundations
Despite the rise of modern frameworks, jQuery remains a valuable and actively used skill. Many enterprise projects, legacy systems, and CMS platforms still rely on this library, and the ability to work with it effectively is a concrete added value.
I have used jQuery in countless projects for DOM manipulation, event handling, animations, and AJAX calls. Its intuitive API and cross-browser compatibility made it the de facto standard of web development for years, and I understand it deeply in both its strengths and limitations.
Asynchronous Programming
One of the most critical aspects of JavaScript is handling asynchronicity. I have developed a solid understanding of the event loop, callbacks, Promises, and async/await syntax. This skill is essential for developing responsive applications that handle I/O operations, API calls, and user interactions without blocking the main thread.
I understand the common pitfalls of asynchronous programming: callback hell, race conditions, error handling in Promise chains, and know how to avoid them through established patterns and best practices. I use tools like Promise.all, Promise.race, and Promise.allSettled to efficiently orchestrate concurrent operations.
DOM Manipulation and Performance
Deep understanding of the Document Object Model is fundamental for every JavaScript developer. Beyond using abstraction libraries, I know the browser's native APIs for DOM manipulation: querySelector, addEventListener, MutationObserver, IntersectionObserver, and modern APIs like Web Components.
I pay particular attention to rendering performance: I minimize reflows and repaints, use debouncing and throttling techniques for high-frequency events, and implement patterns like virtual scrolling when necessary. Awareness of the impact JavaScript code has on browser performance guides my implementation choices.
Testing and Code Quality
I write JavaScript code with attention to testability and maintainability. I have experience with testing frameworks like Jest for unit tests and integration tests. Modularity, separation of concerns, and code documentation are principles I constantly apply to ensure code is understandable and maintainable over time.
Build and Development Tools
The modern JavaScript ecosystem includes a vast range of build tools that I know and use: Webpack for bundling, Babel for transpilation, ESLint for linting, and Prettier for formatting. These tools are an integral part of my workflow and allow me to maintain clean and optimized codebases.
JavaScript is not just a language I know: it is the tool with which I built my career and which I continue to deepen every day, aware that its constantly evolving ecosystem always offers new opportunities for learning and professional growth.
Where i've used it:
