260 likes | 421 Views
Java versus .NET. The Heavyweight Championship Showdown. Why are we here?. Times are changing The once powerful Java has a new challenger Should we rethink our alliances? Should we abandon Java? Should we learn .NET? Should we be afraid? (Spoiler: Don’t panic quite yet).
E N D
Java versus .NET The Heavyweight Championship Showdown
Why are we here? • Times are changing • The once powerful Java has a new challenger • Should we rethink our alliances? • Should we abandon Java? • Should we learn .NET? • Should we be afraid? • (Spoiler: Don’t panic quite yet)
This presentation at a glance • Technological comparison • On the desktop • On the server • On the cell-phone and PDA • Non-technological aspects • Cost of ownership • Existing systems and partners • Open source • Summary
Ringside round-up: The champion Java • Several years of established performance • Thousands of successful projects • Hundreds of industry-wide standards (JCP) • Many vendors, both vertical and horizontal • Widely accepted in academia • Strong OO model, powerful libraries, strong enterprise capabilities
Ringside round-up: The challenger .NET • The next step in the evolution of Windows software • Championed by the all-powerful Microsoft • Has generated a lot of buzz in the business • Has learned from previous mistakes of Windows technology and Java? • Strong OO model, powerful libraries, strong enterprise capabilities
Technological comparison • Feature rich languages and libraries
For the developer • C#-language is like Java with some features added • (Events, operator overloading, enums, delegators, attributes) • And some removed: Anonymous inner classes! (but anonymous functions are coming) • Doubtful value: Enums, operator overloading, events • Very valuable: attributes
Language differences • C# is the most used language on .NET • VB.NET is a close runner up • Both contain unique features
Attributes • Examples • Uses • JSR 175
On the desktop • .NET provides a native look and feel (but try SWT) • .NET provides an easy to use designer (but it has some flaws) • In my view, the API interface for Java is better than .NET • Vivid example: JTree versus TreeView
Autodeployed clients • Java Web Start versus .NET ”autodeployment” • My experience with both is good • Introduces security issues • Some minor differences: • .NET does not show splash-screen: User often accidentially starts multiple copies • .NET code access security is not 100% good yet
On the server • Issues: • Data access: Entity Beans versus ADO.NET • Web Access: Servlets/JSPs versus ASP.NET • Transactions: Session Beans versus COM+ Components • Scalability, manageability etc.
On the cell-phone and PDA • Browser-based • Java: No special support • .NET: Microsoft Mobile Internet Toolkit • Client-based • Java: J2ME – MIDP is available, but not very powerful • .NET: .NET CF: Mostly available on PDAs (Pocket PC), but very powerful compared to MIDP
Portability • If you need to run on different platforms, don’t do .NET • If you want to program in several languages, don’t use Java • (Unless you know what you’re doing) • (Why would you want several languages, anyway?)
Performance benchmarks • Basically worthless • Usually test a limited subset of platforms: • E.g. Benchmark showing Java 10s of times faster than C# turned out to test only the difference in processing of Regular Expressions
Cost of ownership • .NET: No runtime costs, acceptable development costs • Java development costs: Free (NetBeans, Eclipse) to very expensive (OptimalJ, TogetherJ) • Commercial EJB servers: Very high costs • Open-source EJB servers: JOnAs and JBoss • Open-source servlet containers: Tomcat
Existing infrastructure • Single most important factor: • What are your current systems running on? • and your customers’? • Integration is always expensive • Using C, C++, Win32, COM etc from .NET is unbelievably easy • JNI is a drag • Web Services resolve some of these issues
Committed industries • Telecom: Java • Banking: Java • Process industry and automation: Microsoft • End user shrink wrap: Microsoft
Open source • Why is open-source important? • Cost • But mainly bureaucratic • Safely • Quality • Java has attracted open-source developers, Microsoft has not (at least not until now) • Google: “java open-source”: 1,240,000 • Google: “c# open-source”: 111,000 • But Windows historically bigger in commercial components
Philosophical issues: Open or closed world? • .NET is standards (EMEA) based, but it is a standard “delivered from the Gods” (i.e. Bill) • Java is now under the control of the JCP. Control is not in Sun’s hands • Better marked acceptances
People issues • If you are a manager: Unhappy programmers are less productive • Technological change must be accepted by those implementing it • A programmer from one world can learn the technology of the other very quickly, but... • ... learning how to use a tool effectively is very time-consuming
The future • Both technologies in rapid change • .NET 1.1 was just released, Everett is expected this year (adds anonymous functions!) • Java 1.5 (Tiger) will be very exciting. Hope it lives up to its nickname • Includes among others JSRs 166 (Doug Lea’s concurrency tools), JSR 175 (Metadata), JSR 201 (enum, foreach, autoimport)
Conclusion • Sticking with what you know is not a bad choice • .NET has a small advantage – but the technologies will continue to leapfrog past each other • Changing your existing infrastructure is expensive • The availability of open source projects for Java is invaluable
Overview • Målgruppe: Programmerer, arkitekter og teknisk prosjektledere • Formål: Få grunnlag for å vurdere fremtidig teknologivalg. Få en introduksjon til .NET (se hvordan teknologi i .NET svarer til sine "stesøsken" i Java). Få mulighet til å se gjennom "hypen". • Forkunnskap: Generell kjenskap til J2SE, J2ME og J2EE plattformene. Kunnskap til applikasjonsarkitekturer: To, tre- og fire-lag (web basert), mobil • Konklusjon: Teknisk sett er dette to moderne, kraftige plattformer. Det er vanskelig å argumentere saklig for den ene forran den andre på generelt teknisk grunnlag. Mange bedrifter har imidlertid kunnskap, partnere og andre faktorer som veier tungt. • En oversikt over tema • Teknisk grunnlag for teknologivalg: • * Rene språkforskjeller (attributes, enums, events, overloading, boxing, native calls) • - hva betyr det for kompleksitet og hva får man tilbake? (C# har flere features enn Java, men hvilke er verdifulle?) • - hvordan kommer dette til å endre seg (særlig JSR 175 og 201) • - Forkskjeller i bruk av "foreign function calls" (dessverre: .NET vinner, hands down) • * På mobile klienter • - Tekniske krav (oppsummering: MIDP når et bredere publikum) • - Muligheter (oppsummering: .NET Compact Framework har rikere features) • - Konklusjon: Java for massemarket, .NET for vertikale applikasjoner med høye krav • * På tykke klienter • - Brukergrensesnitt (konklusjon: .NET er mer native, men SWT er et skritt i riktig retning) • - API (konklusjon: MVC-designet i Java vinner over .NET) • - Uerfarene programmere (konklusjon: .NET Windows Forms Designer er verdifull, selv om den har barnesykdommer) • - Dynamisk deployment: Java Web Start og .NET autodeployment (JWS er mer modent, begge fungerer bra) • * På tynne klienter • - ASP.NET er grunnleggende et veldig godt sett med Taglibs • - Verktøy som Struts, Jakarta Velocity og Jakarta Taglibs gjør servlets fullgode • - Men Java krever mer kunnskap for å få til å virke • * På server-siden • - Web-Services (konklusjon: .NET har innebygget støtte på klient og server, noe som funker veldig bra) • - Data-aksess (konklusjon: ADO.NET er bedre for applikasjoner med lite behov for OO-behandling av data. Entity beans er veldig tungvekt) • - Transaksjonsmonitor (COM+ og EJB: EJB er mer kompleks) • - Begge platformene har god skalerbarhet, men Java har lange erfaringstall å vise til • - Benchmarks er i stor grad verdiløse - med nok optimalisering kan man oppnå nesten vilkårlige tall • * Andre tekniske betraktninger: • - .NET fungere bare på Windows (men open-source prosjekter porter til andre platformer) • - Java platformen støtter bare Java programmeringsspråk (men open-source og andre prosjekter støtter andre språk. Dessuten: Hvor mye er dette egentlig verd?) • * Overall: • - .NET er lettere for uerfarene programmere på nesten all områder • - Java er kraftigere på noen områder, mer modent (.NET har beholdt noe av Win32/COMs feature med mystisk krasj) • - Java krever mer erfaring - spesielt for å kjenne de riktige Open-Source verktøyene • - .NET er steget forran med features, men Java vil kopiere de mest verdifulle • - Begge valgene er gode fra et teknisk perspektiv i nesten alle situasjoner • Andre faktorer: • * Eksisterende teknologi: • - En bedrift har et ofte brukt Windows eller Unix for servere i mange år • - Samarbeidspartnere, konkurrenter og bransje generelt er veldig knyttet til et område (for eksempel: Bank skyr ofte Windows, Industri har brukt f. eks. OPC i mange år) • - Det kan være lurt å holde seg til den verdenen man kjenner • - Det kan være lurt å holde seg til en platform for interoperabilitet, drift og opplæring • * Pris: • - .NET server mye billigere enn en typisk BEA, WebLogic eller 9i AS installasjon • - MEN: JBoss, JOnAs er open-source, og gode alternativer ved etablering av et prosjekt • * Tredjepartskomponentstøtte • - .NET har flere komponentselgere • - Java har mye mer open-source aktivitet • - Open-source har mye lavere TCO enn tredjepart, pga redusert byråkrati (min erfaring) • - Tredjepart har skjelden bedre kvalitet • * Myke faktorer: • - God erfaring og gode kontakter med en "verden" teller mer enn vi teknikkere ofte anerkjenner • - Lærekurven ved å bytte teknologi er alltid brattere enn man tror, selv for dyktige programmerer • - Min gut-feeling: .NET hjelper deg å komme i gang, Java hjelper deg å avslutte • Konklusjon: • * Hva er ikke gode beslutningsgrunner: • - Generell sammenligning av "features" • - Publiserte "benchmarks" • * Hva er gode beslutningsgrunner • - Spesifikke teknologikrav: Spesielt på mobil • - Hensyn til eksisterende driftsmiljø og kompetanse • - Hensyn til bedriften og bransjens tradisjonelle samarbeidspartnere