من بدون معماری هم میتونم تمیز کد بزنم!!

به نام خداAndroid Architectureسلام دوستان. من دو سالی هست که به صورت جدی دارم اندروید کار میکنم و در حال حاضر با زبان کاتلین برنامه هام رو توسعه میدم. در شروع کار که بودم ( یعنی قبل از این دوسال ) خیلی دنبال افکار و تجربه های افرادی بودم که تو این زمینه تخصص بیشتری نسبت به من دارن. به همین دلیل میرفتم سراغشون و یا مقاله هایی که نوشته بودند رو میخوندم. بیشترین تاکیدی که این افراد برای پیشرفت در کارم به من میکردند، یادگیری معماری در کدنویسی بود. خوب منم خیلی زود به حرفشون گوش دادم و رفتم سراغ یادگیری معماری اما به دلیل موجود نبودن منبعی کامل به زبان قابل فهم برای من، خیلی دچار پیچیدگی های کار شدم و کلا به فکر فرو رفتم که واقعا چرا باید معماری رو یاد بگیرم؟خوب یه مقدار که خودم فکر کردم و به نتیجه ای نرسیدم، رفتم سراغ گوگل و مقالات تا بلکه بتونم دلیل استفاده از معماری رو درک کنم. بزرگترین موضوعی که تمامی مقالات روی اون تمرکز کرده بودن و مانور میدادن، بحث کد نویسی تمیز یا همون Clean Code بود. یعنی میگفتن که تو باید از معماری استفاده کنی تا وقتی بعد از 6 ماه به کد و برنامه ای که نوشتی سر میزنی و نگاه میکنی، گیج نشی و خیلی سریع بفهمی که چه کاری انجام دادی!! خوب منی که بعد از یه مقدار تلاش برای یادگیری معماری MVVM خیلی به مشکل و سختی های کار برخورد کرده بودم و از معماری زده شده بودم، به نظرتون چه انتخابی کردم؟خوب درست حدس زدید، اومدم نشستم و شروع کردم به فکر کردن : " خوب برای کد نویسی تمیز و اینکه خودم متوجه بشم چیکار کردم که خیلی راحته دیگه، اول میام برای هر چیزی یه پکیج میسازم ( مثلا برای adapter هام یه پکیج و برای Activity های مربوط به هم یه پکیج و... ) و در مرحله بعد برای هر بخشی که کد نویسی یکم دشوار شده و ممکنه بعدا یادم بره میام کامنت فارسی میزارم که مثلا توی این قطعه کد اومدم اینکار رو کردم".خلاصه اینکه به این نتیجه رسیدم که بدون معماری هم میتونم تمیز کد بزنم و بعدا بفهمم هر کدی داره چه کاری انجام میده اما غافل از اینکه معماری رو درست متوجه نشدم و اهمیت کار با اون رو درک نکردم. اما واقعا اهمیت استفاده از معماری ها چیه؟ببینید دوستان، شما زمانی که یه برنامه نسبتا بزرگ و پر حجم مینویسید، هزار و یک خطا در انتظار شماست. مثلا یه قسمت از برنامه که دارید یه ریسایکلر ویو رو نمایش میدید، یهو برنامه کرش میکنه و بسته میشه و اررور Memory leak دریافت میکنید؛ حالا شما هزار هم که داخل کد خودت به فارسی کامنت گذاری کردی باشی ربطی به هندل کردن یا بهتره بگم مدیریت کردن یه همچین خطایی نداره و اینجاست که میگی کاش از معماری استفاده میکردم. چون معماری ها میان و تو رو مجبور به پیروی از قوانینی میکنن که تا حد بسیار زیادی جلوی این خطا هارو میگیره اما این هم تنها مزیت معماری نیست...خوب پس بریم سراغ مزیت مهم دیگه ای که استفاده از معماری برای ما به ارمغان میاره. بزارید اینطوری بگم که معماری یعنی کد زدن به سبک کد نویس ها و برنامه نویس های بزرگ ( هر چند در ابتدا ممکنه یکم براتون دشوار باشه اما همین که درکش کنید میفهمید که چقدر درک و فهمتون نسبت به برنامه نویسی وسیع تر میشه ) . یکی از مهمترین روش ها برای پیشرفت سریع و چشم گیر شما در حیطه برنامه نویسی، اینه که شما عضوی از جامعه برنامه نویس های جهانی بشید. یعنی چی؟ آیا باید داخل سایت خاصی ثبت نام کنم؟ یا باید پولی پرداخت کنم؟ خیر...نیازی نیست این کارها رو انجام بدید. کافیه معماری و کد نویسی تمیز رو یاد بگیرید. چه ربطی داره اصلا این دو مقوله به هم؟ربطش اینه که برنامه نویس های جهانی که اکثریت اون هارو خارجی ها تشکیل میدن، گروهی از افراد هستن که دارن از معماری ها پیروی میکنن و با استفاده از تکنیک های کد نویسی تمیز کد میزنن و برنامه مینویسن. پس اگر پس فردا یه فریم ورک جدید یا کتابخونه جدید وارد بازار شد، به جای اینکه منتظر بمونید که چند سال دیگه قراره یه آموزش کامل فارسی از اون کتابخونه بیاد بیرون، کافیه برین و سورس برنامه نمونه اون کتابخونه رو از بخش مربوط به اون سایت از گیت هاب دانلود کنید و به کد ها نگاهی بندازین تا همه چی بیاد دستتون. اما اگر درک شما از کد زنی پیشرفته پایین باشه و نه معماری بلد باشید و نه کد نویسی تمیز، چطور میخواید اون سورس رو متوجه بشید؟ جز اینه که از ادامه تجزیه و تحلیل اون سورس بی خیال شده و باز میشینید منتظر آموزش های فارسی؟ پس هر چه زودتر با معماری و درک کد نویسی پیشرفته تر و بهتر و تمیز تر آشنا بشید و یاد بگیرید. اما همچنان قابلیت های استفاده از معماری ادامه داره...فرض کنید که شما برنامه ای بزرگ نوشتید برای سایت خودتون یا مشتری یا حتی استارت آپ خودتون رو راه اندازی کردید و برای اون یه اپ ساختید؛ خوب شما داخل برنامه از معماری و روش های کد نویسی پیشرفته تر و تمیز تر استفاده نکردید. حالا برنامه شما برخی از آبجکت های ساخته شده و اشیاء به وجود اومده رو نگه میداره و به آشغال جمع کن جاوا اجازه پاک کردن اون آبجکت ها از حافظه Heap رو نمیده. چه اتفاقی رخ میده؟ اگر این اتفاق زیادی به وقوع بپیونده که برنامه کرش میکنه و آبروتون میره اما اگر کرش نکنه و در اون حد اوضاع خراب نباشه چی؟ خوب ما فرض میکنیم که شما تصمیم گرفتید برنامه تون رو بروزرسانی کنید و یه نسخه جدید برای کاربر بفرستید؛ در این موقعیت اگر کد نویسی اپ شما درست نباشه و مدیریت حافظه داخل اپ به درستی صورت نگرفته باشه و آبجکت هایی داخل رم باقی مونده باشن، متاسفانه برنامه شما نمیتونه آپدیت بشه و باید به تک تک کاربراتون بگید که مشکل از اپ شماست نه از گوشی اونا و اونا باید اول نسخه قبلی نرم افزار رو پاک کنن و سپس نشخه جدید رو نصب کنن. پس میبینید که با استفاده نکردن از قواعد و مقررات کد نویسی جهانی هم عرصه رو برای خودتون تنگ میکنید و هم کار رو برای مشتری ها و کاربراتون. پس هر چه زودتر شروع کنید بهتره...سخن اخر :معماری ها و کد نویسی تمیز خیلی قابلیت ها به شما میده که به نظر من مهمترین قابلیت، افزایش درک شما در کد نویسی هست. پس اگر با این روش ها قهر بوده اید و فکر میکردید بدرد نخور هستند، هرچه زود تر دسته گلی خریده و با آنها آشتی کنید...به امید روزای بهتر...