Despre cuvintele magice: “nu se poate”

Urmează un text care va avea câteva aluzii și exemple din programare. Dacă tu crezi că nu ești pregătit pentru așa ceva, dacă crezi că nu-l vei înțelege și că o să vorbesc treburi prea inginerești atunci postarea asta e fix pentru tine. E ușor să-l iei pe nu în brațe. „Nu” e un răspuns decent, simplu, și poate fi îndulcit – „nu pot” (sugerând că tu nu poți, dar altcineva poate că ar putea) sau oarecum finalul „nu se poate”, care sugerează că nu numai tu dar nimeni altcineva nu ar putea să realizeze chestia în cauză.

Văd exemplul ăsta în proiectele în care lucrez, unde uneori interacționez cu programatori care îmi spun că ceva nu se poate face. Și știu că se poate face, știu și cum, doar că primul răspuns e că nu se poate face. Pentru cei care știu matematică, cea mai faină soluție pentru o problemă e că „nu se poate”, demonstrabil. Doar că în matematică totul se argumentează, iar să argumentezi că ceva e imposibil are o valoare extraordinară.

Nu e cazul în programare. În programare, „nu se poate” ar trebui îndată urmat de „de ce?” și omul care ți-a aruncat pe „nu se poate” tracasat până când ajunge la o soluție. Spațiul problemelor irezolvabile e mult mai mic și foarte des evident – mai mult, se pot rezolva multe situații irezolvabile aruncând mai mulți bani și mai multe resurse la problemă. Așa că eu mă străduiesc pe cât posibil ca răspunsul la problemele cu care mă confrunt zi de zi să nu fie niciodată „nu se poate”.

E un răspuns facil, pe care îl aruncă mai ales juniorii. Ei de obicei capotează la primul „de ce”, pentru că problemele pe care ei le cred imposibile sunt cel mai des implementate într-un framework sau altul, și atunci o să facă greșeala să spună: „ah, dar dacă folosim framework-ul ăla…”((despre greșeala asta voi vorbi în altă postare)). Ideea e că dacă cineva a rezolvat problema aceea înseamnă că e rezolvabilă, că cel mult „nu pot” e aplicabil, iar „nu pot” când altul poate, în materie de programare, este mai degrabă „nu vreau să investesc timp și energie”.

O să vă dau un exemplu inspirat dintr-o discuție pe care am avut-o acum câțiva ani, în care, în încercarea de a conversa cu un dispozitiv din rețea, un amic îmi explica că nu se poate din C#. „HttpWebRequest crapă cu excepție”, îmi zice el, și eu îl întreb, totuși, cum reușesc alții să vorbească cu dispozitivul ăla. Omul mi-a dat din umeri, după care l-am întrebat ce se întâmplă dacă deschide el socket-ul către portul respectiv și scrie în el comanda HTTP ce se întâmplă? Răspunsul m-a uimit: „ce-i ăla socket?”.

Și aici vine partea care mă doare pe mine. „Nu se poate” e un răspuns care vine cel mai des din lene, din lipsă de implicare și lipsă de dorință de implicare. În cazul lui, proiectul nu era un proiect de muncă, așa că a abandonat și probabil și în ziua de azi a rămas cu întrebarea. Dar oamenii nu pot face asta când li s-a spus de la muncă că trebuie rezolve problema, deci ceva trebuie făcut. Nu poți să mergi la un client care plătește milioane de euro anual să îi spui că nouă ne e imposibil să vorbim cu un dispozitiv în rețea, și că nu știm ce e ăla un socket. Așa apar întrebările disperate și răspunsurile stupide pe Stack Overflow și nu numai.

Cam asta e povestea cu „nu se poate”. Cel mai des se poate, dar ne e lene și nu avem chef să ne adaptăm. Inteligența e văzută ca și capacitatea de adaptare la condiții noi, iar „nu se poate” este fix opusul atunci când nu ai o demonstrație matematică în spatele afirmației.