Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Da li biti programer? Buducnost profesije

[es] :: Vodič za posao :: Da li biti programer? Buducnost profesije
(TOP topic, by Nebojsa Milanovic)
Strane: < .. 1 2 3 4 5 6 7 8 ... Dalje > >>

[ Pregleda: 263545 | Odgovora: 1523 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

nemamstan

Član broj: 335040
Poruke: 246



+134 Profil

icon Re: Da li biti programer? Buducnost profesije18.04.2018. u 13:55 - pre 72 meseci
Ja nalazim da je ovo veoma elegantno:
Code:
xor a,b
xor b,a
xor a,b

Sad, koliko kodera i dizajnera to razume
drugo je pitanje.


Citat:
CoyoteKG

Ne znam kako si zaključio da ja mislim da programer ne mora da zna takve stvari. Ili samo pišeš tek da bi pisao i oftopikuješ.

Nisam napisao da "ti misliš da programer ne mora da zna takve stvari".

Citat:
CoyoteKG

A za ovo da kod treba da bude teško razumljiv, nepregledan i uvrnut da bi odvaljivao, nisam programer pa ne mogu da komentarišem...

Nisam napisao da kod "treba da bude teško razumljiv, nepregledan i uvrnut".
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Da li biti programer? Buducnost profesije18.04.2018. u 14:00 - pre 72 meseci
Citat:
nemamstan: Ja nalazim da je ovo veoma elegantno

E ti si naš idol. Aj sad idi.
 
Odgovor na temu

peromalosutra
Ivan Rajkovic
Software engineer
Luxoft
Berlin

Član broj: 54774
Poruke: 871
*.prolocation.net.



+148 Profil

icon Re: Da li biti programer? Buducnost profesije18.04.2018. u 14:07 - pre 72 meseci
Citat:
nemamstan: Ja nalazim da je ovo veoma elegantno:
Code:
xor a,b
xor b,a
xor a,b

Sad, koliko kodera i dizajnera to razume
drugo je pitanje.


Ne bas. Elegantno bi bilo (na primjeru C++ jezika)

Code:

std::swap(a, b);


E sad, kako je std::swap implementiran, ili te ne interesuje, ili implementiraj svoju swap funkciju pa zovi nju. U svakom slucaju je veoma jasno i eksplicitno sta je pisac koda htio da kaze. Funkcija moze da bude inline, tako da nema nikakve razlike u performansama.

Kod koji je nepotrebno zakomplikovan je daleko tezi za odrzavanje i obicno je odlika neiskusnih programera. Ne postoji razlog za pisanje takvog koda, osim da se neko pokusa istaci kao "tata-mata programer", ali efekat je obicno suprotan.

Ima ona izreka, "prerana optimizacija je majka svih za*eba". Optimizacija se radi tek kada dokazes da kod ima problem sa performansama. Tek tada identifikujes usko grlo kroz profiling i onda ciljano optimizujes taj dio koda.

 
Odgovor na temu

nemamstan

Član broj: 335040
Poruke: 246



+134 Profil

icon Re: Da li biti programer? Buducnost profesije18.04.2018. u 14:30 - pre 72 meseci
Citat:
peromalosutra

std::swap(a, b);

Samo što XOR Swap zauzima manje memorije a brže se izvršava.
 
Odgovor na temu

anon70939

Član broj: 70939
Poruke: 2823



+6883 Profil

icon Re: Da li biti programer? Buducnost profesije18.04.2018. u 14:38 - pre 72 meseci
stvarno moderator treba da prebaci ovo u drugu temu, kako se ova ne bi zagađivala, i kako ne bismo oterali pokretača. A i tema je u Izdvojenim temama na homepage ES.
A onda bi u novoj temi mogla da se nastavi diskusija kako bi programeri mogli da pokušaju da objasne "šloserima" šta je kvalitetan i elegantan kod.
Verovatno bi bila korisna diskusija, ne za šlosere jer je to nemoguće, nego buduće programere koji se interesuju kako se pravilno programira.
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
*.dip0.t-ipconnect.de.

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Da li biti programer? Buducnost profesije18.04.2018. u 14:53 - pre 72 meseci
Citat:
nemamstan:
Citat:
peromalosutra

std::swap(a, b);

Samo što XOR Swap zauzima manje memorije a brže se izvršava.


U većini slučajeva obe tvrdnje su netačne.


Citat:
Most modern compilers can optimize away the temporary variable in the native swap, in which case the native swap uses the same amount of memory and the same number of registers as the XOR swap and is at least as fast, and often faster. The XOR swap is also much less readable and completely opaque to anyone unfamiliar with the technique.


Citat:

On modern CPU architectures, the XOR technique can be slower than using a temporary variable to do swapping. One reason is that modern CPUs strive to execute instructions in parallel via instruction pipelines. In the XOR technique, the inputs to each operation depend on the results of the previous operation, so they must be executed in strictly sequential order, negating any benefits of instruction-level parallelism.[4]



https://en.wikipedia.org/wiki/...sons_for_avoidance_in_practice

https://stackoverflow.com/ques...ap-dont-use-xor-operation-in-c

etc.

E sada, koliko kodera i dizajnera to razume,
drugo je pitanje.

;-)
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
178.250.138.210



+1064 Profil

icon Re: Da li biti programer? Buducnost profesije18.04.2018. u 15:15 - pre 72 meseci
Citat:
nemamstan:
^Branimir Maksimovic

Tako je, XOR Swap.
Sa binarnim podacima radi pravilno
samo nisam siguran da će svaki kompajler
pravilno odraditi sa na primer tipom float.


Hoce i sa float, samo xor postavlja var na 0 kad su sve varijable jednake pa mora if da se doda.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
178.250.138.210



+1064 Profil

icon Re: Da li biti programer? Buducnost profesije18.04.2018. u 15:16 - pre 72 meseci
Citat:
nemamstan:
Citat:
peromalosutra

std::swap(a, b);

Samo što XOR Swap zauzima manje memorije a brže se izvršava.


x86 arhitektura ima instrukciju xchg reg,reg tako da je sve jedno sta napises u visem jeziku kompajler moze to optimizovati. Pretpostavljam i da ARM i drugi to imaju.

E da, strd::swap je genericka f-ja koja je specijalizovana za odredjene tipove. :U svakom slucaju xor swap ne treba koristiti u visem jeziku, samo u asembleru.
Meni je licno xor trik koristan za pravljenje dvostruko ulancane liste sa samo jednim pointerom ;p


[Ovu poruku je menjao Branimir Maksimovic dana 18.04.2018. u 16:34 GMT+1]
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
*.dip0.t-ipconnect.de.

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Da li biti programer? Buducnost profesije18.04.2018. u 15:36 - pre 72 meseci
Kompajler zapravo ne mora ni da zameni vrednosti promenljivih, samo da zameni reference
za dve memorijske lokacije.

Code:

#include <cstdlib>
#include <iostream>

int main()
{
    std::srand(time(nullptr));
    int x = std::rand();
    int y = std::rand();

    std::cout << x << ", " << y << std::endl;

    for (int i = 0; i < 1000000001; i++)
    {
        x = x ^ y;
        y = x ^ y;
        x = x ^ y;
    }

    std::cout << x << ", " << y << std::endl;
}


Code:
#include <cstdlib>
#include <iostream>

int main()
{
    std::srand(time(nullptr));
    int x = std::rand();
    int y = std::rand();

    std::cout << x << ", " << y << std::endl;

    for (int i = 0; i < 1000000001; i++)
    {
        int tmp;
        tmp = x;
        x = y;
        y = tmp;
    }

    std::cout << x << ", " << y << std::endl;
}


Na mojoj mašini, bez optimizacija jednoj treba 3.5 sekunde, a drugoj 7.5. Brža verzija je bez xor-a.
 
Odgovor na temu

peromalosutra
Ivan Rajkovic
Software engineer
Luxoft
Berlin

Član broj: 54774
Poruke: 871
*.prolocation.net.



+148 Profil

icon Re: Da li biti programer? Buducnost profesije18.04.2018. u 15:43 - pre 72 meseci
Ne budi ljen, probam isti kod i ja kod sebe. Dodao sam i treci test koji koristi std::swap.

Rezultati bez optimizacije:

Code:

ivan@PC0016:~/tmp/test$ time ./xor.out 
1271415875, 131779415
131779415, 1271415875

real    0m4.451s
user    0m4.440s
sys    0m0.000s
ivan@PC0016:~/tmp/test$ time ./tmp.out 
674640033, 1665283209
1665283209, 674640033

real    0m2.112s
user    0m2.108s
sys    0m0.004s
ivan@PC0016:~/tmp/test$ time ./swap.out 
98592326, 1173120
1173120, 98592326

real    0m7.953s
user    0m7.932s
sys    0m0.012s


Rezultati sa -02:

Code:

ivan@PC0016:~/tmp/test$ time ./xor.out 
245032523, 279963092
279963092, 245032523

real    0m0.516s
user    0m0.512s
sys    0m0.000s
ivan@PC0016:~/tmp/test$ time ./tmp.out 
1651763969, 243947359
243947359, 1651763969

real    0m0.295s
user    0m0.292s
sys    0m0.000s
ivan@PC0016:~/tmp/test$ time ./swap.out 
731035860, 753622880
753622880, 731035860

real    0m0.301s
user    0m0.296s
sys    0m0.004s


 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
178.250.138.210



+1064 Profil

icon Re: Da li biti programer? Buducnost profesije18.04.2018. u 15:46 - pre 72 meseci
odgovor burgosu:
To si kompajlirao bez optimizacije? Mislim da kompajler ovo vadi van petlje osim ako x i y nisu volatile. U svakom slucaju je brze bez xora zato sto razmena varijabli ne iziskuje operaciju samo dodatni registar.

pera: "Ah da. ne vadi iz petlje zato sto se menjaju vrednosti x i y"
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
*.dip0.t-ipconnect.de.

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Da li biti programer? Buducnost profesije18.04.2018. u 16:01 - pre 72 meseci
Ne vadi iz petlje bez optimizacija (sa optimizacijama je dovoljno pametan da drži ovo u registrima i uradi samo jednu zamenu registara u oba slučaja). Pritom bez optimizacija ne drži x i y na registrima, već na steku i pristupa memoriji i radi load/store nonstop.

https://godbolt.org/g/7HyZkU
 
Odgovor na temu

nemamstan

Član broj: 335040
Poruke: 246



+134 Profil

icon Re: Da li biti programer? Buducnost profesije18.04.2018. u 16:23 - pre 72 meseci
Citat:
Burgos

Citat:
Most modern compilers can optimize away the temporary variable in the native swap, in which case the native swap uses the same amount of memory and the same number of registers as the XOR swap and is at least as fast, and often faster. The XOR swap is also much less readable and completely opaque to anyone unfamiliar with the technique.


Citat:
On modern CPU architectures, the XOR technique can be slower than using a temporary variable to do swapping. One reason is that modern CPUs strive to execute instructions in parallel via instruction pipelines. In the XOR technique, the inputs to each operation depend on the results of the previous operation, so they must be executed in strictly sequential order, negating any benefits of instruction-level parallelism.[4]

Davno sam pročitao ja to i tačno je
Citat:
The XOR swap is also much less readable and completely opaque to anyone unfamiliar with the technique.


Moj komentar se odnosi na "std::swap" biblioteku u smislu da se ne upotrebljava 3-ća promenljiva.
XOR Swap je sigurno brže.

Ali ako treba brže od xor onda mov jeste brže.
xor reg16,reg16 treba 3 procesorska takta
mov reg16,reg16 treba 2 procesorska takta (swap ukupno brže za 3 takta).
Samo, sad nije ispunjen uslov "Testa".
 
Odgovor na temu

nemamstan

Član broj: 335040
Poruke: 246



+134 Profil

icon Re: Da li biti programer? Buducnost profesije18.04.2018. u 16:34 - pre 72 meseci
^Branimir Maksimovic

Ako koristiš xchg onda si treću promenljivu uveo na "mala vrata" :)
Isti problem kao i sa swap.

E sad, da li XOR Swap ima smisla?
Ima ako je potrebno da očuvaš vrednosti svih ostalih registara.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
178.250.138.210



+1064 Profil

icon Re: Da li biti programer? Buducnost profesije18.04.2018. u 17:21 - pre 72 meseci
nemamstan:"Ako koristiš xchg onda si treću promenljivu uveo na "mala vrata" :)"

Pa nema 3. xchg instrukcija jeste tu da ti ne treba 3. registar. Inace koja joj je svrha?
 
Odgovor na temu

mjanjic
Šikagou

Član broj: 187539
Poruke: 2679



+690 Profil

icon Re: Da li biti programer? Buducnost profesije19.04.2018. u 00:26 - pre 72 meseci
Ode tema u tri lepe... aj' da navedete neki primer u par redova, nego sad mora... stavite negde na neki online interpreter/kompajler pa ostavite ovde link, mada ni to ne bismo trebali u ovoj temi.
Sad će čovek da pomisli "ako ovako po IT firmama gube vreme na ovakve stvari, bolje da ja ostanem u EPS-u". A u IT firmama sušta suprotnost ovome.

Ko hoće da se takmiči u glavolovkama, ima online servisa za to, a evo i zadataka iz OOP sa 10-ak Elektrijada: http://www.fer.unizg.hr/ozsn/p...tno_orijentirano_programiranje
Ko hoće, neka vežba vijuge, ali zadaci imaju vrlo malu ili nikakvu primenu u praksi u 99.99% koda koji prosečan developer uradi u bilo kojoj IT firmi.



A za postavljača teme: ako si u mogućnosti, pokušaj da radiš dodatno van radnog vremena po nekoliko sati, ili da uzmeš u firmi deo odmora u nekom periodu pa da to vreme budeš na praksi u nekoj firmi, osetiš atmosferu i sl., pa onda odluči. Ako se ne varam, možeš da uzmeš i 3 meseca ili tako nešto neplaćenog odsustva, a radno mesto te čeka ako ne budeš zadovoljan novim poslom - jedino bi morali u toj nekoj IT firmi da te vode kao praktikanta koji nije zaposlen, već je na obuci i ne prima platu (a mogli bi da te plate sa strane ili da ti to uplaćuju kao autorski honorar).



Blessed are those who can laugh at themselves, for they shall never cease to be amused.
 
Odgovor na temu

Nebojsa Milanovic
Pančevo

SuperModerator
Član broj: 16
Poruke: 8304
*.dynamic.sbb.rs.



+1340 Profil

icon Re: Da li biti programer? Buducnost profesije19.04.2018. u 01:05 - pre 72 meseci
Dobio sam par prijava al' neću ništa sad da brišem, molim držite se teme.
 
Odgovor na temu

nemamstan

Član broj: 335040
Poruke: 246



+134 Profil

icon Re: Da li biti programer? Buducnost profesije19.04.2018. u 01:41 - pre 72 meseci
Citat:
Branimir Maksimovic

nemamstan:"Ako koristiš xchg onda si treću promenljivu uveo na "mala vrata" :)"

Pa nema 3. xchg instrukcija jeste tu da ti ne treba 3. registar. Inace koja joj je svrha?

XCHG kao treću promenljivu koristi registar unutar procesora a taj registar je programeru nedostupan. XCHG koristi 3 mov instrukcije kao i kod običnog swap(x,y).
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
178.250.138.210



+1064 Profil

icon Re: Da li biti programer? Buducnost profesije19.04.2018. u 05:35 - pre 72 meseci
mjanjic :"A za postavljača teme: ako si u mogućnosti, pokušaj da radiš dodatno van radnog vremena po nekoliko sati, ili da uzmeš u firmi deo odmora u nekom periodu pa da to vreme budeš na praksi u nekoj firmi, osetiš atmosferu i sl., pa onda odluči. Ako se ne varam, možeš da uzmeš i 3 meseca ili tako nešto neplaćenog odsustva, a radno mesto te čeka ako ne budeš zadovoljan novim poslom - jedino bi morali u toj nekoj IT firmi da te vode kao praktikanta koji nije zaposlen, već je na obuci i ne prima platu (a mogli bi da te plate sa strane ili da ti to uplaćuju kao autorski honorar)."

Neplaceno svakako. Mozda mu se ne svidi. Ionako firme sada ne zaposljavaju, nego radis po ugovoru kao agencija.

"A u IT firmama sušta suprotnost ovome"

Pa moras nekad bar malo da uljucis mozak ;) (bar malo)

 
Odgovor na temu

Drezden
ratko Mladic
svirach
javni sektor
Srbija

Član broj: 336094
Poruke: 29
*.dynamic.isp.telekom.rs.



Profil

icon Re: Da li biti programer? Buducnost profesije21.04.2018. u 15:22 - pre 72 meseci
Kako se ulazi u programerske vode? Zanima me web programiranje, znam da pisem kodove u HTML-u, imao sam 4-5 informatickih ispita na fakultetu.

Razmisljam da upisem ovaj dvomesecni kurs da bih za pocetak dobio kakav-takav sertifikat i praksu http://itoip.rs/web-developer....D8bCh1TKghMEAAYAyAAEgI5QfD_BwE

Kakve su mi sanse?

 
Odgovor na temu

[es] :: Vodič za posao :: Da li biti programer? Buducnost profesije
(TOP topic, by Nebojsa Milanovic)
Strane: < .. 1 2 3 4 5 6 7 8 ... Dalje > >>

[ Pregleda: 263545 | Odgovora: 1523 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.