دیروز در ارتباط با همین موضوع بحث داغی داشتیم با چند تا از دوستان. هدف این بود که با یک سری از پیش فرضها یک platform مناسب برای برنامهنویسی موبایل انتخاب شود. پیشفرضهای مورد نظر عبارتند از:
* ما برنامهنویس داتنت هستیم.
* ما چند برنامهنویس هستیم که عمری در کار توسعه برنامههای داده محور مثل برنامههای دیتابیسی بودهایم و قاعدتاً مهارتها و ایدههایمان هم در همین حول و حوش چرخ خواهند زد.
* ما ایرانی هستیم و محدودیتهای زیادی در رابطه با موضوع تحریم داریم.
* هدف اولیه بازار داخل است ولی بازار خارج و storeهای مختلف applicationها به هیچ وجه منتفی نیستند.
* مهم است که برنامههای ما در بیشتر گوشیها اجرا شود. باید سعی کنیم محدودیت platform و محدودیت سختافزار را به نوعی دور بزنیم.
خلاصهای از بحث:
iOS و Windows Phone محدودیتهای زیادی برای ما ایرانیها دارند. اما جاوا و اندروید کمتر. جواب قطعی به cross platform بودن جاوا است. اما مشکل کندی آن و عدم دسترسی مستقیم به سختافزار گوشی هست. نرمافزارهای معتبر به ازای هر platform یک بار بازنویسی میشوند. مثلاً یک بار برای اندروید، یک بار برای iOS و یک بار برای Windows Phone. بادا کمترین ساپورت، کوچکترین جامعه developer و کمترین طرفدار را در ایران دارد اما گوشیهای به نسبت ارزان قیمتتری دارد. گوشیهای Windows Phone و iOS گوشیهای گرانقیمتی هستند. گوشیهای اندروید بیشترین آمار را در ایران دارد. البته تقریباً همه گوشیهای موجود جاوا را پشتیبانی میکنند. قیمت گوشیهای اندروید در حال حاضر (اواخر آبان ۱۳۹۰) از حدود ۲۰۰ هزار تومان شروع میشود. بازار کلی دنیا هم درباره انتخاب platform خیلی شک دارد. رقابت خیلی داغ است و ممکن است در چند سال آینده شاهد تغییرات زیادی باشیم.
نتیجه گیری شخصی:
من با توجه به شرایط شخصی خودم به عنوان یک برنامهنویس داتنت که هیچ تجربهای روی موبایل ندارد و کسی که میخواهد برنامههایش روی بیشترین طیف گوشیها اجرا شود تصمیم گرفتهام از یک راه حل ترکیبی استفاده کنم. به این ترتیب که اول از جاوا که روی همه گوشیها کار میکند شروع میکنم سپس هر جا که دچار محدودیت سرعت یا دیگر محدودیتها شدم از اندروید استفاده کنم. این طوری حین کار با جاوا با مسائل خاص برنامهنویسی موبایل آشنا شدهام و در صورت تغییر مسیر ضرر کمتری میکنم چون هنوز به platform خاصی وابسته نشدهام. ضمن این که غیر از داتنت فقط مجبور به یادگیری Java میشوم نه چیز دیگر.
Comments
خوب منم در موقعیت مشابهی ام .
اما در مورد اندروید :فک کنم ترجیح بدم مستقیما جاوا را با اندروید شروع کنم نه برنامه های jar که روی اندروید هم با برنامه های میانجی قابل نصب هستند.
در مورد آیفون هم چندتا مشکل هست . اول اینکه من کلا با این اکوسیستم بسته ی اپل حال نمی کنم. مورد شخصیه . و دیگه اینکه اصولا گوشی آیفون خیلی گرونه و برای بازار ایران گوشی مناسبی نیست و برای بورژوا ها طراحی شده بیشتر تا کاربری با درآمد عادی. ویندوز هم که فعلا تا جایی برای خودش پیدا کنه دو سالی گذشته .
فکر کنم همچنان اندروید انتخاب بهتری است. بخصوص در ایران.
در مورد جاوا یه نکته هست. توی اسمارت فونها جاوا خیلی هم Platform-independent نیست. روی آیفون اجرا نمیشه. روی اندروید به زحمت اجرا میشه. برای پشتیبانی از گوشیهای مختلف و رزولوشنهای مختلف پدرت در میاد.
جاوای Cross-Platform خیلی مثل سابق مطرح نیست. الان همونطور که خودت گفتی برای هر پلتفرم برنامه جداگانهای ساخته میشه و البته سعی بر اینه که به جای اجرای Binary بر سیستمهای دیگه با یک Build ساده بتوان نسخه مورد نظر برای پلتفرم مورد نظر را بدست آورد (Portablity) تقریبا شبیه کاری که تیم xamarin دارن انجام میدن که البته زبان اصلی اونها #C هست. علاوه بر این مگه چند تا پلتفرم کلاً تو دنیا هست که Cross-Platform بودن به معنای اجرای Binary یک حسن باشه.
برنامه نویسی موبایل هم تغییر کرده و به نظرم خیلی خیلی ساده شده، اگر از پلتفرم مخصوص هر گوشی استفاده بشه نکته خاصی وجود نداره به اندازه کافی مستندات وجود داره و الان هم از حالت Cutting-edge خارج شده. مخصوصاً پلتفرم مایکروسافت که واقعاً کار رو ساده کرده و تمام دانشی که در دات نت داشتیم به کارمون میاد.
در مورد بازار داخل ایران اینطور که به نظر میاد Android مناسب هست اما بازم همونطور که خودت گفتی رقابت خیلی فشرده شده و مایکروسافت هم منتظره تا همه کاراشونو بکنن تا یک کاری که خطر کمتری داره ارائه بده و البته چند وقت دیگه تبلت های Windows 8 توسط سامسونگ وارد بازار میشه که من فکر میکنم بازار کمی نداشته باشه. در این صورت ممکنه پلتفرم گوشی مایکروسافت هم Windows 8 بشه.
نکته دیگه اینکه گوشی های مایکروسافت (Windows Phone) هنوز در مورد زبان فارسی در برخی برنامهها مشکل دارند. در کنترلهای ورودی مثل TextBox و در Browser متن فارسی درست نمایش داده نمیشود. ایجاد کیبورد فارسی برای کل سیستم عامل (مثل چیزی که در Windows Mobile وجود داشت) به طور قانونی امکان ندارد.
افشار، پیشنهاد میکنم یه سر به اینجا هم بزنی:
http://www.xamarin.com
درسته که محصولشون پولیه ولی قیمتش خوبه و البته تنها شرکتی هست که داره یک همچین امکانی رو میده. فکر میکنم خیلی از پیش فرضهای مورد نظرت رو پوشش بده.
اگه بشه که با همین داتنت برنامهنویسی موبایل روی گوشیهای زیر ۲۰۰ هزار تومان رو ادامه داد که خیلی عالیه. اما ظاهراً زامارین متمرکز هست روی داتنت و من نمیدونم خروجی برنامههای اونها رو میشه روی گوشیهای Java Based فعلی اجرا کرد یا نه؟
با انتخاب آندروید موافقم در حالی که انتخاب جاوا رو صحیح نمی بینم
من قبلادر شرکتی کار می کردم که کارشون صرفات تولید برنامه موبایل بود ( از مشتقات دانشگاه شریف ) و صرفا جاوا کار می کردن. چند وقتی زمان گذاشتن تا یک framework داخلی بنویسن و بعد از کلی هیایو تونستن مشکلات فارسی رو حل کنن!!!!
بعد هم که برای اجرا روی هر گوشی بصورت مجزا باید برنامه رو کامپایل میکردن. این پروسه اونقدر برای من مسخره بود که کلا بهشون پیشنهاد تغییر پلتفرم دادم. و تا اونجا که می دونم شرکتشون بدلیل علاقه زیاد به جاوا کلا برشکست شد!!!!
در هر صورت توسعه آندروید بسیار گزینه بهتریه. بخصوص در ایران
اما خود من به شخصه ویندوزفون رو انتخاب می کنم چون بازار بکر تری داری و هنوز کلی برنامه میشه براش نوشت. رقبای کمتری تو رو تهدید می کنه و از کل دانشت هم می تونی بدون دردسر استفاده کنی
در هر صورت به نظر من تا چند سال آینده اگر برنامه نویسی روی سکوهای موبایل نتونه برنامه نویسی کنه باید این کار رو کنار بزاره. خود من هخمونطور که گفتم ویندوزفون رو انتخاب کردم. گرچه انتخاب آندروید بخصوص باشرایط فعلیش عقلانی تر هست
روش کار به این شکله که برنامه شما تقریباً ترجمه میشه به پلفترم مورد نظر. مثلاً برای iOS زمانی که iOS خودش زباله جمع کن (GC) نداشت، MonoTouch این امکان رو میداد فقط بدیش این بود که برنامه حجمش در حدود 4 مگا بایت میشد (علت این هست که Runtime همراه برنامه هستش) که خیلی هم زیاد نبود. در خصوص Android هم به همین شکله. به عبارت دیگه نیاز به نصب هیچ افزونه یا Runtime اضافی نیست.
اما در مورد Java Based اگر منظورت همون برنامههاست که پسوند jar داشتند؟ جواب منفی هستش توسط xamarin پشتیبانی نمیشه. منتها یک نکته مهم اینه که قیمت گوشی های هوشمند روز به روز پایین تر میاد. و البته گوشیهای Java-based که بیشترشون Symbian بودن دیگه به کل دارن از رده خارج میشن! برای مثال همین تولید کننده کوشی های ایرانی که تلوزیون خودمون تبلیغ میکنه یک گوشی اندروید ارائه داد.
قرار بود همکاری نوکیا و مایکروسافت به گوشی های ارزون قیمت منتهی بشه. حالا باید دید در نهایت چی میشه.
زنده باد ویندوز فون 😉
من درست نفهمیدم. یعنی من با کمک برنامههای زامارین یک برنامه داتنتی با استفاده از C# مینویسم بعدش زامارین کاری میکنه که همون کد روی iOS یا Android اجرا بشه؟
آره واقعاً حیف تجربهای که در داتنت داریم و نمیتونیم در موبایل از اون استفاده کنیم. آن هم به خاطر این که ویندوز فون برای گوشیهای خیلی گران قیمت است فقط.
دقیقاً فقط باید از API محدودتری استفاده کنی. یک چیزی در حد dotNet 2.0 و Silverlight 2.0 و البته امکان دسترسی به Native API سیستم عامل مورد نظرت رو هم داره. تا اونجا که میدونم به LINQ هم دسترسی داری (LINQ to Objects) البته نمیدونم ORMی در کار هست یا نه؟
هرچی هست از زبان Java که برای کنترل یک Event ساده باید چند خط کد زد خیلی سادهتره. مثل: http://docs.xamarin.com/ios/advanced_topics/events
برای مثال ساختن Package برای مارکت:
http://docs.xamarin.com/android/tutorials/Preparing_Package_for_Android_Marketplace
در کل دارن روی Documentationشون کار میکنن توضیحات خوبی اونجا دادن.
آقا سلام. البته بنده متخصص نیستم ولی حداقل علاقمند به این قضایا هستم!!
صرفا در مورد بادا که کمی اطلاعات دارم صحبت میکنم. بادا با توجه به سیاستهای سامسونگ سیستم توسعه ی جالبی رو در پیش گرفته.
یک sdk کامل که شما میتونید از طریق یک ide جامع شروع کنید به تولید نرم افزارتون.
و بعد هم نرم افزارتون رو برای فروش یا بصورت رایگان روی فروشگاه سامسونگ بذارید.
مزیت فروشگاه سامسونگ نسبت به بقیه فروشگاه ها در اینه که هیچ تحریمی وجود نداره و تازه سیستم فروشش برای ایران فعاله و میشه نرم افزارهای پولی رو به راحتی از طریق سیستم شتاب خریداری کرد!
با توجه به تعداد نسبتا قابل توجه کاربران سیستم عامل بادا و گوشیهای ویو و توسعه ی سریع و بدون دردسر نرم افزارهاش مسلما هر مجموعه ای که با قدرت وارد این عرصه بشه میتونه ابتکار عمل رو در دست بگیره و موفقیت چشمگیری رو بهمراه داشته باشه.
البته فعلا مشتریان شما کاربران گوشی های ویو هستند و با شرکت یا موسسه یا نهاد خاصی مواجه نیستید! و باید نرم افزارها رو مستقیما برای کاربران طراحی کنید
اتفاقاً این نکته که ما با «بادا» با مشکل تحریم مواجه نیستیم خیلی مهم است. اولین نکته مثبتی که در رابطه با «بادا» نظرم رو جلب کرده بود همین بود.
البته شنیدم که شما هر برنامه دیگهای رو که فرضاً با اندروید هم نوشته شده باشه رو میتونید در Samsung Apps بزارید و از همین سیستم فروشی که گفتید استفاده کنید.
من هم مدتی دنبال برنامهنویسی با سیشارپ برای اندروید بودم که MonoDroid رو پیدا کردم:
http://blong.com/Articles/CSharpMonoDroid/MonoDroid.htmقبلاً یک برنامه تستی با جاوا برای اندروید نوشته بودم، اما تا حالا MonoDroid رو امتحان نکردم.
اگه شما امتحان کردید لطفاً خبر بدین 🙂
ی جورایی حس میکنم استفاده از C# برای اندروید مثل این که یک لایه بین برنامه و اندروید ایجاد میشه. و این حس خوبی به من نمیده.