» »

Kdo je "dober" programer?

Kdo je "dober" programer?

DotexAm ::

Nekaj časa se že ukvarjam z programiranjem in nimam niti najmanjšega občutka kje sem na lestvici od slab-dober. Zanima me, kakšne projekte delajo "dobri" programerji. Torej zaposljivi programerji. A so to kakšni forumi, socialna omrežja, blogi, web scrapperji, ali morda še kaj težjega? Osredotočam se na web.

jype ::

DotexAm> kakšne projekte delajo "dobri" programerji. Torej zaposljivi programerji.

To sta zelo različni kategoriji. Zaposljivi so tudi slabi programerji, ker je programerjev bistveno premalo.

Dobri programerji so takšni, ki delajo samostojno, ko odidejo, pa nikogar ne boli glava.

DotexAm> A so to kakšni forumi, socialna omrežja, blogi, web scrapperji, ali morda še kaj težjega? Osredotočam se na web.

To vse znajo praktično vsi programerji. Dobri znajo modelirati, uporabljati ustrezne podatkovne strukture in pisati kodo, ki jo lahko preberejo in razumejo tudi drugi.

Zgodovina sprememb…

  • spremenilo: jype ()

pegasus ::

Brez definicije "dobro" boš težko primerjal kaj je dobro iz osebnega stališča, dobro iz vidika kolega, dobro iz stališča šefa in dobro iz stališča firme. Kar obstaja so legende, vse ostalo je subjektivno :)

black ice ::

kuall ::

Tisti, ki zna brez napak in hitro delati. Kot v vseh poklicih. Poudarek na brez napak.

Torej tisti, ki piše unit teste oziroma še bolje scripte, ki klikajo program, kot bi ga uporabnik.

Tisti, ki je samozavesten, da ne gre zarad nesamozavesti reorganizirat vsega, ker ima občutek, da je vse zanič naredil.

Tisti, ki dobro premisli, kaj bo programiral, ker je programiranje počasno, življenje pa kratko.

Največja naloga programerskih firm je, da najdejo dobre programerje, ker te programerske firme tekmujejo med seboj in to, koliko bo firma uspešna je odvisno večinoma samo od kvalitete njihovih programerjev. Torej bo tista firma, ki bo zaposlovala slabe programerje premagana v tem tekmovanju in bo propadla.

Ampak glede na to, da je to njihova najbolj važna naloga jo delajo precej površno po mojih izkušnjah, nobenih testov, samo ocenjevanje tvojega karakterja, kot bi izbirali prijatelja (to sem eni kadrovnici odpisal, se ni mogla načudit če sodim po številu ogledov emaila, še mesece ga je brala) če pa že so pa so neki testi z nekimi teoretskimi vprašanji kot je "Kaj je Delphi?"

jype ::

kuall> Tisti, ki zna brez napak

https://shemesh.larc.nasa.gov/fm/fm-why...

Ne se smešiti, no.

#000000 ::

Jest mam znanca ki je v NLB bil programer za Cobol, tip mi ne zna niti razložit kaj to je, a penzijo je dočakal tam :)

kuall ::

jype, smešiš se ti, ker si jezen na ves svet, ker imaš travme iz šole, ko te noben ni maral.
Tvoj link pravi
>Testing (Lots of it)
To je pa točno to, kar sem jaz napisal.

#000: Sej jaz tudi marsikaj ne bi znal razložit, ampak po občutku in s pomočjo interneta pa znam naredit večinoma vse kar rabim.

jype ::

kuall> jype, smešiš se ti, ker si jezen na ves svet, ker imaš travme iz šole, ko te noben ni maral.

Nisi prebral, kajne?


The problem with life testing is that in order to measure ultrareliability one must test for exorbitant amounts of time. For example to measure a 10^{-9} probability of failure for a 1 hour mission one must test for more than 114,000 years.

kuall ::

Površno, ker je bil link od tebe. Ne vem zakaj bi moral brat neke tvoje brezvezne linke. To jaz vse dobro vem, da je treba tesirat kot zmešan, saj to je bil namen mojega posta.

jype ::

kuall> To jaz vse dobro vem, da je treba tesirat kot zmešan,

Žal očitno ne veš, da testiranje ne zagotavlja tistega, kar si trdil zgoraj:

kuall> Tisti, ki zna brez napak

kuall ::

Ko testiraš odkriješ napake in jih popraviš. Tudi testiranje spada pod delo, ne samo tipkanje kode. Ampak ti si namenoma narobe razumel, samo da mi lahko rečeš, da se smešim. Lepo karakterno lastnost imaš, ni kaj.

jype ::

Ne. Napisal sem, da je tvoja trditev o nekomu, ki zna programirati brez napak, v trenutnem svetu še vedno absurdna. Raziskave v smeri dokazljivo pravilnega programja napredujejo počasi, zato je imeti tak kriterij nesmiselno.

Rok Woot ::

Če delaš brez napak, pomeni, da še nikoli nisi delal.

kuall ::

A ti resno misliš, da jaz kot programer verjamem v to, da se v prvo da napisat kompleksen program brez napak? Zakaj pa misliš, da sem pod drugo točko napisal, da je treba pisat unit teste, če pa zna človk pisat program brez napak? Logika ti očitno odpove, ko hočeš ukrivit debato v svoj prid. Res kot bi se pogovarjal z ...
Saj moja teorija je v bistvu to, da je vse kar delamo samo popravljanje napak.

Rok Woot ::

Jaz te razumem, samo niso mi všeč tako močne trditve. In tu se mi citat ypeta na mestu.
Anyone who has never made a mistake has never tried anything new. - Albert Einstein

kuall ::

Ko program daš uporabnikom moraš najprej poskrbet, da je brez napak. To jaz mislim z "delo brez napak", ker si pač nisem mislil, da me bo lahko kdo kako drugače razumel.
Pa tudi ko tipkaš kodo ti mora biti prva misel "kako se izogniti napakam", druga pa "kako kodo natipkat čimbolj hitro".

jype ::

kuall> Ko program daš uporabnikom moraš najprej poskrbet, da je brez napak.

Ja, saj. A poznaš koga, ki je to že naredil?

kuall> Pa tudi ko tipkaš kodo ti mora biti prva misel "kako se izogniti napakam", druga pa "kako kodo natipkat čimbolj hitro".

To se bere kot hipijevska molitev. Sicer ne vem, če na FRI to učijo, ampak na FMF je bilo med študijsko literaturo ogromno referenc na gradivo o modeliranju kompleksnih sistemov, tako na podlagi teorije kaosa, kot tudi bolj tradicionalni prijemi izolacije in reduciranja na obvladljive probleme, kjer je bil povzetek jasen: Človek s trenutnimi orodji _ne zna_ pisati pravilno delujočega programja (sumim, da "brez napak" pomeni natanko to).

Sicer se strinjam s tvojo idejo, da mora programer biti vesten in natančen, a to ne spreminja surove, krute realnosti:

kuall ::

Ni hipijevska molitev. Imam prav konkretne korake, kaj to pomeni:
- Najprej napišeš unit teste, preden začneš tipkat kdo. Si boš tudi bolj razjasnil kaj delaš in boš kodo natipkal z manj napakami.
- Med tipkanjem kode si pišeš v en tekst fajl, kakšne teste vse je treba narediti, ko je program narejen. Da ne pozabiš.
- Najbolje, da te teste pretvoriš v automation skripte (Selenium,...), da si dolgoročno prihraniš čas in mirnost živcev ob vsakem novem releasu.

Drgač pa ni res, da program ne more biti brez napak. Zelo enostavni programi so 100% brez napak, tudi v prvo ko jih natipkaš. Pride pa problem, ko program postane velik, kompleksen, potem se možnost za skrite napake hitro poveča. Saj zato sem v eni drugi temi napisal, da je najlažje programirat male programčke za razne elektronske naprave, ker niso kompleksni. Kakšna velika web aplikacija pa ima ogromno možnosti za napake.

Se mi dozdeva, da se možnosti za napake tako povečajo z velikostjo programa zarad efekta Combinatorial explosion

Zgodovina sprememb…

  • spremenilo: kuall ()

HotBurek ::

Kdo je "dober" programer?

Tisti, ki z veseljem programira. ;)
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

kuall ::

Btw sem pa to, kaj uporabljajo za testiranje svojih programov spraševal na programerskih razgovorih, takrat ko te vprašajo, če imaš kakšno vprašanje. Sem si rekel, da jim bo to povedalo, da se zavedam tega problema. Eden mi je lepo odgovoril, da na vsakih X ur poženejo nek automation test script, to ali imajo zaposlene tudi človeške testerje pa mi ni odgovoril, se mi zdi, da ne. Na enem drugem razgovoru pa me je direktor samo debelo gledal.

jype ::

kuall> Zelo enostavni programi so 100% brez napak, tudi v prvo ko jih natipkaš.

No daj, natipkaj enega!

Vsi delamo reči, ki jih omenjaš, v taki ali drugačni meri, ampak dejstvo je, da so to zgolj dobre prakse (in se strinjam, da če jih vestno izvajaš, si dober programer), ampak trditi, da je program "brez napak", ker si počel vse to, je naivno.

holabaluza ::

moji kriteriji dobrega programerja:

- zna dobro ocenit casovno kompleksnost svoje naloge
- vsekakor pise unit in integration teste. S strogimi pravili, kot so 100% pokritost pa unit testi najprej se ne strinjam
- zna dobro komunicirat s sodelavci
- obvlada svoje podrocje
- svojega dela se loti vestno, ima dobro komunikacijo z nadrajenim
- ima veselje do svojega dela
- ce je treba, si umaze roke pa opravlja stvari, za katere ni posredno odgovoren
- ima pragmaticen pristop do razvoja
- zdrava meja med kveliteto kode in pricakovanimi roki izdaj

pa se kaj bi se dalo najdit

Zgodovina sprememb…

Ales ::

Približno kar je holabaluza napisal, poleg tega še recimo:

- berljivost kode, komentarji, spoštovanje smernic oz. pravil glede stila kodiranja
- raje napiše daljšo kodo kot genijalen algoritem, ki ga po enem dnevu še sam avtor več ne razume brez ponovnega poglabljanja (po možnosti 2x daljšega, kot ko je algoritem prvotno nastal).

#000000 je izjavil:

Jest mam znanca ki je v NLB bil programer za Cobol, tip mi ne zna niti razložit kaj to je, a penzijo je dočakal tam :)
Naklada ti. Realna možnost je, da se mu ne da ukvarjati s temo in se te elegantno otrese s frajerskim pristopom "vlekel sem plačo pa nič delal". V resnici pa je najbrž naredil kar nekaj in najbrž bi tudi lahko bil bistveno bolje plačan za to, kar je delal. Mogoče samo rabi kako bolj zanimivo vprašanje, pa boš kaj izvlekel iz njega, ali pa se bo še naprej delal neumnega, kdo ve.

kuall ::

Jype: vsak hello world program naprimer.

Noben ni omenil majhnost funkcij (da pridejo na en ekran) in deskriptivno ime funkcij, po možnosti brez komentiranja, dolgo ime nadomesti komentar. Potem ti sploh ni treba pisat komentarjev. Ker komentarji imajo ta problem, da jih je treba sinhronizirat s kodo, ko jo spremeniš.

Druga stvar je izogibanje podvajanju kode. V kakšnem neumnem jeziku kot je SQL to v bistvu sploh ni možno, razen če na veliko pišeš dinamičen SQL. SQL je precej beden jezik, če mene vprašate. Podvanjae kode je slabo zato, ker ko popravljaš buge moraš to kodo sinhronizirat in je precej težko vedet, kje je še enaka koda, razen če jo nekako označiš WARNING DUPLICATED CODE naprimer, kot jaz delam.

Še ena stvar je razdelitev kode na bloke in komentiarnje teh delov, ne pa komentiranje posameznih vrstic, če že ne daš bloka v svojo funkcijo.

Pa ko pišeš komentar kaj dela funckija je najbolje dat primer, kaj pretvori v kaj, najlažje tako razumet.

Pa še ena stvar, ki sem jo nedavno pogruntal: hierarhično razvrščanje funkcij v razrede, da veš katere funkcije pašejo skupaj, ne pa da so vse nametane v enem static razredu. Pa takoj ko funkcija postane tako zakomplicirana, da rabi podfunkcije enostavno iz nje narediš razred.

Zgodovina sprememb…

  • spremenilo: kuall ()

GupeM ::

kuall je izjavil:

Jype: vsak hello world program naprimer.

Samo, če ga napišeš v binary code ali assemblerju. Pa še tam lahko pride do napake v RAM-u, procesorju, ... There is no bug-free code. Niti ne moreš vedeti, da je printf() ali System.out.println() funkcija bug free. Potem je tu še compiler, ki ti lahko "pokvari" tvojo bug-free kodo...

kuall ::

No jaz govorim o software napakah, to da lahko kadarkoli pride do hardware napake je jasno. Kaj ima veze to ali pišeš v assemblerju pa res ne vem, tam prej narediš napako. Compiler da bi naredil napako ob tako enostavnem programu?

kingsix ::

Če pišeš programe ala "hello world" in povdarjaš kako so brez napak - potem že nisi dober programer.

Excalibrus ::

kuall je izjavil:

No jaz govorim o software napakah, to da lahko kadarkoli pride do hardware napake je jasno. Kaj ima veze to ali pišeš v assemblerju pa res ne vem, tam prej narediš napako. Compiler da bi naredil napako ob tako enostavnem programu?

bolš da kr nehaš... :)

AndrejO ::

kuall je izjavil:

No jaz govorim o software napakah, to da lahko kadarkoli pride do hardware napake je jasno. Kaj ima veze to ali pišeš v assemblerju pa res ne vem, tam prej narediš napako. Compiler da bi naredil napako ob tako enostavnem programu?

Mislim, da boš najbolje demonstriral, da se Jype moti, tako, da boš dal povezavo na GitHub, kjer se nahaja tvoja, domnevno bug-free, koda z minimalno količino komentarjev.

kuall ::

To ne moreš verjet, kakšne imate na tem forumu. Res ne vem kaj je to, so vsi slovenski programerji taki??? Jype me je vprašal za en primer programa brez napak, ker je on trdil, da ima VSAK program napake in sem mu dal primer.
Moja koda ni bug free, ampak so bugi največji problem, torej jih ima veliko, kot vsaka. Jao jao kakšni kvalitetni karakterji...

Čer pride v programu do napake zarad compilerja potem to ni napaka v MOJEM programu ampak je napaka v nekem drugem programu. MOJ program je še vedno 100% bugfree, tudi če compiler zajebe ali pa če pride do hardware napake.

Zgodovina sprememb…

  • spremenilo: kuall ()

GupeM ::

kuall je izjavil:

No jaz govorim o software napakah, to da lahko kadarkoli pride do hardware napake je jasno. Kaj ima veze to ali pišeš v assemblerju pa res ne vem, tam prej narediš napako. Compiler da bi naredil napako ob tako enostavnem programu?

Ne boš verjel, tudi compiler lahko naredi napako na tako enostavnem primeru. Sicer je verjetnost praktično 0, obstaja pa možnost. Poleg tega lahko funkcija printf() ni pravilno napisana. Če gremo še višje, Java recimo, je lahko napak polno. System.out.println() lahko ne dela dobro, lahko compilanje v bytecode ne dela dobro, lahko je napaka v Java VM, ... Če je program samo malo kompleksnejši (vpiši dve števili in ju deli). Moraš preverjati null, preverjati, da so števila res števila in ne črke ali drugi znaki, lahko ti '\r' ostane v bufferju po vpisu prve številke, ne smeš deliti z 0 ... Pa smo še vedno pri zelo enostavnih programih, ki jih zna napisati marsikater osnovnošolec. V kolikor imaš v programu samo en if stavek ali zanko, se možnost za napake še precej poveča.

Ogromno aplikacij, sploh internih v podjetjih ima buge, ki obstajajo že 10 let, pa jih nihče ne najde. Nato zaposlijo novega delavca, ki uporablja to aplikacijo samo malo drugače, pa bo že prvi dan odkril bug, ki ga prej v 10 letih ni nihče.

kuall ::

Glede compiler napake ti nimaš kaj narediti. Ti si svoj del opravil 100% bug free, o tem govorim, da je to možno naredit.
Tukaj vlečete neke teoretične primere, o katerih noben v realnem svetu ne skrbi.
To da bo napaka v print je iz riti potegnjeno, ker za to je možnost 0%, lahko pa pride do napak v knjižnicah, ki jih uporabljaš ja, ampak ne v tako enostavnih funkcijah, na to sem že velikokrat naletel.

Iz te debate sem se naučil ene zanimive stvari: prav nič ne zamujam, ker se s programerji ne družim. Tudi to je za nekaj dobro hehe.

Utk ::

Ti si svoj del opravil 100% bug free, o tem govorim, da je to možno naredit.
Tukaj vlečete neke teoretične primere, o katerih noben v realnem svetu ne skrbi.

Mislim da ti vlečeš ven neke teoretične primere in nihče drug. Če se vprašamo, če je teoretično mogoče naredit program brez napak, je seveda mogoče. Ni ga pa še nihče naredil, vsaj omembe vrednega ne.

kingsix ::

Mislim, da je kuall videl svojo zmoto, but then he doubled-down....z svojimi teoretičnimi primeri in ne vem kaj. =)

kuall ::

Utk je izjavil:

Če se vprašamo, če je teoretično mogoče naredit program brez napak, je seveda mogoče. Ni ga pa še nihče naredil, vsaj omembe vrednega ne.

Če se da napisat enostaven program bug free je teoretično možno napisat tudi kompleksen program bug free, seveda pa imaš veliko več dela in napake, na katere noben na naleti v bistvu sploh niso napake, ker lahko na stvar tako gledamo, da je bil program napisat tako, da ga je treba uporabljat točno na določen način. Isto kot se ne smeš s cestnim kolesom peljat po grbinah in potem jamarat, da je pokvarjen.

Utk ::

Lahko se ven vlečeš kolk češ, ampak naslov teme je jasen, kaj si ti napisal pa tudi. Zate programer, ki dela napake, ni dober. Koliko je potem dobrih na svetu? Po tvoji teoriji noben.

mn ::

Samo ste pa tudi vsi skupaj neprilagojeni, da ne uporabim kake močnejše besede.

Kuall je bil EDINI, ki je v to temo napisal nekaj uporabnega in v zameno ga vsi napadate zaradi tehnikalije, ki bi jo moral vsak funkcionalno pisen bralec razumeti. Da povsem bug-free kode ni, posledično bi moralo biti jasno da pomeni "brez napak" to da so napake zelo redke in razen v zelo posebnih okoliščinah dela koda pravilno.

Kar pa tiče teme. Glede razlike dober-slab programer, ni point v tem na katerem področju dela človek. Poleg tega kar je kuall napisal bi jaz dodal, da je dober programer tisti, ki se spozna s problemom ki ga rešuje, najde čim enostavnejšo rešitev tega problema in jo zapiše v koda na takšnen način, da je koda čim bolj berljiva in razumljiva programerju ki jo bere za njim in čim lažja za vzdrževanje. Nekaj načinov kako to doseči je napisal že kuall (kratke funkcije, testi, ...)

Smurf ::

Ne neprilagojeni, malce bolj izkuseni...

- Dober programer ve, da ne obstajajo 100% bug free aplikacije ;)
- Zna oceniti kaksna je zadovoljiva kvaliteta.

Nublet ::

Pred časom sem našel ta seznam, ki je sicer malo bolj splošen kot black ice-ov, vendar pokriva več področij izven samega pisanja kode: http://sijinjoseph.com/programmer-compe...

sebastjan28 ::

Sicer malo za šalo, vendar za kvaliteto kode je mogoče zelo enostavno deinifinirati s eno samo meritvijo:

-št. izrečenim WTF/minuto pri razširjanju kode/funkcionalnosti, ki jo niste vi napisali.

Vse drugo so podrobnosti he he :)

holabaluza ::

Problem pri kuall je bil ta, da se je spustil cisto na teoreticen nivo. Mislim, seveda se teoreticno da 100% bug-free program napisat, teoreticno je dost stvari mozno. Dober programer se ne bo zanasal samo na teorijo ampak bo pogledal, kaj od tega velja in drzi prakticno preko testiranja in znanstvene metode.

Se ena plus tocka za dobrega programerja, za moje pojme: dovolj dobri social skills. Pomeni, da se bo aktivno vkljuceval v debate, znal predstavit svoje delo.

DotexAm ::

Kaj pa kakšno poimenovanje funkcij, classov, id-jev. Pri večji web aplikaciji pri cssju te lahko vsa class in id imena močno zmedejo, sam imam naprimer kar veliko težav z izbiro pravih imen za vse classe in id-je..

usoban ::

Ah no, se kregate brezveze.

Saj je ze mojster povedal: http://www-cs-faculty.stanford.edu/~knu...
Beware of bugs in the above code; I have only proved it correct, not tried it

Zgodovina sprememb…

  • spremenil: usoban ()

oxyuranus ::

sebastjan28 je izjavil:

Sicer malo za šalo, vendar za kvaliteto kode je mogoče zelo enostavno deinifinirati s eno samo meritvijo:

-št. izrečenim WTF/minuto pri razširjanju kode/funkcionalnosti, ki jo niste vi napisali.

Vse drugo so podrobnosti he he :)


Huh, s tem se pa gladko strinjam... oz. za meritev kvalitete programerja, št. izrečenim WTF/minuto, ko gleda nov ezotericni interface, kjer je še en akademik zlil svoje frustracije, v Android SDK (ali naslednje "vroce zemljice" na open source framework sceni).

Zgodovina sprememb…

  • spremenilo: oxyuranus ()

bleem ::

GupeM je izjavil:

kuall je izjavil:

No jaz govorim o software napakah, to da lahko kadarkoli pride do hardware napake je jasno. Kaj ima veze to ali pišeš v assemblerju pa res ne vem, tam prej narediš napako. Compiler da bi naredil napako ob tako enostavnem programu?

Ne boš verjel, tudi compiler lahko naredi napako na tako enostavnem primeru. Sicer je verjetnost praktično 0, obstaja pa možnost. Poleg tega lahko funkcija printf() ni pravilno napisana. Če gremo še višje, Java recimo, je lahko napak polno. System.out.println() lahko ne dela dobro, lahko compilanje v bytecode ne dela dobro, lahko je napaka v Java VM, ... Če je program samo malo kompleksnejši (vpiši dve števili in ju deli). Moraš preverjati null, preverjati, da so števila res števila in ne črke ali drugi znaki, lahko ti '\r' ostane v bufferju po vpisu prve številke, ne smeš deliti z 0 ... Pa smo še vedno pri zelo enostavnih programih, ki jih zna napisati marsikater osnovnošolec. V kolikor imaš v programu samo en if stavek ali zanko, se možnost za napake še precej poveča.

Ogromno aplikacij, sploh internih v podjetjih ima buge, ki obstajajo že 10 let, pa jih nihče ne najde. Nato zaposlijo novega delavca, ki uporablja to aplikacijo samo malo drugače, pa bo že prvi dan odkril bug, ki ga prej v 10 letih ni nihče.


Točno to .. tisti kateri uporabljamo javo ... če je kdo šel kdaj pod pokrov gledat ... govorim o hotspot implementaciji ... to ma compiler tolko bugov da uf:|

Btw .. kaj še kdo samega sebe opiše kot programer?:) in kdo je zadnje napisal program?:)

Zgodovina sprememb…

  • spremenilo: bleem ()

Smurf ::

bleem je izjavil:


Btw .. kaj še kdo samega sebe opiše kot programer?:) in kdo je zadnje napisal program?:)

Jaz, ta trenutek.

srus ::

Moja definicija dobrega programerja - to je tisti, katerega produktivnost je vsaj za velikostni razred ali dva (dva do petkrat) večja od povprečja.

Kaj je moja definicija produktivnosti v razvoju SW - čas, ki ga programer porabi od prve ideje, preko analize, designa, implementacije. In kasneje čas, ki ga on ali podjetje porabi za testiranje, odpravljanje napak in vzdrževanje pri kupcih.

kunigunda ::

 :)

:)



Vredno ogleda ...

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

[SQL] primary key inkrementalno dodajanje (strani: 1 2 )

Oddelek: Programiranje
513151 (2341) ejresnevem
»

Začenja se revizija kode OpenSSL

Oddelek: Novice / Varnost
3311252 (7213) Poldi112
»

Incident Knight Capital in slaba programska oprema, ki poganja svet

Oddelek: Novice / Znanost in tehnologija
4712955 (9862) Poldi112
»

Prvi operacijski sistem brez programskih hroščev

Oddelek: Novice / Operacijski sistemi
494618 (2175) techfreak :)
»

Nova anketa - Znate programirati? (strani: 1 2 )

Oddelek: Novice / Ankete
827699 (5263) Roadkill

Več podobnih tem