So sánh .Net & Java

TnMinh

@jamesbon: em thì chưa có điu kin đ thi bt kì certification nào c. Em ch ch yếu t hc trong trường ĐH và làm project thôi . Gia .NET và Java, cái nào tha hưởng kiến trúc t cái nào thì em chng dám nói ba vì bn cht là công ngh này luôn b copy đ đưa vào công ngh khác.

Em không quan tâm đến .NET là có lí do riêng ca em. .NET ch có th làm vic trên môi trường Windows mà thôi. Nhưng khi chuyn sang yêu cu lp trình các ng dng ln cho các doanh nghip chng hn, s dng nhng h thng cung cp bi Sun, IBM, HP… thì li là chuyn khác bác . .NET trên nn này hoàn toàn vô dng vì các h thng này hu như không chy Windows. Như vy ý nim v đa nn tng ca Java lúc này được th hin rt rõ. Theo em thì Java mnh v phn enterprise hơn là phn desktop .

Tư duy lp trình ca các ngôn ng, v bn cht, là hoàn toàn ging nhau. S khác bit đây là do các thư vin, framework nào mà ngôn ng đó h tr. Tr s khác bit căn bn gia ngôn ng bc cao và ngôn ng bc thp, khó có th nói rng trong cùng mt cp đ, ngôn ng này có th làm được vic mà ngôn ng kia không th. Nếu ngôn ng này không có thư vin hay framework như ngôn ng kia thì đơn gin ta t viết mà xài.

Theo em thì đi vi người bt đu hc v lp trình thì hc ngôn ng nào cũng như nhau thôi. Cái phn core lúc này chng có gì khác nhau lm. Ch có khác v cái style lp trình. Ví d như bên C++ dùng cout đ in câu lnh ra màn hình, còn Java thì dùng System.out.println(“…”) thì cũng ra kết qu tương t. Khi nào lên mc đ advance thì s khác bit mi th hin rõ. Lúc này ta mi quyết đnh là: hoc da hoàn toàn vào mt nn tng, phó mc s phn h thng vào mt công ngh khép kín như .NET; hoc t mình phát trin, tha kế nn tng, s dng nn tng do người khác phát trin, phát trin thêm mt cách t do vi đ phc tp đến nhc c đu như Java.

Không có ngôn ng nào hay hơn ngôn ng nào, vì “nếu anh làm được, tôi cũng làm được…”. Cuc chiến xem ngôn ng nào là tt nht không bao gi có hi kết. Chn ngôn ng nào ch là do yêu cu ca project đt ra (h thng ca khách hàng ch h tr vy) và do ý mun ch quan ca người phát trin thôi .

Jamesbon:

@tnminh: Công ngh vi Ngôn ng là 2 th hoàn toàn khác nhau. Java ra trước .NET, nhưng cũng có cái Java phi hc .net (t bn 1.5 tr đi). Theo bn Java vi .NET, ngôn ng nào là ngôn ng bc cao hơn ?

.NET ch làm vic trên windows ? Bn biết ti sao Microsoft cho ra mt bn .NET, mà trong đó tt c các Class đu phi compile trước khi chy không? và bn có hiu .net framework (1.0, 1.1, 2.0, 3.0) đ làm gì không. Bn thân nó chng khác gì thng JDK hay là JRE ca Java, nó là cu ni hay chính là compiler đ dch tt c các class ca bn viết thành ngôn ng máy (bt k win, nix …). Hin ti “ch làm trên windows” đơn gin bi nó chưa có cái “SDK”, hay .net framework cho h điu hành khác (bên mac đã có 1 cái viết trên .net framework, dng SDK ri đy).

Bn hiu thế nào là enterprise ca java ? Enterprise có nghĩa là web ch ko phi desktop ?. Desktop hay Web đu có enterprise c, đây là nhóm phn mm. Và Java ko sinh Java đ chuyên web, bn thân java desktop application ca java rt mnh, nht là bn JDK 1.6 h tr rt nhiu.

Mt ngôn ng có nhiu thư vin hay framework hay không ph thuc vào vic chính nhng nhà phát trin đó xây dng, hoc cng đng xây dng. Ch bn thân mình xây dng thì mình nghĩ là o tưởng. Bi bn có th ly ý tưởng đ viết framework, ch mình “không có kh năng” sáng to ra pattern, framework vượt qua khi li mòn. Thm chí nếu có ý tưởng, hay kh năng sáng to cùng kiến thc vượt bc, thì mình bn cũng không th, hoc là nh, hoc bugs sinh ra không kim soát.

Mình nói li mt ln na, mi ngôn ng (cho là cùng cp) đu có nhng h tr công ngh đin hình ca nó mà ngôn ng khác có th / hoc chưa làm được (k c trong cách code). Và bn hiu .NET nó khép kín thì qu tht là mình không hiu kiến thc bn hc đi hc như thế nào (mình biết các thy ch luôn luôn – cn hc cái cơ bn là đ). .NET đã theo mt hướng gn như Java, bn thân .NET (web nói riêng) h tr quá nhiu, bi microsoft h tr “con đ” ca mình quá nhiu so vi Java h tr. Còn kh năng “m” thì mình xin nói là nó không h thua kém Java tí to nào.

Nếu bn so sánh ti thi đim hin ti, bn đã quen vi Java, bn th sang .NET s thy xem còn ý nghĩ là “phc tp đến rc đu như Java” na không.

Bn thân mình cm nhn như thế này, mình t thy là mình không hơn ai c. Nhưng mình thy cái nhìn ca bn còn surface quá, như kiu thay vì System.out.println thì dùng Console.write vy !

TnMinh

đây dường như không thích hp lm đ bàn lun v s khác nhau ca các ngôn ng, trong trường hp này là .NET và Java. Nhưng không sao hết, nếu đã mun phân tích thì chúng ta c làm vài bài viết nh xem sao.

Java và .NET không th so sánh cái nào hơn cái nào khi c 2 cng đng cùng đánh giá là ngang cp vi nhau. C 2 đu là ngôn ng lp trình hin đi, ln sân ca nhau và vn đang được phát trin tiếp. Nhưng Java và .NET li căn bn được xếp vào nhóm ngôn ng bc cao, còn C++ thì là bc trung.

Các Class trong .NET phi được compile trước khi chy thì là điu đương nhiên ri. Java, .NET, C, C++ đu là ngôn ng biên dch ch đâu phi ngôn ng din trch như Script (JavaScript, AppleScript, HTML, Perl…) đâu. Nó buc phi được biên dch sang mã máy và chy trên nn ca mt h thng qun lý nào đó, như Java thì có Java Virtual Machine chng hn. Ngôn ng din dch thì không cn phi như thế vì khi nào nó được yêu cu thc thi thì mi được chuyn sang mã máy, còn không vn là source code.

Đi vi Java, Sun to ra 3 phiên bn khác nhau là JME, JSE và JEE tương ng cho 3 môi trường là Mobile, Desktop và Enterprise. Như vy ng dng Enterprise và ng dng Desktop là hoàn toàn khác nhau. ng dng Desktop thì khi mô t làm gì vì ai hc Core Java đu biết hết. Vy thì Enterprise application ca Java nghĩa là gì? Nó h tr cho vic lp trình các ng dng theo kiu truy vn – đáp li. Nó khác vi Java Desktop ch to ra vô s các thư vin cho vic phân phi x lý, đa tng x lý da trên mt lượng ln các thành phn module kết hp vi nhau.

Điu này cũng có nghĩa là ng dng Enterprise có th chy như mt ng dng Desktop, nhưng ngược li thì chưa chc. Enterprise cũng không hiu thô thin là Web Programming, vì trong JEE còn h tr lp trình phân tán vn chng có can h gì đến Web Programming c. Tôi biết anh là mt chuyên gia lp trình Web nên cho rng đã hiu sai khi c nghĩ Enterprise c phi là Web. Mà tôi nh hình như mình đâu có ám ch Enterprise là Web đâu nh?

JSE là mt phn trong 3 anh em nhà Java. Nhưng tôi cũng không phi là mt tín đ cung nhit ca Java đến mc s s dng JSE đ phát trin các ng dng Desktop vì nguyên nhân cơ bn: tc đ thc thi qua máy o chm. Có th tôi s s dng mt ngôn ng khác không biết chng. Nhưng JEE thì khác, h thng phn cng h tr JEE luôn đ mnh đ khiến tôi ưa thích JEE hơn là nhng ngôn ng khác.

Nếu anh cho rng .NET có th làm mt s vic mà Java không th, hoc ngược li. Vy anh c th cho vài ví d xem, biết đâu tôi giúp anh tìm ra được câu tr li cũng nên. Điu căn bn giúp Bill Gates thành công là: “không gì là không th đi vi lp trình”.

Tôi có nói .NET là mt công c khép kín. Lý do là trước đây tôi dùng version 1.0 và 2.0 thì đúng là vy, và tht tiếc là trường ĐH ca tôi cũng chng care đến .NET hay Java mà cho chúng tôi t chn la ly ngôn ng mà mình s dng. Nhưng va tìm hiu li thì .NET đã phát trin theo hướng m như Java, ch có điu chưa open source ra thôi. Cái này tôi nhn sai vì chưa kp update kiến thc, không tránh khi cách nhìn phiến din v .NET. Nhưng chng sao c, nếu anh có kinh nghim v .NET thì có th chia s mt chút đ tôi hiu thêm v phn này, vì theo tôi, Java cho phép can thip rt nhiu và sáng to không gii hn, m mt cách ti đa s la chn thành phn trong khi xây dng mt module nào đó.

Theo tôi, Java vn phc tp hơn .NET vì khi dùng Java phi đòi hi config rt nhiu th, và thường không có công c h tr mà ch yếu phi thông qua command line. Nhưng .NET thì đơn gin hơn nhiu. Anh có b sung gì thêm không?

Tôi đưa cái ví d thô thin v System.out.println() đ cho mi người d hình dung và ai bt đu hc lp trình cũng có th hiu, ch đâu có khoe khoang trí tu ca mình? Cùng là mc đích mun in ra màn hình thì bên C++ thế này, bên Java nó thế kia, khác nhau v cái cách viết câu lnh, nhưng v process thì li ging nhau. Nếu anh cho rng nó khác nhau thì mi anh gii thích h xem. Hay anh có ví d nào phc tp hơn chng t ch này thì cùng đưa ra đ bàn lun nhé. Surface ca tôi chc ch đến mc này thôi, c gng đ nhng người khác cũng hiu mình đang nói gì. Nếu sai ch nào anh c ch ra, tôi s nhn.

JamesBond:

Trích:

Các Class trong .NET phải được compile trước khi chạy thì là điều đương nhiên rồi. Java, .NET, C, C++ đều là ngôn ngữ biên dịch chứ đâu phải ngôn ngữ diễn trịch như Script (JavaScript, AppleScript, HTML, Perl…) đâu. Nó buộc phải được biên dịch sang mã máy và chạy trên nền của một hệ thống quản lý nào đó, như Java thì có Java Virtual Machine chẳng hạn. Ngôn ngữ diễn dịch thì không cần phải như thế vì khi nào nó được yêu cầu thực thi thì mới được chuyển sang mã máy, còn không vẫn là source code.

Bạn nhầm rồi, mình cố tình nói là Java, .NET được máy ảo chuyển source thành mã máy để xem bạn phản ứng sao. Trên thực tế, Java và .NET hoàn toàn khác cách dịch của C, C++. Mã code được biên dịch ra mã máy ảo (bytecode) rồi máy ảo tự có trách nhiệm chuyển mã này thành mã máy tương ứng, như vậy sẽ có 2 bước, và giải quyết được vấn đề đa môi trường. Hơn nữa bạn cần xem ngôn ngữ nào là hướng đối tượng, hướng thủ tục http://macvn.com/forums/images/smilies/smile.gif

Trích:

Đối với Java, Sun tạo ra 3 phiên bản khác nhau là JME, JSE và JEE tương ứng cho 3 môi trường là Mobile, Desktop và Enterprise. Như vậy ứng dụng Enterprise và ứng dụng Desktop là hoàn toàn khác nhau. Ứng dụng Desktop thì khỏi mô tả làm gì vì ai học Core Java đều biết hết. Vậy thì Enterprise application của Java nghĩa là gì? Nó hỗ trợ cho việc lập trình các ứng dụng theo kiểu truy vấn – đáp lời. Nó khác với Java Desktop ở chỗ tạo ra vô số các thư viện cho việc phân phối xử lý, đa tầng xử lý dựa trên một lượng lớn các thành phần module kết hợp với nhau.

Điều này cũng có nghĩa là ứng dụng Enterprise có thể chạy như một ứng dụng Desktop, nhưng ngược lại thì chưa chắc. Enterprise cũng không hiểu thô thiển là Web Programming, vì trong JEE còn hỗ trợ lập trình phân tán vốn chẳng có can hệ gì đến Web Programming cả. Tôi biết anh là một chuyên gia lập trình Web nên cho rằng đã hiểu sai khi cứ nghĩ Enterprise cứ phải là Web. Mà tôi nhớ hình như mình đâu có ám chỉ Enterprise là Web đâu nhỉ?

Trích:

Theo em thì Java mạnh về phần enterprise hơn là phần desktop

Thứ nhất, bạn phân biệt rõ ràng Desktop với Enterprise, chứ ko phải mình chuộng web, bản thân mình chưa bao giờ nói enterprise là web.

Java Platform, Enterprise Edition (Java EE) builds on the solid foundation of Java Platform, Standard Edition (Java SE) and is the industry standard for implementing enterprise-class service-oriented architecture (SOA) and next-generation web applications

(from sun.java.com)
Ngay bản thân sun cũng nói rằng, JavaEE is for implementing SOA & Web App. Tất nhiên, ko phải desktop, cũng chẳng là web. Nên bạn đừng so sánh enterprise với desktop.

Trích:

JSE là một phần trong 3 anh em nhà Java. Nhưng tôi cũng không phải là một tín đồ cuồng nhiệt của Java đến mức sẽ sử dụng JSE để phát triển các ứng dụng Desktop vì nguyên nhân cơ bản: tốc độ thực thi qua máy ảo chậm. Có thể tôi sẽ sử dụng một ngôn ngữ khác không biết chừng. Nhưng JEE thì khác, hệ thống phần cứng hỗ trợ JEE luôn đủ mạnh để khiến tôi ưa thích JEE hơn là những ngôn ngữ khác.

Bản chất JEE cũng là Java, cũng phụ thuộc JVM, cũng trên nền JSE, khi chạy cũng tốn nhiều bộ nhớ và đôi khi người ta gọi là CHẬM. Bạn nói như trên thì có nghĩa là sản phầm từ JEE không thực thi qua máy ảo ah?

Trích:

Nếu anh cho rằng .NET có thể làm một số việc mà Java không thể, hoặc ngược lại. Vậy anh cứ thử cho vài ví dụ xem, biết đâu tôi giúp anh tìm ra được câu trả lời cũng nên. Điều căn bản giúp Bill Gates thành công là: “không gì là không thể đối với lập trình”.

Trích:

Nguyên văn bởi jamesbon

mỗi ngôn ngữ (cho là cùng cấp) đều có những hỗ trợ công nghệ điển hình của nó mà ngôn ngữ khác có thể / hoặc chưa làm được (kể cả trong cách code)

Bạn nên đọc kỹ những gì mình viết. “Hỗ trợ điển hình” mà ngôn ngữ khác có thể chưa làm được là sao? Câu nói của Bill Gates chẳng khác gì là đưa ra một bài toán mà có nhiều cách giải. Tất nhiên rồi, chẳng có gì là không thể, thay vì đi từ A – B, người ta đi từ A – C – B, đây chính là mấu chốt của “công nghệ điển hình”.

Ví dụ, bạn có thể dùng annotation cho các phiên bản cũ của Java ko? Cách viết web service trước khi có annotation như thế nào ? có dễ không ? Giờ đây ra sao?, Đây chính là cái mà gọi là ngôn ngữ (công nghệ) hỗ trợ.

Trích:

Tôi có nói .NET là một công cụ khép kín. Lý do là trước đây tôi dùng version 1.0 và 2.0 thì đúng là vậy, và thật tiếc là trường ĐH của tôi cũng chẳng care đến .NET hay Java mà cho chúng tôi tự chọn lựa lấy ngôn ngữ mà mình sử dụng. Nhưng vừa tìm hiểu lại thì .NET đã phát triển theo hướng mở như Java, chỉ có điều chưa open source ra thôi. Cái này tôi nhận sai vì chưa kịp update kiến thức, không tránh khỏi cách nhìn phiến diện về .NET. Nhưng chẳng sao cả, nếu anh có kinh nghiệm về .NET thì có thể chia sẻ một chút để tôi hiểu thêm về phần này, vì theo tôi, Java cho phép can thiệp rất nhiều và sáng tạo không giới hạn, mở một cách tối đa sự lựa chọn thành phần trong khi xây dựng một module nào đó.

Theo tôi, Java vẫn phức tạp hơn .NET vì khi dùng Java phải đòi hỏi config rất nhiều thứ, và thường không có công cụ hỗ trợ mà chủ yếu phải thông qua command line. Nhưng .NET thì đơn giản hơn nhiều. Anh có bổ sung gì thêm không?

Có chứ, phải bổ sung chứ. Bạn có thể sáng tạo thoải mái với .NET, chẳng qua là cách thực hiện nó hơi khác so với cách mà bạn quá quen với Java. Hơn nữa, so sánh độ phức tạp giữa các ngôn ngữ không phải là so sánh xem cái nào phải config nhiều hơn, hay là cái nào được hỗ trợ nhiều hơn. Bởi, với .NET bạn hoàn toàn vẫn phải config, thậm chí cũng khá là nhiều. Bản thân Java config nhiều hơn bởi bạn biết rồi đấy, lắm thầy thì nhiều ma. Java phát triển cộng đồng, càng nhiều thầy càng nhiều ý tưởng, các cách config khác nhau cho từng framework. Còn .NET thì có mình bố đẻ của nó làm, và làm, thế là đủ. Và mình nói lại thêm lần nữa, .NET là con đẻ của microsoft, trách là trách nó được hậu thuẫn quá ổn từ bố đẻ của nó, những môi trường phát triển xung quanh nó quá đầy đủ. Nhưng đó không phải là tiêu chí để so sánh 2 ngôn ngữ. (Bạn cũng có thể làm .NET qua command line đấy, chẳng qua là không ai thích làm thôi)

Còn về 2 câu lệnh in ra màn hình, bởi 2 câu lệnh đó quá nhỏ bé, không thể nói lên 2 ngôn ngữ !

P.S: Mình viết những điều trên đều rất trau truốt và cẩn thận về câu chữ. Bởi trong forum này có rất nhiều IT hay là Developer nói riêng.

Abs:

– Có mt bn trên nhn Cocoa là ngôn ng. Cái này sai, Cocoa là API lp trình chính trên Mac (ngoài ra còn Carbon – API tương thích vi API ca OS 9, Carbon đang b Apple loi dn khi OS X; câu chuyn v Cocoa và Carbon khá dài và thú v ^_^)

– Java ph biến hin ti theo em nghĩ do 3 lí do:
1. Java có tính m rt cao.
2. Java tương thích rt nhiu nn tng.
3. Java có mt quá trình phát trin trên h thng enterprise t rt lâu và đã đến thi kỳ hoàn thin.

Trong 3 yếu t trên em nghĩ yếu t 1 cc kỳ quan trng, bài hc v M$ khiến cho bt kỳ tp đoàn ln nào cũng s s l thuc vào M$ hay bt c công ty nào. Java và Sun + Java Communities đm bo cho s tn ti lâu dài + m ca Java.

Trong thế gii các phn mm c ln và cc ln thì đ n đnh, an toàn, kh năng m rng có tính quyết đnh. Java đã được kim chng lâu dài. Trong các ng dng tài chính, giao dch, phân tích kinh doanh Java nm cùng s ít các tượng đài như Fortran và Cobol (các bác đng cười, vn có dev phi hc và maintain my cái này đy, nhng mainframe chy my ca kh viết t cái này vn hàng giây, hàng phút x lý hàng triu giao dch…)

Nói chung mi th có đim yếu và đim mnh, biết s dng sao cho hp lý là n.

Ví d gi các bác cn lp mt din đàn nho nh đ vui chơi, chc chn gói gii pháp: share hosting vi LAMP + 1 em PHPBB hay VBB là chun, chng ai giàu ti mc chơi free forum Java ri đi thuê hosting java. ^_^

Nguồn: http://www.macvn.com

Tagged:

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: