پیشنهاد سنیور دولوپرها به برنامه‌نویسان مبتدی اندروید

نویسنده : سید ایوب کوکبی ۲۲ خرداد ۱۳۹۸
پیشنهاد سنیور دولوپرها به برنامه‌نویسان مبتدی اندروید

احتمالاً این ضرب‌المثل را شنیده‌اید:

سخن بزرگان شنیدن ، ادب است.


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

  • برای سوال پرسیدن در سایت‌های خوبی مثل StackOverflow یا Android Subreddit به زبان انگلیسی نیاز دارید. پس اگر زبانتان خوب نیست روزانه وقتی را صرف تقویت آن کنید. یادگیری زبان انگلیسی به اندازۀ یادگیری برنامه‌نویسی مهم است؛
  • زبان اندروید جاوا است. چه بخواهید چه نخواهید این زبان را باید یاد بگیرید؛
  • XML بخش جدایی‌ناپذیر برنامه‌های اندروید است. طراحی واسط کاربری مستلزم یادگیری XML است. سعی کنید با انواع Layoutها و عناصر مهم آشنا شوید تا بتوانید واسط کاربری خوبی بسازید؛
  • یادگیری اندروید استودیو به عنوان محیط اصلی توسعۀ اپلیکیشن‌های اندروید نقش مهمی در پیشرفت شما دارد. شاید اغلب افراد تنها با ۲۰ درصد قابلیت‌های این IDE آشنا باشند در حالی که واقعاً امکانات وسیعی دارد؛
  • کمتر کتاب بخوانید و بیشتر کد بنویسید. خودِ فریم‌ورک اندروید را اگر خوب بررسی کنید به اندازۀ صدها کتاب به شما آموزش می‌دهد. تمرکزتان را بیشتر روی تکمیل پروژه‌ها بگذارید نه بهینه‌سازی آن‌ها. همیشه وقت برای ریفکتور هست. تا می‌توانید در گیت‌هاب پروژه‌های اندروید بررسی و در آن‌ها مشارکت کنید. یک برنامه‌نویس حرفه‌ای بیشتر از خواندن می‌نویسد؛
  • با یادگیری کتابخانه‌های مشهور اندروید در وقت خود صرفه‌جویی کنید؛
  • تصمیم بگیرید. می‌خواهید طراح شوید یا برنامه‌نویس. درگیر شدن با کدهای XML وظیفۀ طراح واسط کاربری است نه برنامه‌نویس؛
  • از اکلیپس استفاده نکنید. آینده با اندروید استودیو است؛
  • بهترین و معتبرترین منبع آشنایی با اندروید سایت رسمی اندروید دولوپر است. این سایت همواره با تغییرات جدید بروز می‌شود و شما با خواندن آن در جریان آخرین تکنولوژی‌ها و قابلیت‌های جدید در برنامه‌نویسی اندروید قرار خواهید گرفت. طبیعتاً حجم مطالبش از کتاب‌های آموزشی و پست‌های وبلاگی بیشتر است چون کامل‌تر است. و البته انتظار نداشته باشید همه چیزش را درک کنید. همین که بدانید در آینده سراغ یادگرفتن چه چیزهایی بروید بزرگترین مزیتی است که از خواندن این مستندات دستگیرتان می‌شود؛
  • با یادگیری الگوهای طراحی و معماری و استانداردهای رایج کدنویسی، تمیز کد نوشتن را یاد بگیرید. کدِ تمیز هم کار شما را در آینده آسان می‌کند و هم سایر اعضای تیم یا هر شخصی که قرار است پروژۀ شما را ببیند قادر به درک آن خواهد بود؛
  • در شروع کار فوراً سراغ کتابخانه‌ها و فریم‌ورک‌ها نروید. سعی کنید مبانی برنامه‌نویسی اندروید را فرا بگیرید و با همان امکانات اولیۀ SDK کدنویسی کنید. یادگیری مبانی نوعی زیربناسازی است و در آینده باعث می‌شود راحت‌تر بتوانید کتابخانه‌ها و کدهای پیشرفته‌تر را درک کنید؛
  • کار با گیت را فرا بگیرید. این سورس کنترل اکنون هستۀ اصلی گیت‌هاب بوده و میلیون‌ها نفر در سراسر دنیا از آن برای همکاری تیمی استفاده می‌کنند. با بزرگ شدن پروژه مدیریت آن سخت می‌شود. شما نیازمند روش راحتی هستید که بتوانید کدها را به هر نقطه‌ای که می‌خواهید برگردانید. افزون بر این در کارهای تیمی جلوی تداخلات را می‌گیرد و نوعی هماهنگ‌کننده محسوب می‌شود؛
  • گرچه به عنوان یک برنامه‌نویس، طراحی واسط کاربری وظیفۀ شما نیست ولی تا قبل از ورود به یک تیم، طراحی را باید خودتان انجام دهید. و اگر فریلنسر باشید احتمالاً تا آخرِ عمر درگیر طراحی هم خواهید بود. به هر حال بد نیست زمانی را صرف یادگیری واسط کاربری و مباحث گرافیک کنید. متریال دیزاین گوگل را بررسی کنید و سعی کنید هنگام طراحی پیرو اصول آن باشید. سایت‌هایی مثل دریبل و پینترست منبع خوبی برای الهام گرفتن هستند. ساخت واسط گرافیکی تمیز، زیبا و دلنشین را یادبگیرید. معیار دقیقی برای زیبایی وجود ندارد. طراحی بیشتر از آنکه به اصول و قواعد پایبند باشد که بخشی از این قواعد در متریال دیزاین آمده، به سلیقه و خلاقیت شما بستگی دارد. ظاهر برنامه اولین چیزی است که مشتری می‌بینید؛
  • قبل از انتشار برنامه در گوگل‌پلی، کد را بارها و بارها تست کنید تا از صحت آن اطمینان حاصل کنید. مهم نیست متدولوژی شما اجایل است یا واترفال؛ به هر حال به تست کردن نیاز دارید. شما که نمی‌دانید با تغییرات جدید بخش‌های قبلی همچون گذشته کار می‌کنند یا نه. برنامه با خطا مواجه می‌شود یا نه. بنابراین بعد از هر تغییر باید تمام سناریوها را تست کنید. آزمایش دستی سناریوها به‌خصوص وقتی زیاد باشد خسته‌کننده و زمان‌بر است؛ به همین خاطر یونیت تست به وجود آمد تا هزاران تست بعد از هر تغییر به صورت خودکار و در چند ثانیه اجرا شوند؛
  • با ابزارهای آنالیتیکز، پرفرمنس و کاربرد برنامه را بسنجید. ابزارهایی هستند برای گزارش کرش‌ها و میزان استفاده از قسمت‌های مختلف برنامه. فایربیس و Crashlytics، ARCA چند نمونه از این ابزارها هستند. حتی بهترین کدها هم در شرایطی با مشکل کرش مواجه می‌شوند. پس زمانی را در برای یادگیری این ابزارها کنار بگذارید؛
  • هیچگاه در تِرِد UI کارهای پردازشی انجام ندهید چون باعث لگ زدن برنامه خواهد شد؛
  • ابداً سعی نکنید ظاهر برنامۀ اندروید را شبیه برنامه‌های iOS و ویندوز و بلک‌بری کنید. این کار برخلاف اصول تجربۀ کاربری است و استفاده از برنامه را برای کاربران سخت می‌کند؛
  • به پیام‌ها و اخطارهای Lint توجه کنید. این پیام‌ها برای بهبود پرفرمنس، کیفیت و سازگاری با نسخه‌های آیندۀ اندروید صادر می‌شوند؛
  • در درجۀ اول تعداد مجوزها را تا حد امکان کاهش دهید و در درجۀ دوم بدون جلب رضایتِ صریحِ کاربر اقدام به انجام کاری نکنید. مثلاً اگر قرار است اطلاعات خصوصی کاربر را SMS یا ایمیل کنید حتماً قبل از انجام این کار اجازه بگیرید؛
  • هر زمان کتابخانه‌های جانبی خوبی وجود داشت از همان‌ها استفاده کنید. اختراع دوبارۀ چرخ همیشه ریسک‌های زیادی به همراه دارد؛
  • ساخت اولین برنامه معمولاً زمان زیادی می‌برد. بدانید که طبیعی است!
  • سنگ بزرگ نشانۀ نزدن است. سعی کنید با پروژه‌های کوچک مثل ماشین‌حساب، دفترچه یادداشت، تودو لیست شروع کنید و به مرور سطح برنامه‌ها را بالاتر ببرید. هیچگاه اولین پروژه خود را بزرگ انتخاب نکنید چون ممکن است وسط کار با مشکلی بر بخورید و ناامید شوید. مقالات و ویدیوهای آموزشی رایگان زیادی وجود دارد که با پیروی از آن‌ها می‌توانید چگونگی ساخت برنامه در اندروید را یاد بگیرید؛
  • پیرو اخبار اندروید و ویژگی‌ها و قابلیت‌های جدید این سیستم‌عامل باشید. گاهی در نسخه‌های جدید محدودیت‌هایی اعمال می‌شود که برنامه‌های قبلی را با مشکل مواجه می‌کند یا ممکن است ویژگی‌هایی معرفی شود که استفاده از آن‌ها تعداد کاربران برنامه را افزایش دهد؛
  • فراموش نکنید که پرمیژن‌ها را به مانیفست اضافه کنید چرا که ریشۀ بسیاری از باگ‌ها همین موضوع است؛
  • مهندسی معکوس و راه‌های نفوذ به برنامه را یاد بگیرید. متخصصان امنیت ابتدا هکرهای خوبی بوده‌اند؛
  • در فروم‌ها و کامیونیتی‌های اندروید فعالیت کنید؛
  • برنامه‌تان را بدون پروگارد منتشر نکنید. پروگارد امنیت خالص برای اپلیکیشن نیست ولی بودش از نبودش بهتر است. خانۀ بدون حفاظ امنیتش بیشتر است یا خانۀ چفت و بست‌دار؟ خودروی بدون دزدگیر ایمن است یا خودروی دزدگیردار؟
  • در مورد کدهایی که می‌نویسید بازخورد بگیرید. نظر دیگران چیزهایی به شما می‌آموزد که هیچ‌وقت از آن مطلع نبودید. برای این کار اگر در تیم هستید از همکاران خود نظرشان را جویا شوید و اگر انفرادی کد می‌نویسید از فروم‌ها و سایت‌هایی مثل CodeReview کمک بگیرید؛
  • برنامه را فقط روی گوشی ردۀ بالای خود تست نکنید. آن را بر روی یک دیوایس ضعیف و با پردازندۀ معمولی هم تست کنید؛
  • با ابزارهایی مثل جنی‌موشن، برنامه را با انواع دستگاه‌ها تست کنید تا از کم‌وکیف آن در شرایط مختلف مطلع شوید؛
  • سوال بپرسید ولی کپی پیست نکنید؛
  • هیچ چیزی به اندازۀ آنالیز کدهای پروژه‌های متن‌باز به شما یاد نمی‌دهد؛
  • سعی کنید با هر پروژه‌ چیز جدیدی یاد بگیرید. مثلاً یکبار روی ریجکس کار کنید. دفعۀ بعد روی ارتباط شبکه، دیتابیس و … ؛
  • تا می‌توانید از معماری اندروید بیشتر سر درآورید. هر چقدر با این معماری آشناتر باشید، راحت‌تر می‌توانید در آینده کدنویسی و مشکلات را حل کنید؛
  • بعد از یادگیری مقدمات، موضوعی مطالعه کنید. مثلاً کتابی برای آشنایی با فرگمنت‌ها یا کار با کتابخانۀ Flutter بخوانید؛
  • برنامه‌نویسی فقط یک بخش ماجراست. بخش اصلی، بازاریابی محصول است. محصولات خوب کم نیستند و برای دیده شدن برنامه باید از تکنیک‌های بازاریابی استفاده کرد. زمانی را صرف یادگیری تکنیک‌های اولیۀ بازاریابی و جذب مشتری کنید. گرچه این کار تخصصی جداست ولی در مواردی که همه کاره خودِ شما هستید ناچار به آموختن آن خواهید بود؛
  • کار کردن با تیم همیشه از تنهایی کار کردن بهتر است. در تنهایی به اشکالات و نقاط ضعف  خود پی نخواهید برد. در تنهایی وقتی به مشکلی بی می‌خورید فوراً عقب می‌کشید ولی در تیم حس رقابت هست، اجبار و زمان‌بندی هست و شما باید آنقدر تلاش کنید تا به مشکلات غلبه کنید؛
  • همواره پیگیر ترندها، تکنولوژی‌ها و پروژه‌های متن باز باشید؛
  • فایل styles.xml اگر خیلی بزرگ شد به چند فایل کوچکتر تقسیم کنید؛
  • در فایل colors.xml به جز مپ کردن رنگ‌ها به معادل RGBA چیز دیگری قرار ندهید. همینطور در فایل dimens.xml چیزی جز اندازه قرار ندهید؛
  • فقط فانکشن‌هایی در اکتیویتی و فرگمنت قرار دهید که مرتبط به آن‌ها باشد. سایر عملیات پردازشی را در کلاس‌ها و فایل‌های کمکی انجام دهید و فقط از نتایج آن در صفحه استفاده کنید؛
  • آیکون برنامه را در فولدر mipmap قرار دهید و سایر assetها را در پوشۀ drawable. همچنین برای بعضی از نسخه‌های اندروید امکان استفاده از vector asset هم وجود دارد که انتخاب مناسب‌تری است؛
  • فراموش نکنید فضای نام Tools را به Layout اضافه کنید. با کمک آن حین طراحی
    به امکانات مختلفی دسترسی دارید. به عنوان مثال می‌توانید عناصر صفحه را با داده‌های جعلی پر کنید تا قبل از اجرا و در زمان طراحی بتوانید نمایی از برنامه با داده‌های آزمایشی ببینید. بعد از اجرا، داده‌های واقعی نمایش داده می‌شوند؛
  • بعد از اتمام پروژه importها را بهینه‌سازی کنید. مواردی که لازم نیست را حذف کنید. برای این کار می‌توانید Reformat Code را از منوی Code بزنید و در پنجرۀ ظاهر شده گزینۀ Optimize imports را انتخاب کنید؛
  • Relese keyها را در فایل build.gradle قرار دهید. فراموش نکنید که apk ریلیز شده و Release key را جایی امن نگه‌داری کنید؛
  • در هنگام اضافه کردن کتابخانه‌ها از علامت + استفاده کنید تا همواره آخرین نسخه توسط Maven دانلود و در برنامه استفاده شود. مثلاً compile ‘com.android.support:design:23.+’
  • در هنگام نصب اندروید استودیو، مقدار زیادی رم به ماشین مجازی برای ایمیولیت کردن برنامه‌ها اختصاص داده می‌شود. شما می‌توانید از منوی Help گزینه Edit Custom VM options را انتخاب و این مقدار را باز هم افزایش دهید؛
  • در بسیاری از اوقات متغیرهای برنامه بر اساس محیط اجرا مقادیر مختلفی اختیار می‌کنند. مثلاً ممکن است در محیط staging یا production از APIهای متفاوتی استفاده شود. برای خودکارسازی این کار می‌توانید از buildConfigField در فایل گریدل (ماژول) استفاده کنید. در این رابطه سرچ کنید مثال‌های خوبی در اینترنت هست؛
  • گاهی فراموش می‌کنیم ریسورسها‌ی اضافی (asset, XML) را پاک کنیم که باعث افزایش اندازۀ APK می‌شود. برای جلوگیری از این کار از پراپرتی shrinkResources در فایل گریدلِ ماژول استفاده کنید که کارش حذف ریسورس‌های اضافی است؛
  • Butterknife جایگزین بسیار خوبِ findViewById است. این کتابخانه عناصر برنامه و رویدادها را از طریق annotation به هم بایند می‌کند که به مراتب خوانایی بهتری دارد؛
  • صفات کلی را در سطح برنامه مثلاً در فایل مانیفست تعریف کنید تا در سراسر برنامه اعمال شود؛
  • تفاوت و کاربردهای Serializable و Parceable را مطالعه کنید؛
  • برای تزریق وابستگی از کتابخانۀ Dagger2 استفاده کنید؛
  • از معماری‌های خوبی مثل MVP و MVVM در برنامه‌های خود استفاده کنید؛
  • در کنار جاوا و XML زبان SQL را هم خوب یاد بگیرید. تقریباً در همۀ برنامه‌ها دیتابیس هست؛
  • کارهایتان را اولویت‌بندی کنید. طبق سلیقه کار نکنید. تا زمانی که باگ‌های برنامه را از بین نبرده‌اید ویژگی‌های جدید اضافه نکنید. بازخورد کاربران در مارکت‌های اندروید بهترین راهنما برای اولویت‌بندی کارهاست؛
  • در بحث‌ها و دورهمی‌های برنامه‌نویسی شرکت کنید. شبکۀ دوستان خود را گسترش دهید؛
  • تازه‌کاران فرصت کارآموزی در شرکت‌های معتبر را از دست ندهند. در تیم چیزهایی یاد می‌گیرید که به تنهایی بعید است بیاموزید؛
  • در فرصت استراحت به ایده‌های جدید فکر کنید. روزی خواهد رسید که مشکل اصلی تخصص نیست بلکه ایده‌های جدید است؛
  • میلیاردها اپلیکیشن در گوگل‌پلی وجود دارد که همه روزه به این تعداد اضافه می‌شود. سعی کنید با برنامه‌ها و ایده‌های جدید و نوع طراحی و برنامه‌نویسی آن‌ها آشنا شوید. بعداً هنگام ساخت یک اپ جدید به کمکتان خواهد آمد؛
  • اپلیکیشن Drippler را نصب کنید. برنامه‌ها، ترفندها، قابلیت‌ها، آپدیت‌ها و لوازم جانبی موبایل معرفی می‌کند؛
  • سعی کنید تعدادی برنامه که به آن‌ها علاقه دارید را خودتان درست کنید؛
  • اگر فرصت داشتید وقتی را برای یادگیری  زبان‌های جدید حتی بی‌ربط به اندروید صرف کنید. این کار درک بهتری از برنامه‌نویسی به شما می‌دهد و به طور ناخودآگاه توانانی حل مسئله را در شما تقویت می‌کند؛
  • به پادکست‌های خوبِ اندروید گوش دهید. با جستجوی android podcast تعداد زیادی از آن‌ها خواهید یافت. به عنوان مثال پادکست تخصصی Fragmented دربارۀ برنامه‌نویسی اندروید صحبت می‌کند؛
  • پشتکار، رمز موفقیت در هر کاری است. برنامه‌نویسی اندروید هم مستثناء از این اصل نیست؛
  • هنگام خستگی کد ننویسید. کامپیوتر را خاموش کنید و فقط زمانی که سرحال هستید ادامه دهید. خستگی می‌تواند خرابی‌های بزرگ در پی داشته باشد!
  • آهسته و پیوسته جلو بروید. هر روز چند ساعت کدنویسی بهتر از هر هفته ۱۸ ساعت کدنویسی است؛
  • بهترین اوقات روز را به کدنویسی اختصاص دهید. ترجیحاً صبح که سرحال‌تر هستید؛
  • به سلامتی خود هم بها بدهید. روزانه زمانی را برای ورزش کردن اختصاص دهید و به بازه‌های زمانی استراحت چشم هم توجه کنید؛ هر از چند گاهی از پشت صندلی برخواسته و چند حرکت کششی انجام دهید. حتی برای تنبل‌ها ۱۰۰ حرکت کششی معرفی شده که نیازی به ترک کردن صندلی هم نیست!
  • کدنویسی به روش TDD را یاد بگیرید؛
  • دربارۀ ریلیز خودکار تحقیق کنید؛
  • زبان کاتلین را هر چه سریع‌تر یاد بگیرید؛
  • کلیدهای میانبر صفحه‌کلید روش خوبی برای افزایش سرعت کدنویسی هستند. بهترین روش به خاطر سپردن این کلیدها موقع کدنویسی است. اغلب آن‌ها روبروی گزینه‌های مختلف در منوها آمده‌اند؛
  • همیشه دو نسخه از اندروید استودیو اجرا کنید؛ یکی برای پروژۀ اصلی و دیگری برای تست کدها. مثلاً کدی از اینترنت پیدا کرده‌اید، پیش از آنکه در پروژه اعمال کنید با ساخت یک فرم خالی و اضافه کردن چند کنترل ساده، عملکرد آن را آزمایش کنید. اگر درست بود به پروژۀ اصلی خود اعمال کنید؛
  • داستان موفقیت اپلیکیشن‌ها و برنامه‌نویسان معروف را بخوانید تا انگیزه پیدا کنید؛
  • ریاضیات و دانش الگوریتمی خود را تقویت کنید؛
  • وبلاگ‌ها و برنامه‌نویسان مشهور را در شبکه‌های اجتماعی دنبال کنید؛
  • وارد فاز بهینه‌سازی بیش از حد نشوید. این، کارِ آدم‌های ایده‌آل‌گراست. افرادی که فقط تصور پیشرفت دارند. واقع‌گرا باشید و هر چیزی را در حد اعتدال انجام دهید؛
  • در مسابقات برنامه‌نویسی و سایت‌هایی مثل Hackerrank و کوئرا شرکت کنید؛
  • همیشه حق با مشتری است؛
  • رقبا را بررسی و آنالیز کنید؛
  • زود پا پس نکشید. هیچ برنامه‌ای یک شبه به چیزی که الان هست تبدیل نشده حتی خودِ سیستم‌عامل اندروید هم در نسخه‌های اول مسخره به نظر می‌رسید؛
  • روی نام‌گذاری، برندسازی و نمای بصری برنامه زمان و هزینۀ زیادی کنید. قطعاً بهترین برنامه بدون استراتژی درست با شکست مواجه می‌شود؛
  • کانال‌های یوتیوبی زیادی آموزش برنامه‌نویسی می‌دهند که می‌توانید برای ارتقاء مهارت از آن‌ها استفاده کنید؛
  • یک رزومۀ خوب درست کنید. سعی کنید فقط نمونه‌کارهایی که به نظرتان از همه قوی‌تر هستند را در رزومه درج کنید. کیفیت رزومه بیشتر از کمیت آن اهمیت دارد. کوتاه بنویسید و نهایتاً دو صفحه؛
  • Rest API را یاد بگیرید؛
  • هیچگاه از آموختن و تمرین دست نکشید؛
  • بزرگ فکر کنید و به ایدۀ خود ایمان داشته باشید.
بخوانید  تجربیاتی ارزشمند از یک سِنیور دولوپر اندروید

سید ایوب کوکبی

نویسنده و مترجم...

3 دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *




    اورمان

    یکشنبه ۰۹ تیر ۱۳۹۸

    عالی بود

    فرشاد

    پنج شنبه ۱۳ تیر ۱۳۹۸

    توی ایران شرکت ها بیشتر دنبال برنامه نویس همه فن حریف ( اصطلاحا full stack ) هستن.
    واسه اندروید هم باید طراحی ظاهری خوبی بلد باشی و هم کد زدن و بک اند و دیتابیس و…

      سید ایوب کوکبی

      پنج شنبه ۱۳ تیر ۱۳۹۸

      بله متأسفانه درسته و نتیجه‌اش هم در اغلب موارد میشه خروجیِ ضعیف کارها و به هدر رفتن زمان، سرمایه و انرژی!
      Full Stack Developer برنامه‌نویسیه که می‌خواد چند هندونه رو با هم برداره. از این آدم نمیشه کارآمدی زیادی انتظار داشت؛ به قول معروف: «هر کسی را بهر کاری ساختند».
      به‌خصوص در دنیای بزرگ اندروید که حتی در لایۀ برنامه‌نویسی هم نمیشه همه‌فن‌حریف بود چه رسد به گرافیک، واسط کاربری، دیتابیس و … . در چنین شرایطی صحبت از Full Stack Developer چیزی شبیه جوکه.
      البته برای استارتاپ‌هایی که سرمایۀ زیادی ندارند استفاده از این برنامه‌نویس‌ها همیشه هم بد نیست و اتفاقاً در شروع کار صرفۀ اقتصادی خوبی به همراه داره.