Când vorbim despre conceptul de programabilitate, deseori apare confuzie între acesta și programarea software, astfel încât îmi propun să ofer ceva mai multă clarificare pe parcursul acestui articol. Termenul apare menționat în primele iterații ale principiului de Software Defined Networking, undeva prin 2011, în strânsă corelație cu protocolul OpenFlow, indicând spre utilizarea unei metodologii distribuite și automatizate pentru a gestiona, configura și depana infrastructura de rețea.
Pentru a putea înțelege această necesitate, trebuie să ne uităm la eternele cerințe schimbătoare ale pieței care, mai nou, caută modalități inovative pentru a-și optimiza costurile. Dacă pentru prima parte din dezvoltarea internetului schimbările aveau loc cu precădere datorită apariției unui protocol sau standard nou, care să deblocheze funcționalități sporite ale infrastructurii și să justifice achiziții noi de echipamente, am ajuns deja într-un punct în care putem discuta despre o sumedenie de soluții și servicii care nu mai au la fel de mult de-a face cu lumea fizică. Pe măsură ce avansurile făcute în dezvoltarea microprocesoarelor încep să-și atingă limitele impuse de natură (cel puțin din câte înțelegem în momentul de față, rămâne de văzut cum se vor schimba și acestea datorită tehnologiilor precum quantum), îmbunătățirile pe care le mai avem la dispoziție ajung și ele să fie dintr-o altă arie.
După cum spuneam și mai sus, trăim într-o lume aflată într-o continuă schimbare, a cărei complexitate pare să crească mai repede decât suntem noi, ca oameni, capabili să înțelegem. Domeniul tehnologic ajunge să cuprindă sub umbrela sa mai multe cunoștințe decât erau necesare la începutul internetului și să înglobeze tot mai agresiv fel de fel de concepte emergente – Internet of Things (IoT), securitate cibernetică etc. – care să completeze suita oricum stufoasă de informații pe care suntem nevoiți să o navigăm.
Prin urmare, ce putem face pentru a rezista acestui val de revoluție digitală? Cerințele companiilor devin din ce în ce mai solicitante și capacitatea umană de a procesa informații este, din păcate, limitată. Suntem influențați de emoții, nevoi fiziologice, vreme și tot felul de alți stimuli care pot perturba, cu o ușurință chiar feroce, posibilitatea de a ne utiliza procesorul biologic din dotare. Și noi, ca oameni, suntem conduși de o unitate centrală (creierul) care gestionează întregul sistem, fără însă ca acesta să ia parte direct mereu (ar fi amuzant să ajungem în momentul în care să ne putem utiliza mințile pentru a ridica sau muta obiecte). Așa că, de ce să nu facem cât ne stă în putință pentru a descărca din capacitatea noastră de procesare altundeva?
Frumusețea programabilității vine tocmai pentru a face asta! Trendul pe care îl observăm în mai toate industriile este unul de automatizare: de ce să consumăm timpul creativ al inginerilor cu activități repetitive și șablonate, când ne putem orienta să convingem pe altcineva, mai ușor de împlinit emoțional, să le ducă la bun sfârșit? Prietenii noștri digitali, cărora le voi spune AI-uri din dragul simplității, au luat naștere tocmai pentru a ne ajuta în acest sens. Iar când spun inteligență artificială nu mă refer la scenariile filmelor Sci-Fi, în care o minte robotică dumnezeiască subjugă sau dăunează existența umană. Nu, nu; există lucruri mult mai simple care pot să aibă un efect mult mai mare, însă pe scara pozitivă a lucrurilor.
Practic, orice fel de program, script sau set de instrucțiuni îi permite creatorului să culeagă, proceseze și să tragă o primă concluzie din datele sale mult mai rapid decât manual, indiferent de setul de activități, instrumente și sisteme implicate. Pentru a putea avea un astfel de proces de la cap la coadă, este necesar ca toate elementele de pe parcurs să poată schimba informații; iar aici deja nu mai discutăm doar de partea de rețelistică.
Să zicem că avem un program A, care generează o interfață grafică și este scris în Java, și un program B, care face calculele matematice statistice necesare optimizării unui proces, scris în C++. În mod implicit, cele două aplicații nu ar putea discuta între ele. Există posibilități de a lega datele care ies din B, pentru a fi dispuse în A, însă programele nu au o modalitate directă de a interacționa unul cu celălalt. Dacă am dori o anumită componentă din B să o folosim în A, ar trebui fie să o portăm în limbajul respectiv (deseori foarte ineficient), fie să deschidem un canal de comunicație, personalizat componentelor respective (iarăși ineficient).
Alternativa modernă constă în alcătuirea unui API (Application Programmable Interface). API-urile permit programelor, indiferent de limbajul utilizat în alcătuirea acestora, să comunice într-un mod cu totul adaptabil și între oricare componente. Practic, printr-un API, permiți unei comunități extinse de oameni să consume produsul inițial în fel și fel de moduri. Un astfel de exemplu îl reprezintă „boții” aplicațiilor de mesagerie. Utilizând funcțiile de transmisie și recepție de mesaje, alte entități au putut crea pachete automatizate de provizionare pentru resursele unei ședințe, preluarea unui apel etc.
O modalitate prin care se poate crea un API peste orice fel aplicație este REST (REpresentational State Transfer), care se folosește de protocolul HTTP/S pentru a asigura consumul corect al datelor și al procedurilor în ambele sensuri. Iar faptul că modelul are la bază o comunicare standard este foarte importantă, întrucât devine mult mai ușor de asigurat compatibilitatea indiferent de sistem.
Partea minunată intervine abia ulterior, însă. După ce aplicațiile permit interacțiunea prin API și încep să apară fel de fel de integrări, posibilitățile inginerești sunt, practic, infinite. Orice aplicație poate fi cuplată cu oricare alta pentru a genera o idee cu totul și cu totul inedită. Astfel, putem spune că programabilitatea permite ca orice industrie să-și lărgească orizonturile, iar, cum zilele astea datele par să fie noul petrol, putem genera surse noi de venit companiilor care adoptă trendul digital.
Nici nu se mai pune problema de cunoștințe avansate de programare pentru a face primii pași. Limbajele evoluează și ele și avem posibilități mult mai simple de reutilizat, cum este Python, în spatele căruia s-a dezvoltat o comunitate masivă. Nu trebuie neapărat să știi să rescrii de la 0 orice modul pe care îl imporți în programul tău, atâta vreme cât acesta este suficient de bine documentat și ținut la zi. Scopul tău devine mai degrabă în a-l utiliza cât mai eficient pentru sarcina la îndemână, urmând ca ulterior și tu să-l poți da mai departe. Și din aceste tot mai mici și mai dese rotițe, punem fundația pentru o roată mult mai mare care să ne poată susține pe toți.
Din perspectiva Cisco putem vedea că accentul se pune tot mai mult pe componenta de programabilitate. Dacă ne uităm la soluții din tehnologii diferite (data center, securitate, infrastructura LAN, infrastructura WAN, Wi-Fi) vom observa cu ușurință cum termenul de API apare mai des ca ciupercile după ploaie. Și pe bună dreptate; având toate aceste soluții placate cu API-uri, sunt sigur că vom ajunge cât de curând la situația în care apare o problemă în rețea, de orice natură, iar reacția administratorului, în timp ce-și soarbe leneș cafeaua, să fie „Okay Cisco, fix my network”, punându-și apoi fesul și lentilele VR pentru a vedea ce-i mai face velociraptorul crescut pe Venus.
Educația stă la baza oricărei inițiative serioase, iar pentru noi numele acesteia este DevNet. Pe platformă se pot găsi o sumedenie de laboratoare pentru diversele tehnologii care au legătură cu sfera programabilității, precum și introduceri în ce/cum se pot face actualmente cu API-urile produselor Cisco. De asemenea, în tandem cu modificările curriculei de CCNA din februarie 2020, se vor adăuga o suită de certificări despre programabilitate, care să acopere nevoile clienților în sfera Dev/Net/Sec Ops.
Nu în ultimul rând, DevNet conține și o componentă puternică de comunitate, numită DevNet Automation Exchange, prin care putem publica scenarii și reutiliza codul existent deja în această comunitate și a înlesni adopția ei în lume.
În încheiere, programabilitatea nu se referă doar la componenta de a scrie cod; programabilitatea înseamnă un mod deschis de a produce software și a distribui resursele acestora în comunitate; un mod colaborativ de a produce soluții pentru clienții noștri și, nu în ultimul rând, un mod automat de a soluționa probleme, care altfel ne-ar zgândări fragilul procesor biologic. Căci, la finalul zilei, unde nu-i cap, e vai de picioare.