Dacă citești acest articol, cel mai probabil ești programator. Și, ca orice programator, ai fost nevoit să cauți online soluții la problemele de programare pe care le întâmpini. Sunt convins că ați observat ceva interesant: în ultimii ani, atunci când căutăm un răspuns la o întrebare despre programare, printre primele trei rezultate afișate de Google se află aproape de fiecare dată un link către StackOverflow.
Aceasta nu e o coincidență: StackOverflow-ul s-a strecurat cumva în viața programatorilor, încet dar sigur. Ne folosim de el practic zilnic, dar am observat că cei mai mulți programatori nu știu prea multe despre cum s-a născut acest site, pe ce principii funcționează și de ce are atât de mult succes.
StackOverflow e doar unul din cele 119 site-uri ale rețelei StackExchange, cele două NU sunt sinonime. În acest articol, vom expune filosofi care stă la acestei rețele și vom arunca o privire de ansamblu asupra mecanismelor care îi permit să funcționeze practic independent.
Sperăm că aspectele aduse la lumină să ofere mai mult confort în utilizarea acestei rețele și să vedem o participare mai puternică din partea programatorilor români.
Înainte de StackOverflow, era foarte dificil să găsești o soluție (corectă) la o problemă de programare, cu excepția celor des întâlnite. Motivele acestei situații sunt multiple:
Pentru a rezolva aceste probleme și pentru a avea o mult mai bună accesibilitate a soluțiilor online, Joel Spolsky și Jeff Atwood decid în ianuarie 2008 să deschidă un site Q&A numit StackOverflow. Dezvoltarea acestuia a început în Aprilie 2008, iar în August 2008 acesta a fost lansat sub forma unui beta privat. După 4 săptămâni, în Septembrie 2008, StackOverflow-ul a devenit public.
Joel avea blogul joelonsoftware.com iar Jeff avea codinghorror.com. Aceste bloguri cunoscute s-au dovedit a fi rețeta de succes a StackOverflow-ului pentru că, prin intermediul lor, Jeff și Joel au popularizat noua lor idee. Au făcut aceasta printr-un Podcast în care vorbeau despre site și pe care l-au postat pe cele două bloguri. Acesta a fost un aspect important pentru ca un vizitator nou să poată găsi conținut de calitate încă de la bun început.
StackOverflow-ul e o combinație între un forum, un blog, un wiki și un agregator de știri. Ideea de bază e ca oamenii să întrebe și să primească răspunsuri, nu doar să comenteze aiurea. E un loc unde calitatea este votată și promovată, iar conținutul inutil este împins în jos și dispare.
În StackOverflow se vrea acumularea a cât mai multe cunoștințe de programare și soluții ale problemelor din acest domeniu. Comunitatea evaluează toate problemele și soluțiile prin intermediul votării. Pe măsură ce voturile se acumulează, experții și oamenii de încredere ies la iveală, iar comunitatea are încredere tot mai mare în ei.
A fost un succes instantaneu, fapt care i-a convins pe fondatori să deschida ServerFault în Aprilie 2009, un site pentru administratorii de sistem bazat pe aceeași filosofie ca StackOverflow-ul. A urmat SuperUser în Iulie 2009, un site pentru utilizatori entuziaști ai computerelor.
Succesul acestor site-uri a pus baza rețelei StackExchange, care acum cuprinde o multitudine de site-uri, toate urmând aceeași structură și filosofie de funcționare pe care a fost construit StackOverflow-ul.
Modificarea și menținerea conținutului într-o stare cât mai actualizată este crucială pe site-urile StackExchange-ului. Accesibilitatea conținutului este de asemenea foarte importantă, site-urile practicând politici agresive de SEO.
Popularitatea StackOverflow-ului și prezența constantă a programatorilor în mediul online are o consecință interesantă: atunci când apare o nouă tehnologie sau un nou limbaj de programare, în loc să fie create forumuri sau site-uri pentru suport, utilizatorii acestora sunt redirecționați spre tag-urile corespunzătoare de pe StackOverflow.
După cum am menționat în introducere, rețeaua StackExchange are 119 site-uri. Acest număr variază în timp (vezi capitolul "Area51").
Fiecare dintre aceste site-uri funcționează pe aceleași principii de bază: sunt site-uri de Q&A, folosesc aceeași platformă și au ca utilizatori țintă acei oameni care activează în mod profesionist într-un anumit domeniu.
Diferența e că fiecare are propria lui comunitate care le conduce și administrează total independent de celelalte site-uri. De fapt, singura colaborare este atunci când întrebările migrează de la un site la altul; fiind vorba de aceeași platformă, acest lucru este posibil.
Fiecare site are propriul lui subiect, dar varietatea acestora menționată în titlu este prea modestă. Cele mai populare subiecte sunt cele axate în jurul programatorilor și tehnologiilor, remarcându-se printr-o diversitatea foarte mare: de la matematică, jocuri pe calculator, poker, sporturi, politică și fotografie până la management financiar, șah, design grafic, sfaturi părintești, istorie, religie și lingvistică. Sunt foarte slabe șanse să nu îți găsești măcar unul sau două hobby-uri sau interese printre multitudinea de subiecte.
După cum am menționat mai sus, fiecare site are ca scop acumularea a cât mai multă informație prin intermediul experților din acel domeniu prezenți pe site. Atunci când cineva caută o anumită informație, trebuie ca rezultatul să fie un răspuns profesionist, obiectiv și complet. Acesta e idealul comunităților StackExchange.
Filosofia rețelei include conceptul de a face publică întreaga informație a acesteia. Orice întrebare sau răspuns care ajunge pe rețea intră automat sub incidența licenței Creative Commons Attribution-ShareAlike. Aceasta înseamnă că fiecărei persoane îi este recunoscut dreptul de autor asupra respectivului text, care trebuie să rămână 100 % public, putând fi folosit și modificat de oricine (cu condiția ca modificarea să rămână sub incidența aceleași licențe), inclusiv cu scopuri comerciale.
Atribuirea acestei licențe conținutului permite folosirea datelor în multe feluri. Vezi capitolul "Big Data" pentru mai multe detalii.
În mare, sistemul este foarte simplu: o persoană pune o întrebare și alții răspund. Fiecare întrebare și fiecare răspuns pot fi votate cu un "upvote" sau cu un "downvote". În funcție de aceste voturi, autorul primește "reputație" sub formă de puncte. Cu cât mai multe puncte se acumulează, cu atât mai multe privilegii vei primi și comunitatea va avea încredere mai mare în tine.
Un "upvote" aduce autorului +5 puncte dacă e vorba de o întrebare și +10 puncte dacă e vorba de un răspuns. Această discrepanță este pentru că răspunsurile sunt cele care oferă cel mai de calitate conținut, prin urmare sunt valorificate mai mult.
Un "downvote" scade reputația autorului cu 2 puncte, indiferent dacă e vorba de o întrebare sau de un răspuns. În schimb, dacă acorzi un "downvote" unui răspuns, și ție îți va scădea reputația cu 1 punct. Această decizie a fost luată pentru a încuraja îmbunătățirea răspunsurilor, nu doar marcarea lor ca fiind de calitate proastă.
Fiecare întrebare trebuie să aibă tag-uri: minim 1, maxim 5. Aceste tag-uri ajută la categorisirea întrebărilor, pentru a fi mai ușor de sortat și găsit. De exemplu, o întrebare despre cum se aplica un Look-and-feel în Java va avea probabil tag-urile "java", "swing" și "look-and-feel".
Autorul întrebării este încurajat să aleagă un răspuns ca fiind cel mai bun. În acest caz, autorul răspunsului va primi +15 puncte, iar autorul întrebării va primi +2 puncte.
Privilegiile obținute pe măsură ce crește reputația sunt variate: crearea de bounty-uri, flag-uri de atenționare a moderatorilor, camere de chat, posibilități tot mai avansate de editare și protejare a conținutului și multe altele.
Fiind o rețea bazată pe ideea de rețea socială, moderarea se face un pic altfel. Aceasta e împărțită în trei nivele:
a) Membrii obișnuiți fac cele mai multe activități de moderare. Aceștia modifică conținutul de pe site-uri, pot vota să închidă sau chiar să șteargă anumite întrebări și pot atrage atenția moderatorilor asupra anumitor aspecte. Pentru a face toate astea, membrii au acces la niște unelte de revizuire care devin accesibile pe măsură ce membrul acumulează reputație. Cei cu reputație foarte mare au acces chiar și la o parte din uneltele moderatorilor.
Prin urmare, cele mai multe și mai des întâlnite probleme sunt rezolvate de către membri, fiind o comunitate care se administrează singură.
b) Moderatorii sunt polițiștii rețelei, aceștia intervin acolo unde comunitatea nu poate. Ei se ocupă de flag-urile de atenționare, identifică conturi duble, migrează întrebări de pe un site pe altul, fac managementul tag-urilor și multe altele. Printre cele mai importante atribuții, însă, se află rezolvarea disputelor și certurilor.
Numărul de moderatori fluctuează constant, de obicei sunt între 700 și 1000 în întreaga rețea. Aceștia sunt aleși de către Community Managers atunci când un site e în private beta și în public beta. În aceste stagii ale site-urilor, moderatorii sunt aleși pe baza activității și diplomației de care dau dovada pe respectivul site.
Odată ce un site ajunge la maturitate, se organizează alegeri democratice, unde membrii se auto-nominalizează și apoi sunt votați de către restul comunității în funcție de discursurile oferite. Aceste alegeri pot avea loc de mai multe ori. De exemplu, pe StackOverflow, aceste alegeri sunt ținute o dată sau de două ori pe an.
c) Atunci când apar situații excepționale, problemele sunt rezolvate de către un Community Manager. Aceștia sunt angajați ai StackExchange-ului, al căror rol este să se asigure că totul funcționează corect, monitorizează și ghidează activitatea în Area51, răspund la întrebari pe site-urile Meta și oferă ghidare în folosirea uneltelor disponibile în rețea.
Rețeaua are o foarte puternică tendință de wiki. Membrii sunt încurajați să modifice și să îmbunătățească constant conținutul de pe site. Este atât de puternică această tendință încât membrii sunt încurajați să-și adauge cunoștințele sub formă de întrebări și răspunsuri, adică să-și răspundă la propria întrebare. În acest sens, fiecare întrebare împreună cu răspunsurile asociate sunt un fel de pagină wiki despre un anumit subiect. Ca să vă faceți o idee: 39 % din întrebări și 19% din răspunsuri sunt modificate cel puțin o dată după post-are[1].
Există situații când, pentru a răspunde la o întrebare, este nevoie de multă cercetare care să conducă la un răspuns foarte complex care să implice mai mulți autori lucrând împreună sau liste lungi de răspunsuri. De exemplu o întrebare de tipul "Care sunt cele mai bune cărți de programare ?" implică un răspuns de o asemenea complexitate.
În acest caz, întrebarea va primi foarte multe răspunsuri care vor deveni populare, vor primi "upvote"-uri și vor fi modificate foarte des de către mulți oameni. Aceste aspecte ridică o problemă interesantă: dacă atât de mulți oameni contribuie la respectivul conținut, este cinstit ca autorul original să primească atât de multă reputație ?
Pentru a rezolva această problemă, întrebările de acest gen sunt marcate ca fiind "Community Wiki". Aceasta înseamnă că reputația generată de acea întrebare și de răspunsurile asociate ei nu va fi atribuită nimănui. Autorul nu va mai fi afișat, ci membrul care a contribuit cel mai mult la respectivul conținut. De asemenea, modificarea lor e mult mai accesibilă pentru că pragul privilegiului pentru aceasta cade de la reputație 2000 la reputație 100.
În vremurile timpurii ale rețelei, se puteau adăuga doar întrebări și răspunsuri. Dar membrii aveau nevoie de un loc unde să discute regulile site-urilor, variatele situații excepționale care apăreau și calitatea întrebărilor și răspunsurilor.
Așa că s-a introdus un sistem prin care membrii să poată adăuga comentarii atât întrebărilor cât și răspunsurilor. Aceste comentarii pot primi "upvote"-uri, însă fără a genera reputație.
Un alt sistem de acest gen este chat-ul, unde membrii pot vorbi despre tot și orice. Chat-ul este împărțit în "camere", fiecare având propria discuție. În general, fiecare site are camera lui, însă noi camere pot fi create de membri care au suficiente privilegii pentru aceasta. Există și camere dedicate exclusiv moderatorilor, pentru ca aceștia să poată discuta probleme de moderare fără intervenția utilizatorilor obișnuiți.
Fiecare site din rețea are un site Meta asociat. Acestea sunt separate dar funcționează pe aceleași principii. Singurul lucru pe care-l au în comun cu site-ul părinte sunt moderatorii. Pe ele se discută doar aspecte legate de site-ul părinte, adăugarea sau eliminarea de reguli, se pun anunțuri și multe altele. Site-urile Meta sunt create atunci când site-ul părinte ajunge în stadiul de private beta (vezi "Area51").
După cum am menționat în capitolele precedente, rețeaua are un număr foarte mare de site-uri, fiecare cu subiectul lui. Dar cum se nasc aceste site-uri ? Și cine decide care site-uri se deschid și ce subiecte vor avea ? Răspunsul este: tu, membrul de rând. Rețeaua e socială la bază, prin urmare comunitatea este cea care decide ce site-uri noi trebuie să apară și pe baza căror reguli vor funcționa.
Acest proces are loc în Area51, un site special unde site-urile sunt definite și lansate aplicând următorii pași:
StackOverflow are momentan 3 milioane de utilizatori și 6.6 milioane de vizitatori zilnici. Este cel mai popular site al rețelei și generează peste 80 % din întrebările, răspunsurile și traficul acesteia [2]. Prezența unei astfel de audiențe uriașe de programatori deschide porțile unei oportunități unice: job-uri și cariere. Așa s-a născut Careers.StackOverflow, un fel de LinkedIn strict pentru programatori și profesioniști IT.
Fiecare membru își poate crea un profil, un CV electronic. Pe acesta se pot trece o sumedenie de informații: de la istoria job-urilor avute, tehnologiile cu care s-a lucrat și articole scrise până la proiectele realizate și cărțile citite. Pentru o cât mai bună funcționare, site-ul are integrare cu LinkedIn, GitHub, BitBucket, Amazon, SourceForge și multe altele. Profilele avute pe diferitele site-uri StackExchange pot fi listate și ele aici, împreună cu cele mai bune și mai votate răspunsuri de pe acestea.
Nici companiile nu sunt lăsate mai prejos: acestea pot să își creeze propriile pagini de profil unde să includă o descriere a companiei, o hartă cu locația acesteia, job-urile disponibile în acel moment, poze, lista cu profilele unor angajați cheie, beneficii, tehnologiile folosite în proiecte și multe altele.
Toate profilele, întrebările, răspunsurile, comentariile adăugate în rețeaua StackExchange sunt puse la dispoziția publicului printr-o serie specială de site-uri și API-uri. Acest lucru este posibil datorită licenței, vezi capitolul "Licența asupra conținutului".
Acesta este un site special care permite oricui accesul la conținutul rețelei StackExchange. Membrii pot scrie query-uri SQL într-un câmp mare de text, pot să execute aceste query-uri și să vadă rezultatele în timp real. Pentru a ajuta utilizatorul în acest sens, site-ul permite vizualizarea completă a structurii tabelelor bazelor de date.
Datorită faptului că arhitectura StackExchange-ului funcționează folosind baze de date SQL Server, query-urile trebuie să respecte sintaxa corespunzătoare acestui produs.
Bazele de date folosite de acest site nu sunt aceleași ca acele folosite în producție de către site-urile StackExchange, ci e vorba de o copie a acestora. Aceasta înseamnă că nu vei obține cele mai actualizate date. O actualizare a bazelor de date de pe Data.StackExchange are loc de obicei o dată pe lună.
Utilizatorii care se loghează pe acest site pot să-și salveze query-urile și să revină oricând la ele pentru a le modifica și îmbunătăți.
Având în vedere natura publică a datelor, anumite informații nu sunt accesibile prin acest site, cum ar fi de exemplu e-mail-urile membrilor.
Un alt mod de a accesa datele de pe rețea e prin StackExchange API, care e un webservice REST cu rezultate în format JSON sau JSONP (padded JSON).
Acest API poate fi folosit în aplicații 3rd-party orientate spre rețeaua StackExchange; deja există o multitudine publicate, în special pentru platformele mobile.
O mare parte din date nu pot fi accesate prin acest API decât prin autentificare. Pentru a face aceasta, aplicația trebuie înregistrată în StackApps, moment în care se va primi o cheie de autentificare și se va permite efectuarea unui trafic mult mai mare către API.
StackApps este, după cum am afirmatmai sus, un site unde aplicațiile care se folosesc de API pot fi înregistrate. Autorii își prezintă aici aplicația împreună cu instrucțiuni pentru instalarea acestora. De asemenea, discuții legate de API și folosirea lui au loc tot aici.
Formatul și filosofia pe care a fost construită rețeaua StackExchange este de un real succes, popularitatea acesteia fiind evidentă. Site-urile de aici au ușurat mult munca a milioane de oameni din toate domeniile. Personal, economisesc foarte multe ore folosind aceste site-uri, ore care altfel le-aș petrece scormonind colțuri îndepărtate ale Internetului pentru a găsi răspunsuri la întrebări. Este practic imposibil să calculezi câți bani se economisesc folosind StackExchange-ul, dar e clar că e vorba de multe miliarde de dolari [3].
[1] Cristoph Treude, Ohad Barzilay, Margaret-Anne Storey. How do programmers ask and answer questions on the web? In ACM, 21-28 May 2011.
de Cristian Pup
de Alin Luncan
de Corina Pip