نکته: این پست در سال ۱۳۹۶ نوشته شده و در آبان ۱۳۹۹ ویرایش شده است.
در این پست می خواهم تجربه های خودم در این ۵ سال و چند ماهی که درگیر برنامه نویسی اندروید هستم را با شما در میان بگذارم. ابتدا چند تا توصیه برای کسانی که به امید یک شبه ره صد ساله را رفتن به سمت این شغل آمده اند دارم. برنامه نویسی یکی از سخت ترین مشاغل دنیاست و روز به روز هم به جای آسانتر شدن به سمت سخت تر شدن حرکت می کند. در قدیم مشکلاتی وجود داشت اما به نظر من برنامه نویسی به طور کلی خیلی آسانتر (حداقل برای کسی که می خواست شروع کند) از الان بود. بزرگترین مشکل چند سال قبل که مشکل کوچکی هم نبوده عدم دسترسی به منابع یادگیری و حتی نبودن جایی برای پیدا کردن جواب مشکلاتی که پیش می آمد بود. یا حتی یک مشکل بزرگ دیگر که قبلا وجود داشت نبودن IDE یا محیطهای توسعه نرم افزار بود. در حال حاضر این دو مشکل کاملا حل شده اند اما دانشی که یک برنامه نویس باید داشته باشد به شدت افزایش پیدا کرده است. خب بگذارید برای اینکه شفافتر صحبت کنم با مثال از برنامه نویسی اندروید این موضوع را جلو ببرم. در گذشته برای توسعه اپلیکیشن اندروید شما کافی بود به زبان جاوا تسلط(نسبی) پیدا می کردید، سپس با پلتفرم اندروید که بسیار ساده تر از الان بود آشنایی پیدا می کردید. در گذشته از Maven به عنوان Build Tools در اندروید استفاده می شد اما اکنون از گریدل استفاده می شود که باز هم یادگیری آن سخت تر از Maven است اما به شدت در بلند مدت به نفع برنامه نویس است. در گذشته اپلیکیشن ها به ندرت انیمیشن داشتند. انواع طراحی در توسعه نرم افزار وجود نداشتند(مانند متریال دیزاین، طراحی فلت و ...). امکانات اندروید بسیار کمتر از امکانات کنونی آن بود. حالا به تمام این موارد نوشتن تست برای نرم افزار و همچنین رعایت کردن دیزاین پترن را هم اضافه کنید که حالا بسیار فراگیرتر شده اند. در گذشته RxJava نبود و کار MultiThreading در جاوا و اندروید سخت بود اما اپلیکیشنهای کمی بودند که به این مقوله نیاز داشتند. اما اکنون یادگیری این کتابخانه ها بسیار پراهمیت شده در حالیکه پروسه یادگیری آنها به شدت زمانبر است. ببینید در عمل نمی گویم برنامه نویسی سخت تر شده است، برای کسی که می خواهد شروع کند با دریایی از مطالب روبرو خواهد شد که نمی داند از کجا شروع کند و به کجا برسد. آنقدر باید دانش خود را عمیق و زیاد کنید که در ابتدا شاید بیخیال برنامه نویسی شوید. در یک کلام اگر واقعا به برنامه نویسی علاقه ندارید از همین جا این صفحه را بسته و دیگر این مطلب را ادامه ندهید و به دنبال شغلی دیگر بروید. با برنامه نویسی نمی شود یک شبه ره صد ساله رفت. شرط موفقیت در برنامه نویسی این است که سالهای سال برای یادگیری و کسب تجربه، خودتان را وقف کارتان کرده باشید. حالا با فرض بر اینکه به یادگیری برنامه نویسی علاقه دارید ادامه می دهیم.
اگر تا به حال برنامه نویسی نکرده اید و می خواهید از اندروید شروع کنید توصیه می کنم این کار را نکنید(این نظر بسیار شخصی است و شاید اشتباه باشد اما من به آن عمیقا اعتقاد دارم که در بلند مدت به نفع شما خواهد بود). من این کار را انجام دادم و می دانم کار بسیار سخت و طاقت فرسایی خواهد بود. بخصوص که یادگیری جاوا و کاتلین در بین سایر زبانهای برنامه نویسی معروف (به غیر از سی و سی پلاس پلاس) سخت تر و زمانبرتر است. توصیه ای که به دوستانی که به اندروید علاقه دارند می کنم این است که با برنامه نویسی وب شروع کنند. HTML, CSS, JavaScript را کمی یاد بگیرید که بتوانید یک سایت استاتیک ساده را خودتان از صفر شروع کرده و به اتمام برسانید. این کار به شما دید خوبی از برنامه نویسی خواهد داد. این پروسه حداکثر دو تا سه ماه زمان خواهد برد اما مطمئن باشید این کار در بلند مدت به نفع شما خواهد بود. دلیل این حرفم چیست؟ ببینید برنامه نویسی اندروید، برنامه نویسی سمت کلاینت است. برنامه نویسی سمت کلاینت در وب یعنی همان HTML, CSS, JavaScript. در اندروید بجای HTML ما XML داریم. بجای جاوااسکریپت از جاوا استفاده می کنیم. CSS در اندروید هم یا در XML پیاده سازی می شود یا در جاوا(کاتلین). اما یادگیری سمت کلاینت در وب برای کسی که برنامه نویسی نکرده به شدت ساده تر از اندروید است. پس برای یادگیری کلیت کار از وب شروع کنید.
اگر به توصیه بالا عمل کردید این مرحله نباید زمان زیادی از شما بگیرد. با یادگیری انواع متغیرها، حلقه ها، جملات شرطی و مفاهیم شی گرایی در جاوا (کاتلین) آشنا شوید و بلافاصله شروع به یادگیری اندروید کنید. من در این مرحله هم اشتباهات بزرگی کردم. شاید به مدت ۶ ماه فقط در حال یادگیری جاوا بودم در حالیکه به خیلی از مباحثی که در آن زمان یاد گرفتم هنوز هم نیاز پیدا نکرده ام. سعی کنید یادگیری خود را بر اساس نیاز قرار دهید. یعنی اگر در پروژه ای نیاز به مبحث خاصی بود آن مبحث را خوب یاد بگیرید. در غیر این صورت شاید هیچ وقت به آن مبحث نیاز نداشته باشید. بزرگترین مشکل بعد از یادگیری جاوا (کاتلین)، نصب اندروید استودیو خواهد بود. خیلی از کسانی که در گروههای اندروید می بینم برای نصب اندروید استودیو زمان زیادی می گذارند و در نهایت بی خیالش می شوند. سعی کنید مرحله به مرحله پیش بروید. من برای نصب اندروید استودیو یک ماه درگیر بودم. در نهایت هم به دلیل اینکه امولاتو روی سی پی یوهای AMD کار نمی کند مجبور شدم یک ماه برای نصب لینوکس و اندروید استودیو زمان بگذارم. البته همه اینها برای کسی که تازه وارد دنیای برنامه نویسی شده بود انقدر طول کشید. آن زمان خوب جستجو نمی کردم. حتما از ابتدا مهارت خوب جستجو کردن را در خود ارتقا دهید تا از این نوع مشکلات نداشته باشید.
این هم یکی از اشتباهات و در عین حال شاید نقاط قوت من در یادگیری برنامه نویسی اندروید بود. در یادگیری برنامه نویسی به شدت عمیق می شدم و تا به مبحثی کاملا مسلط نمی شدم از آن در پروژه هایم استفاده نمی کردم. این باعث می شد یادگیری ام بسیار عمیق اما کند باشد. به شما توصیه می کنم عمیق اما پروژه محور یاد بگیرید. در ابتدای یادگیری اندروید یک پروژه بسیار ساده برای خود در نظر بگیرید و همزمان که از روی کتاب، فیلم، سایت و... یاد می گیرید همان مباحث را در پروژه خود پیاده کنید. حتی زمانی که کتابخانه های مهم جاوا مانند Dagger یا RxJava را یاد می گیرید در پروژه های خود پیاده سازی کنید. این کار به شدت بهینه تر از کاری است که من انجام می دادم.
اگر شما هم نمی دانید از کدام شروع کنید حق دارید. اکثر کسانی که می خواهند شروع کنند گیج می شوند چرا که با انبوهی از پیشنهادها مواجه می شوند. در همین پست که سه سال قبل نوشته بودم تاکید می کردم که برای برنامه نویسی اندروید حتما جاوا یاد بگیرید. اما اکنون بعد از گذشت سه سال شرایط خیلی عوض شده است. اکنون یادگیری کاتلین برای اندروید به شدت منطقی تر است. گوگل زبان رسمی برای توسعه اندروید را کاتلین معرفی کرده است. اکثر شرکتهای بزرگ بدلیل همین موضوع و همچنین سرعت توسعه بالاتر با کاتلین در حال مهاجرت به سمت این زبان محبوب هستند. همچنین کد زدن با کاتلین مزیتهایی دارد که واقعا نمی شود از آنها چشم پوشی کرد. مهمترین مزیتهای کاتلین نسبت به جاوا وجود Coroutines و Higher-Order Functions است. به طور کل اگر کاتلین را حرفه ای یاد بگیرید به شدت سرعت شما در توسعه اندروید زیاد خواهد بود. البته یادگیری جاوا شاید در طول مسیر به درد شما بخورد ولی برای شروع نیاز نخواهد بود (اگر وقت اضافه دارید یا به جاوا علاقه دارید بحث دیگری است). در کل باید بگویم اکنون یادگیری کاتلین برای شما مزیت محسوب می شود و اگر هدف شما اندروید است بهتر است از ابتدا با کاتلین شروع کنید.