شروع برنامه نویسی اندروید

خیلی از دوستان که تازه میخوان سمت برنامه نویسی اندروید بیان، بعد یه جستجوی ساده به این نتیجه میرسن که منابع و مقاله های زیادی تو اینترنت موجوده و هرکدوم هزاران خط درباره "چگونه و از کجا برنامه نویسی رو شروع کنیم؟"، نوشتن. مشکل اکثر این مقاله ها اینه که نمیشه بعد خوندنش به یه نتیجه کلی رسید و مجبورین برین سراغ چنتا مقاله دیگه.برا همین تو این مقاله سعی کردم برا کسایی که میخوان این مسیر رو انتخاب کنن، یه سری نکات مفید بنویسم تا بتونن به یه نتیجه اولیه برسن. همچنین سعی کردم این مقاله، بیشتر بخش های لازم رو پوشش بده و در عین حال زیاد زمان بر نباشه.درباره منسامان ستاری هستم، متولد سال 71. مدرک کارشناسی مهندسی مکانیک دارم ولی از بچگی علاقه زیادی به برنامه نویسی داشتم (بماند که چرا کلا رشته مرتبط نرفتم). حدود 4 سال سابقه برنامه نویسی اندروید دارم و قبل از اون با چند زبان برنامه نویسی دیگه مثل CPP، Basic، VisualBasic و... کار کردم.از این لینک میتونین رزومه مرتبطم با برنامه نویسی اندروید رو مشاهده کنین.شفاف سازیتمامی مطالب این مقاله نظر خودمه و ممکنه از نظر بعضی از دوستان و همکاران درست نباشن، ولی راهیه که خودم طی کردم و بنظرم تا حدود زیادی کمکتون خواهد کرد. همچنین سعی کردم مطلب بیشتر خودمانی تر باشه و شبیه مقاله هایی مثل "12 راه موثر برای موفقیت در کسب و کار" نباشه D:این مقاله فقط برای کسایی مفیده که میخوان بصورت حرفه ای و تمام وقت وارد این حرفه بشن. پس اگه همچین چیزی نمیخواین بنظرم خوندن ادامه این مطالب بیفایدس و بهتره همینجا این مقاله رو ببندین.در برنامه نویسی همیشه و هرروز باید مطالب جدیدی یاد بگیرید (برخلاف دیگر زمینه ها که تا این حد نیاز به آپدیت بودن نیس) اگر چنین کاری با روحیه شما سازگار نیس همین حالا کنار بکشین.به خاطر مورد سوم واقعا باید به برنامه نویسی علاقه داشته باشین و اگه صرفا بخاطر درآمد سمتش میاین بنظرم کلا نیاین چون مطمئن باشین وسط کار پشیمون خواهید شد.در این مقاله سعی کردم در بیشتر بخش ها منابع خوبی (فارسی و انگلیسی) برای یادگیری معرفی کنم ولی متاسفانه برای همه بخش ها آموزش خوب سراغ ندارم. یادتون باشه که شما به عنوان برنامه نویس باید گوگل رو به عنوان بهترین دوستتون انتخاب کنین و همیشه بهترین منابع رو میتونین با جستجو پیدا کنین. دقت کنین که یه آموزش خوب می تونه علاقه شما رو به برنامه نویسی بیشتر کنه.دوستان هم اگه منابع خوبی سراغ دارین توی نظرات بگین تا همه بتونن استفاده کنن.بیشتر آموزش هایی که من اینجا لینک دادم آموزش های ویدیویی هستن. علت هم اینه که من و اکثر برنامه نویسا با این شیوه یادگیری راحت تر هستن. حالا شاید بعضیاتون کتاب رو ترجیح بدین و یا کلاس های حضوری بنظرتون بهتر باشه. بنظر من با هرکدوم از روش ها راحت تر هستین از اون روش استفاده کنین و تو این زمینه به توصیه های دیگران گوش ندین چراکه مهم اینه شما از یادگیری لذت ببرین و بهتر مطلب رو درک کنین. با توجه به اینکه مخاطب های این مقاله تازه میخوان برنامه نویسی رو شروع کنن و با اصطلاحات زیادی آشنایی ندارن، سعی کردم اینجا خیلی از مباحث رو به زبان ساده تر و قابل فهم تر بنویسم و وارد جزئیات نشم. برا همین اگه جایی احساس کردین نیاز به توضیح اضافه داره، حتما در قسمت نظرات منو در جریان بزارین.پیش نیازهاقبل از اینکه خود برنامه نویسی رو شروع کنین باید کار رو برای یه پایه قوی فراهم کنین:دانش آکادمیک: چیزی که اکثر دوستان سمتش نمیرن و اونو نادیده میگیرن. برا کسایی که رشته مرتبط دارن این پیش نیاز خود بخود فراهم میشه. ولی کسایی که هنوز دانشگاه نرفتن و یا کلا یه رشته متفاوت خوندن (مثل خودم که مهندسی مکانیک خوندم)، لازمه که حداقل دو مبحث رو یاد بگیرن:ساختمان داده: از بنیادی‌ترین مباحث مورد نیاز جهت یادگیری و درک بسیاری از مفاهیم عمده در علوم رایانه است.الگوریتم: روشی گام به گام برای حل مسئله است. مفهوم الگوریتم را معمولاً با تشبیه به دستور آشپزی توضیح می‌دهند. مثلاً اگر بخواهیم آبگوشت درست کنیم (عمل مورد نظر) با فرض اینکه مواد خام را داریم (حالت اولیه) مراحل مشخصی را باید طبق دستور آشپزی طی کنیم (دستورالعمل‌ها) تا به آبگوشت آماده (حالت پایانی) برسیم. ساختمان داده‌ روش‌های ذخیره داده‌ها در کامپیوتر با هدف دسترسی آسان تر و بهینه تر هست در حالیکه الگوریتم روشی به منظور حل مسئله به وسیله کامپیوتر هست.در کل اگه میخواین این پیش نیاز رو جدی نگیرین (میدونم الان خیلیاتون این فکر رو میکنین D: )، حداقل براش یه جزوه کوتاه پیدا کنین و از روش رد نشین. به عنوان یه نکته کلی اگه مبحث الگوریتم رو یاد بگیرین و بتونین مسائلشو حل کنین، مطمئن باشین یادگیری همه زبان های برنامه نویسی براتون خیلی آسون خواهد بود. ولی اگه نتونستین تو این بخش موفق بشین کلا سمت برنامه نویسی نیاین چون احتمالا استعداد برنامه نویسی رو ندارین (از نظر من برنامه نویسی مثل هنر طراحی، استعداد میخواد و هرکسی نمیتونه با تلاش زیاد برنامه نویس ماهری بشه).به عنوان سورس های فارسی من اینارو خوندم و بنظرم خوبن:ساختمان داده ها به زبان ++C نوشته هورویتز ترجمه علیخانزادهمقدمه ای بر الگوریتم ها نوشته توماس کورمن ترجمه جعفرنژاد قمیزبان انگلیسی: این مورد هم از اهمیت خیلی بالایی برخورداره، چون همیشه یه برنامه نویس خوب دنبال تکنولوژی های جدیده و متاسفانه آموزش های فارسی براشون خیلی دیرتر منتشر میشه. سایت هایی مثل Medium (برای خواندن مقالات بروز)، Stackoverflow (سوال و پاسخ پیرامون مشکلات)، داکیومنت های خود اندروید، آموزش های ویدیویی سایت های خارجی (مثل لیندا و یودمی) و... همه و همه که جزو منابع اصلی برنامه نویس اندروید محسوب میشن، زبان انگلیسی ان. البته این مورد بیشتر شبیه هم نیازه تا پیش نیاز (: و اگه زبانتون خوب نیست میتونین همزمان با برنامه نویسی جلو ببرینش ولی بنظرم اهمیتش به همون اندازه برنامه نویسی هستش و نباید نادیده گرفتش. نهایتا اینکه سطح زبانتون باید به حدی برسه که مقاله های انگلیسی رو بتونین بفهمین و هدف مکالمه و تسلط در زبان انگلیسی نیس.آشنایی نسبی با کامپیوتر و اینترنت: دیگه فک نکنم توضیح خاصی بخواد (: محیط ها و زبان های برنامه نویسیمیرسیم بجایی که همیشه اونایی که میخوان برنامه نویسی اندروید رو شروع کنن به مشکل برمیخورن. سوالاتی از قبیل "از کدوم زبان برنامه نویسی استفاده کنم؟". خب بسته به توضیحاتی که خواهم داد میتونین یکی از روش های زیر رو انتخاب کنین:زبان برنامه نویسی Java/Kotlin با استفاده از محیط Android Studio (توسط Google)زبان برنامه نویسی JavaScript با استفاده از فریمورک React Native (توسط Facebook)زبان برنامه نویسی Dart با استفاده از فریمورک Flutter (توسط Google)زبان برنامه نویسی #C با استفاده از محیط Xamarin (توسط Microsoft)زبان برنامه نویسی #C با استفاده از موتور بازی Unity (توسط Unity Technologies)البته روش های دیگه ای هم موجودن (مثل B4A - PhoneGap - AS+NDK - Corona و ...) ولی بخاطر دو دلیل عمده ( مورد اول خیلی خیلی خیلی مهمه) زیر سراغشون نرین کلا:جامعه یا کامیونیتی خیلی کمتری نسبت به روش های بالا دارن. این باعث میشه آموزش های کمتری در اینترنت داشته باشن. همچنین یه برنامه نویسی مبتدی یا متوسط ( و حتی در مواقعی حرفه ای) وقتی به مشکل برمیخوره، با جستجو نمیتونه مشکلاتشو برطرف کنه چون نفرات کمتری هستن که به مشکل ایشون پاسخ بدن. همچنین کتابخانه های (کدهای آماده در نظر بگیرید فعلا) کمتری هم برای استفاده در اختیارتون خواهد بود.کمپانی و شرکت ضعیفی پشتشونه که در نتیجه هم حالت اول رخ میده و هم اینکه ممکنه بعد یه مدت کلا فریمورکشون رو تعطیل کنن و ساپورتش نکنن.خب بریم سراغ تک تک زبان ها و ابزارهای برنامه نویسی اندروید:اندروید استودیواز بین 5 تا از ابزارها و فریمورک هایی که بهتون معرفی کردم، اندروید استودیو بیشترین جامعه رو داره. به عنوان ابزار رسمی توسعه اپلیکیشن اندروید، توسط گوگل (که صاحب اندروید هم هست) معرفی شده و فک کنم همین به اندازه کافی دلیل قانع کننده ای برای انتخابش باشه. اندروید استودیو ابزار زیادی رو جهت راحتی و توسعه کد در اختیارتون قرار میده و خیلی بیشتر با پلتفرم اندروید مچ هستش. همچنین این نرم افزار بر پایه IntelliJ IDEA هستش که یکی از قوی ترین محیط های برنامه نویسی برای جاوا هست.اما مشکلاتی که باهاش خواهید داشت: تنها برای ساخت اپ های اندروید کاربرد داره و نمیتونین باهاش اپلیکیشن های کراس پلتفرم (Cross-Platform) بسازین که همزمان توی پلتفرم های دیگه ای مثل iOS کار بکنن. مصرف رم خیلی بالایی داره و حافظه زیادی هم لازم داره. برا همین اگه سیستمتون ضعیفه جز اعصاب خورد کنی چیزی براتون باقی نمیمونه. ممکنه در بارهای اول، نصب و آپدیتش براتون به یه دردسر جدی تبدیل بشه.شوخی با مشکل سنگین بودن اندروید استودیواگه انتخابتون اندروید استودیو هست، برای یادگیری اول سر برین سراغ آموزش های مبتدی تا متوسط جاوا. به عنوان سورس فارسی من خودم آموزش های سکان آکادمی رو دیدم که استادش آقای بهزاد مرادی هستن و بنظرم برای کسی که تازه میخواد بره سراغ برنامه نویسی خیلی خوبن. به عنوان سورس انگلیسی هم آموزش های ویدیویی کانال Slidenerd توی یوتیوب که مدرسش آقای ویوک رامش هست عالین. اینم لینک هاش: Java Unleashed و Object Oriented Javaهمینکه مباحث جاوا (یادگیری متغیرها، حلقه ها، عبارت های شرطی و مفاهیم شی گرایی) رو یاد گرفتین، برین سراغ نصب اندروید استودیو و شروع کنین به یادگیری خود اندروید. برای سورس فارسی متاسفانه سورسی که رایگان باشه من نمیشناسم، البته آموزش رایگان زیاد هست و شاید چنتاشون هم خیلی خوب باشن ولی متاسفانه من نمیشناسم. ولی آموزش سون لرن که مدرسش آقای سعید شاهینی هست بنظرم خیلی خوبه (با اینکه خودم ندیدم ولی تعریفشو شنیدم). سورس انگلیسی خوب خیلی زیاده خوشبختانه (ولی متاسفانه اکثرا یا تحریمیم یا *یلتر و باید از قند شکن استفاده کنین). سایت یوداسیتی و سایت رسمی اندروید بهترین سورس ها هستن. این آموزش هم از سایت یودمی خیلی خوبه و جدید. توی یوتیوب هم آموزش های رایگان خوبی هست مثل : Android development tutorial series 2018 و Android App Development for Beginners Playlistکاتلین یا جاوا؟بنظر من حتما بعد اینکه زبان جاوا رو یاد گرفتین و تونستین باهاش چنتا اپ متوسط و نیمه حرفه ای طراحی کنین، بلافاصله سوییچ کنین به زبان کاتلین. اکثر دوستان فکر میکنن که باید بین این دو یکی رو انتخاب کنن ولی بنظر من تنها انتخاب کاتلین هست. زبان کاتلین مزیت های خیلی زیادی نسبت به جاوا داره: کدهای کمتر و خواناتر، سازگاری کامل با جاوا (میتونین یه جای از اپ رو کامل با جاوا بنویسین و جای دیگه رو با کاتلین) و خیلی دلایل دیگه که توضیح دادنشون بدلیل مورد "7 شفاف سازی"، فایده ای نداره. تنها بعد از یادگیری کاتلینه که میفهمین زندگی با جاوا چقدر عذاب آور بوده براتون. حالا شاید براتون سوال باشه پس چرا از همون اول شروع نکنم به یادگیری کاتلین بجای جاوا :| ؟؟؟ علت اصلیش باز برمیگرده به جامعه برنامه نویسان. اکثر کتابخونه ها، آموزش ها و سوال و پاسخ ها با زبان جاوا توضیح داده شده ان. حتی کتابخونه های جدید خود گوگل که پیشنهاد میکنه بریم سمت کاتلین. اگه شما نتونین معادل کد جاوا رو تو کاتلین بفهمین، مطمئنا به مشکل برخواهید خورد. برا همین دونستن جاوا قبل از کاتلین ضروریه به همون اندازه که سوییچ کردن به کاتلین بعد از یادگیری جاوا ضروریه.فعلا سورس فارسی خیلی خوب برای کاتلین من ندیدم ولی تعریف آموزش های آقای مهرداد دولتخواه رو شنیدم، اینم لینکش. سورس انگلیسی خوب بخوام معرفی کنم، من خودم کاتلین رو با این آموزش شروع کردم: Learn Kotlin in one video که تو یه ساعت اومده و کاتلین رو یاد داده (برا کسایی که جاوا بلدن و زیاد کار کردن همین کافیه برا شروع D: ). همچنین آموزش های رسمی خود کاتلین به نظرم خیلی عالین. اینم یه آموزش خوب از سایت یودمی.بعد اینکه مراحل بالا رو طی کردین دیگه کاملا آماده نوشتن اپلیکیشن های نیمه حرفه ای هستین و بقیه راه رو خودتون میتونین پیدا کنین تا به یه برنامه نویس حرفه ای اندروید تبدیل بشین (چیزایی از قبیل یادگیری معماری اپلیکیشن، نوشتن تست برای اپلیکیشنتون دیزاین پترن ها، برنامه نویسی Reactive و ...)ری اکت نیتیومزیت اصلی که برنامه نویسا سمت این فریمورک میرن کراس پلتفرم بودنش هست. یعنی کد رو یه جا مینویسن بعد برا پلتفرم Android و iOS و... خروجی میگیرین. شرکت های زیادی هم الان دنبال برنامه نویسای ری اکت کار میگردن. جامعه زیادی هم داره و میتونین آموزش های زیادی راجبش پیدا کنین. مزیت مهم دیگش اینه که چون زبان این فریمورک جاوا اسکریپت هست(شباهت جاوااسکریپت با جاوا تقریبا مثل شباهت فرشته هست به فرش :|، ینی فقط اسمشون شبیه همه)، راحت تر میتونین سمت برنامه نویسی وب هم برین و یا اینکه اگه قبلا جاوا اسکریپت کار کردین راحت تر میتونین سمتش بیاین. همچنین برا کار باهاش به سیستم قوی نیاز ندارین و میتونین کدتونو با استفاده از نرم افزارهای ویرایش متن مثل Sublime ، VSCode و ... بزنین.مطلب مهمی که در این زمینه باید بدونین اینه که زبان جاوااسکریپت بر خلاف زبان های جاوا و کاتلین، زبان وابسته به نوع نیست. این به این معنی هست که متغیرها در هر لحظه میتونین هر نوع مقداری داشته باشن و کامپایلر هیچ کمکی نمیتونه بهتون بکنه. به زبان ساده تر اگه هنگام کد زدن دقت کافی نداشته باشین (در صورتی که اولین بار میاین سمت برنامه نویسی مطمئنا این خطاها اتفاق میافتن)، پیدا کردن ارور و باگ (ایراد) اپلیکیشن براتون به یه چالش واقعی تبدیل میشه. به همین دلیل هم اکثر برنامه نویسایی که میرن سمت این فریمورک بنظرشون کار باهاش، خیلی سخته.اگه انتخاب شما ری اکت نیتیو هست، ابتدا باید آشنایی ساده ای با HTML و CSS داشته باشین و بعدش برین سراغ یادگیری JavaScript. بعد از اون باید زبان ES6 رو یاد بگیرین که زبان اصلی React هستش (به زبان ساده همون جاوااسکریپت هست با یه سری تغییرات). سپس برین سراغ یادگیری Redux و در نهایت React Nativeبه عنوان منبع انگلیسی بنظرم دوتا آموزش براتون کافیه. یکی آموزش React+Redux هست که توسط مدرس Maximilian Schwarzmüller (یه مدرس آلمانی که به نظرم نظیر نداره) تهیه شده. اینم لینک آموزش ولی متاسفانه آموزش پولی هست. و بعدش یادگیری React Native که آموزش های Caster رو من در این زمینه دیدم و عالین (متاسفانه پولین ولی ارزش هزینه کردن رو دارن)فلاترمانند ری اکت نیتیو، فریمورکی برای ساخت اپلیکیشن های کراس پلتفرم هست، با تفاوت اینکه زبان برنامه نویسیش Dart هست. همچنین بخاطر جدیدتر بودنش جامعه کمتر و پایداری کمتری نسبت به ری اکت نیتیو داره. از جمله مزایای این فریمورک نسبت به ری اکت نیتیو، پرفورمنس بیشتر و داکیومنتیشن قویترشه.زاماریناین فریمورک هم مثل ری اکت نیتیو و فلاتر کراس پلتفرم هست. بنظرم تنها دلیلی که برنامه نویسا میرن سراغش استفاده از زبان #C هست. زبان #C واقعا زبان قدرتمندیه و کسایی که از قبل باهاش آشنایی دارن میتونن ازش براحتی استفاده کنن. همچنین زامارین با سایر تکنولوژی های مایکروسافت مچ هست (مثل Net.) که باعث میشه حتی بعضی شرکت های بزرگ برن سمتش. ولی تعداد کتابخانه های کمتری داره و همچنین جامعه کمتری هم نسبت به اندروید استودیو و ری اکت نیتیو داره.برای شروع اول زبان #C رو یاد بگیرین. سورس فارسی بهترینش آموزش های آقای مهرداد نادری هستش. (البته مثل اینکه به درخواست خودشون لینک های دانلود رو برداشتن و دارن خودشون یه سایت آموزشی میسازن تا فایلاشونو اونجا آپلود کنن. ولی باز با جستجو شاید تونستین پیدا کنین آموزشاشو). بعد یادگیری اصول و پایه زبان سی شارپ، برین سمت زامارین و آموزش برنامه نویسی اندروید با زامارین.یونیتیدر نهایت اگه انتخابتون توسعه بازی های موبایل هست، برین سمت یونیتی، که هم کراس پلتفرم هستش، هم زبان قدرتمندی داره (#C) و هم موتور قدرتمندی. موتورهای دیگه ای هم برای بازی سازی وجود دارن ولی یونیتی در قسمت بازی سازی "موبایل" بیشترین جامعه و استفاده رو داره.مقایسه نهایی:اگه نگاه کنین شما باید بین "اپ سازی" (منظور از اپ سازی هر نرم افزاری که بازی نباشه) و "بازی سازی" یکی رو انتخاب کنین. انتخاب بین بازی سازی و اپ سازی کار راحتیه و نیاز به توضیح اضافی نیست. اما اگه میخواین اپلیکیشن بسازین، باید بین "کد نیتیو" (با ری اکت نیتیو اشتباه نگیرین، منظور از نیتیو زبان نیتیو اندروید که جاوا/کاتلین هست) و "کراس پلتفرم" یکی رو انتخاب کنین. برا همین یه توضیح مختصر راجب کد نیتیو و کراس پلتفرم میدم:نیتیو یا کراس پلتفرم؟خب همونطور که توضیح دادم با استفاده از کراس پلتفرم میتونین یه جا کد بزنین و توی چند پلتفرم مثل Android و iOS اجرا کنین. این کار به نظر خیلی عالی میاد، چون باعث میشه منابع کمتری استفاده بشه (چه از نظر زمانی و چه از نظر انسانی). برای همین هم مخصوصا شرکت های کوچیک و استارت آپ ها دنبال برنامه نویسای کراس پلتفرمن. ولی یه سری معایب هم بدنبال داره.مطمئنا میدونین که هر دو پلتفرم برای خود یه سری دستورالعمل (Guideline) برای طراحی رابط کاربریشون دارن. Human Interface برای iOS و Material Design برای Android. برای همین شما نمیتونین همزمان اصول طراحی مربوط به هردو رو رعایت کنین. این مشکل میتونه مرتفع تر هم بشه. باتوجه به اینکه شرکت اپل دسترسی محدودتری به سیستم رو در اختیار برنامه نویس و کاربر قرار میده، در حالیکه سمت اندروید آزادی بیشتری نسبت به iOS هست و برای همین باید هنگام کدنویسی محدودیت های هردو پلتفرم رو در نظر گرفت.مطلب مهم دیگه اینه که هرچقدر هم فریمورک های کراس پلتفرم بخوان موارد استفاده رو هندل کنن، نمیتونن همه شونو پوشش بدن و نیاز به ماژول های نیتیو دارن که توسط جاوا/کاتلین نوشته شده(به عنوان مثال پوش ناتیفیکیشن، ماژول دوربین و...) و باید کدشون رو به اونا لینک کنن، به عبارت ساده تر کسی که ری اکت نیتیو کار میکنه بهتره قبل از اون با کدهای نیتیو هردو پلتفرم آشنایی داشته باشه تا بتونه همچین مشکلاتی رو رفع کنه. برا همین بنظرم برای کسی که تازه میخواد وارد دنیای برنامه نویسی موبایل بشه و با کدهای نیتیو پلتفرم ها آشنایی نداره، خوب نیست.نکات مفیدچند نکته هم هست که به نظرم اگه در طول یادگیری و کد نویسی تون رعایت کنین، خیلی موفق تر خواهید شد.وقتی به مشکلی برمیخورین و بعد از پرسش، جوابشو از یه جا دیگه کپی پیست میکنین مطمئن باشین دوباره به همین مشکل برمیخورین. همیشه به جزئیات کدی که میزنین دقت کنین و سعی کنین نحوه کارشونو یاد بگیرین.کدهایی که یاد میگیرین رو همیشه مرور و تمرین کنین. من خودم یه آموزش رو با این که بلد هستم چندین بار مرور میکنم. اینکار علاوه بر اینکه باعث میشه آموزش رو فراموش نکنم، هر سری چیزای جدیدتری هم یاد میگیرم.همیشه روش های جدید کد زنی رو یاد بگیرین و اونا رو به خاطر تنبلی به تعویق نندازید. مطمئن باشین اصنِ اصن حس خوبی نداره وقتی یه عالمه مطلب جدید بخاطر تعویق در یادگیری جمع میشه یجا.وقتی یه پروژه تمرینی رو تموم کردین، بجای شروع یه پروژه دیگه برگردین و کدتونو مرور کنین و دنبال بهبود کدهاتون باشین. ببینین چجوری میتونین هم گرافیک و انیمیشنشو بهبود ببخشید و هم پرفورمنس اپتونو.شاید تا حالا بیشتر کسایی که برنامه نویس اندروید هستن، فرق بین context و applicationContext و baseContext رو که یه مبحث خیلی مهم تو برنامه نویسی اندروید هست رو نمیدونن. همیشه در مورد کدهاتون کنجکاو باشین و سرچ کنین. مثلا وقتی توی اندروید استودیو هنگام کد زدن اومد و بهتون هشدار (Warning) داد نگین این که ارور نیست و بیخیالش نشین.سوالات رایجیه سری از دوستان هم بعد از مطالعه همه موارد فوق احتمالا یه سری سوالا داشته باشن که من اونارو اینجا قرار میدم.سوال) من سنم x هست. بنظرتون میتونم برنامه نویسی اندروید انجام بدم؟پاسخ) برای همچین چیزی نمیشه بازه دقیق گفت. ولا من خودم از سن 12 سالگی برنامه های خیلی ساده تو QBasic مینوشتم (البته داداش بزرگم یادم میداد). همچنین دو نفر از دوستان که 16 ساله و 38 ساله هستن رو میشناسم که کمتر از یه ساله شروع کردن به برنامه نویسی اندروید و اپ های نسبتا خوبی هم نوشتن.سوال) چقدر طول میکشه تا برنامه نویس در سطح x بشم؟پاسخ) این سوال کلا از پایه غلطه. این که چه مدت طول میکشه، به عوامل زیادی بستگی داره، اینکه هر روز چقدر وقت میزارین، اینکه استعدادتون در زمینه برنامه نویسی چقدره، اینکه قبلا برنامه نویسی انجام دادین و ... احتمالا قبل از این هم تو نت جستجو کردین و همچین چیزایی هم دیدین: "یادگیری جاوا در 60 دقیقه"، "یادگیری فلان در 30 روز". بنظرم برای اینکه در زمینه برنامه نویسی اندروید به حداقل مهارت برسین حداقل یک سال باید وقت بزارین (منظورم این نیس که بعد یه سال تازه میتونین اپ بسازین). البته یه سالی ک گفتم، بازم بستگی داره به عواملی که بالا اشاره کردم ولی قطعا تو 30 روز برنامه نویس نمیشین و اگه همچین چیزی در نظر دارین همین الان کنار بکشین.سوال) چقدر میتونم درآمد داشته باشم؟پاسخ) اگه طرح خودتون رو داشته باشین و بتونین ایده های خودتونو عملی کنین، این سوال جواب دقیقی نخواهد داشت. ولی اگه دنبال استخدام تو شرکت خاصی هستین، الان حقوق برنامه نویسای جونیور اندروید (مبتدی تا متوسط) چیزی حدود ماهی 800 تومن تا 3 میلیون تومن هست و حقوق برنامه نویسای سنیور (متوسط تا حرفه ای) چیزی حدود ماهی 3 میلیون تومن تا 10 میلیون تومن هست.جمع بندیخب اگه تمامی مطالب رو مطالعه کردین به این نتیجه خواهید رسید که از نظر من بهترین راه بعد از یادگیری الگوریتم، شروع برنامه نویسی با زبان جاوا و همزمان یادگیری زبان انگلیسی هست (اگه در این بخش ضعیف باشین). علت اینکه من همون اول نیومدم و بگم برین سراغ جاوا این بود که شما در مورد هرکدوم از فریمورک ها و ابزارها یه سری اطلاعات کسب کنین و بدونین برای چی دارین از اندروید استودیو استفاده میکنین.خوشحال میشم برای بهبود این مطلب نظراتتونو بدونم :)