» »

Največkrat uporabljeni kos kode s StackOverflowa je desetletje imel hrošča

Največkrat uporabljeni kos kode s StackOverflowa je desetletje imel hrošča

Slo-Tech - Na spletni strani StackOverflow najdemo kopico programerskih vprašanj in boljših ali slabših odgovorov, ki jih bralci ocenijo. Najviše ocenjeni odgovori so po navadi tudi pravilni, čeprav to ni nujno. Zanimivo zgodbo o tem je pripravil Andreas Lundblad, ki je avtor največkrat uporabljenega koščka kode s StackOverflowa. Predvsem je ironično dejstvo, da je njegov najpriljubljenejši kos kode vseboval hrošča, ki ga desetletje nihče ni opazil.

Da je njegov kos kode res popularen, sta lani pokazala Sebastian Baltes in Stephan Diehl z Univerze v Trierju. Njun projekt je bil sicer preveriti, kako pogosto, kod in pod katero licenco se v praksi pojavljajo kosi kode, ki so dostopni na strani StackOverflow. Stran namreč izrecno zapoveduje licenco CC BY-SA 3.0, a se vsi uporabniki tega ne držijo in kodo kopirajo vse naokoli. Večina ponovno uporabljene kode je nepravilno označena, sta ugotovila.

Vrnimo pa se k najpopularnejšemu kosu kode, ki je bil objavljen leta 2010. Šlo je za funkcijo, ki velikost datoteke v bajtih zapiše v človeku razumljivi obliki, torej z ustrezno desetiško ali binarno predpono (k,M,G,T,P,E). V resnici Lundblad ni bil prvi, ki je odgovoril na vprašanje, a je prvi odgovor vseboval zanko. Na StackOverflowu se pogosto zgodi, da ima prvi odgovor, ki deluje, največ glasov in da ga je tudi z boljšo kodo nemogoče prehiteti. Lundbladu je to uspelo, saj je uporabil logaritme namesto rekurzije.

Ironično pa je, da je koda vsebovala hrošča. Resda ni bil hud, saj se je pojavil le v nekaj izjemnih pogojih in je vplival le na zaokroževanje. A to ne spremeni dejstva, da je koda imela skoraj desetletje hrošča, saj ga je odpravil šele sedaj. Nihče v tem času tega ni javno izpostavil. To je pomembno sporočilo - kodo je treba razumeti in preizkusiti. Tudi če je koda odprta, vsem dostopna in ima ogromno glasov, to ni zagotovilo, da nima hroščev.

18 komentarjev

win64 ::

Zanimivo, kako je avtor "rešil" hrošče. :)
Ne gre pa za izziv v neuporabi rekurzije, ampak neuporabo zank in vejitev.

Končni komentar avtorja:
Note that this started out as a challenge to avoid loops and excessive branching. After ironing out all corner cases the code is even less readable than the original version. Personally I would not copy this snippet into production code.

MrStein ::

1. Gre za tole : https://stackoverflow.com/questions/375...

2. Stackoverflow bi lahko končno preuredil strani, da bi ti code snippet-i bili dejansko berljivi.
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

kuall ::

Jaz bi potegnil drug nauk: v večini programov se skrivajo taki skriti bugi. če se najde en eksotičen uporabnik, ki bo program uporabljal na drugačen način se bodo hroščki kar naenkrat pojavili, ki jih prej nikoli ni bilo.

dejstvo je, da večina uporabnikov večino programov uporablja vedno na enak način.

hrošči se imajo kam skriti zato, ker je v svetu možno toliko kombinacij. zato, ker število kombinacij tako hitro narašča in ti kot programer ne moreš vseh teh kombinacij stestirat. praktično nemogoče rata vse možne kombinacije stestirat in potem nek uporabnik pritisne magično zaporedje knofov, ki jih noben pred njim ni pritisnil in voila, programček explodieren sie bitte sehr schoen.

jype ::

kuall je izjavil:

Jaz bi potegnil drug nauk
Vsi copy-paste programerji bi ga, da le ne bi bilo treba premisliti in razviti lastne rešitve.

Zgodovina sprememb…

  • predlagal izbris: Dimnik ()

kuall ::

dober copy paste programer je kar veliko vreden.
slabi programerji so slabi tudi pri iskanju v googlu.
jaz sem bolj tak, da ko vklopim možgane lahko vsak problem rešim, naj bo še tako zajeban.
večinoma pa imam možgane izklopljene in je copy pastanje čist fajn, saj to večinoma iz svoje kode ali pa iz zapiskov, 90% časa copy pastam svojo staro kodo, 5% copy pastam razne stackovwerflow, 5% pa na novo pišem. podobno copy pastanju je, ko popravljaš nekaj v kodi in samo delaš analogije, ne probaš pa razumet, kako celota dela. če pride do tega lahko vedno kasneje probaš program razdeliti na dele oziroma ga razumet problem v celoti, ampak velikokrat se ne splača zgubljat časa.

ps. tipkarske napake so primerne temu, komu pišem :))

Zgodovina sprememb…

  • spremenilo: kuall ()

Phantomeye ::

Iskanje rešitev za problem je waste of time, če rešitev že obstaja. je pa fajn, da to rešitev razumeš preden jo implementiraš:))

srus ::

Eh, saj že vprašanje vsebuje hrošča. Sprašuje o bytih, potem pa predlaga enoto b namesto B.

MrStein ::

B ni kratica za byte.
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

Ahim ::

kuall je izjavil:

dober copy paste programer je kar veliko vreden.
slabi programerji so slabi tudi pri iskanju v googlu.


"Dober copypaste nekaj" pac ni programer. Ce bi bil, bi znal sam narediti stvar potem, ko bi prebral odgovor. Dober programer pa odogovor se komu drugemu napise, ne le da svoje delovne probleme razresuje.

Utk ::

Zame je ta funkcija tipičen primer, ki ga bi vsak dober programer šel copy-pastat. Problem je pogost in dovolj enostaven, jasen, neumnost bi bila to it delat po svoje na novo. Tega ne bi šel sam delat dober programer, ampak zdolgočasen.

GrX ::

MrStein je izjavil:

B ni kratica za byte.

Aja? Kakšna pa po tvoje je?

MrStein ::

Utk je izjavil:

Zame je ta funkcija tipičen primer, ki ga bi vsak dober programer šel copy-pastat. Problem je pogost in dovolj enostaven, jasen, neumnost bi bila to it delat po svoje na novo. Tega ne bi šel sam delat dober programer, ampak zdolgočasen.

Hja, saj veš, tisočmojstri...
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

kuall ::

Ahim je izjavil:

Dober programer pa odogovor se komu drugemu napise

Saj imam kar nekaj dobro ocenjenih odgovorov na stackoverflow.
Pa daj začni uporabljat šumnike, nadležno tole brati.

BigWhale ::

Ne morem se odlociti kaj je bolj grozno, copy/paste programer ali pa npm install programer. :>

Zgodovina sprememb…

  • spremenil: BigWhale ()

Kenpachi ::

Dobra ilustracija npmja je.... Film Evolution z David Duchovnyjem.

Na koncu moraš filat head n' shoulders v šupak entitete, ki se razpenja čez pol zvezne države. And no, you can't kill it with fire.
Zaraki Kenpachi.

Zgodovina sprememb…

  • spremenil: Kenpachi ()

Praskalec ::

BigWhale je izjavil:

Ne morem se odlociti kaj je bolj grozno, copy/paste programer ali pa npm install programer. :>

Predlagaš, da vsak implementira vse od začetka? Kaj je slabega pri tem, da pogledaš ali je kdo drug že implementiral neko elegantno rešitev za tvoj problem?

Ker voham namigovanje o (ne)varnosti NPM. Popularni moduli so natančno pregledani, za majhne pa to res še zmeraj ostane na developerju.

win64 ::

Praskalec je izjavil:

BigWhale je izjavil:

Ne morem se odlociti kaj je bolj grozno, copy/paste programer ali pa npm install programer. :>

Predlagaš, da vsak implementira vse od začetka? Kaj je slabega pri tem, da pogledaš ali je kdo drug že implementiral neko elegantno rešitev za tvoj problem?

Ker voham namigovanje o (ne)varnosti NPM. Popularni moduli so natančno pregledani, za majhne pa to res še zmeraj ostane na developerju.

Če damo varnost na stran: stvari so pri NPM že tako bizarne, da je v kakšnem primeru ena trivialna metoda zapakarina v NPM paket. Potem pa potegneš en malo večji paketek, pa ti jih zraven še 1000 doda v hiearhijo, če imaš nesrečo.

BigWhale ::

Praskalec je izjavil:

BigWhale je izjavil:

Ne morem se odlociti kaj je bolj grozno, copy/paste programer ali pa npm install programer. :>

Predlagaš, da vsak implementira vse od začetka?

Ne, kje sem pa to rekel?

Praskalec je izjavil:

Kaj je slabega pri tem, da pogledaš ali je kdo drug že implementiral neko elegantno rešitev za tvoj problem?

Lahko ni nic slabega pri tem, lahko je pa vse slabo. :)

Praskalec je izjavil:

Ker voham namigovanje o (ne)varnosti NPM. Popularni moduli so natančno pregledani, za majhne pa to res še zmeraj ostane na developerju.

Dej rajs nehaj vohat, pa mogoce kako stvar vzemi ne tolk zlo resno. :>

win64 je izjavil:

Potem pa potegneš en malo večji paketek, pa ti jih zraven še 1000 doda v hiearhijo, če imaš nesrečo.


Samo tisoc ti jih doda, ce imas sreco. ;>

Zgodovina sprememb…

  • spremenil: BigWhale ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Kako omogočiti WegGL support v Android appu?

Oddelek: Pomoč in nasveti
7833 (624) MasterMiG
»

Applov nov programski jezik Swift (strani: 1 2 )

Oddelek: Novice / Apple iPhone/iPad/iPod
7231439 (26000) Kocka
»

Preprosta PHP aplikacija

Oddelek: Izdelava spletišč
334328 (3732) Jerry000
»

[(Cake)PHP] Shranjevanje povezanih tabel

Oddelek: Izdelava spletišč
5713 (638) vuego
»

PHP začetnik

Oddelek: Izdelava spletišč
101573 (1102) ElectroSpy

Več podobnih tem