Invatati, Invatati, Invatati

Sper ca sinteti abonati la lista de lecturi obligatorii a Partidului Codexpert Roman, unde muezinii Bancila si Cucu sufla zilnic in trompeta uzinei pentru a culturaliza masele de codexperti. Daca nu ati aderat inca, voi incerca sa va conving acum s-o faceti, prezentind citeva din recomandarile publicate de catre Primi Inter Pares.

In primul rind, ne este dat un link catre un articol in care Raymond Chen povesteste despre un asa-zis “for-if anti-pattern”. Imi pot inchipui cum formatorii de opinie din Codexpertia au schitat un zimbet condescendent dar incredul citind despre tendintele unora de a lua la rind elementele din directoare sau hash map-uri in cautarea unei valori. Cu certitudine nici cel mai prost aspirant nu ar scrie asemenea cod, nu? NU?

Ma rog, in asteptarea momentului in care Silviu va face apel la Regula 0 si Cucu il va bana pe Raymond Chen de pe codexpert, sa ne indreptam atentia spre o noua propunere din categoria Radio Erevan: [WinAPI] Cum aflu frecventa procesorului? Dupa cum ne-a obisnuit, sectoristul iscoditor nu se multumeste sa-si raspunda la intrebari cu un simplu “nu stiu”, ci insista sa ne demonstreze prin cod ca habar n-are. Prima metoda expusa de dinsul, in legatura cu care avea nedumeriri si acum 9 ani, nu reuseste sa ne dea valoarea exacta, dar se apropie. A doua metoda are avantajul de a fi mai “simpla”, dar din pacate are si un dezavantaj: returneaza tot timpul 0. Unii cititori vor spune ca decit gresit, mai bine deloc, insa altii vor sustine ca dimpotriva, mai bine ceva decit nimic. Gardianul Ovidiu lasa aceasta decizie de ordin filosofic la alegerea ta.

Si cum fara norme de buna purtare n-am putea face nimic pe lumea asta, ultimul imbold muncitoresc ne trimite la un articol in care Danny Kalev ne spune cum putem determina cu usurinta daca stim sa programam. Pe Danny l-am cunoscut intr-un episod anterior, in care ne arata ca nu stie ce face header-ul iosfwd, desi in CV se jura ca a fost baiat de comitet C++. De data asta el isi ia si mai in serios rolul de chibit, spunindu-ne ca n-ai voie sa faci clase cu mai mult de 8 metode publice, dind si exemplul std::string, care in opinia sa este de mare cacat si ar fi trebuit spart in mai multe clase care sa deriveze unele din altele. De asemenea, n-ai voie sa folosesti propriile containere in loc de std::map sau std::vector, deoarece Danny a citit pe Internet ca ce ni-i dat in STL este thread-safe si imbatabil ca performanta. Sigur, nu conteaza ca nu le poti folosi in interfata unui LIB/DLL/SO, ca majoritatea fac o alocare per element si se tiriie ingrozitor din cauza asta, ca poate ai nevoie sa fie lock-free, sau alte astfel de lucruri care ii preocupa doar pe inferiorii care scriu cod. In capul lui Danny conteaza ca au rvalue references, pentru a se comporta optim intr-o serie de cazuri in care oricum n-ar fi trebuit sa ajungi. Danny n-are timp sa scrie cod, e prea ocupat sa scrie pilde. A da, si n-aveti voie cu pointeri; daca ar fi dupa Danny, s-ar scoate de tot pointerii din limbaj si s-ar inlocui cu tipuri clasice, de exemplu vectori sau structuri.

 

Tags: , , , , , , , , , , , , , , , , , ,

9 Responses to “Invatati, Invatati, Invatati”

  1. Catalin++ Says:

    CallNtPowerInformation de ce nu merge ? Am testat si pare ca dupa apelul functiei structura aia nu se modifica deloc(daca nu intializezi structura datele nu se schimba). Oare de ce nu a pus metoda folosind WMI ?

  2. Mihnea Says:

    CallNtPowerInformation() returneaza STATUS_BUFFER_TOO_SMALL pentru ca buffer-ul trebuie sa aiba loc pentru toate procesoarele din sistem. Trebuia facut ceva de genul:

    PROCESSOR_POWER_INFORMATION ppi[32];
    CallNtPowerInformation(ProcessorInformation, NULL, 0, ppi, sizeof(ppi));

    (Sau ma rog, pentru cei care se simt in forma, determinat numarul de procesoare si alocat dinamic.)

    Probabil uzina lui Cucu a spus un NU raspicat imperialismului multi-core si d-aia i-a mers. Vorba aia, pentru copy/paste din Google iti ajunge un 486.

  3. Catalin++ Says:

    Da, in msdn e putin amiguu care-i treaba acolo si aminteste putin de GetSystemInfo(ca sa vezi cate procesoare sunt), pe langa asta mie imi intorcea status 0 nu eroare :-?? De aici semnul meu de intrebare.

  4. Stefan Says:

    Apropo de std::string, a trebuit la un moment dat să iau o implementare custom de string și să-i adaug metode ca să aibă API la fel cu std::string; am petrecut o după-amiază implementând toate variantele de find(), rfind(), find_first_not_of(), find_mortii_matii() etc – vreo 55 de metode în total. Am uitat să zic că guru C++ din echipă nu agrea default arguments (deh, pot apărea probleme la moștenire), așa că unde în std::string erau default arguments, eu mai adăugam o metodă-două-trei, după caz. După logica lui Danny Boy ar fi trebuit să îl spargem în cel puțin 7 clase (mai multe dacă iei în calcul și metodele deja existente), pe criterii gen “ăsta are find-uri cu un argument”, probabil :).

    Cât despre oameni care nu scriu cod și dau sfaturi, sunt destui – am înțeles că nici Scott Meyers nu s-a prea atins de cod la viața lui (mai puțin exemplele din cărți, probabil).

  5. Mihnea Says:

    class string : public StringConstructors, public StringDestructors, public StringFindFunctions, public StringReverseFindFunctions, public StringOperators, public StringFunctionsWithSeveralArguments, public StringConversionFunctions, public StringBufferManipulationFunctions, public StringIteration, public StringComparison
    {
    };

    Asa vede Danny lumea ideala.

  6. Mihnea Says:

    Am fost avansat la gradul de vechi prieten: http://codexpert.ro/forum/viewtopic.php?f=31&t=1956#p13055. Ura tovarasi!

  7. Catalin++ Says:

    Da, am vazut si eu, sublima ironie, totusi omu si-a recunoscut vina si s-a dat de gol inca o data ca este fanul numarul 1 al acestui site :)) Felicitari Mihnea!

  8. Catalin++ Says:

    A, si a folosit GetSystemInfo asa cum am sugerat eu si prea putin msdn-ul :)

  9. B.L. Says:

    De seara
    Alege FAQ-ul corect.

Leave a Reply

Optionally add an image (JPEG only)