منابع آموزشی برای افزایش مهارت در برنامهنویسی اندروید
چند وقت پیش در بلاگم پستی با تیتر “سوالات متداول توسعهدهندگان تازه کار اندروید” نوشتم. سوال ۸ام اون پست “چطور میشه برنامهنویسی اندروید رو یاد گرفت؟” بود که جوابشو بصورت خلاصه نوشته بودم. این مقاله درواقع جواب کامل اون سوال هست و داخلش منابعی رو که خودم در سه سال گذشته ازشون استفاده کردم و برنامهنویسی اندروید یاد گرفتم رو بهتون معرفی میکنم. در طول این سه سال گذشته در هیچ شرکت یا تیم اندرویدی نبودم و فقط از منابع داخل این پست برای یادگیری اندروید استفاده کردم. در ادامه میتونید با این منابع و روشی که ازشون استفاده میکنم آشنا بشید.
۱- دیدن فیلمهای آموزشی
فیلمهای آموزشی برای شروع خیلی خوب هستند، من خودم هر زبان جدیدی رو میخوام شروع کنم با دیدن فیلم شروع میکنم (توی پست “روشهای یادگیری” در این رابطه بیشتر صحبت کردم). من فیلم آموزش فارسی اندروید ندیدم، برای همین فقط میتونم منابع انگلیسی رو معرفی کنم.
- سایت Udacity: کورسهای مختلف اندروید داره که توسط گوگل درست شدند. خیلی خوبه و به همه دیدنشون رو توصیه میکنم. چون بیشتر کورسهاش رایگان هست، میتونید به راحتی فیلمهارو همراه با زیرنویس انگلیسی دانلود کنید. البته اگر خیلی پیگیر بشید، فکرکنم کورسهای غیر رایگانشم توی اینترنت پیدا میشه.
- سایت Lynda: یکی از معروفترین شرکتهای ساخت فیلم آموزشی هست و فیلمهای آموزش اندروید دارند. این سایت پولی هست ولی فیلمهاشو توی خیلی از سایتهای ایرانی مثل p30download یا mihandownload میتونید پیدا کنید و رایگان دانلود کنید. اگر زیرنویس انگلیسی میخواید، از طریق سایت lynsub بگیرید.
- سایت Caster: هر چقدر بگم این سایت عالیه، بازم براش کم هست. شبیه یک معجزه میمونه. با اختلاف بهترین سایت آموزش ویدیویی هست و ماهیانه ۱۵ دلار هزینش هست. من فیلماشو جایی پیدا نکردم و مجبورید حق عضویت رو پرداخت کنید. برای اینکه هزینش کم بشه، میتونید با دوستاتون اکانت اشتراکی بخرید و یک ماه استفاده کنید. آخرین بار که از این سایت استفاده کردم چند ماه پیش بود و اون موقع با یکم دردسر میشد فیلمهاشو دانلود کرد ولی الان اطلاعی ندارم.
- سایت Youtube: یوتیوب شبیه سه تا سایت قبلی نیست که خیلی مرتب باشه ولی اگر داخلش موضوعی سرچ کنید، داخلش فیلم خوب زیاد پیدا میشه. موضوعی یعنی اگر میخواید mvp یاد بگیرید، داخلش عبارت android mvp رو سرچ کنید.
غیر از اینا کلی سایت آموزش ویدیویی دیگه مثل Coursera، Pluralsight، Udemy، فرانش (فیلمهای فارسی) و … هست. من فقط ۴ سایتی که خودم خیلی استفاده کردم رو معرفی کردم. راستی حواستون باشه دچار افراط در دیدن فیلم آموزشی نشید!!! چون هزار ساعت هم فیلم ببینید، نه فیلمها تموم میشه و نه شما برنامهنویس میشید. هیچی جای اینکه خودتون داخل اندروید استودیو کد بزنید رو نمیگیره.
۲- کتاب آموزش اندروید
خوندن کتاب خیلی سخت و طاقت فرسا هست، برای همین به کسی توصیه نمیکنم که برای شروع از کتاب شروع کنه. من از کتابها بیشتر بصورت مرجع استفاده میکنم، یعنی برای اینکه موضوع خاصی رو خیلی عمیقتر بفهمم به کتاب مراجعه میکنم یا فهرستشون رو نگاه میکنم و اگر از موضوعی خوشم اومد اونو میخونم. کتابهای معدودی بوده که از صفحهی ۱ شروع به خوندن کردم که هیچ وقت به تهشون نرسیدم 😀
- کتاب Android Programming: The Big Nerd Ranch Guide: از کتابهای معروف آموزش اندروید هست. توضیح خاصی ندارم براش بدم. کتاب خوبی هست 😀
- کتاب The Busy Coder’s Guide to Advanced Android Development: این کتاب خیلی خیلی معروفه ولی خداییش اینو دیگه نمیشه صفحه صفحه خوند! ۴۵۰۰ صفحه داره 😀 فهرستشو نگاه کنید تا بدونید برای حل چه مشکلاتی میتونید بهش مراجعه کنید. بطور مثال من میخواستم یک اپ در مورد نقشه بسازم، رفتم فصل کار با نقشهاش رو که ۱۰۰ صفحه داشت خوندم. عالی بود .
- کتاب Asynchronous Android Programming: در مورد هرچیزی که توی اندروید برای کار آسینکرون هست صحبت میکنه. از asynTask و loader گرفته تا jobscheduler و rxjva
- کتاب Effective Java: توی کانال تلگرامم قبلا در موردش صحبت کردم. کتاب فوق العاده ای هست، بصورت مستقیم با اندروید کار نداره ولی اگر کامل بخونید قطعا سطح برنامهنویسیتون رو یک پله جا به جا میکنه.
- کتاب Rxjava Essential: اگر میخواید rxjava یاد بگیرید، کتاب خوبی هست. البته الان rxjava2 اومده ولی این کتاب قدیمیتر هست. اما این چیزی از ارزشهای این کتاب کم نمیکنه. 😀
حالا جدای اینکه آدم کتابهارو بخونه خوب هس، من خیلی ازشون انگیزه میگیرم 😀 یعنی هر موقع که انگیزههام کم میشه یا نمیدونم چه چیزجالبی هست که بخونم. میرم توی سایتهای کتاب و چک میکنم ببینم چه کتابهایی برای دانلود هست. بعد خیلیهاشو دانلود میکنم و شاید در حد ۴ یا ۵ صفحه بخونم. اما اینکار کلی بهم انگیزه 😀 تازه بهم دید میده کلا چه موضوعاتی توی اندروید یا زبانهای دیگه هست.
۳- سایتهای آموزشی
سایتهای زیادی هستند که اندروید آموزش میدن، بدیهی هست که من همشون رو ندیدم یا نخوندم 😀 چندتایی موقع سرچ خیلی به چشمم خوردند و دیدم که آموزشهاشون خوبه رو معرفی میکنم.
- سایت tutsplus: این سایت در مورد چیزهای مختلفی هست ولی آموزشهای اندروید خوبی داره، از این لینک میتونید لیستشون رو بببیند.
- سایت futurestud: اینقدر که این سایت در مورد رتروفیت و پیکاسو بهم کمک کرده باید همیشه مدیونش باشم 😀 البته جدیدا انگار یه چیزایی رو داره پولی میکنه ولی کلا سایتش خیلی خوبه.
- ریپوی گیتهابcodepath: تقریبا هرچیزی سرچ کنید، یکی از نتیجههاش از داخل codepath هست ، داخلش در مورد همه چی توضیح دادند.
- سایت vogella: اینم شبیه codepath میمونه و اصولا هر چی سرچ کنید، داخل نتایج جستجو لینکی از این سایت هس 😀 خیلی خوبه.
- سایت android hive این سایت کلی مقاله آموزشی خوب داره. حتی اگر جایی مثل استفاده از fcm نیاز به برنامهنویسی بکاند داشته باشه، اون بخش phpش رو هم آموزش داده.
- داکیومنت اندروید: واقعا خیلی برای این داکیومنت اندروید زحمت کشیدن، خودش از خیلی سایتها و کتابها عالی تر هست. حتما اگر چیزی رو میخواید یاد بگیرید، اول توی سایت android developer دنبالش بگردید و ببینید در موردش چی نوشته. بعد اگر هنوز متوجه نشدید یا نیاز به اطلاعات بیشتر دارید به بقیه جاها مراجعه کنید.
۴- هفتهنامههای اندروید
جدای اینکه خودتون باید دنبال مقالههای خوب و جدید باشید، یه سری از افراد اینکار رو برای شما انجام میدند، نمونهاش این دو هفتهنامهی اندرویدی هست که هر هفته منتشر میشند و مقالههای خوب یا کتابخونههاسی جدید رو معرفی میکنند.
- هفتهنامه :Android Weekly این هفتهنامه خیلی معروفه و هرهفته کلی چیز جدید براتون میفرسته.
- هفتهنامه :Android Dev Digest این به اندازهی قبلی معروف نیست ولی داخل اینم چیزهای خوبی پیدا میشه. حتما جفتشو عضو بشید.
۵- بلاگها
مقالههای آموزشی خیلی خوبند که مفاهیم رو یاد بگیرید، ولی مهمترین مشکلشون اینه باعث افزایش تجربتون نمیشه. یعنی یاد نمیگیرید اگر فلان کارو میخواید بکنید، مسیر x رو برید تهش چی میشه یا چطور گام به گام باید یک مشکل رو تشخیص بدید و حلش کنید. من بلاگهارو به دو دسته تقسیم میکنم. دستهی اول بلاگهای شخصی افراد هست و از تجاربشون داخل بلاگ مینویسند:
- بلاگ آقای Lucas Rocha : ایشون قبلا توی فایرفاکس بود و الان فکرکنم دیگه مدتها هست داخل فیسبوک هستند. متاسفانه خیلی وقته بلاگشو آپدیت نکرده ولی همون پستهای قدیمیشم هنوز ارزش خوندن داره.
- بلاگ آفایCyril Mottier : این آقاهه توی یک شرکت حمل و نقل قطار هست، بلاگ خیلی خوبی داره و هنوزم بلاگشو آپدیت میکنه. یدونه مقاله طولانی داره به اسم A Story of Software Development Methodologies که فکرکنم حداقل ۲ ۳ باری خوندمش.
- بلاگ آقای Alex Lockwood: اسم بلاگشون androiddesignpatterns هست و موضوعاتی که در موردشون صحبت میکنه رو خیلی عمیق توضیح میده. مثلا بخش transitionهارو توو اندروید خیلی خوب گفته.
- بلاگ آقای Mark Allison: اسم بلاگشون stylingandroid هست. ایشونم از معروفترین بلاگرهای اندروید هستند. بلاگشون عالیه.
- بلاگ آقای Sittiphol Phanvilai: اسم بلاگشون inthecheesefactory هست. البته ایشون با یه خانوم دیگه تشکیل تیم دادند ولی پستهای بلاگ رو انگار فقط Phanvilai مینویسه. هرکی در مورد glide vs picasso سرچ کرده باشه، یکبار به بلاگ ایشون رسیده و اون پست معروفش رو خونده 😀
- بلاگ آقای Fernando Cejas: ایشون دولوپر soundcloud هستند، در مورد چیزهای مختلف مینویسند. مقالههای مرتبط به تست نرمافزار و معماری clean archشون معروفه.
- بلاگ آقای Antonio Leiva: این آقاهه جدیدا دیگه در مورد Kotlin فقط مینویسه. یک کتاب هم در این رابطه نوشته که توی کانال تگرامم معرفی کردم. قدیما در مورد اندروید با زبان جاوا پست میذاشتند.
- بلاگ آقای Chris Banes: ایشون بیشتر در مورد چیزهایی که به رابط کاربری ربط داره مقاله مینویسند و البته چند وقتی هست بلاگشون رو به روز نکردند.
- بلاگ آقای Dan Lew: واقعا بلاگ خیلی خیلی خوبی دارند. توی ترلو کار میکنند. اگر در مورد Rxjava سرچ کرده باشید، حتما به سری مقالههای ایشون رسیدید. البته در مورد چیزهای دیگه هم مینویسند ولی اون دیگه خیلی معروف شده.
حالا این همه بلاگ خارجی معرفی کردم، بذارید دو تا بلاگ فارسی هم بگم.
- بلاگ آقای علی بهزادیان نژاد: آقای بهزادیان نژاد خیلی وقته اندروید کار میکنه و فکرکنم از همون اوایل هم این بلاگ رو داشتند. بصورت پیوسته داخل بلاگشون در مورد اندروید آموزش مینویسند. smartlab
- بلاگ آقای طاهر خواجه حقوردی: بلاگ خیلی خوبی دارند و در مورد همهی چیزهای جدید اندروید مثل dagger2 و Rxjava و … مینویسند. جزء معدود بلاگهای فارسی هستند که اینقدر به روز و پیوسته جلو میرند.
حالا بعد این همه بلاگ میرسیم به دستهی دوم بلاگها که بلاگ فنی شرکتها هستند. خیلی از شرکتها مثل فیسبوک، اینستا، ترلو و … یدونه بلاگ فنی دارند و داخلش در مورد چیزهایی که استفاده میکنند یا تجربههایی که توی کار بدست آوردند مطلب مینویسند. البته باید بین مطالبشون بگردید چون فقط در مورد اندروید صحبت نمیکنند.
- بلاگ Trello : دولوپرهای ترلو داخل این بلاگ مینویسند. یکیشون Dan Lew هست.
- بلاگ Instagram : برای دولوپرهای اینستاگرام هست، موضوعات اندرویدش زیاد هست. بعضی از تجربههای اپ اندرویدشون رو خیلی کامل توی بلاگ توضیح میدن.
- بلاگ Facebook: فیسبوک کارو راحت کرده و برای اندروید یک بخش جدا درست کرده. اینجوری میتونید فقط پستهای اندروید رو بخونید. کتابخونههایی که برای اندروید ساختند رو هم معرفی کردند.
۶- پروژههای اوپن سورس
یکی از کارهایی که خیلی از برنامهنویسها انجام نمیدند، خوندن سورس پروژههای اوپن سورس هست. مهمترین دلیلشون این هست که اون پروژهها خیلی سطحشون بالا هست و ما هیچی متوجه نمیشیم. این دوستان توجه نمیکنند که حتما لازم نیست شما ۰ تا ۱۰۰ یک پروژه رو بخونید و خط به خط متوجه بشید، میتونید تمرکزتون رو روی ویژگی خاصی در اون پروژهی اوپنسورس بذارید و کامل یاد بگیریدش یا اینکه بصورت کلی سورس رو بررسی کنید و نکتههای جدید ازش یادبگیرید. توی این بخش هدفم معرفی پروژهی اوپنسورس برای استفادهی شما نیست، برای پیدا کردن پروژههای اوپن سورس به سایتF-Droid سربزنید و هرچی بخواید اونجا هست. الان فقط میخوام چندتا مثال بزنم که خودم چطور از پروژههای اوپنسورس کمک گرفتم تا شما هم با این روش آشنا بشید.
- پروژهی کلاینت WordPress: شاید خیلی عجیب باشه ولی برای اینکه مطمئن بشم جا به جایی بین تبهارو درست پیاده کردم، از این پروژه کمک گرفتم. از فایل Build.gradleش هم استفاده کردم و یک نکتهی جالب یاد گرفتم.
- پروژهی Depth-LIB-Android: همیشه توی کاستوم ویوها هرچی نیاز بود که Draw بشه رو به ترتیب داخل متد OnDraw مینوشتم. زمانی که سورس این پروژه رو توو گیتهاب بررسی کردم، تقریبا هیچی از نحوهی کارش نفهمیدم. تنها چیزی که یادگرفتم و خیلی بهم کمک کرد این بود که چطور میشه متد OnDraw رو خیلی تمیزتر کرد و از مزیتهای OOP کمک گرفت.
- کتابخونهی ENViews: از این کتابخونه یادگرفتم که چطور میشه با برنامهنویسی انیمیشنهای باحال برای اندروید درست کرد.
- کتابخونهی MaterialDateTimePickerL: از این کتابخونه یادگرفتم که چطور میشه بعضی جاها به جای اینکه ۳۰ تا دکمه ساخت، یه View درست کرد و تاچشو جوری هندل کرد که کار همون ۳۰تا رو بکنه. اینجوری کارایی اپ کلی بالاتر میره.
- پروژهی LastFm: خیلی وقت پیش میخواستم از SyncAdapter استفاده کنم، یکی از معدود مثالهای موجود در اینترنت، سورس این پروژه بود.
در کل به خودتون سخت نگیرید، اوقات بیکاری سعی کنید سورس پروژهها و کتابخونههای اوپنسورس رو بررسی کنید. همیشه چیزهای جالب میشه ازشون یاد گرفت. راستی برای چیزهایی مثل معماری نرمافزار از هر پروژهی اوپنسورسی الگو نگیرید، چون معمولا توی این مورد خیلی قوی نیستند.
۷- توییتر
توییتر تنها شبکهی اجتماعی هست که من توش خیلی فعالیت میکنم، بنظرم بهترین جای دنیا برای برنامهنویسا هست. تقریبا همهی آدمهای بزرگ توی برنامهنویسی در توییتر اکانت دارند و شما میتونید دنبال بکنیدشون. توییتر برای به روز بودن خیلی کمک میکنه. حتما داخلش اکانت بسازید (اگر در ساخت اکانت به دلیل تحریم مشکل پیدا کردید توی گوگل سرچ کنید) و ازش استفادهی مفید بکنید. من چندتا از اکانتهایی که خودم دنبال میکنم رو معرفی میکنم، ذره ذره خودتون میتونید آدمهای بیشتری رو پیدا کنید.
- Chiu-Ki Chan : @chiuki
- Jake Wharton: @JakeWharton
- Donn Felker : @donnfelker
- Kaushik Gopal : @kaushikgopal
- Roman Nurik : @romannurik
- Rebecca Franks : @riggaroo
- Cyril Mottier : @cyrilmottier
- Chris Banes : @chrisbanes
- Dave Smith : @devunwired
- Daniel Lew : @danlew42
در کنار برنامهنویسای خارجی، برنامهنویسای ایرانی رو هم دنبال کنید. آقای رضا معلمی زحمت کشیده و لیستی از برنامهنویسای اندروید ایرانی که توی توییتر هستند جمع کرده.
۸- ریپوی گیتهاب خوب
گیتهاب جدای اینکه میزبان سورس کتابخونهها و پروژههای واقعی ( منظور ریپوهایی هست که سورس اپلیکیشنهای داخل گوگلپلی یا مارکتهای دیگه هستند) زیادی هست، ریپوهای مفید دیگهای هم داره، مثلا بعضیهاشون لینک معرفی کردند، بعضیهاشون آموزشی هستند و … . تعدادی از این ریپوهای مفید رو در ادامه بهتون میگم.
- public-apis: داخل این ریپو وب سرویسهای عمومی رو میذارند، داخلشون میتونید apiهای مختلفی پیدا کنید.
- android-architecture: این ریپو برای گوگل هست و داخلش یک اپلیکیشن ساده todo list رو با م–عماریهای مختلف ساختند. برای مقایسهی معماریها خیلی خوبه.
- RxJava-Android-Samples: ریپوی مثالهای کاربردی استفاده از RxJava در اندروید
- android-best-practices: شرکت futurice توی این ریپو best practiceهایی که توی شرکت رعایت میکنند رو نوشتند
- awesome-persian: این ریپو فارسی هست و داخلش پروژههای اوپن سورس ایرانی رو لیست کردند. میتونید داخلش کلی پروژهی اوپنسورس از زبانهای برنامهنویسی مختلف پیدا کنید.
- AndroidStudyGroup/conferences: داخل این ریپو کنفرانسهای اندرویدی که در آینده قراره برگزار میشه رو معرفی میکنند.
۹- پادکستها
من تا الان دو تا پادکست تخصصی برای اندروید پیدا کردم که توی هر قسمت در مورد موضوعات مرتبط با اندروید صحبت میکنند. البته گوش دادن پادکست نیاز به مهارت لیسنینگ قوی داره و یکم سخت هست.
- پادکست Fragmented: فکرکنم پادکست Fragmented معروفترین پادکست مرتبط با اندروید هست که توسط Donn Felker و Kaushik Gopalls تهیه میشه. چند قسمت از این پادکست رو گوش دادم و واقعا خوب هست.
- پادکست Context: تا حالا به این پادکست گوش ندادم ولی عنوان قسمتهاش رو که دیدم جالب بوده. لینک قسمتهایی که منتشر شده رو توی این ریپوی گیتهابشون منشتر میکنند.
۱۰- همایشها
یکی دیگه از مهمترین منابع یادگیری اندروید دنبال کردن همایش معروفی هست که در دنیا برگزار میشه. البته همه همایشها فیلمهاشون رو در دسترس عموم نمیذارن ولی ۳ تا از همایشهای معروف رو معرفی میکنم که بعد همایش فیلمهاشون رو توی یوتیوب میذارن.
- Google IO: مهمترین همایش برای توسعه دهندههای اندروید هست و هر سال یکبار برگزار میشه. گوگل فیلمهای این همایش رو توی یوتیوب میذاره و میتونید اونهایی که مرتبط با اندروید هست رو ببینید.
- DroidCon: این همایش فقط برای اندروید هست و بزرگترین کنفرانسی هست که خارج از آمریکا برگزار میشه. از سال ۲۰۰۹ در برلین شروع شده و تا حالا توی ۱۹ کشور مختلف برگزار شده. ویدیو همایش در شهرهای مختلفی که برگزار شده رو میتونید در داخل یوتیوب ببنیید.
- ۳۶۰andev: فکرکنم این کنفرانس هرسال یکبار برگزار میشه و تا الان فقط یکبار در سال ۲۰۱۶ش برگزار شده. فقط بدیش اینه فیلماشو به مرور منتشر میکنند،تقریبا الان که این مقاله رو مینویسم ۹۰درصد فیلمهای کنفرانس سال ۲۰۱۶ منتشر شده. بخش خبر سایت Realm متن فیلمهارو مینویسه و اگر زبان انگلیسیتون در گوش دادن ضعیف هست میتونید اون متنهارو بخونید.
توی این مقاله نمیخواستم هرچی لینک مفید توی اندروید هست رو بهتون معرفی کردم. تلاشم این بود که منابع مختلف یادگیری اندروید و نحوهی استفاده ازشون رو بهتون بگم. در هر بخش فقط دو سه تا لینک معرفی کردم و حالا شما دیگه خودتون میتونید دنبال لینکهای بیشتری بگردید. امیدوارم این همه زمانی که برای این مقاله گذاشتم مفید باشه و تونسته باشم کمک کمی به برنامهنویسای ایرانی اندروید کرده باشم. موفق و پیروز باشید!