Cel mai șocant lucru pe care îl afli în primul an de programare

Mi-am amintit urmărind zilele trecute un clip (vezi mai jos) care e cea mai simplă dar șocantă informație pe care am prins-o în primul meu an de programare. Eram în clasa a IX-a, puțin după ce am făcut scheme logice, și profesoara a venit cu algoritmul pentru a determina dacă un an e bisect sau nu.

E destul de simplu, o dată la patru ani e an bisect, nu? Nu, e mai complicat de atât. O dată la patru ani e bisect dacă acel an nu e divizibil cu 100; caz în care nu e bisect. Asta se întâmplă pentru că introducerea acelei zile o dată la patru ani aduce o supra-corecție care trebuie și ea corectată. Doar că e insuficient; pentru că o dată la 400 de ani, anii aceia divizibili cu 100 sunt bisecți. Deci, pusă simplu problema, un an e bisect dacă e divizibil cu patru, dar nu e divizibil cu 100, decât dacă e divizibil și cu 400. Sau, pe limba mea

bisect = ((an%4) == 0) && (((an%100) != 0) || ((an%400) == 0))

Sper că am prins bine parantezele și condițiile. Și dacă aud pe cineva că nu-s necesare, îl invit să se ardă și el cu ordinea operațiilor în C++ în felul în care m-am ars eu. În orice caz, ăsta e acel element șocant pe care îl afli în primul an de liceu sau facultate, depinde când începi studiul programării. Mai mult ca sigur că profesorul tău de informatică va fi nervos pe tine că nu știai această treabă. La mine au cam fost – și profa din clasa a IX-a, și proful din primul an de facultate. Nejustificat, zic eu, mai ales că dacă îi întrebi care e de fapt povestea acestui calendar, habar nu au.

Nevoia anului bisect a fost identificată de nimeni altul decât Cezar, primul, băiatul cu cuțitele în spate la idele lui martie. Decizia pentru instalarea acestui calendar a luat-o când era pe fugă după Pompei, și se suspectează că era conștient de faptul că schimbarea pe care a decis-o el, adăugarea câte unei zile o dată la patru ani în luna februarie (înainte de începerea primăverii), e insuficientă, dar nu și-a bătut capul, considerând-o o problemă minoră. Înainte de Cezar, reglarea calendarului se făcea prin adăugarea unei luni suplimentare în an, fapt decis în funcție de toanele Pontifex Maximus – popa oficial al republicii romane, viitorul papă. În perioade mai tulburi, însă, nu își mai bătea nimeni capul să regleze și calendarul, și Cezar a trebuit să impună această reformă pentru că nu mai știa lumea de la oraș la oraș ce zi e.

Grigore al XIII-lea e condus de nevoia stabilirii datei Paștelui; una din marile probleme ale creștinătății, în care lumea e suficient de supărată încât majoritatea dintre noi au prins timpurile în care ortodocșii și catolicii puneau Paștele în săptămâni diferite doar pentru că vroiau ei așa. Pentru Grigore, problema minoră a lui Cezar a devenit una majoră, așa că în calitate de Pontifex Maximus (he he) a tocmit niște călugări iezuiți să dea un calendar mai bun. Ei au venit cu această soluție, și Grigore a fost cel care a împins noua dată în societate – întâi în Italia, Spania, Portugalia, fiind adoptată destul de lent de întreaga Europă. România trece la noul sistem în 1919, Rusia în 1918, pusă în bizara situație ca revoluția din Octombrie să se desfășoare în noiembrie.

Sunt multe informații interesante pe tema asta, doar că singurul mod în care ți se comunică e unul chionduros, supărat pe tine că nu știi că data se calculează atât de complicat. Din fericire, nu trebuie să ne mai batem capul cu această problemă – e gata implementată în n-șpe mii de feluri de o mână de programatori, o putem folosi de-a gata. Dar tot e un fapt șocant, pe care îl afli la ora de programare pentru că profesorii de istorie te urăsc și sunt incapabili să explice niște lucruri simple, și pentru că nu e nimeni altcineva să-ți explice lucrurile astea. Poate ar trebui scoase mai multe ore din programa școlară, și introduse ore de „fapt divers”.