توسعه دهنده اندروید | هم تیمی در coursee.org | در تلاش برای تبدیل رویا به واقعیت
فلاتر بهتر است یا کاتلین ؟ آیا مقایسه این دو صحیح است ؟ قسمت ۱
کاتلین بهتره یا فلاتر ؟ کدام رو یاد بگیرم بهتر هست ؟
اخیرا شاهد پرسیده شدن این سوال توسط دوستان در گروه ها و انجمن های مختلف بودم .
بار اولی که این سوال رو دیدم با خودم گفتم مگه همچین مقایسه ایی امکان پذیر هست ؟؟ با کمی جست جو با مقاله ی زیر و بهتره بگم با نویسنده ی مقاله ایی که میخوام ترجمش کنم آشنا شدم و به هنگام رو به رو شدن با این سوال فقط همون لینک رو میفرستم ولی چون به زبان انگلیسی هست تصمیم گرفتم ترجمه ی روان اشو در اینجا برای دوستان قرار بدم .
بهتره بگم که :
مقایسه ی کاتلین و فلاتر مقایسه ی بین سیب و پرتقال است!
قبل از اینکه بتوانم به سوال دوستان پاسخ بدم و براشون موضوع رو روشن کنم , میگم که لطفا پرسشت رو تصحیح کن ! این سوال از ریشه و اساس مشکل داره !
بیاید اول هر کدوم رو توضیح بدم که اصلا کاتلین چیه ؟ و فلاتر چیه ؟!
خب باید بگم که کاتلین یک زبان برنامه نویسی ولی فلاتر یک فریمورک کراس پلتفرم (Cross-Platform) است.
مقایسه ی بین این دو دامنه ی بسیار گسترده ایی داره پس برای روشن شدن موضوع بهتر است پاسخ چند سوال رو بدم که کم کم براتون جا بیفته .
۱ . هدف شما از یادگیری کاتلین یا فلاتر چیست ؟
اولین سوالی که برای هرکسی پیش میاد همینه که <چرا میخوام این زبان یا فریمورک رو یاد بگیرم ؟>
من برای شما چند پاسخ پیشنهادی رو قرار میدم :
الف ) آیا میخواهید که برنامه نویسی موبایل رو یاد بگیرید ؟
ب ) آیا میخواهید که به عنوان یک برنامه نویس موبایل شغلی رو بیابید ؟
ج ) آیا میخواهید که برنامه ی خودتان و یا تیم تان را طراحی کنید ؟
- اگر که نظر شما مطابق با گزینه ی "الف" است پس :
اگر فقط قرار است که برنامه نویسی موبایل را یاد بگیرید و برنامه های کوچکی بسازید اصلا مهم نیست کدام را انتخاب میکنید . شما آزاد هستید .
به هر حال مهم این هست که به یاد آورید با مقایسه ی کاتلین و فلاتر شما تنها بین این دو مقایسه ایی به راه ننداخته اید بلکه شما در موارد زیر نیز مقایسه ایی ایجاد کرده اید :
- Flutter/Dart (فلاتر/دارت)
- iOS/Swift/Objective-C (ای او اس / سوییفت / آبجکتیو-سی)
- Android/Kotlin/Java (اندروید / کاتلین / جاوا)
فلاتر (Flutter) یک ابزار کامل برای توسعه ی برنامه های کاربردی است . زبان توسعه ی این فریمورک دارت (Dart) است و دارای یک مجموعه ی جدید برای طراحی کاربری UI نیز می باشد .مجموعهای منحصر به فرد از الگوهای برنامهنویسی و بهترین تجارب و ابزار عیبیابی کار در آن است.
مقایسه بین فلاتر و دیگر فریمورک ها نظیر (React Native) بستگی به اکوسیستم و موارد مورد استفاده ی شما دارد .
- اگر که نظر شما مطابق با گزینه ی "ب" است پس :
اگر که قرار هست شغلی در رابطه با برنامه نویسی موبایل پیدا کنید پس باید نکات دیگری را در نظر بگیرید .
یک جستجوی سریع در LinkedIn برای مشاغل مربوط به Kotlin و Flutter نتایج زیررا نشان میدهد (در ایالاتمتحده آمریکا)
- Flutter: 315 results
- Kotlin: 3,342 results
- فلاتر : ۳۱۵ نتیجه
- کاتلین : ۳۳۴۲ نتیجه
دلیل نتیجه ی بالا بر میگرده به اینکه فلاتر خیلی جوان است و یک تکنولوژی جدید به شمار میاد و دگرگونی و تغییرات بسیار زیادی را تجربه خواهد کرد پس برای ایجاد یک اپلیکیشن خیلی قوی برای یک کمپانی بزرگ بهتر است از آن استفاده نشود و بیشترین آگهی های شغلی برنامه نویس اندروید برای کاتلین بوده است .
این تفاوت در دسترسی به شغل میتواند به معنی ۲ چیز باشد :
- پیدا کردن شغل Flutter در منطقه ی زندگی شما سختتر است.
- برای پیدا کردن شغل مناسب می تونید که جا به جا بشید و شغل را بیابید.
اینها تا حدی متناقض هستند، و آنچه بیشتر برای شما قابلاستفاده است به وضعیت فعلی زندگی شما بستگی دارد، چقدر سریع باید یک شغل پیدا کنید، و اینکه چقدرحاضرید برای آن شغل تغییر مکان دهید.
از طرف دیگر, هنوز تقاضای زیادی برای توسعه دهندگان اندروید با زبان نیتیو (کاتلین و جاوا) وجود دارد و بسیاری نیز به دنبال کسانی هستند که به صورت نیتیو کار میکنند و یا آموزش خود را به صورت نیتیو شروع کرده اند . با توجه به نتیجه های بدست آمده , رقم بالاتر به معنای فرصت شغلی بهتر است ولی رقابت در این محیط رو نیز باید در نظر داشته باشیم .
- اگر که نظر شما مطابق با گزینه ی "ج" است پس :
اگر میخواهید برای اینکه اپلیکیشن خود را بسازید بین این دو را انتخاب کنید باید کمی به عقب بازگردید و مقایسه هایی که تا به اینجا شد را در نظر بگیرید .
طبیعی هست که شخصی که قرار هست اپلیکیشن خود را توسعه دهد قرار هست می خواهد برای هر دو پلتفرم IOS و Android خروجی داشته باشد .
استفاده از فلاتر این امکان را به شما میدهد ولی استفاده ی تنها از کاتلین خیر نمیتواند.
چرا که برای اینکه از کاتلین به عنوان یک زبان کراس پلتفرم استفاده کنید لازم هست زبان نیتیو هر دو پلتفرم را بلد باشید که بتوانید دو خروجی داشته باشید و این سخت امکان پذیر هست فقط برای ساخت یک اپ وقت ما برای یادگیری هر دو زبان نیتیو صرف شود پس استفاده از فلاتر در اینجا بسیار مفید و کارآمد خواهد بود.در ادامه جزییات را بهتر بررسی خواهیم کرد.
۲.قرار هست چه چیزی بسازید ؟
این پرسش دوم ما برای پاسخ به پرسش اصلی مقاله است . باز هم من با پاسخ به چند سوال این عنوان را روشن میکنم :
الف) آیا میخواهید که اپلیکیشن های عالی برای اندروید بسازید ؟
ب ) آیا میخواهید که اپلیکیشن های عالی برای IOS بسازید؟
ج ) آیا میخواهید برای هر دو پلتفرم بالا همزمان اپلیکیشن بسازید ؟
د ) آیا میخواهید فراتر از پلتفرم موبایل اپلیکیشن بسازید ؟
ه ) آیا میخواهید سرویس بک اند اپلیکیشن تان را خودتان آماده کنید ؟
- اگر که نظر شما مطابق با گزینه ی "الف" است پس :
اگر که قصد دارید اپلیکیشن اندرویدی با فیچر های جدید بسازید حتما نیتیو را انتخاب کنید . در اینجا نیتیو به معنای انتخاب زبان کاتلین نیست بلکه منظور من همان زبان جاوا است . در حالی که یادگیری زبان کاتلین بسیار لذت بخش و کار آمد است .
- اگر که نظر شما مطابق با گزینه ی "ب" است پس :
مانند گزینه ی اول اگر که قرار هست اپلیکیشن IOS خود را با فیچر های جدید بسازید حتما باید سوییفت را انتخاب کنید .
- اگر که نظر شما مطابق با گزینه ی "ج" است پس :
اگر که قرار است برای هر دو پلتفرم دو خروجی همزمان داشته باشید پس بسیار جذاب و جالب خواهد بود و در این حال با گزینه های زیر رو به رو خواهیم شد :
آ) ساخت دو اپ جدا برای هر دو پلتفرم
ب) ساخت دو اپ به صورت نیتیو توسط Kotlin Multiplatform
ج) ساخت اپ با فلاتر
- اگر که نظر شما مطابق با گزینه ی "آ" است پس :
این گزینه به شما یا تیم شما نیاز دارد تا هر دو برنامه را از صفر بدون هیچ کد اشتراکی بسازید. اگر یک برنامه نویس هستید، به احتمال زیاد کندترین گزینه خواهدبود، مگر اینکه در حال حاضر به خوبی در هر دو زمینه آی اس و آندروید تبحر داشته باشید.
در این حال احتمالاً امنترین گزینه هم هست. توسعه بومی برای هر دو سکو بسیار بالغ است.بعید به نظر میرسد که اپل یا گوگل پلتفرمهای نیتیو را رها کنند و شما همیشه به جدیدترین ویژگی ها دسترسی خواهید داشت .
- اگر که نظر شما مطابق با گزینه ی "ب" است پس :
اگر که قصد دارید اپلیکیشن های خود را به صورت نیتیو بسازید ولی دوست دارید که کد هایی را به صورت مشترک بین دو پلتفرم داشته باشید باید شروع به یادگیری کاتلین و سپس یاد گیری Kotlin Multiplatform کنید که این مورد پیشنهاد نمیشه چرا که دارای اکوسیستمی جدید است و همچنین تجربه ی کافی برای یک محصول عالی ندارد . در حین توسعه ممکن است که با کمبود منابع و ابزار مواجه شوید.
- اگر که نظر شما مطابق با گزینه ی "ج" است پس :
استفاده از فلاتر برای داشتن خروجی همزمان برای دو پلتفرم ios و android با نوشتن یک ساختار کد تجربه ایی بسیار شیرین و هیجان بر انگیز است .
سرعت برنامه نویسی با فلاتر بسیار بالا خواهد رفت . داشتن هات ریلود (خروجی سریع با تغییرات) بسیار کار را راحت کرده است .
شما می توانید تمامی ساختار برای هر دو پلتفرم را با یک کد بیس فراهم کنید فقط در صورتی که میخواهید رفتاری متفاوت را در هر پلتفرم داشته باشید و یا دسترسی به api های سطح پایین در هر پلتفرم داشته باشید نیاز به نوشتن کد جداگانه برای هر بستر خواهید داشت.
اگر به دنبال ایجاد یک اپلیکیشن برای هر دو سیستمعامل باشید، به خصوص یک اپلیکیشن کاربردی، Flutter بهترین گزینه ی ممکن است.
- اگر که نظر شما مطابق با گزینه ی "د" است پس :
تیم Flutter به سرمایهگذاری در ساخت Flutter برای توسعه دسکتاپ و وب ادامه میدهد. در حالی که این قابلیت هنوز در حال توسعه است، امکان استفاده از یک کد بیس برای پلتفرمهای اضافی دیگر وجود دارد.
شما میتوانید یک پروژه Kotlin multiplatform را برای توسعه فراتر از موبایل درنظر بگیرید، اما ارزش و نحوه ی کار متفاوت است. با KMP، شما کد اشتراکی را خواهید داشت،اما هنوز باید کد پلتفرم بومی را برای ایجاد رابط کاربری خود و اهرم بندی کردن کد مشترک داشته باشید. همانطور که پلتفرمهای بیشتر را هدف خود قرار دهید , همراه با آن باید تعداد کار / مهارت خود را بالاتر ببرید .
- اگر که نظر شما مطابق با گزینه ی "ه" است پس :
یک مورددیگر برای بحث این است که ممکن است بخواهید سرویسهای backend خود را برای پروژههای خود بنویسید.
کاتلین را میتوان برای نوشتن کد backend استفاده کرد، و Ktor میتواند این کار را کاملاً آسان کند.بنابراین اگر میخواهید خدمات backend را علاوه بر برنامه نویسی اپلیکیشن موبایل توسعه دهید، Kotlin میتواند یک سرمایهگذاری خوب باشد چون شما میتوانید از آن در حوزههای مختلف استفاده کنید.
۳. در حال حاظر برنامه نویس هستید ؟
یک نکته ی دیگری است که باید در نظر بگیریم که کدام یک (کاتلین یا فلاتر) برای شما مناسب تر است , سطح دانش و سواد شما از برنامه نویسی است.در اینجا با چند گزینه همراه خواهیم بود :
آ) آیا برنامه نویس اندروید هستید ؟
ب) برنامه نویس IOS هستید ؟
ج) آیا در برنامه نویسی تازه کار هستید ؟
- اگر که نظر شما مطابق با گزینه ی "آ" است پس :
اگر شما در حال حاضر با توسعه اندروید به صورت نیتیو راحت هستید , یادگیری کاتلین بسیار سریعتر از فلاتر خواهد بود. دانستن این موضوع به سادگی به دانش و مهارت موجود شما اضافه خواهد کرد و شاید در زمان ساخت اپلیکیشنهای اندروید به صورت نیتیو موثرتر باشد.
همچنین یادگیری Kotlin میتواند به شما این امکان را میدهد که سرویسهای backend را به زبان دیگری علاوه بر جاوا بنویسید و شما را قادر میسازد تا از Ktor برای سادهسازی فرآیند استفاده کنید.
یادگیری Flutter نیازمند یادگیری یک زبان جدید (Dart) و همچنین یک اکوسیستم جدید توسعه است. زمان مورد نیاز به احتمال زیاد چندین بار بیشتر از یادگیری Kotlin است.
اگر که قصد ندارید کراس پلتفرم کار کنید پس یادگیری فلاتر منطقی نخواهد بود.
- اگر که نظر شما مطابق با گزینه ی "ب" است پس :
اگر شما یک برنامه نویس iOS هستید که به دنبال یادگیری فلاتر یا کاتلین هستید ، وضعیت کمی متفاوت است.
اگر میخواهید به ساخت اپلیکیشن های iOS به صورت نیتیو ادامه دهید، پس نه Kotlin و نه Flutter از مزایای زیادی برخوردار نیستند. Kotlin فقط به شما اجازه نوشتن کد backend را می دهد نه بیشتر .
ولی اگر برنامه نویس آی اوسی هستید که به دنبال ساخت اپلیکیشن هایی به صورت کراس پلتفرم هستید پس می توانید از Kotlin Multiplatform و یا فلاتر استفاده کنید.
همانطور که قبلاً بحث کردیم، Flutter یک تجربه برای توسعه یک کد بیس برای هر دوسیستم عامل موبایل خواهد بود در حالی که یک پروژه KMP نیاز به دانش برای توسعه ی هر دو پلتفرم دارد.
بنابراین در این مورد, هر دو روش یادگیری زبان جدید (دارت) و یک چارچوب جدید(فلاتر یا android) هستند.
- اگر که نظر شما مطابق با گزینه ی "ج" است پس :
خب در اینجا ما با یک تجربه ی جدید رو به رو هستیم . شما یک برنامه نویس تازه کار هستید که قصد دارید کار خود را در این زمینه آغاز کنید.پس لطفا یک گام به عقب برگردید و مقایسه ی فلاتر و کراس پلتفرم و همچنین نیتیو را بخوانید .
یادگیری کاتلین در صورتی که شما قصد کار در بک اند و یا ساخت موبایل اپلیکیشن را ندارید مفید نخواهد بود .
بنابراین اگر میخواهید اپلیکیشن های موبایل را توسعه دهید، پس میتوانید از مقایسه ایی که بین کاتلین و فلاتر انجام شد استفاده کنید.
دوستان برای جلوگیری از طولانی شدن زمان خواندن این مقاله ادامه ی پست را در بخش دیگری منتشر میکنم .
اگر دوست داشتید و برای شما هم مفید واقع شد نظر خود را کامنت کنید و به زودی منتظر بخش دوم باشید.
منابع را در بخش بعدی ذکر میکنم .
سنا عبادی , 02:12 بامداد روز جمعه 28 ام تیر ماه سال 1398
مطلبی دیگر از این انتشارات
حل مشکل اتصال به شبکه (مقصد فاقد TLS) و انتقال ترافیک cleartext در اندروید با API level 28
مطلبی دیگر از این انتشارات
تسلط بر TouchEvent ها در اندورید
مطلبی دیگر از این انتشارات
معرفی و پیاده سازی دیزاین پترن سینگلتون در اندروید