آنچه بعد از دو سال برنامهنویسی اندروید آموختم
این مطلب ترجمه آزادی است از مطلب Aritra Roy که در وبسایت وی منتشر شده است.
هنوز آن روزها در سال ۲۰۱۴ را به خاطر میآورم. روزهایی که تصمیم گرفتم برنامهنویسی اندروید را شروع کنم که یکی از بهترین تصمیمهای زندگیام بود. از آن موقع حدود دو سال و نیم گذشته و من بخت این را داشتم که خیلی چیزها را یاد بگیرم. وقتی شروع به یادگیری کردم مربی یا کسی را نداشتم که به من یاد بدهد چطور کارها را به شیوه درست انجام بدهم. خیلی اشتباه مرتکب شدم که بعدها با صرف وقت زیاد آنها را تصحیح کردم.
بعد از یک سال و نیم کار کردن به این شیوه این شانس را داشتم که با تیمی از بسیار با استعداد و با تجربه از برنامهنویسان و توسعهدهندگان اندروید کار کنم که کمکم کردند تا کارها را به شکل بسیار بهتری انجام دهم. هر دوی این مراحل کمک کردند تا بیاموزم که چه کارهایی باید انجام بدهم و مهمتر از آن، چه کارهایی نباید انجام بدهم.
در این مطلب میخواهم الماسهایی را که در این دوره جمعآوردم با شما به اشتراک بگذارم. این کار میتواند به دیگران کمک کند تا سریعتر بتوانند شروع کنند و اشتباهاتی که من مرتکب شدم را تکرار نکنند.
۱- چرخ را دوباره اختراع نکن
در ابتدای کار به اشتباه فکر میکردم که نباید از کتابخانههای کدباز استفاده کنم. هر چیزی که لازم داشتم خودم مینوشتم. واقعا تصمیم فاجعهباری است. اگر در برنامهنویسی به مشکلی برخورد کردهای که قبلا کس دیگری آن را به شکل خوبی حل کرده است چرا از آن استفاده نکنی؟ با این کار کلی زمان صرفهجویی میکنی.روی منطق اصلی برنامه تمرکز کن. اگر نیاز داری به فراخوانی اطلاعات از اینترنت، لازم نیست خودت Retrofit را بسازی.
جایزه: Android Arsenal تقریبا فهرست کاملی از همه کتابخانههای اندروید دارد. حتما سری به این سایت بزنید.
۲- کتابخانهها را هوشمندانه انتخاب کن
کتابخانههای خیلی خیلی زیادی در گیتهاب است که همه هم کدباز هستند و استفاده از آنها مجاز است. ولی خیلی هیجان زده نشوید! احتیاط کنید و کورکورانه از آنها استفاده نکنید. تعداد ستارههای کتابخانه را چک کنید، هر چه بیشتر بهتر. بررسی کنید ببینید نویسنده این کتابخانه، کارهای مطرح دیگری هم انجام داده است یا نه. مشکلات (issue) های آن را چک کنید، هم آنهایی که بسته شدهاند و هم آنهایی که هنوز باز هستند. اگر وقت کافی دارید، شیرجه بزنید توی کدها و خودتان ببینید که آیا ارزشش را دارد که از آن استفاده کنید یا نه.
توضیح مترجم: حتما حواستان به مجوزهای آنها هم باشد. هر کتابخانه کدبازی را نمیتوان در برنامههای تجاری و کدبسته استفاده کرد!
۳- بنشین و یک فنجان قهوه بخور و کدهای بیشتری را مطالعه کن
ما بیشتر وقتمان به خواندن کدهای دیگران میگذرد تا نوشتن کد خودمان. اگر این کار را نمیکنی حتما همین حالا شروع کن. هر کدی که الان میتوانی بنویسی به خاطر این است که روزی روزگاری آن را در جایی خواندهای و یاد گرفتهای. تنها راه رشد کردن و یاد گرفتن، آموختن از کارهای دیگران است.
یکی از خوبیهای اندروید این است که کدباز است. بپر توی کد و ببین چطور آن را پیادهسازی کردهاند. هزاران کتابخانه کدباز در گیتهاب است. یکی را انتخاب کن و ببین چطور آن را پیادهسازی کردهاند.
جایزه: اینجا فهرستی مدیریت شده از بهترین کتابخانههای اندروید است و اینجا هم فهرستی از تقریبا همه کتابخانههای کدباز اندروید. قابلی نداشت!
۴- به خاطر خدا استانداردهای کدنویسی مناسبی را رعایت کن
اگر کدنویسی نوشتن باشد، استانداردهای کدنویسی همان دستخط است. همانطور که تو کدهای دیگران را میخوانی، دیگران هم کدهای تو را میخوانند. دوست نداری که در این مواقع شرمنده بشوی؟ اگر در یک شرکت یا در یک سازمان کار میکنی و با توسعهدهندگان دیگر کار میکنی، مراقب استانداردهای کدنویسی باش. کدی کوتاه، تمیز و خواندنی بنویس که خودت و دیگران موقعی که آن را میخوانند از آن لذت ببرند. کد باید مثل یک داستان خواندنی و جذاب باشد.
«کد مثل شعر است»
اگر کدی نوشتی و همکارت چند روز با تو حرف نزد اعتراض نکن!
جایزه: برای شروع اینجا و اینجا را بخوانید.
۵- به ProGuard احتیاج داری، واقعا احتیاج داری
هرگر هرگز هرگز برنامه را بدون استفاده از ProGuard در گوگلپلی (و کافهبازار و سایر بازارهای مشابه) منتشر نکن. پروگارد نه تنها برنامه شما را کوچکتر میکند، بلکه آن را به هم ریخته (Obfuscate) هم میکند که باعث میشود فهمیدن، کپیکردن و تغییر آن با مهندسی معکوس سختتر شود.
پروگارد کاملا رایگان است و در بسته اندروید SDK وجود دارد و هیچ دلیلی ندارید که از آن استفاده نکنید. من خیلیها را میبینم که برنامههایشان را بدون استفاده از پروگارد منتشر میکنند و یک هکر نه چندان حرفهای میتواند برنامهشان را در کمتر از چند ساعت تغییر دهد.
نکته: اگر امنیت خیلی خیلی برای برنامه شما حیاتی است میتوانید با صرف کمی هزینه به جای پروگارد از DexGuard استفاده کنید.
۶- از معماری مناسب استفاده کن
همیشه از خودت به خاطر انتخاب یک معماری مناسب در اول کار، سپاسگزار خواهی بود. میتوانی از MVP یا همان Model-View-Presenter استفاده کنی که برنامه را به لایههای متفاوتی تجزیه میکند تا مدیریت آن سادهتر باشد. این باعث میشود تا انعطاف کد بالاتر برود و زمان نگهداری آن کاهش یابد.
این یک پروژه دموی بسیار عالی برای شروع است. اگر با مفهموم آشنا نیستید میتوانید این راهنمای دقیق و با جزئیات را بخوانید.
جایزه: حتما این و این را ببینید. اینها کمک بزرگی به پیادهسازی MVP در پروژه به شما میکنند.
۷- رابط کاربری مثل یک جک است، اگر نیاز به توضیح داشته باشد، حتما بیمزه است
اگر در جایی کار میکنی که نقش تو فقط توسعه دهنده اندروید است احتمالا از این لحاظ مشکلی نداری، چون احتمالا متخصص UI و UX هم هستند و مسولیت UI و UX با آنها است.ولی اگر یک توسعهدهنده تنها هستی، باید همیشه اینها را در ذهن داشته باشی. من توسعهدهندگان را دیدهام که برنامههایی با کارایی فوقالعاده ساختهاند ولی UI آن فاجعه و UX آن دردآور است.ساده و تمیز و زیبا طراحی کن، جوری که چشم از دیدن آن لذت ببرد. نباید فقط مثل یک توسعهدهند فکر کنی، بلکه باید سعی کنی کاری کنی تا طراح درونت خودش را نشان بدهد. سعی کن با طراحی UI زیبا لذتی دائمی برای کاربرانت ایجاد کنی تا آنها دائما به برنامه سر بزنند و از آن استفاده کنند و احتمالا راضی شوند برای نسخه ویژه آن پول بدهند.
«احتمالا باید بیشتر از طراحی حذف کنی تا این که چیزی به آن اضافه کنی. همیشه طراحی را ساده و کمینه نگاه دار»
جایزه: همیشه در طراحی از کارهای طراحان Dribble یا MaterialUp الهام بگیر. اگر به طراحی علاقهمند هستی احتمالا عاشق این کتاب خواهی شد.
۸- آمار و تحلیل بهترین رفیق تو است
اگر میخواهی برنامهای واقعا اعجابآور بسازی، باید به شدت از ابزارهای تحلیلگر و آمارگیر استفاده کنی تا کارایی برنامه و میزان استفاده از بخشهای مختلف برنامه را بدانی. وقتی میگویم تحلیلگر، منظورم هم ابزارهای گزارش خطاها و هم ابزارهای دنبال کننده رفتار کاربر است. به هر دوی این ها نیاز داری.
هر چقدر هم که تلاش بکنی همیشه چیز عالی نمیشود. وقتی کاربران واقعی از برنامهات بر روی طیف وسیعی از دستگاههای اندروید و نسخههای متفاوت اندروید استفاده کنند، میبینی که حتا بخشی از بهترین کدهایی هم که نوشتهای نقش زمین خواهند شد. ابزار گزارش خطا به تو کمک میکند تا این خطاها را پیدا کنی و آنها را رفع کنی.همچنین باید مثل یک بازاریاب حرفهای استفاده از بخشهای مختلف برنامه را تحلیل کنی. با این کار میتوانی فاصله بین کاری که برنامهات میکند و چیزی که کاربر واقعا میخواهد را پر کنی.
نکته حرفهای: از ابزارهای گزارش خطا و تحلیلگر Firebase استفاده کن، به زودی از من به خاطر معرفی آن تشکر میکنی.
۹- نینجای بازاریابی باش
اگر یک توسعه دهنده تنها هستی باید خیلی فراتر از یک توسعهدهنده فکر کنی و باید بازاریابی هم بدانی.
«من برنامههای خیلی خوبی را دیدم که به خاطر نبود بازاریابی خوب شکسته خوردهاند و برنامههای نه چندان خوبی را دیدهام که به خاطر بازاریابی خوب فوقالعاده موفق بودهاند.»
اگر در کارت جدی هستی و میخواهی که مخاطب زیاد داشته باشی، باید وقت و پول خود را بر روی یک برنامه خوب بازاریابی هزینه کنی. قبل از شروع برنامههای تبلیغی مطمئن شو که برنامهات و ویژگیهای آن واقعا پایدارند. قطعا میخواهی در ازای هر ریالی که پرداخت کردی بیشترین درآمد را به دست بیاوری، درست است؟ وقت بگذار و ببین رقبایت چه کسانیاند و چطور میخواهی با آنها رقابت کنی.
۱۰- وقت آن است که برنامهات را بهینه کنی
این چیزی است که خیلی از ما معمولا انجام نمیدهیم ولی تو باید و حتما آن را انجام بدهی زیرا به آن نیاز داری. تفاوت زیادی است بین نوشتن کد و نوشتن کد «بهینه». کدی بنویس که سریع اجرا بشود، حافظه کمتری بگیرد و کمتر از فضای ذخیرهسازی دستگاه را اشغال کند. یک برنامه غیر بهینه در شرایط معمول به خوبی کار میکند اما اگر آن را زیر بار و فشار زیاد ببری تازه متوجه میشوی که چه گندی است. حافظه مورد استفاده برنامه را بررسی کن و مواظب سرریز حافظه باش. همیشه به یاد داشته باش: یک سوراخ کوچک میتواند یک کشتی بزرگ را غرق کند. بر روی درک شیوه عملکرد زبالهروب جاوا وقت بگذار. حافظه Heap را بررسی و تحلیل کن و اشیای زنده را ببین.
نکته حرفهای: از Leak Canary برای پیدا کردن سرریزهای حافظه استفاده کن. این برنامه با خودکار کردن این کار خیلی در زمانت صرفهجویی میکند.
۱۱- با تنظیم بیلد گریدل پنج ساعت در هفته در وقت صرفهجویی کن
بسیار محتمل است که از اندروید استودیو و گریدل برای توسعه برنامههای اندروید استفاده کنی. گریدل عالی ولی کند است و وقتی پروژه کمی بزرگتر شود کندتر هم میشود. ساعتهای بی شماری را به باد میآورم که بیکار مینشسم تا بیلد گریدل تمام شود. در زمانهای شلوغی کار به راحتی یک ساعت از وقت من صرف بیلدهای گریدل میشود و این یعنی ۵ ساعت در هفته و ۲۰ ساعت در ماه.اما راههایی هست تا گریدل را سریعتر کنی.
برای این کار اینجا و اینجا را ببین. با استفاده از این رهنمودها و بهینهسازی مناسب، زمان بیلد من از چهار دقیقه به حدود ۳۰ ثانیه رسید.
۱۲- تست کن و تست کن و بعد باز هم تست کن
هیچ چیزی از تست کردن مهمتر نیست. مهمترین کار در لیست کارهایت باید تست کردن باشد.
تا میتوانی تمام برنامه را تست کن. وقتی را صرف نوشتن تستهای خودکار کن. شرایط خیلی سخت و سنگین برای برنامه ایجاد کن و ببین آیا برنامه میتواند از پس آن شرایط سخت برآید یا نه.من یک بار مرتکب این اشتباه شدم و به خاطر عجله برنامه را بدون تست کردن منتشر کردم. منتظر بودم کاربران برنامه با خطاها مواجه شده و آنها را گزارش کنند تا من آنها را رفع و رجوع کنم.هیچوقت، هیچوقت هیچوقت این کار را نکن. ممکن است یکی دو روز یا حتا یک هفته کمتر وقت بگذاری ولی در آینده باید حداقل دو برابر آن زمان را برای برطرف کردن خطاهای برنامه صرف کنی.
«هیچ کاری را با عجله انجام نده. وقت بگذار و طولانی مدت فکر کن. رویاپرداز باش. الان با حوصله کار کن و به وقتش درو کن.»
۱۳- چندپارگی اندروید شیطانی است در لباس مبدل
چندپارگی (یا fragmentation) بزرگترین مشکل اندروید است و به نظر میرسد که گوگل بیخیال آن شده است ولی تو مجبوری با آن زندگی کنی.تنوع عظیمی از دستگاهای اندرویدی با اندازه صفحه نمایش متفاوت و ویژگیهای سختافزاری متفاوت و تعداد زیادی سازنده که اندروید را برای دستگاههای خود تغییر میدهند وجود دارد. علاوه بر آن نسخههای متفاوت اندروید که در هر کدام گوگل ویژگیهای جدیدی اضافه میکند یا برخی از ویژگیها را حذف میکند و همه اینها حجم کار تو را بیشتر و بیشتر میکند (برای مثال اینجا را بخوان).
برای مثال هیچ برنامهنویس اندرویدی وجود ندارد که تا به حال از SharedPreferences استفاده نکرده باشد. ولی همین کتابخانه بسیار پر کاربرد در گوشی گلکسی S سامسونگ که اندروید ۲٫۲ دارند از کار میافتد (گزارش خطا را در اینجا ببین).
«هیچگاه فرض را بر راین نگذار که چیزی کار میکند فقط به خاطر این که این طور به نظر میرسد»
۱۴- از همین امروز از Git استفاده کن
اگر هنوز از گیت (Git) استفاده نمیکنی همین الان برو سراغش.وقتی توسعه اندروید را شروع کردم متاسفانه نمیدانستم که Git چه جواهری است. هر روز یک نسخه از کل پروژه را بکاپ میگرفتم و یک نسخه را در هارد خودم و یکی را هم در ابر (Cloud) ذخیره میکردم. به نظر احمقانه میآید؟ واقعا احمقانه است!گیت به طرز حیرت انگیزی کار را بهبود میدهد. اگر یکی از من بپرسد یک ابزار را نام ببر که هر روز از آن استفاده میکنی و نمیتوانی استفاده از آن را متوقف کنی پاسخ من همیشه و همیشه گیت است.مطمئنم تو هم بعد از چند روز استفاده از گیت عاشقش میشوی و میخواهی بدانی که Git چطور کار میکند. پس حتما اینجا را ببین.
بعد از مدتی پروژهای بزرگ را شروع میکنی و سر موضوع نگهداری انشعابهای مناسب از پروژه گیج میشوی، اینجا برای آن روزها است.
جایزه: اگر تازه شروع کردهاید و نمیتوانی هزینه اشتراک ماهانه GitHub برای مخاذن خصوصی را بپردازی، میتوانی از BitBucket استفاده کنی که رایگان است.
۱۵- کار را برای هکرها دشوار کن
ماهیت کدباز اندروید آن را در برابر هکرها نفوذپذیر می کند. هر برنامه اندروید به سادگی میتواند دیکامپایل، مهندسی معکوس، باز، تحلیل و دستکاری شود.مطمئنا نمیخواهی که این اتفاقات برای برنامهات بیافتد؟باید بدانی که چطور کلیدهای API برنامه را به صورت امن در خود برنامه ذخیره کنی. اگر با دادههای حساس کاربر کاربر کار میکنی، باید بدانی که چطور آنها را رمزنگاری کنی و این که چه الگوریتمهایی باید برای کار استفاده کنی که هم امن باشند و هم سریع٫همچنین باید کلیدهای رمزنگاری را به صورت امن یا در سرور یا به صورت محلی و در خود گوشی (اگر لازم است) ذخیره کنی. همچنین باید کاری کنی که امکان بکاپگیری از دادهها توسط ADB یا Android Debug Bridge ممکن نباشد. اگر دادههای حساس را در دیتابیس ذخیره میکنی حتما باید آنها را درهمریخته (Obfuscate) کنی.اگر برنامهات نسخه پولی دارد که به راحتی بشود آن را هک و منتشر کرد، قطعا خسارت بزرگی به کسب و کارت وارد میشود. درست است؟چند راه برای جلوگیری از تغییر دادن برنامه وجود دارد. چیزی به اسم امنیت ۱۰۰ درصد وجود ندارد. هر هکر ماهر و با ابزارها و امکانات مناسب و با صبر و حوصله میتواند برنامه را هک کند.تنها کاری که میتوانی بکنی این است که کار هکر را سختتر و حتا خیلی سختتر کنی.
جایزه: مطالعه اینجا و اینجا نقطه شروع خوبی برای امن کردن برنامه است.
۱۶- روی دستگاههای ضعیف توسعه بده
همه دوست دارند از دستگاههای رده بالای اندروید استفاده کنند. من هم همین طور. ولی یادت باشه که این دستگاه رو فقط برای امور شخصیات استفاده کنی و هرگز از آن برای توسعه برنامه استفاده نکنی.یک دستگاه عالی بسیاری از معایب برنامه را مخفی میکند. فرض کن که کار سنگینی را در UI Thread انجام میدهی که منجر به کندی و تاخیر UI برنامه میشود. در یک دستگاه عالی هرگز متوجه این تاخیر و کندی نخواهی شد.
استفاده از یک دستگاه قدیمی، معمولی و پر از برنامه برای توسعه و تست برنامه ایدهآل است.
۱۷- روی یادگیری الگوهای طراحی وقت بگذار
این یک سرمایهگذاری عالی است که تا ابد به تو سود میرساند.وقتی که برنامههای بزرگ و پیچیده توسعه میدهی، با مسائل متداولی روبرو میشوی که احتمالا پیش از دیگرانی احتمالا قویتر از تو آنها را حل کردهاند و این همانجایی است که الگوهای طراحی به کار میآید.
از همین امروز وقت بگذار تا الگوهای طراحی جاوا (Java Design Patterns) را فرا بگیری. این یک پروژه جاوا در گیتهاب است که همه الگوهای طراحی را در عمل نشان میدهد.برای شروع، مهمترین آنها مثل Singleton و Adapter و Factory Method و Itrator و Dependency Injection و معماری Event Driven و Callback و Strategy و Facade و Producer/Consumer را یاد بگیر.
زیاد به نظر میآید؟ واقعا این طور نیست. وقتی که با اینها کار کنی عاشقشان میشوی.
نکته حرفهای: کتابهایی مثل الگوهای طراحی GoF و Refactoring نوشته مارتین فالر (Martin Fawler) و Effective Java نوشته Joshua Bloch را بخوان.
۱۸- وقت آن است که تو هم چیزی را برگردانی
همه ما کمکهای زیادی را ار آدمهای دور و برمان و از اینترنت گرفتهایم. این را بپذیریم.
همیشه هر وقت به مشکل میخوری اول کاری که میکنی گوگل کردن مساله و رفتن به اولین لینک جواب از استک (StackOverFlow) است. بعضی وقتها عجله داری و مجبور میشوی راهحلی که بیشترین و بالاترین رای را در SO دارد کپی بچسبان کنی.
تا به حال به این فکر کردی که این همه کتابخانه که در گیتهاب وجود دارد و از آنها استفاده میکنی چقدر زمان و هزینههای تو را کاهش میدهد. تا جالا فکر کردی چرا آدمها اینها را به رایگان در اختیار دیگران گذاشتهاند؟ چون کسی زمان جایی تصمیم گرفته تا کاری را انجام بدهد و آن را به جامعه برگرداند تا جامعه بهتری داشته باشیم.
روزی را به یاد بیاور که در فهم یک موضوع دشوار کاملا جدید گیر کرده بودی و یک وبلاگ عالی پیدا کرده بودی که مساله را مثل آب خوردن برات ساده کرده بود. مطمئن باش یک نفر از وقت تماشای فیلم خود زده است تا بتواند آن مطلب را بنویسد.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .