Pereiti prie turinio

Rekomenduojami pranešimai

Sveiki,

Taigi norėčiau padiskutuoti tiesiog apie c#, nes kaip pastebėjau labai mažai šitam forume kas domisi c#. Pasidalinkite ką manote apie c#, ką gero buvot nuveikę, gal turit kokių nors atliktų darbų, gal kur dirbate c# programuotoju? Pastebėjau šiuo metu darbo rinkoje, kad laaabai trūksta c# programuotojo. Vos ne kas antras siūlo atlikti darbą su šią kalba. Pats katik pradėjau domėtis c#. Taigi rėžkit iš širdies apie c#.

Redagavo Iuc
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Univere trečiam kurse nemažai dalykų, būtent su C# programavimu, kas iki tol buvo C++ arba C, tai C#, nežinau, nuskambės kvailai labai, nes pradėjau nuo C++, tai atrodo lyg C++ su JAVA http://i.imgur.com/rZFHZTL.gif

 

C++, Java ir C# – visos trys yra C šeimos kalbos. Kiek teko girdėti, C# buvo kuriamas kaip konkurentas Java'i. Būtent iš šių dviejų faktų ir kyla visas tarpusavio panašumas.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na sunku ka pasireikst apie pacia kalba, viskas priklauso kas su ja daroma (.NET, windows apps'ai ar pan.) ir kurioj vietoj tai stovi lyginant su ju konkurentais. Kalbant apie pacias programavimo kalbas, bus tik asmenine nuomone, kuri maza ko verta. O jei ziurint i darbo pasiulymus, tai darba galima rasti su visom 'populiariausiom' kalbom.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ką čia bepridiskutuosi - tokioms kalboms, kaip Java, PHP ir t.t. dar daug žolės apšikti, kol pasieks lygiavertiškumą galimybių atžvilgiu. Kas atrodo neįmanoma, kadangi C# sąlyginai jauna kalba, o jau senokai pralenkė konkurentus. Ir naujos versijos labai aktyviai leidžiamos ir kuriamos.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ką čia bepridiskutuosi - tokioms kalboms, kaip Java, PHP ir t.t. dar daug žolės apšikti, kol pasieks lygiavertiškumą galimybių atžvilgiu. Kas atrodo neįmanoma, kadangi C# sąlyginai jauna kalba, o jau senokai pralenkė konkurentus. Ir naujos versijos labai aktyviai leidžiamos ir kuriamos.

 

Trūksta faktų.

 

Be to, konservatyvumas ir pastovumas nebūtinai yra blogas dalykas.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Trūksta faktų.

 

Be to, konservatyvumas ir pastovumas nebūtinai yra blogas dalykas.

Na jau ko jau ko, bet Microsoft backwards compatability nepalaikymu neapkaltinsi.

 

Aišku, CLR 2 ir 4 skiriasi ir taip paprastai skirtingų versijų bibliotekų nesukergsi, bet bent jau turim normalius generics, skirtingai, nei Java.

 

Faktų - pilnas internetas.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na jau ko jau ko, bet Microsoft backwards compatability nepalaikymu neapkaltinsi.

 

Aišku, CLR 2 ir 4 skiriasi ir taip paprastai skirtingų versijų bibliotekų nesukergsi, bet bent jau turim normalius generics, skirtingai, nei Java.

 

Faktų - pilnas internetas.

 

Tai prašau pateikti tuos faktus, o ne internetan siuntinėti. Kol kas tusčiom kulkom šaudai

 

Programavimo kalbos vertinamos keturiais kriterijais: readability, writability, reliability ir cost. Vienas iš faktorių, įtakojančių tiek skaitomumą, tiek rašomumą, tiek patikimumą yra paprastumas (simplicity). Kuo daugiau įvairių galimybių, kuo daugiau skirtingų būdų gauti tam pačiam rezultatui, tuo kalbos paprastumas menkėja. Dėl to ją darosi sunkiau išmokti, sunkiau skaityti svetimą kodą. O ypač kai čia giriesi, kad nuolat išleidinėjami nauji feature'ai.

 

Antras dalykas yra enterprise. Taip, paprastam programuotojui smagu, kai atsiranda naujų galimybių – ar programavimo kalboje, ar naudojamame karkase ir pnš. Bet enterprise'ui permainos netinka ir per brangiai kainuoja. Nežinau, gal į C# kalbą įtraukiamos naujovės ir netrukdo enterprise'ui, tačiau vienareikšmiškai teigti, kad tai yra vien tik gėris, irgi negalima.

 

Be to, Java turi visiškai kitą ideologiją, nei C#. Java kaip įmanoma labiau supaprastinta paliekant galimybę įgyvendinti įprastą funkcionalumą. Niekad nekilo klausimas, kodėl Java'oje nėra struct, nors ji kilo iš C++? Nes lygiai tą patį gali įgyvendinti su klase, todėl neįtraukus struct pagerinamas paprastumas neprarandant funkcionalumo. Būtent todėl ir Java nelinkus pristatinėti naujovių savo kalboje – nes laikomasi konservatyvios ideologijos.

 

Java’s designers started with C++, removed some constructs, changed some, and added a few others. The resulting language provides much of the power and flexibility of C++, but in a smaller, simpler, and safer language.

--- Concepts of programming languages

 

Kita vertus, C# ne itin konservatyvi. Kaip joje implementuojamas Observer pattern'as? Per delegates (kai tuo tarpu Java sugeba išsiversti su standartiniu interface paveldėjimu). Viena klase mažiau – užtat kalba sudetingesnė.

 

Ir paskutinis dalykas, darantys įtaką kainai – pernešamumas (portability). Java yra palaikoma daugumos platformų, kai C# orientuotas į Microsoft produktus. Pastarąją gelbsti tik trečiųjų šalių pastangos (pavyzdžiui, Mono).

 

Nesakau, kad viena ar kita kalba yra vienareikšmiškai geresnė. Bet taip, vos ne fanatiškai, aukštinti C# nebūčiau linkęs…

Redagavo wi_lius
Nuoroda į pranešimą
Dalintis kituose puslapiuose

1. Pilnos kulkos

http://whyjavasucks.com/Blog/5/Java_By_Example/93/Java_Annotations

http://stackoverflow.com/questions/1686699/operator-overloading-in-java

http://stackoverflow.com/questions/2406155/automatic-type-conversion-in-java

http://stackoverflow.com/questions/1217228/what-is-the-java-equivalent-for-linq

http://i.imgur.com/ncnM2Ia.png

etc

 

2. readability, writability, reliability ir cost

VerbosityFactory activate, plz. Tikrai pasakysi, kad C# yra labiau verbose už Java? Reliability - come one, yra PHP, su kas savaitiniais bugfix releasais, ir yra programavimo kalbos.

 

3. Enterprise.

Vėl? Atsiprašau. Pažiūrėk, kiek Windows XP oficialiai buvo supportinta ir tu manai, jog ta pati kompanija kas pusę metų laužytų backwards compatibility? Nesi sveiko proto - prašau, rašyk antru C# ant 4.5 .NET'o.

 

4. Woo woo nėra struct. Tai pliusas:

http://i.imgur.com/ncnM2Ia.png

"neprarandant funkcionalumo" :lol:

 

5. Observer patternas, as is[/n], implementuojamas naudojant IObserver ir IObservable interfejsus.

 

6. Kas blogai su generics? Type erasure. Type ######ing erasure, liežuvis neapsiverčia sakyti, jog java palaiko generics.

 

7. Portability nieko bendro su kalba neturi. Ir šiaip - kaip sekasi naudoti Java 8 ar net visas Java 7 galimybes ant Android? Java portability. :lol: Microsoft embracino Mono ir sekančios ASP.NET versijos bus testuojamos su mono. Tei galim palaukti, kas bus pirma - ar Microsoft paleis WCF'ą ant Mono, ar Java 8 taps tikrai portable.

 

Ir šiaip - yra 2 šakos: Microsoft ir nix like. Jei pasirenki nix like, tai pagrinde viskas ant nix ir suksis. Pasirinksi Microsoft - pagrinde viskas ant MS ir suksis. Kažkada klientui pasiūlėme paleisti logų serverį su MongoDB and Linux - mums pasiūlė apmokėti RedHat ir Mongo supportą, plius linux administratoriaus atlyginimą. :D

Redagavo Deviltry
Nuoroda į pranešimą
Dalintis kituose puslapiuose

<...>

 

Priešingai nei tu, aš niekad nesakiau, kad Java neturi trūkumų ir kad yra geriausia kalba pasaulyje.

 

Be to, didelė dalis to ką pateikei ir pabrėžia Java filosofiją: maža ir salyginai paprasta kalba. C# turi daug daug visko.

 

Trečia, aš net nebandžiau įrodyti, kad Java geriau už C#. Aš tiesiog išvardijau galimus C# trūkumus ir kai kur priedo palyginau su Java.

 

Ok, pritariu, dėl observer pattern'o suklydau. Kai kur jis implementuojamas per delegates, kai kur per IObservable (be to, Java nededa „I“ prie interface'o pavadinimo, tai kas čia labiau verbose?).

 

Tavo užsimintas erasure, kiek suprantu, yra tai, kad kompiliujant Java sukuria atskirą klasę kiekvienam tipui, panaudotam generics'uose? Šiaip turėtų mažiausiai rūpėti, kas darosi kalboje, kai ji sukompiliuojama. C++ iš vis sukompiliavus jokių complex tipų nebelieka, tik skaičiai ir simboliai. Ir ką, pasakysi kad C++ bloga kalba? (O gal čia tas atvejis, kai „portability ir kalba visiškai nesusiję“?)

 

Su tuo portability neikim į per daug į kraštutinumus (Java ir ant mano televizoriaus nepasileidžia). Iki šiol Microsoft palaikė Windows platformą, o Oracle – kur kas daugiau.

 

Tas paveiksliukas irgi geras. Atsidarei Wiki ir susiradai lentelę, kad prie C# nebūtų nei vieno raudono langelio, o prie Java – kuo daugiau. Gal dabar man padaryt atvirkščiai?

 

Dėl backward-compatibility irgi nė žodžiu neužsiminiau. Turėjau omeny, kad jeigu kalba gauna naujų feature'ų, tai visi su ja dirbantys turi visus juos ir išmokti, nes po to vienas pradės naudoti, kitas vis dar nemokės, ir susidarys sunkumai organizacijos viduje. O jeigu koks naudojamas karkasas pradės naujoves implementuoti, tai jau nori nenori, turėsi prisitaikyti.


TL;DR

Aš praeitu savo pranešimu norėjau parodyti, kad nėra viskas vienareikšmiškai gerai su C# ir kad tikrai yra trūkumų (kuriuos kažkas užmiršo paminėti per savo itin raiškius posakius). Tu tiesiog užsipuolei Java.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ok, pritariu, dėl observer pattern'o suklydau. Kai kur jis implementuojamas per delegates, kai kur per IObservable (be to, Java nededa „I“ prie interface'o pavadinimo, tai kas čia labiau verbose?).

Tai tiesiog yra naming convention, jei labai nenori jos sekti, tai kompiliatorius neuždraus tau rašyti tokio kodo, bet ši konvencija nėra bloga (bet asmeniškai nepatinka, jog priimta rašyti metodų pavadinimus iš didžiosios, bet tai pripratimo reikalas). O kokia ne verbose java gali pamatyti čia http://whyjavasucks.com/Blog/6/Java_vs_CSharp/4092/Operator_Overloading_Is_Useless_By_Example

Tavo užsimintas erasure, kiek suprantu, yra tai...

Kas yra ir kokios problemos atsiranda dėl type erasure gali pasiskaityti čia http://en.wikipedia.org/wiki/Generics_in_Java#Problems_with_type_erasure

Dėl backward-compatibility irgi nė žodžiu neužsiminiau. Turėjau omeny, kad jeigu kalba gauna naujų feature'ų, tai visi su ja dirbantys turi visus juos ir išmokti, nes po to vienas pradės naudoti, kitas vis dar nemokės, ir susidarys sunkumai organizacijos viduje. O jeigu koks naudojamas karkasas pradės naujoves implementuoti, tai jau nori nenori, turėsi prisitaikyti.

Žinoma, kam tas progresas, iš vis grįžtam į akmens amžių (assembler) ir džiaukimės, kad mokam visas kalbos funkcijas. Kam rūpi greičiau/patikimiau veikiančios programos, paprastesnis kodas, trumpesnis programavimo laikas, galimybės kurių iš vis prieš tai nebuvo ir dar šimtai visokių privalumų.

 

Niekad nekilo klausimas, kodėl Java'oje nėra struct, nors ji kilo iš C++? Nes lygiai tą patį gali įgyvendinti su klase, todėl neįtraukus struct pagerinamas paprastumas neprarandant funkcionalumo.

Čia tik tarp kitko, bet C#'e struct iš tikrųjų skiriasi nuo class, ne tik tokiu paviršutiniškumu kaip default access specifier, bet turbūt nėra prasmės pasakoti kuo.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...