جدی‌ترین معضل من در اوایل ورود به حوزه برنامه‌نویسی و طراحی‌ نرم‌افزار پیدا کردن منابع مناسب برای یادگیری یک تکنولوژی یا زبان جدید بود به طوری که برای یادگیری هر چیزی، ساعت‌های زیادی رو صرف جستجو در اینترنت می‌کردم تا بتونم منبع مناسبی رو برای یادگیری اون تکنولوژی پیدا کنم. این روش به من کمک می‌کرد که تا علاوه بر یادگیری اون مبحث خاص بتونم بر خیلی از موارد مرتبط هم اشراف کلی پیدا کنم و در آینده اون ها رو به کار بگیرم اما این روش یادگیری مشکلات خاص خودش رو هم داره. در واقع من برای یادگیری سطحی مجموعه‌ای از مباحث که شاید ارتباط چندانی هم با مبحث مورد نظرم شما نداشتن و بعضا هیچ‌وقت به کارم نیامدند، سه تا چهار برابر زمان لازم برای یادگیری مبحث اصلی رو اختصاص می‌دادم.

شاید این روش برای من که اون زمان دانش‌آموز بودم و مهم‌ترین مشغولیت ذهنیم خوندن درس‌های مدرسه بود مفید بوده باشه اما برای فردی که دانشجو شده یا بعد از فارغ‌التحصیل شدن از دانشگاه قصد داره با یادگیری یک تکنولوژی خاص موقعیت شغلی مناسبی رو برای خودش فراهم کنه قطعا مثل سم می‌مونه، چون فشار حاصل از کند شدن پروسه یادگیری می‌تونه اون فرد رو به طور کامل از یادگیری اون مبحث منصرف کنه. پس بهتره برای یادگیری هر چیزی بهترین منابع رو انتخاب کنید. در حقیقت همون‌طوری که ابزارهای مناسب به شما کمک می‌کنه که کارتون رو با سرعت و کیفیت بهتری انجام بدید، استفاده از منابع و روش مناسب هم می‌تونه زمان یادگیری شما رو به حداقل برسونه.

چند روز پیش که مشغول توییت کردن در مورد مباحث کاریم بودم، یکی از دوستان دایرکت داد و درخواست کرد که بهش منابعی رو برای یادگیری برنامه‌نویسی اندروید معرفی کنم. منم تصمیم گرفتم منابعی رو که طی چند ماه گذشته به کارآموزهای گندم معرفی کرده بودم رو به صورت یک پست بنویسم و به صورت عمومی منتشر کنم. امیدوارم در صورتی که قصد شروع برنامه‌نویسی اندروید رو دارید این مطلب بهتون کمک بکنه.

از نظر من روشی که در ادامه توضیح میدم یکی از عملی‌ترین و در عین حال ساده‌ترین راهکاری یادگیری برنامه‌نویسی اندروید هستش.

برای شروع برنامه‌نویسی اندروید شما باید با ساختار و تکنیک‌های اولیه برنامه‌نویسی جاوا آشنا باشید. در صورتی که با جاوا آشنایی ندارید، می‌تونید سری مطالب فوق‌العاده یادگیری جاوا برای توسعه اندروید رو مطالعه کنید. تو این مجموعه مطالب که حدود 13 قسمت میشه با فرض آشنایی کلی شما با اصول برنامه‌نویسی سعی شده تا از مباحث اولیه جاوا تا مباحث نسبتا پیشرفته معرفی بشه. جدا پیشنهاد می‌کنم که اگه برنامه‌نویسی جاوا رو به صورت حرفه‌ای بلد نیستید در خوندن این مطالب تعلل نکنید. بعد از یادگیری اولیه جاوا، باید سراغ مطلب مفاهیم پایه‌ای اندروید برید. این مطلب توی چند پارگراف به شما اصطلاحات کلی اندروید رو معرفی می‌کنه. اگه حوصله‌اش رو دارید، مستندات اندروید هم توضیحات خیلی کاملی برای معرفی مفاهیم واصطلاحات اندروید داده.

خب تا اینجا صرفا مجموعه‌ای از مطالب تئوری رو خوندید، حالا وقت اینه که یه مقدار وارد فاز عملیاتی بشید، پس برید به این آموزشی فارسی و یا این آموزش انگلیسی و اندروید SDK رو نصب کنید. اندروید SDK در واقع مجموعه ابزارهای گوگل برای توسعه نرم‌افزاری های اندرویدی است که شامل منابع آموزشی، مستندات، کتابخانه‌های نرم‌افزاری، ابزارهای عیب‌یابی و انتشار نرم‌افزار میشه. علاوه بر این موارد اندروید SDK به شما یک ماشین مجازی برای اجرا کدهای اندرویدتون میده که به علل مختلف پیشنهاد می‌کنم ازش استفاده نکنید و در ادامه بهتون راهکارهای جایگزینش رو معرفی خواهم کرد(تا قبل از رسیدن به اون بخش می‌تونید اپ‌های نمونه‌ای که می‌نویسید رو توی گوشیتون اجرا کنید). در واقع اندروید SDK پیش‌نیاز شما برای برنامه‌نویسی و تولید نرم‌افزارهای اندرویدیه.

حالا پیش‌نیازهای شروع برنامه‌نویسی اندروید رو در اختیار دارید پس باید شروع کنید به یادگیری عملی اندروید. پیشنهاد من برای این مرحله دیدن ویدئوهای آموزشی لیندا است که می‌تونید اون ها رو از سایت تولید کننده بخرید و یا اگه نمی‌تونید و یا نمی‌خواین که بخرید با یه جستجوی ساده توی وب‌سایت‌های فارسی پیدا و دانلودش کنید. این سری ویدئو از مفاهیم اولیه برنامه‌نویسی اندروید مثل نصب اندروید SDK شروع می‌کنه و به تدریج حجم زیادی از تکنیک‌های کلیدی مثل ایجاد کردن چند صفحه در اپ، کار کردن با دیتا،پیاده‌سازی المان‌های رابط کاربری و … رو آموزش میده. اکیدا توصیه می‌کنم که به دیدن ویدئوها اکتفا نکنید و سعی‌ کنید تمام کدهای زده شده توی ویدئوها رو یکبار خودتون بزنید.

بعد از این دیدن این سری ویدئوها شما می‌تونید یک اپ ساده شبیه اکثر اپ‌های موجود در بازار اندروید رو تولید کنید. پیشنهاد می‌کنم در این مرحله و قبل از ورود به مرحله بعدی اپی بنویسید که توش از تمام مواردی که یاد گرفتید و یا حداقل خوندید ولی یاد نگرفتید استفاده کنید(شاید نوشتن یک ماشین حساب ساده ایده خوبی باشه) تا به طور کامل به اون مباحث مسلط بشید(و البته پیشنهاد می‌کنم که توی بازار منتشرش نکنید :)).

در صورتی که مواردی که تا اینجا ذکر شده رو انجام داده باشید آمادگی این رو دارید که تکنیک‌های مربوط به برنامه‌نویسی نیمه‌ پیشرفته اندروید رو یاد بگیرید. در مرحله اول این بخش پیشنهاد می‌کنم که ماشین مجازی GenyMotion رو نصب کنید. ماشین‌ مجازی پیش‌فرض اندروید هنوز و حتی بعد بهبود از قابل توجه سرعت نسبت به نسخه‌های قدیمی، سرعت پایینی داره، به طوری که اکثر برنامه‌نویس‌ها ترجیح میدن تا از دیوایس‌هاشون برای تست نرم‌افزارها استفاده کنن(البته تست کردن روی دیوایس مزایای خاص خودش رو داره). اما از طرفی به علت کثرت دیوایس‌های اندرویدی شما نمی‌تونید به یک یا دو دیوایسی که در خونه یا محل کار دارید اکتفا کنید و مجبورید برای تست دیوایس‌های مختلف و ورژن‌های مختلف اندروید از سیستم‌های شبیه‌ساز و ماشین‌های مجازی استفاده کنید. جنی‌موشن با سرعت فوق‌العاده بالایی که داره بهتون کمک می‌کنه که کارایی شبیه‌ساز اندروید(AVD) رو در کنار سرعت بالا داشته باشید.

در مرحله دوم سعی کنید روی یکی از کاربردی‌ترین مباحث موجود در ویدئوها تمرکز کنید، یعنی SQLite. این پایگاه داده به علت سبک بودن در حجم زیادی از سیستم‌های‌عامل و نرم‌افزارها مورد استفاده قرار می‌گیره و با توجه به اهمیت کارکردن با دیتاها، بهتره شما به طور کامل به اون مسلط باشید. مطلب آموزش Sqlite در یک ساعت خیلی می‌تونه بهتون کمک کنه و اگه حوصله داشته باشید این کتاب مجانی هم خیلی بهتون کمک خواهد کرد.

توی مرحله سوم سعی کنید بر روی مدیریت ارورها کار کنید، اکثر کاربرا نرم‌افزاری که توی اولین اجرا فورس کلوز بشه رو دوباره نصب نمی‌کنن پس باید اپتون تو تمام شرایط به کار خودش ادامه بده. این مطلب می‌تونه به شما توی این بخش کمک کنه، همچنین در صورتی که سرویس گوگل آنالایتیکز رو بر روی اپتون راه‌ندازی کنید می‌تونید به اطلاعات مناسبی از نحوه تعامل کاربرها با اپتون، زمان و نحوه کرش‌کردن‌های اپ و خیلی از اطلاعات جالب دیگه دست پیدا کنید و ارورهای احتمالی رو در کوتاه‌ترین زمان رفع کنید. راهنمای گوگل بهترین راهنما برای اضافه کردن گوگل آنلایتیکز به اپتون هستش.

مرحله چهارم شروع کار با سرویس‌های پس‌زمینه(Background services) است. بک‌گراند سرویسز یکی از پر کاربرد ترین موارد در سیستم‌های نسبتا پیشرفته هستن، پس خوندن این مطلب و این مقایسه رو از دست ندید. در محله پایانی که از نظر من مهم‌ترین مرحله است، شما باید سعی کنید تا از طریق اپتون با سرویس‌های تحت وب ارتباط برقرار کنید. پیش‌نیاز این مسئله شناخت پروتکل‌های ارتباطی وب‌ هستش پس مطلب شماره یک و دو رو از سری مطالب آموزش پروتکل HTTP بخونید. حالا که با استانداردها و قواعد آشنا شدید می‌تونید برید سراغ استفاده از کتابخانه‌ها و امکاناات اندروید برای ارتباط با وب. در مطلب آموزش پیاده‌سازی برنامه آب و هوا سعی شده تا یک برنامه ساده که با وب ارتباط برقرار می‌کنه طراحی بشه. در این مطلب هم سعی شده تا کار با وب‌سرویس‌هایی که جواب رو به صورت JSON برمی‌گردونن آموزش داده بشه. بعد از این مرحله می‌تونید پا رو یک قدم جلوتر بذارید و برید سراغ این که وب‌سرویس رو هم خودتون طراحی کنید. این مطلب یک نمونه خوب از این پروسه است(البته پیشنهاد من اینه که طراحی وب‌سرویس رو به افرادی که در حوزه وب تخصص دارن واگذار کنید). مرحله بعدی می‌تونه دیدن این ویدئو گوگل IO باشه که خیلی از موارد ارتباط با وب سرویس ها رو پوشش داده. در نهایت می‌تونید بر روی سینک کردن اطلاعات وب‌سرور و اپتون کار کنید، این مطلب و این مطلب نمونه‌های خوبی از این مورد هستند.

در این مطلب من سعی کردم کلیات مواردی که بیشترین کاربرد در اندروید رو دارن معرفی کنم، یقینا در صورتی که به صورت جدی وارد حوزه برنامه اندروید شوید به حجم اطلاعاتی خیلی بیشتری از موارد بالا نیاز پیدا خواهید کرد با این وجود امیدوارم تونسته باشم به شما کمکی بکنم و به عنوان آخرین پیشنهاد، برای این که یاد بگیرید، سعی کنید پیچیده‌ترین پروژه‌هایی که به ذهنتون می‌رسه رو انجام بدید و در پروسه انجام پروژه تکنیک‌های حرفه‌ای رو راه بگیرید که بهترین روش برای یادگیریه. در نهایت اگه حال و حوصله خوندن این موارد رو ندارید و به قول معروف دیر اومدید و زود هم می‌خواین برین می‌تونید شماره یک و دو آموزش ساده و کاربردیه برنامه‌نویسی اندرویدی که محمدرضا دیلمی نوشته رو بخونید، به مراتب نگارش بهتری از من داره.