एक C # डेवलपर के रूप में, क्या आप जावा को एंड्रॉइड के लिए विकसित करना सीखेंगे या इसके बजाय मोनोओड्रॉइड का उपयोग कर सकते हैं? [बन्द है]


46

मैं अपने आप को C # में पारंगत होने के बारे में सोचता हूँ। यह इस समय मेरी पसंद की भाषा है, और यह वह जगह है जहाँ मूल रूप से मेरे सभी पेशेवर अनुभव निहित हैं।

फिर भी, मैं मोनड्रोइड परियोजना के अस्तित्व से हैरान हूं । मेरी समझ हमेशा यह रही है कि C # और Java बहुत करीब हैं। जैसे, यदि आप एक को जानते हैं, तो आप दूसरे को वास्तव में जल्दी से सीख सकते हैं। इसलिए, जैसा कि मैंने अपना पहला एंड्रॉइड ऐप विकसित करने पर विचार किया है, मैंने अभी-अभी यह अनुमान लगाया है कि मैं अपने आप को जावा से परिचित करवाऊंगा ताकि शुरुआत हो सके और फिर जैसे-जैसे मैं सीखता जाऊं।

क्या यह MonoDroid का उपयोग करने की तुलना में अधिक समझ में नहीं आएगा, जो कि जावा एंड्रॉइड एसडीके की तुलना में कम सुविधा संपन्न होने की संभावना है, और वैसे भी अपने स्वयं के एपीआई (यद्यपि एक .NET एपीआई) सीखने की आवश्यकता है? मुझे बस ऐसा लगता है कि एक नई भाषा सीखना बेहतर होगा (और उस पर एक अत्यंत लोकप्रिय) और इसमें कुछ अनुभव प्राप्त करें - जब आप पहले से ही किसी भी तरह से जानते हैं तो बहुत करीब हैं - बजाय एक तकनीक के साथ छड़ी के जो आप अनुभव कर रहे हैं। के साथ, किसी भी अधिक मूल्यवान कौशल हासिल करने के बिना।

हो सकता है कि मैं औसत संभावित MonoDroid उपयोगकर्ता को गलत तरीके से प्रस्तुत कर रहा हूं। शायद यह उन लोगों के लिए अधिक है जो जावा और .NET में अनुभवी हैं और सिर्फ .NET पसंद करते हैं। या हो सकता है (वास्तव में यह संभावना है) अन्य कारक हैं जिन्हें मैंने अभी नहीं माना है। मैं बस सोच रहा हूं, आप केवल जावा का उपयोग करके एंड्रॉइड के लिए विकसित होने के बजाय मोनोएड्रोइड का उपयोग क्यों करेंगे?


11
Google का वाक्यांश "नया COBOL है" और देखें कि Google किस भाषा के साथ आता है ...
जॉन रेनॉल्ड्स

1
@JohnReynolds विडंबना है कि अभी सबसे तेज विकास मोबाइल और एंड्रॉइड में है, "नए COBOL" का उपयोग करते हुए। जो भी आप इसे स्लाइस करते हैं, भले ही आप मोनोएड्रोइड चुनते हैं, अगर आप एंड्रॉइड के लिए विकसित कर रहे हैं, तो आप अभी भी "नए कॉबोल" पर भरोसा कर रहे हैं।
जेसन एस

1
"नया COBOL" भाषा को संदर्भित करता है, न कि VM (इसे JVM या Dalvik)। इसलिए मोनोएड्रोइड "नए कोबोल" पर भरोसा नहीं करता है और न ही स्काला और क्लोजर या किसी अन्य जेवीएम भाषा पर निर्भर करता है।
जॉन रेनॉल्ड्स

पुराने कॉबोल की एक विशाल राशि अभी भी आसपास है, भी।
एलन बी

@JohnReynolds विडंबना यह है कि आज जो कोड चल रहे हैं उनमें से अधिकांश COBOL है; और सबसे विडंबना यह है कि C # जावा का एक क्लोन है (और एक गरीब तब से जब यह अधिकांश गलत चीजों का क्लोन करता है)।
m3th0dman

जवाबों:


55

किसी भी सक्षम C # प्रोग्रामर को एंड्रॉइड प्रोग्राम लिखने के लिए जल्दी से पर्याप्त जावा लेने में सक्षम होना चाहिए, लेकिन यह बात नहीं है । यह कोड के पुन: उपयोग की बात है।

अब से छह महीने के बारे में सोचें, जब आपका एंड्रॉइड प्रोग्राम लोकप्रिय है और आपके उपयोगकर्ता आईफोन और विंडोज फोन 7 के लिए एक संस्करण के लिए पूछ रहे हैं। यदि आपने मोनोऑर्डर का उपयोग किया था, तो आप मोनोओच (iOS के लिए मोनो) के साथ अपने अधिकांश एप्लिकेशन लॉजिक का पुन: उपयोग कर सकते हैं। विंडोज फोन एसडीके। अब वे एक वेब-आधारित संस्करण चाहते हैं, इसलिए आप एक ही श्रेणी के पुस्तकालयों को ASP.Net प्रोजेक्ट में शामिल करते हैं। डेस्कटॉप संस्करण? कोई समस्या नहीं है, वही क्लास लाइब्रेरी विंडोज और मोनो के तहत .net के साथ लिनक्स और ओएस एक्स पर काम करती है।

C या C ++ के अलावा, मैं किसी भी अन्य भाषाओं के बारे में नहीं सोच सकता हूं जो आपको उन सभी लक्ष्यों पर समान कोड का पुन: उपयोग करने देंगी।

टिप्पणियों में कुछ चिंताओं को संबोधित करने के लिए संपादित करें: .Net और मोनो आपको एक पूरा कार्यक्रम लिखने नहीं देंगे और हर जगह उसी कार्यक्रम का उपयोग करेंगे। वे आपको कुछ कोड साझा करने देंगे , और सभी क्रॉस-प्लेटफ़ॉर्म प्रोग्रामिंग की तरह साझा किए गए कोड की मात्रा इस बात पर निर्भर करती है कि आप किस प्रकार के प्रोग्राम लिख रहे हैं और आप एप्लिकेशन लॉजिक से UI और हार्डवेयर कोड को कितनी अच्छी तरह से अलग करते हैं।

हालाँकि, यदि आप अपना एंड्रॉइड ऐप जावा में लिखते हैं, तो आईओएस या विंडोज फोन पर इसका कितना पुन: उपयोग किया जा सकता है? यही वह बिंदु है जिसे मैं बनाने की कोशिश कर रहा था। मेरे पास C # पुस्तकालय मौजूद थे जो Android के लिए मोनो पर बहुत कम समय में काम कर रहे थे, क्योंकि इसे मैं उन्हें फिर से लागू करने के लिए ले गया था, भले ही मैं पहले से ही जावा जानता था । मेरे पास कुछ कोड हैं जो साझा हैं - अनमॉडिफाइड - एक वेब साइट, डेस्कटॉप प्रोग्राम और दो अलग-अलग मोबाइल प्लेटफॉर्म पर मोबाइल ऐप के बीच, मोनो के लिए धन्यवाद।

मैं अप्रत्यक्ष रूप से, यहां तक ​​कि अप्रत्यक्ष रूप से मतलब नहीं था, कि मोनो हर मोबाइल विकास की स्थिति के लिए सही उपकरण था। यह एक व्यापार है, लेकिन मेरा दृढ़ विश्वास है कि ऐसे हालात हैं जब मोनो एक बेहतर विकल्प है।

कृपया देखें (और upvote!) जेसन एस का जवाब एक और परिप्रेक्ष्य के लिए।


12
और मुझे लगा कि जावा "एक बार लिखो हर जगह" नारे के साथ एक था!
लुसियानो

3
@ लुसियानो - वही तर्क लागू हो सकते हैं यदि ओपी ने कहा था कि वह जावा को जानता है जैसा कि सोच रहा था कि क्या सी # सीखना है। महत्वपूर्ण बिट कोड का पुन: उपयोग है, भाषा नहीं।
ChrisF

14
मोनो को इसी कारण से घर में चुना गया था। हमें कई प्लेटफार्मों और सभी कोडर्स के नए c # में एक क्लाइंट बनाने की आवश्यकता थी। सिद्धांत रूप में, यह एक महान विचार था। व्यवहार में, यह एक दुःस्वप्न में बदल गया है। हमें कई जगह मिलीं जहां कोड जो एक नेट .NET प्लेटफ़ॉर्म में काम करता था, वह MacOS प्लेटफ़ॉर्म में काम नहीं करेगा, इसलिए हमें एक अपवाद बनाना होगा; फिर उसी कोड ने LInux में काम नहीं किया। कुल मिलाकर, मोनो बहुत अस्थिर लग रहा था। अंत में, हमें विचार छोड़ना पड़ा और लक्षित ओएस के लिए मूल कोड लिखने पर वापस जाना पड़ा।
चू जू

4
फिर भी, केवल कोड है कि फिर से प्रयोग करने योग्य है व्यापार तर्क, है यूआई कोड या कोड है कि फोन हार्डवेयर साथ सूचना का आदान। देखें कि मेरे पास एक मोनो-टच या विंडोजफोन 7 एप्लिकेशन है, क्या मैं इसे एंड्रॉइड के लिए मोनो के साथ फिर से बना सकता हूं और एंड्रॉइड को लक्षित कर सकता हूं? MonoDroid FAQ पर।
जेसन एस

2
@JasonS, मैंने आपकी टिप्पणी को संबोधित करने के लिए अपना उत्तर अपडेट कर दिया है। रिकॉर्ड के लिए, ज़ामरीन और मोनो के साथ मेरी एकमात्र भागीदारी एक संतुष्ट उपयोगकर्ता के रूप में है।
केविन

18

यह एक तरह का पूरक जवाब है, क्योंकि एक बात जो अब तक के जवाबों में नजरअंदाज की गई है, चिंता है कि वास्तव में क्रॉस-प्लेटफॉर्म क्या है। खुद ज़ामरीन के अनुसार जो मूल रूप से आपका व्यावसायिक तर्क है, न कि आपका यूआई या कोई हार्डवेयर नियंत्रण जैसे कि जीपीएस, ऑडियो, एड्रेस बुक वगैरह। जिन्हें प्रत्येक प्लेटफॉर्म के लिए विशेष रूप से लिखा जाना होगा। उनकी FAQ प्रविष्टि देखें मेरे पास एक मोनोऑटच या विंडोजफोन 7 एप्लिकेशन है, क्या मैं इसे एंड्रॉइड के लिए मोनो के साथ फिर से बना सकता हूं और एंड्रॉइड को लक्षित कर सकता हूं?

मोनो का उपयोग करके, आप C # का उपयोग करके अपना UI और फ़ोन नियंत्रण कोड लिख सकते हैं, लेकिन यह किसी भी प्लेटफ़ॉर्म पर पोर्टेबल नहीं होगा। आपको प्रत्येक प्लेटफ़ॉर्म के लिए UI और फ़ोन नियंत्रण लिखना होगा, भले ही आप इसे C # में लिख सकते हैं। किसी भी तरह से, आपको एंड्रॉइड पर यूआई नियंत्रण की बारीकियों को सीखना होगा और एंड्रॉइड फोन संसाधनों को कैसे संभालता है।

मोनो का उपयोग करते हुए, आपको मोनो एपीआई सीखना होगा, जो एंड्रॉइड एपीआई में कॉल करता है। आपको नई Android सुविधाओं को लागू करने के लिए मोनो का इंतजार करना होगा और आशा है कि वे सभी Android सुविधाओं को लागू करेंगे। यहां तक ​​कि अगर C # जावा से अधिक शक्तिशाली है, तो आप एंड्रॉइड एसडीके का उपयोग सीधे (जावा में) करने से अधिक नहीं कर पाएंगे।

यदि आप C # से Android तक सीधे जा रहे हैं, चूंकि C # जावा के समान ही वाक्यात्मक है, तो Android के लिए C # डेवलपर की अधिकांश सीख Android API सीख रही होगी।

कुछ विचार ...

Android के लिए सी #

सीखने की जरूरत है

  • Android एपीआई
  • जावा एपीआई: स्ट्रिंग, कैलेंडर और इवेंट हैंडलिंग आदि।

सीखने की जरूरत नहीं है

  • जावा सिंटैक्स: C # बहुत समान सिंटैक्स है।

अन्य बातें

  • आप प्लेटफ़ॉर्म पर कोड का पुन: उपयोग नहीं कर पाएंगे।
  • आपके और Android SDK के बीच कोई निर्भरता नहीं होगी। रिलीज़ होते ही आपको नए एंड्रॉइड फीचर्स मिलेंगे।
  • आपके पास मोनो की तुलना में एंड्रॉइड कोड के लिए अधिक समर्थन और उदाहरण होंगे।

C # से मोनो

सीखने की जरूरत है

  • Android: आपको अभी भी Android के UI और हार्डवेयर नियंत्रण सुविधाओं को सीखने की आवश्यकता है।
  • मोनो एपीआई: आपको एंड्रॉइड के यूआई और हार्डवेयर के साथ सामान करने के लिए मोनो के एपीआई को कॉल करना सीखना होगा।

सीखने की जरूरत नहीं है

  • जावा एपीआई और सिंटैक्स: आप C # में विकसित कर सकते हैं

अन्य बातें

  • पुन: उपयोग कोड: आप सी # कोड का फिर से उपयोग कर सकते हैं जो किसी भी यूआई या हार्डवेयर नियंत्रण कोड से रहित है और इसलिए शुद्ध "व्यावसायिक तर्क" है। हालांकि आदर्श, इस तरह के एक साफ जुदाई होना हमेशा आसान नहीं होता है। आपको यह मूल्यांकन करना होगा कि आपके कोड में कोई UI या हार्डवेयर नियंत्रण नहीं होगा।
  • निर्भरताएँ: आप Android API को लागू करने वाले मोनो पर निर्भर हैं। एंड्रॉइड एपीआई रिलीज़ से कुछ अंतराल हो सकती हैं या कुछ एंड्रॉइड सुविधाओं को कभी भी लागू नहीं किया जा सकता है।
  • आपके पास चुनने के लिए कम दस्तावेज और उदाहरण हो सकते हैं।

आप P / Invoke का उल्लेख करना भूल गए हैं। एक नमुना।
अमीर करीमी

-1: तुम्हारा मतलब क्या है Learn the Mono API? एंड्रॉइड ऐप विकसित करने के लिए आपको वास्तव में कितना जानने की आवश्यकता है? और क्या आपने वास्तव में मोनोअराईड की कोशिश की है या आप अनुमान लगा रहे हैं?
जिम जी।

@JimG। द्वारा Learn the Mono API, मेरा मतलब है कि आपको अभी भी एंड्रॉइड एपीआई सीखने की ज़रूरत है जो मोनो नहीं करता है, इसके अलावा इसके कुछ हिस्सों के अलावा। आपको कितना जानने की आवश्यकता है? ऐप पर निर्भर करता है, उस व्यक्ति पर निर्भर करता है - जो वास्तव में ओपी का सार नहीं था। क्या मैंने मोनोऑइड का उपयोग किया है? नहीं, मुझे C #, Java और ऑब्जेक्टिव C अनुभव है, इसलिए कोई ज़रूरत नहीं है। मैंने पोर्टो के लिए मोनो पर विचार किया। जिस समय मैंने उत्तर दिया कि किसी ने पोर्टेबिलिटी की सीमा का उल्लेख नहीं किया था। मुझे कोई आपत्ति नहीं है कि लोग मुझसे असहमत हैं, लेकिन यह अपने आप में मेरा जवाब खराब नहीं करता है।
जेसन एस

13

मुझे लगता है कि इसके लिए बहुत सारे संसाधन उपलब्ध हैं।

वाक्य रचना सी # और जावा में समान हो सकते हैं, लेकिन वे बहुत अलग बातें करते हैं। उदाहरण के लिए, मानक जावा पुस्तकालयों का उपयोग करते हुए तारीखों के साथ काम करना एक बुरा सपना है, जबकि सी # में यह काफी सुखद है।


2
रुचिकर- इसलिए यह अपील .NET पुस्तकालयों तक पहुंचने के बारे में अधिक है। क्या आपको पता है कि क्या .NET एंड्रॉइड के लिए प्रासंगिक, बहुत सुविधाजनक कार्यक्षमता प्रदान करता है, जो कि जावा एंड्रॉइड एपीआई के साथ हासिल करना अधिक कठिन है?
दान ताओ

19
+1 - C # से आने पर, मुझे जावा का पता चलता है ... सबसे अच्छा लगता है ...
Oded

4
मुझे लगता है कि उनके बीच स्विच करने पर C # और Java के बीच समानताएं एक फायदा नहीं हैं। मैं बिना पलक के C # और पायथन, रूबी या लुआ के बीच स्विच कर सकता हूं, लेकिन आखिरी बार जब मैंने कुछ जावा कोडिंग करने की कोशिश की, तो मैंने अपने दांत पीसना और अपने पहियों को स्पिन करना समाप्त कर दिया।
एडम क्रॉसलैंड

1
@ दान ताओ: मानक .Net तक पहुँच के बारे में अपील अधिक नहीं है । यह दोनों के बारे में है और फिर से उपयोग। पुन: उपयोग का लाभ स्पष्ट होना चाहिए। के रूप में .Net तक पहुँचने के लिए, मैं इसे इस तरह से देखता हूँ। मैंने XDocument 1000 और 1 बार उपयोग किया है। अगर मुझे एक मोबाइल ऐप लिखने की ज़रूरत है जो XML डेटा को एक सेवा से एकीकृत करता है जिसे मैंने सोचा की गति से लिखता हूं। यदि मैं जावा सीख रहा हूं , तो मैं आसानी से 4 से 8 बार (या 10 या 12, जो जानता है) कोडिंग और डॉक्स पढ़ने के बीच आगे-पीछे उछल सकता है। यदि उपयोग व्यवसाय के लिए है तो भाषा सीखने के दौरान प्रोजेक्ट करना गैर-जिम्मेदाराना है।
क्वेंटिन-स्टारिन

9

यह एक नई भाषा सीखने के लिए एक महान अवसर की तरह दिखता है , जो मुझे नहीं लगता कि आपको पास करना चाहिए।

C # से जावा में जाना एक हवा है क्योंकि वे समान अवधारणाओं पर आधारित हैं। Java C # के सबसेट की तरह है, इसलिए आपको कुछ सामान (जैसे संपत्तियों और असेंबली) को अनजान करना होगा और कुछ नए सम्मेलनों के लिए उपयोग करना होगा, लेकिन ज्यादातर यह एक नो-ब्रेनर होना चाहिए।


10
और कैसे प्रत्येक में जेनरिक काम करते हैं, और आश्चर्य है कि गुणों का अस्तित्व क्यों नहीं है, और घटनाओं और ...
Oded

5
मामूली अंतर। ऐसा नहीं है कि उसे हास्केल सीखना है।
मार्टिन विकमन

1
+1 कुछ अलग-अलग भाषाओं को जानने में कोई बुराई नहीं है और काम करने के लिए एक वास्तविक विश्व परियोजना होने पर किसी की फांसी पाने का एक शानदार तरीका है अगर आप पहले से ही जानते हैं कि यह उसी तरह की भाषा है।
ग्लेनट्रॉन

बेहतर सुनिश्चित करें कि भुगतान करने वाला व्यक्ति सीखने के अनुभव के लिए भुगतान करना ठीक है।
क्वेंटिन-स्टारिन

1
@qes - कुछ सीखना जो निरर्थक है, ज्यादातर मामलों में लागत को सही ठहराने के लिए पर्याप्त नहीं है, लेकिन अपने मूल वातावरण में एक जटिल ऐप का विकास ज्यादातर समय आसानी से होने वाला है, और इससे सीखने में अधिक हो सकता है दीर्घकालिक लागत में कटौती।
मॉर्गन हेरलॉकर

3

क्विक हिस्ट्री सबक - मोनोऑड्रो मॉनटॉच से बड़ा हुआ। उस समय बहुत कुछ किया। दुर्भाग्य से, नोवेल बेच दिया गया और पूरी मोनो टीम को बंद कर दिया गया। अच्छी खबर यह है कि मिगुएल डे इकाज़ा ने फंडिंग हासिल की और मोनटोच / मोनोड्रॉइड के पुनर्निर्माण के लिए एक नया संगठन शुरू किया। तो जब तक आप वास्तव में लॉन्च करते हैं, तब तक आप एक तरह से सीमित हैं।

जुलाई 2011 अपडेट: मिगुएल के संगठन ने पूरे मोनो * स्टैक के अधिकार प्राप्त किए हैं। हव्वा होने पर इसे प्राप्त करें।


सुनने में अच्छा (जुलाई 2011 अपडेट)। मैंने पहले मोनो की कोशिश की और इसे थोड़ा निराशाजनक पाया। मैं इसे एक और कोशिश दूँगा!
ब्रायन नॉबलुच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.