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

Programer Pocetnik

[es] :: C/C++ programiranje :: Programer Pocetnik

Strane: << < .. 3 4 5 6 7 8

[ Pregleda: 20106 | Odgovora: 157 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 814
*.dynamic.isp.telekom.rs.



Profil

icon Re: Programer Pocetnik29.07.2017. u 07:03 - pre 18 dana i 23h
@jablan
Citat:

Ja koliko znam, i u statički tipiziranom svetu pišu se unit testovi.


Na zalost pisu. To je upravo odlika onih koji ne znaju sta bi radili sa type sistemom i kojima je svejedno da li rade javascript, php, c++, C#, java, haskell, F# itd. Znas kako "funkcija je funkcija, petlja je petlja, if je if, nema tu mnogo razlike" filozofija :)


Digresija: prosle godine sam konkurisao za jednu firmu, remote work C#, dosta je ima na oglasima na SO, da je ne reklamiram, rekoh sebi da okusam srecu. Uglavnom, prvo dobijes pitanja pa zatim zadatak. Kada sam dobio zadatak, koji je manje vise bio neki mini web servis, dobio sam zahtev da se to lepo dokumentuje i napisu unit testovi, inace se ne prihvata kao validno resenje bez toga. Cim sam dobio zadak, samo sam im zahvalio i rekao da unit testove ne treba da radis u C#, tj u strongly typed jezicima i da neko ne razume bas najbolje C#. Nope, ne zelim da radim u startu sa takvima i govori mi u startu o kolicini njihovog znanja kao i filozovije (mogao bi se kladiti da je sledeca stvar na meniu DI :))


Citat:

A ja još ne videh kako to kompajler rešava pitanje unit testova. Čime tačno zameniš ovo:


Ali zasto bi ih resavao. (samo da napomenem, primer koji si dao je skroz neadekvatan isto kao i onaj sa wikipedia, masi se skroz poenta). Zatim deo koji se testira je minoran i skoro pa nebitan u odnosu na ceo eco system. Type sistem ti nudi kompletnu drugu vrstu provere, ne ovu, ona koja je najmanja bitna, a to je lokalna funkcionalnost. Recimo, u C# ti moras bar jednom kada pises svoju f-ju da je proveris i svaki sledeci put kad je nesto menjas - to je jedini "a must". Sve ostalo ti type sistem garantuje. Nija stvar u tome da znas da funkcija lokalno dobro radi, nego da ona u celom ekosistemu ne remeti red.

Cak da uzmemo i ovaj primer sa dodavanjem, sta konkretno on demonstrira, tj. testira? Bez tipova to nekako jos deluje i da ima smisla, sa tipovima ne. Pricamo o konkretnom primeru, sto znaci da je ceo itnent da ti zelis garanciju da ces dobiti uvek broj sabiranjem dva broja. To je sve sto ja mogu da zakljucim. Definisanjem tipa, recimo u C#, ja znam da je ovaj slucaj zadovoljen i na dalje type sistem preuzima proveru code-a i nema ptrebe ja rucno da bilo sta kucam.

Recimo:

Code:

int Add(x, y) => x + y

class Control
{
    int CalculateAbsoluteX(x) => Add(Control.Left + x)

    int CalculateAbsoluteY(x) => Add(Control.Top + y)
}


Sta ces ti dobiti ako testiras Add funkciju? Apsolutno nista, imas garant type sistema da vraca integer. Ali, ako zato recimo promenis taj deo u:

Code:

double Add(x, y) => x + y


Type sistem ce ti se odma pobuniti i reci da si prekrsio contract u svim slucajevima. Kako to postizes testovima? Tako sto moras da pokrijes svaki poziv, svaku kombinaciju svih poziva funkcija i napises gomilu code-a koji opet nece biti precizan kao type sistem. I tu lezi ta moc, ne da testiras loklano, to radis dok razvijas, i dok god ispunjavas contract, dotle nema bojazni, a cak i kada prekrsis tu je type sistem da te podseti.

No, cak i ako ti to nije dovoljno i hoces da imas kroz staticku proveru, onda recimo imas Code Contracts. Njegov static checker ce ti upravo dati opciju da enforce-ujes constrainte sa vrednostima :)

Ako to nije dovoljno, mogao bi da napises svoj static checker koji ce da radi proveru :)

Ako i to nije dovoljno, mozes da automatizujes (tj. potencijalno je moglo) testove daleko bolje nego ti rucno da ih pises.

No samo da napomenem, meni svi ovi primeri nemaju smisla, svaki put kada vidim unit testove izgledaju ko cherry picking i osecam se ko budala koja ispunjava neki ritual :) Cak i kada sam na svom projektu pokusao da koristim Code Contracts, bas upravo zbog ovih stvari, verujuci da unit testovi imaju neki added value, zazalio sam. Kolicina noise koja se tako pravi je jednostavno ogromna naspram added value-a (koji je po mom misljenju skoro pa neprimetan).
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 814
*.dynamic.isp.telekom.rs.



Profil

icon Re: Programer Pocetnik29.07.2017. u 07:12 - pre 18 dana i 23h
Citat:

Pa cek koja razlika izmedju ovoga i dynamic tipa? Ovde na pogresnu vrednost izbacuje gresku a tamo ce i na tip ;p
U principu veca je verovatnoca da ce neko da se doseti u nekoj buducnosti da baci u f-ju 0 i 1 nego da ce da promasi tip....


Ne razumem sta je ovde a sta je tamo :)

Nije fora u tome sto ces ti da dobijes runtime gresku kada pogresno inicializujes, nego u tome da svuda nadalje u sistemu imas contract za koji te type sistem upozorava ako pokusas da se igras :)

 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 814
*.dynamic.isp.telekom.rs.



Profil

icon Re: Programer Pocetnik29.07.2017. u 07:16 - pre 18 dana i 23h
Citat:
jablan
I nije tačno da te korišćenje statički tipiziranog jezika automagično oslobađa potrebe da pišeš unit testove. Tačno je da pomaže otkrivanju nekih grešaka u compile time, omogućava bolju analizu koda od strane npr. IDE-a, i u nekim (ponavljam nekim) slučajevima poboljšava razumljivost koda (kontraprimer je ovaj odozgo negyxov gde praviš poseban interfejs da bi
simulirao testiranje). Ali apsolutno ne garantuje ispravnost tvog koda, niti garantuje da nećeš imati runtime greške (posebno kod nullable types).


Ja nisam rekao da pravis poseban interface, nego tip, koji ce nositi informaciju o specifikaciji, posto je primer los, onda ti ne treba tip u opste, nego mozes da koristis obican int.

Sto se tice nullable, to jeste najveca boljka, bar meni, ali cak i tu ima leka, Code Contracts (bljak :)) i jos bolje F# (ili za van .NET-a Haskell) :)
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 553
*.bvcom.net.



Profil

icon Re: Programer Pocetnik29.07.2017. u 07:19 - pre 18 dana i 23h
negyxo napisa:
Code:

To je upravo odlika onih koji ne znaju sta bi radili sa type sistemom i kojima je svejedno da li rade javascript, php, c++, C#, java, haskell, F# itd. Znas kako "funkcija je funkcija, petlja je petlja, if je if, nema tu mnogo razlike" filozofija :)


Heh, probaj u Haskell-u da radis neko vreme,(nema ni varijable ni petlje ;p)
Funckionalno programiranje je dijametralno suprotno imperativnom programiranju to su dva razlicita sveta.
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 814
*.dynamic.isp.telekom.rs.



Profil

icon Re: Programer Pocetnik29.07.2017. u 07:37 - pre 18 dana i 23h
Branimire, ne znam da li si skontao, ali nisam ja taj koji tako misli, nego upravo ekipa kojoj je sve isto. Cak sta vise, jedan od razloga zasto zelim da pobegnem iz C# sveta je upravo ta: TDD, Dependency Injection, Factory Pattern, Visitor Pattern, generalno design patterni itd. Gomila nekog buzzworda s cim se ljudi gadjaju i onda im dodjes na projekat i vidis monolitne strukture sa sve nekim spageti, ali tu su patterni, testovi itd. nigde ni govora o tome da iskoristi prvo type sistem. U F# kontam da je daleko manje tih hypera, samo zasto sto je mnogo teze uci u taj svet. I da moj omiljen twit :)

https://twitter.com/jeroldhaas/status/535919819355598848
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 553
*.bvcom.net.



Profil

icon Re: Programer Pocetnik29.07.2017. u 08:12 - pre 18 dana i 22h
Heh, buzzwordi za patterne su bili jako popularni oko 2000te godine. Vise manje fabrike i wrapperi su svuda potrebni, visitor redje ;)
U principu hijerathije klasa i te fore su sada out. In je funkcionalno programiranje .... a da i sa extreme programming su davili isto pre jedno 10-15 godina.
Ako volis F# probaj Ocaml posto je F# odatle pokupio fore. ili ML to je ta grupa jezika, neki hibrid izmedju imperativnog i funckionalnog programiranja.
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 814
*.dynamic.isp.telekom.rs.



Profil

icon Re: Programer Pocetnik29.07.2017. u 08:46 - pre 18 dana i 22h
Nije stvar da li su patterni potrebni, ali kada naucis da postoji tamo neki pattern i onda guras svuda i uvek, onda je to problem, a recimo za type sistem nemas pojma cemu sluzi. Tako je recimo bilo pre jedno 8, 9 godina, recimo bas sam ovde na ES pisao, recimo upotreba interface-a, granicila se sa ludilom, danas nije nista bolje, samo dodas sada i razne patterne, containere itd. overbloat^2
 
Odgovor na temu

suncokreet
Beograd

Član broj: 319090
Poruke: 18
212.200.65.*



Profil

icon Re: Programer Pocetnik29.07.2017. u 10:11 - pre 18 dana i 20h
Citat:
Branimir Maksimovic:n je funkcionalno programiranje ....


Ja nešto nisam primetio da je u Srbiji tako. Misliš generalno u svetu da je in?
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 553
*.bvcom.net.



Profil

icon Re: Programer Pocetnik29.07.2017. u 10:13 - pre 18 dana i 20h
U Srbiji ne znam kako je ;) Da usve tu, pa vidi samo kolko je jezika uvelo anonimne f-je u zadnje vreme ;p

edit:
i da pogledaj kolko je chainovanje metoda tj kompozicija f-ja popularno. To su sve fore iz funkcionalnog programiranja,
koje potice od tzv curringa gde f-ju sa dva argumenta razbijas na dve f-je sa po jednim argumentom gde je rezultat jedne argument
druge.


[Ovu poruku je menjao Branimir Maksimovic dana 29.07.2017. u 11:30 GMT+1]
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 814
*.dynamic.isp.telekom.rs.



Profil

icon Re: Programer Pocetnik29.07.2017. u 12:16 - pre 18 dana i 18h
BTW. Nisam mogao juce da nadjem automated testing tool sto je MS razvijao, ali evo napokon sam iskopao:

https://channel9.msdn.com/Blog...with-Pex-in-Visual-Studio-2008

Mala digresija samo, PEX nije random generator, PEX upravo koristi staticku analizu da infer-uje ulazne vrednosti (BTW. Sada se zove valjada IntelliTest).


 
Odgovor na temu

mjanjic
Mladen Janjić
Čačak

Član broj: 187539
Poruke: 131
*.dynamic.isp.telekom.rs.



Profil

icon Re: Programer Pocetnik29.07.2017. u 14:45 - pre 18 dana i 16h
Neki izgleda misle da se Unit testovi pišu samo da se ne bi zabrljalo sa tipovima podataka, a sam naziv se u stvari odnosi na testiranje DELA programa/softvera (u principu, treba uzeti najmanju celinu koju je moguće i ima smisla testirati), pri čemu se pri tom konkretnom testiranju za ostatak softvera uzima da funkcioniše pravilno (npr. pri testiranju unosa i obrade podataka, koristi se poseban softver koji će da lažira uspešno upisivanje u bazu, pošto recimo taj segment ne želimo da testiramo u tom trenutku ili još nije spreman za testiranje).

To ne znači da je dovoljno da testiramo neku našu klasu i to je to, već se mora uzeti neka veća celina, npr. više klasa ili modula između kojih postoji značajna komunikacija.



Najbanalniji primer bi bio U/L fajla, pri čemu se zahteva određeni tip. Ali, kako korisnik može greškom postaviti fajl koji ima pravilnu ekstenziju, a sadržaj nije u skladu sa ekstenzijom (npr. ljudi često *.DOC fajlovima samo promene ekstenziju u *.DOCX i misle da je to u redu, pa recimo MS-ov File Formats Convertor ne radi kako treba ako je u pitanju .docx fajl sa .doc ekstenzijom), šta će se desiti sa programom?

Bilo bi suludo da ceo sistem padne ako se postavi u formu pogrešan fajl (npr. online galerija slika koja očekuje .jpg ili .jpeg format slike, a neko postavi .png ili .gif).
Ili, očekuje se XML sa određenim tagovima, a korisnik postavi XML u kome je nešto ručno menjao ili struktura nije onakva kakvu program očekuje.

Testiranje služi tome, a ne da se testiraju pojedinačne klase ili funkcije, a opet, ne može se čekati "production" verzija da se započne sa testiranjem, jer je onda mnogo teže (i skuplje) pronaći greške.


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

Branimir Maksimovic

Član broj: 64947
Poruke: 553
*.bvcom.net.



Profil

icon Re: Programer Pocetnik29.07.2017. u 14:55 - pre 18 dana i 15h
Tesko onom ko se oslanja na tudj softver prilikom integracionih testova ;p
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 755
*.e-info.ba.



Profil

icon Re: Programer Pocetnik31.07.2017. u 08:04 - pre 16 dana i 22h
Citat:
Branimir Maksimovic:
Rajko govorili smo o dynamic/static types ;)
A ti sad pricas o interpretiranju/kompajliranju ...


Ne, dobro sam razumeo o cemu se pisalo. Samo kazem, kao nativni Pascal programer (mnogo pre Delphi-ja) koji je navikao na 'strict typed' (prastajte na izrazu) programski jezik (jer Pascal to jeste), malo su mi cudni/strani svi jezici koji daju toliku slobodu u pisanju koda.
Sad, da li je u pitanju compiler ili interpreter, o tome nisam ni razmisljao.

Pozz
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 5009

Sajt: pedja.supurovic.net


Profil

icon Re: Programer Pocetnik31.07.2017. u 12:46 - pre 16 dana i 18h
Citat:
negyxo:
Citat:
Predrag Supurovic:
Kako će kompajler da proveri da li sam ja nešto namerno identirao ili sam pogrešio pa nisam identirao?


Sad mozemo da teramo mak na konac, a kako ce kompajler da proveri da li sam stvarno hteo da zatvorim blok sa zagradom ili nisam. Na isti nacin dobijas poruku i o identaciji. Kompajler ne zna, ali ti javi da nesto nije u redu na isti kriptican nacin kada obrises slucajno (ili stavis) zagradu.


Ne može se to porediti. Kada obrišeš greškom ili staviš višak znak koji označava blok, to će se negde manifestovati kao sintaksna greška, pa makar skroz na kraju koda. Ako omaneš u identaciji, to uopšte ne mora da bude sitnaksno netačno.


 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 814
82.117.211.*



Profil

icon Re: Programer Pocetnik31.07.2017. u 14:54 - pre 16 dana i 15h
Khm, pa isto ce se manifestovati i kada imas indentaciju, tj. ne znam kako ostali rade, ali u F# je tako. Cim omasis indentaciju, kompajler ce se zaliti, jednostavno jezik je tako dizajniran da svaki expression ima tacno sta ocekuje, pa je sansa da ces da promasis veoma mala. Mislim da je najbolje prvo probati pa onda reci da ne valja, ovako deluje da postoji problem gde realno ne postoji (recimo, meni je veci problem discoverability, intelisense daleko bolje radi recimo u C# nego F#, i ovo nije problem do tool-inga nego do API, recimo funkcija find nad listom, prvi argument je funkcija, drugi je lista, intelisense u tom slucaju ne moze da pomogne jer kucas s leva na desno :), recimo zato je LINQ "obrnut" u odnosu na SQL).
 
Odgovor na temu

Bradzorf012
Direktor sektora za zlato i dijamante
Bradzorf Diamond Industries LLC
Srce tame

Član broj: 334105
Poruke: 50



Profil

icon Re: Programer Pocetnik01.08.2017. u 03:00 - pre 16 dana i 3h
Može li neko da mi objasni razliku između kompajlera i interpretera i da mi navede primere, bio bih mu jako zahvalan.
'Više bih voleo da budem pod okupacijom Crvene armije nego da moram da jedem hamburgere.'
Alan de Benoa

'Vojvodina je bila izdržavana.'
Zoran Đinđić
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4352



Profil

icon Re: Programer Pocetnik01.08.2017. u 06:17 - pre 16 dana
Interpreter izvršava izvorni program (sors) koji mu daš. Kompajler ga prevodi u neki oblik koji je prilagođeniji izvršavanju i ne izvršava ga.

Granica je dosta mutna pošto i interpreter obično prvo prevede sors u neki oblik koji je prilagođeniji izvršavanju, ne izvršava program liniju po liniju iz sorsa.

Primeri: kompajler - gcc, interpreter - JS engine u tvom browseru.
 
Odgovor na temu

mjanjic
Mladen Janjić
Čačak

Član broj: 187539
Poruke: 131
*.dynamic.isp.telekom.rs.



Profil

icon Re: Programer Pocetnik01.08.2017. u 09:47 - pre 15 dana i 21h
Većina kompajlera radi slično (mislim na rezultat), a interpreteri su napredovali tako da koriste nešto slično keširanju, tj. često pozivane funkcije i ostale delove koda prevode u neki binarni oblik koji se brže izvršava (primer je sa MS-ovim IIS, kod koga skripte mogu biti u bilo kojem od podržanih jezika, pa i VB, C++..., ali se često pozivani delovi privremeno kompajliraju u binarni izvršni kod, čak i sam programer može to uraditi ručno, tj. kreirati .dll fajl ili šta već).

Praktično, mnogi interpreteri funkcionišu kao JIT (Jut-in-Time) kompajleri.
Blessed are those who can laugh at themselves, for they shall never cease to be amused.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Programer Pocetnik

Strane: << < .. 3 4 5 6 7 8

[ Pregleda: 20106 | Odgovora: 157 ] > FB > Twit

Postavi temu Odgovori

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