{"id":1961,"date":"2020-05-27T10:39:00","date_gmt":"2020-05-27T08:39:00","guid":{"rendered":"https:\/\/reteinformaticalavoro.it\/blog\/blog\/2020\/05\/27\/framework-cosa-sono-e-quali-dominano-le-classifiche\/"},"modified":"2021-12-06T16:04:10","modified_gmt":"2021-12-06T15:04:10","slug":"framework-cosa-sono-e-quali-dominano-le-classifiche","status":"publish","type":"post","link":"https:\/\/reteinformaticalavoro.it\/blog\/framework-cosa-sono-e-quali-dominano-le-classifiche\/","title":{"rendered":"Framework: cosa sono e quali dominano le classifiche"},"content":{"rendered":"<h2><b>Definizione e caratteristiche di un framework<\/b><\/h2>\n<p>In informatica, un framework \u00e8 un sistema<b> che consente di estendere le funzionalit\u00e0<\/b> del linguaggio di programmazione su cui \u00e8 basato, fornendo allo sviluppatore una struttura coerente ed efficace al fine di <b>effettuare azioni e comandi in modo semplice e veloce<\/b>.<\/p>\n<p>In sostanza, si pu\u00f2 definire un framework come un insieme di <b>funzioni e tool gi\u00e0 \u201cpronti all\u2019uso\u201d<\/b>, ovvero che si possono utilizzare senza doverli progettare da zero ogni volta.\u00a0Nel design del software, i framework possono seguire approcci <b>Single-Page <\/b>o<b> Multi-page<\/b>, lato server e lato client, e possono basarsi su azioni o su componenti. I <b>componenti principali di un framework<\/b> sono costituiti da classi collegate tra loro, a cui vengono assegnati dei metodi; tali componenti <b>possono essere statici<\/b>, ovvero immutabili (Frozen spot), <b>oppure flessibili<\/b>, dunque modellabili (Hot spot).<\/p>\n<p>Interessante la distinzione tra i <b>framework che lasciano maggiore controllo allo sviluppatore<\/b> (\u201c<i>un-opinionated\u201d<\/i>) e quelli che invece <b>ne lasciano meno <\/b>(\u201c<i>opinionated<\/i>\u201d). Un esempio di framework che lascia poco controllo al programmatore \u00e8 Angular che, tuttavia, pur dando meno scelta, possiede gli strumenti necessari a rendere i processi pi\u00f9 veloci. Un esempio invece di framework definito un-opinionated \u00e8 Vue: consente maggiore libert\u00e0 di scelta, ma offre meno strumenti e strutture per fare le cose pi\u00f9 rapidamente.<\/p>\n<h2><b>Differenza tra framework e libreria<\/b><\/h2>\n<p>Il <b>framework<\/b>, dunque, non \u00e8 un linguaggio web e nemmeno una libreria di codice. Si tratta pi\u00f9 che altro di una <b>\u201cstruttura\u201d creata per la realizzazione di alcune specifiche funzioni.<\/b><\/p>\n<p>Spesso framework e libreria vengono confusi tra loro: cosa li accumuna e cosa invece li differenzia?\u00a0Entrambi sono <strong>codici scritti da qualcun altro<\/strong> per rendere il lavoro di un programmatore pi\u00f9 semplice e rapido.<\/p>\n<p>La <b>libreria<\/b> \u00e8 per\u00f2 un insieme di <b>funzioni specializzate per un determinato compito di un progetto<\/b>, quindi viene in aiuto per una parte del progetto. Quando si usa una libreria, infatti, viene presa solo una piccola porzione di codice, che viene messa all\u2019interno del progetto: <b>il programmatore decide quando chiamarla, come usarla e dove<\/b>.<\/p>\n<p>Quando invece si utilizza un <b>framework<\/b> \u00e8 lui stesso che va a definire la struttura del codice e del progetto e che <b>stabilisce quando chiamare codice<\/b> e quando impostarlo (Inversion of Control).<\/p>\n<p>In pratica, quando abbiamo una libreria la mettiamo all\u2019interno del codice, quando invece abbiamo un framework mettiamo il codice dentro il framework.<\/p>\n<h2><b>Quali sono i vantaggi di usare un framework?<\/b><\/h2>\n<p>Non \u00e8 indispensabile: si tratta pi\u00f9 che altro di uno dei tanti strumenti che lo sviluppatore ha a sua disposizione <b>per programmare meglio e pi\u00f9 velocemente<\/b>. Proprio per queste sue caratteristiche, sono diventati sempre pi\u00f9 fondamentali per lo sviluppo di siti web e app.<\/p>\n<p>Infatti, ricapitolando, <b>consentono di<\/b>:<\/p>\n<ul>\n<li>ottimizzare tempi, costi e benefici;<\/li>\n<li>evitare al programmatore di riscrivere codice gi\u00e0 scritto in precedenza per compiti simili;<\/li>\n<li>organizzare e trovare rapidamente i file necessari;<\/li>\n<li>concentrarsi sul problema da risolvere, senza dover implementare funzionalit\u00e0 che qualcun altro ha gi\u00e0 provveduto a creare.<\/li>\n<\/ul>\n<p>La maggior parte delle volte i framework sono gratuiti. <b>Alcuni tra i pi\u00f9 diffusi sono nati da grosse aziende<\/b>: gli stessi React e Angular sono due progetti rispettivamente di Facebook e Google. Il budget e il tempo messi a disposizione da queste rinomate realt\u00e0, ha fatto s\u00ec che i loro framework fossero sempre supportati, che evolvessero e crescessero insieme alle community di riferimento.<\/p>\n<p><img loading=\"lazy\" src=\"https:\/\/reteinformaticalavoro.it\/blog\/blog\/wp-content\/uploads\/2020\/05\/framework_reteinformaticalavoro-1024x1024.jpg\" sizes=\"(max-width: 1024px) 100vw, 1024px\" srcset=\"https:\/\/reteinformaticalavoro.it\/blog\/blog\/wp-content\/uploads\/2020\/05\/framework_reteinformaticalavoro-1024x1024.jpg 1024w, https:\/\/reteinformaticalavoro.it\/blog\/blog\/wp-content\/uploads\/2020\/05\/framework_reteinformaticalavoro-150x150.jpg 150w, https:\/\/reteinformaticalavoro.it\/blog\/blog\/wp-content\/uploads\/2020\/05\/framework_reteinformaticalavoro-300x300.jpg 300w, https:\/\/reteinformaticalavoro.it\/blog\/blog\/wp-content\/uploads\/2020\/05\/framework_reteinformaticalavoro-768x768.jpg 768w\" alt=\"framework quali scegliere\" width=\"1024\" height=\"1024\" \/><\/p>\n<h2><b>Quali sono i framework pi\u00f9 popolari?<\/b><\/h2>\n<p>Nel 2019 <a href=\"https:\/\/insights.stackoverflow.com\/survey\/2019#technology-_-web-frameworks\" target=\"_blank\" rel=\"noopener noreferrer\">Stackoverflow<\/a> ha condotto una ricerca su programmatori esperti di tutto il mondo, chiedendo quale fosse il framework per applicazioni web da loro utilizzato.<\/p>\n<p><strong>Questa \u00e8 la classifica sulla base dei risultati ottenuti:\u00a0<\/strong><\/p>\n<ol>\n<li>jQuery (48.3%)<\/li>\n<li>Angular\/Angular.js (32.4%)<\/li>\n<li>React.js (32.3%)<\/li>\n<li>ASP.NET(27.2%)<\/li>\n<li>Express (19.5%)<\/li>\n<li>Spring (17.2%)<\/li>\n<li>Vue.js (15.5%)<\/li>\n<li>Django (12.3%)<\/li>\n<li>Flask (11.7%)<\/li>\n<li>Laravel (10.4%)<\/li>\n<li>Ruby on Rails (8.4%)<\/li>\n<li>Drupal (3.5%)<\/li>\n<\/ol>\n<p>Un fatto curioso riguarda altre due classifiche stilate sempre da Starckoverkflow: pare che nella <b>top 3 dei framework pi\u00f9 temuti<\/b> ci siano Drupal (69.9%), jQuery (54.7%) e Ruby on Rails (42.9%), mentre <b>quelli pi\u00f9 amati risultano essere<\/b> React.js (74.5%), Vue.js (73.6%) ed Express (68.3%).<\/p>\n<p><strong>Di seguito, una lista dei framework pi\u00f9 diffusi a seconda del linguaggio di programmazione con cui sono scritti:<\/strong><\/p>\n<p>&#8211; Laravel \/ Symfony \/ Drupal \u2014&gt; <a href=\"https:\/\/reteinformaticalavoro.it\/blog\/blog\/php-cose-a-cosa-serve-e-perche-diventarne-un-esperto\/\" target=\"_blank\" rel=\"noopener noreferrer\"><b>PHP<\/b><\/a><\/p>\n<p>&#8211; Angular JS \/ React JS\/ JQuery \/ Express \/ Vue.js \u2014&gt; <b>Javascript<\/b><\/p>\n<p>&#8211; Spring \u2014&gt; <b>Java<\/b><\/p>\n<p>&#8211; Django \/ Flask \u2014&gt; <b>Python<\/b><\/p>\n<p>&#8211; Ruby on Rails \u2014&gt; <b>Ruby<\/b><\/p>\n<h2><b>Quale framework scegliere?<\/b><\/h2>\n<p>Ma come scegliere il framework pi\u00f9 adatto? Innanzitutto occorre <b>interrogarsi sul tipo di applicazione e l\u2019architettura desiderata<\/b> (lato client, lato server). Poi, chiaramente, sulla scelta influisce anche il livello di conoscenza di programmazione che si possiede.<\/p>\n<p>Dal momento in cui quasi tutti i linguaggi di programmazione offrono pi\u00f9 di un framework, la scelta potr\u00e0 ricadere su uno o sull\u2019altro <b>in base alle loro caratteristiche<\/b>. Abbiamo riassunto alcune delle peculiarit\u00e0 di React e Angular, per quanto riguarda Javascript, e di Laravel e Symfony, per quanto concerne il linguaggio PHP.<\/p>\n<h4><b>Angular vs. React<\/b><\/h4>\n<p><b>Angular<\/b><b><br \/>\n<\/b><\/p>\n<ul>\n<li>si basa su TypeScript<\/li>\n<li>fa uso di una speciale sintassi<\/li>\n<li>\u00e8 omnicomprensivo, ovvero \u00e8 completo di tutto ci\u00f2 che serve per realizzare un\u2019applicazione, dunque evita allo sviluppatore di dover integrare librerie esterne<\/li>\n<li>data binding bidirezionale<\/li>\n<li>curva di apprendimento lunga e ripida<\/li>\n<\/ul>\n<p><b>React<\/b><\/p>\n<ul>\n<li>fa uso di ES6 o TypeScript<\/li>\n<li>utilizza JSX, un preprocessore di codice HTML like, cos\u00ec da rendere il codice JavaScript simile all\u2019HTML<\/li>\n<li>lascia allo sviluppatore la scelta e l\u2019integrazione delle librerie<\/li>\n<li>data binding unidirezionale<\/li>\n<li>curva di apprendimento pi\u00f9 semplice<\/li>\n<\/ul>\n<h4><b>Symfony vs. Laravel<\/b><\/h4>\n<p><b>Symfony<\/b><\/p>\n<ul>\n<li>altamente flessibile<\/li>\n<li>permette di impiegare tutte le componenti dell\u2019intero framework o costruire un bundle con funzionalit\u00e0 desiderate<\/li>\n<li>comprende un\u2019unit\u00e0 di testing built-in per il monitoraggio delle proprie applicazioni<\/li>\n<li>ha una community molto attiva che propone sempre aggiornamenti e miglioramenti<\/li>\n<li>offre interfacce chiare e intuitive<\/li>\n<\/ul>\n<p><b>Laravel<\/b><\/p>\n<ul>\n<li>sintassi elegante, coincisa ed espressiva<\/li>\n<li>produzione pi\u00f9 rapida e semplice di compiti frequenti (lato server) come autenticazione utente, gestione sessioni ecc.<\/li>\n<li>funzionalit\u00e0 pensate per lo sviluppo di app moderne<\/li>\n<li>pu\u00f2 essere esteso tramite l\u2019installazione di nuovi vendor<\/li>\n<li>community molto numerosa e attiva, che mette a disposizione documenti, tutorial, risoluzione di problemi ecc.<\/li>\n<li>routing semplice e pulito<\/li>\n<\/ul>\n<h3><b>\u00a0Quale framework utilizzate e quale vi piacerebbe imparare?<\/b><\/h3>\n<p>Un framework velocizza e semplifica il lavoro tanto di un developer quanto della stessa azienda che decide di adottarlo. L\u2019utilizzo di un f<b>ramework implica un investimento in termini di apprendimento<\/b>, ma considerato il tempo che andr\u00e0 a far risparmiare in futuro, <b>vale la pena impararne almeno uno<\/b>.<\/p>\n<p>Quale? La vera risposta \u00e8: <i>dipende<\/i>. Se non ne avete ancora imparato uno e siete indecisi su quale puntare, potete iniziare considerando l\u2019indice di popolarit\u00e0 attuale dei framework e le vostre necessit\u00e0 di sviluppo.<\/p>\n<p><i>Ora lasciamo la parola a voi: quale framework utilizzate di pi\u00f9 e quale ancora non conoscete e vi piacerebbe imparare?<\/i><\/p>\n<p><a role=\"button\" href=\"https:\/\/bit.ly\/3vhoQPF\"><br \/>\nRIVEDI I NOSTRI WEBINAR DEDICATI AI FRAMEWORK<br \/>\n<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Definizione e caratteristiche di un framework In informatica, un framework \u00e8 un sistema che&hellip;<\/p>\n","protected":false},"author":1,"featured_media":1556,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[207],"tags":[273,321,220,222,320],"_links":{"self":[{"href":"https:\/\/reteinformaticalavoro.it\/blog\/wp-json\/wp\/v2\/posts\/1961"}],"collection":[{"href":"https:\/\/reteinformaticalavoro.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/reteinformaticalavoro.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/reteinformaticalavoro.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/reteinformaticalavoro.it\/blog\/wp-json\/wp\/v2\/comments?post=1961"}],"version-history":[{"count":2,"href":"https:\/\/reteinformaticalavoro.it\/blog\/wp-json\/wp\/v2\/posts\/1961\/revisions"}],"predecessor-version":[{"id":2217,"href":"https:\/\/reteinformaticalavoro.it\/blog\/wp-json\/wp\/v2\/posts\/1961\/revisions\/2217"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/reteinformaticalavoro.it\/blog\/wp-json\/wp\/v2\/media\/1556"}],"wp:attachment":[{"href":"https:\/\/reteinformaticalavoro.it\/blog\/wp-json\/wp\/v2\/media?parent=1961"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/reteinformaticalavoro.it\/blog\/wp-json\/wp\/v2\/categories?post=1961"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/reteinformaticalavoro.it\/blog\/wp-json\/wp\/v2\/tags?post=1961"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}