ملزومات برای توسعه دهندگان – انجمن DEV

مقدمه
در این پست امیدوارم برخی از ضروری ترین مواردی را که برای کمک به توسعه نرم افزار کشف کرده ام به نمایش بگذارم.
ویرایشگر کد
با ویرایشگر کد شروع کنید، در حالی که ممکن است این ابزار واضحی باشد. این مهم ترین است زیرا آنچه شما برای توسعه نرم افزار خود استفاده می کنید و می تواند تجربه شما را به شدت تحت تاثیر قرار دهد.
اکثر مقالاتی که به صورت آنلاین دیده می شوند، در مورد IDE های مختلف و اینکه چگونه باید برای هر زبان یا فریم ورک یک مورد خاص داشته باشید، سروصدا ایجاد می کنند. برخی از IDE هایی که در مورد بودن صحبت می کنند: ویژوال استودیو یا یکی از چندین پیشنهاد JetBrain.
پس از چندین سال توسعه نرمافزار، متوجه شدم که داشتن یک ویرایشگر کد مبتنی بر صفحه کلید خوب که بتواند از بسیاری از زبانها پشتیبانی کند چقدر مهم است. این IDE های بزرگتر که در مورد آنها صحبت می شود، بیشتر بر روی رابط های “نقطه و کلیک” تمرکز دارند. که می تواند توسعه را کند کند.
به نظر من Visual Studio Code یک ویرایشگر عالی برای شروع است، دارای LSP است بنابراین می تواند با بسیاری از زبان ها ادغام شود و مقدار قابل قبولی از سفارشی سازی را پشتیبانی می کند. از طریق این افزونهها، حتی میتوانید حرکات سبک vim را دریافت کنید که امکان اصلاح سریعتر کد را فراهم میکند. افزایش بهره وری با این حال هر چه بیشتر سفارشی کنید. تغییر به چیزی مانند NeoVim یا حتی Emacs منطقی است. این ویرایشگرها در حالی که برای راه اندازی زمان بر هستند، زیرا برای شروع بیشتر شبیه یک بوم خالی هستند، توسعه مبتنی بر صفحه کلید را به سطح دیگری می برند. من اخیراً به NeoVim مهاجرت کردهام و میتوانم آن را به عنوان یک جایگزین قدرتمندتر برای Visual Studio Code توصیه کنم.
من مهمترین چیزی را که باید در نظر داشته باشید در نظر می گیرم. ویرایشگر شما باید تا حد امکان انعطاف پذیر باشد، به این معنی که می تواند از بسیاری از زبان ها پشتیبانی کند و از سفارشی سازی گسترده پشتیبانی کند، مانند آنچه NeoVim با پشتیبانی از افزونه lua و توانایی استفاده از LSP به دست آورده است.
قالب بندی کد
در طول مدتی که به عنوان توسعهدهنده نرمافزار فعالیت میکنم، از فرمتکنندهها و قالبهای کد مختلف استفاده کردهام، با این حال هنوز میبینم که افراد زیادی از آنها استفاده نمیکنند. من معتقدم که فرمتکنندههای کد برای یک توسعهدهنده ضروری هستند. این به این دلیل است که کدهای با فرمت خوب خواندن آن را آسان تر می کند و می توان از قراردادها پیروی کرد. برای مثال در توسعه پایتون؛ باید از مشخصات PEP8 پیروی کنید، با فرمتکننده کد این کار آسان است، زیرا تنها کاری که باید انجام دهید این است که فرمتکننده خود را اجرا کنید و کد را برای مطابقت تغییر میدهد.
فرمت کردن کد شما بر اساس یک مشخصات خاص نیز می تواند استدلال ها را هنگام کار در یک تیم کاهش دهد. از آنجایی که یک قرارداد می تواند تصمیم گیری شود و سپس به طور خودکار از طریق یک پیکربندی در فهرست پروژه اعمال شود، به این معنی که هیچ سوالی وجود ندارد که کد چگونه باید قالب بندی شود.
تست سرورها
این بخش بعدی ممکن است برای همه پروژه ها اعمال نشود، اما می تواند بسیار مفید باشد. هنگام توسعه نرم افزاری که از خدمات خارجی مانند پایگاه داده استفاده می کند. این می تواند به توسعه کمک کند تا خدمات میزبانی محلی و همیشه در دسترس خود را داشته باشید. به عنوان مثال در محیط توسعه دهنده خود من چندین پایگاه داده دارم که همیشه آماده استفاده هستند.
این به من امکان می دهد همیشه گزینه ای برای اتصال و آزمایش پروژه خود داشته باشم. در حالی که این سرویسها را میتوان به صورت محلی اجرا کرد (حتی اکنون با Docker سادهتر است)، هنوز هم خوب است که سرویسها همیشه در دسترس باشند و روی یک سرور واقعی اجرا شوند.
علاوه بر میزبانی سرویسهای خود برای استفاده، داشتن قابلیت آزمایش برنامههای کاربردی خود بر روی این سرورها نیز میتواند بسیار مفید باشد، زیرا آنها بر روی سختافزار واقعی اجرا میشوند. برخی از مسائل تا زمانی که در دنیای واقعی اجرا نشوند، مهم نیست که چند واحد تست داشته باشید.
کانتینرها و داکر
کانتینرها به طور کلی یک تکه فناوری واقعا مفید هستند. در اینجا توضیحی سریع در مورد اینکه یک کانتینر دقیقا چیست، آورده شده است: میتوانید یک کانتینر را به عنوان یک ماشین مجازی سبک وزن در نظر بگیرید، با این حال هسته میزبان را به اشتراک میگذارد، بنابراین با وجود جداسازی دادهها، هیچ شبیهسازی سختافزار انجام نمیشود. در یک کانتینر میتوانید تمام وابستگیهای یک نرمافزار را با هم جدا از هر نرمافزار نصبشده دیگری بستهبندی کنید، این کار هرگونه امکان تضاد سرویسها با یکدیگر را از بین میبرد. این همچنین به این معنی است که اجرای یک تصویر کانتینر روی یک سیستم متفاوت باید دقیقاً همان عملکرد را داشته باشد، منهای هر گونه تفاوت عملکرد.
همانطور که می بینید کانتینرها اکنون امکان اجرای پایگاه داده ها و سایر سرویس ها را به صورت محلی به عنوان بخشی از محیط توسعه شما باز می کنند، به این معنی که توسعه آسان تر خواهد بود زیرا همه سرویس ها را می توان بدون نصب نرم افزاری که ممکن است با دیگران تضاد داشته باشد اجرا شود.
با کار در یک محیط تیمی، کانتینرها همچنین می توانند به همه افراد تیم اجازه دهند تا خدمات مشابهی را در حال اجرا داشته باشند. شما حتی می توانید به یک نسخه خاص قفل کنید. این می تواند یک محیط سازگار، بدون هیچ گونه دخالت خارجی از به روز رسانی های غیرمنتظره را فراهم کند. این کانتینرها همچنین می توانند در تولید استفاده شوند و خدمات پایدار و سازگاری را ارائه دهند که می توانند مستقل از توزیع اصلی لینوکس مستقر شوند.
اکنون به سراغ داکر برویم. این نرم افزاری است که می تواند جابجایی ظروف را آسان کند. میتواند با استفاده از Dockerfiles تصاویر بسازد، کانتینرها را اجرا کند، پایههای ذخیرهسازی را مدیریت کند و شبکههای بین کانتینری را پیکربندی کند. این در حال حاضر تنها پلتفرمی است که یک پلتفرم کاملاً آسان برای استفاده را ارائه می دهد.
این فناوری برای هر توسعه دهنده ای برای یادگیری و امتحان کردن ضروری است.
سرور Git شخصی
اول از همه، اگر از Git یا کنترل نسخه دیگری در پروژه خود استفاده نمی کنید، چگونه هنوز عاقل هستید؟ کنترل نسخه یک ابزار اصلی در توسعه است، زیرا به شما امکان می دهد تا تاریخچه تغییرات دقیق پروژه خود را در حین پیشبرد حفظ کنید. این به شما امکان می دهد به گذشته برگردید و دلیل ایجاد تغییرات خاص (از طریق نظرات در تاریخ) را کشف کنید.
اگر از Git استفاده می کنید، به احتمال زیاد کد خود را به یکی از سایت های میزبانی اصلی مانند GitHub، GitLab یا BitBucket فشار می دهید. با این حال من معتقدم که میزبانی خود نیز به توسعه نرم افزار کمک خواهد کرد. اکنون نه تنها به این شرکت های میزبانی وابسته نیستید، بلکه می توانید همیشه به داده های خود دسترسی داشته باشید.
این سناریو را در نظر بگیرید که در آن شما تنها به صورت محلی مخازن را با استفاده از پرچم “–depth” کلون می کنید (که تاریخچه کامل را شبیه سازی نمی کند)، اگر سایت انتخابی شما به طور ناگهانی داده ها را از دست داد، تاریخچه کامل پروژه خود را نخواهید داشت. این می تواند برای کشف اینکه چه تغییراتی در این مسیر ایجاد کرده اید و احتمال اینکه چه کسی آنها را ایجاد کرده است بسیار مهم باشد.
فقط به این دلیل که شما میزبان خود هستید، به این معنی نیست که هنوز نمی توانید از میزبانی که تحت کنترل شما نیست استفاده کنید. برای همگام نگه داشتن راه حل میزبانی شده خود، می توانید یک آینه مخزن در اکثر راه حل ها راه اندازی کنید. مانند GitLab CE یا Gitea. به این ترتیب تمام مخازن راه دور داده های یکسانی خواهند داشت.
یک ماشین لینوکس
داشتن یک ماشین مبتنی بر لینوکس به نظر من مهم است، این به شما امکان می دهد سیستمی داشته باشید که بسیار قابل تنظیم است و از ویژگی های موجود فقط در لینوکس استفاده می کند. به عنوان مثال، کانتینرها به راحتی تنظیم می شوند و بیشتر تصاویر برای کار در لینوکس طراحی شده اند. همچنین میتوانید از مجموعهای از ابزارهای خط فرمان بسیاری بهرهمند شوید که میتوانند به تجربه توسعه بهتر کمک کنند (مانند برنامه من “ابزار اجرا”) زیرا کارهایی که معمولاً انجام میشوند را میتوان خودکار کرد.
میزبانی نسخه ی نمایشی
ابزار مفید دیگری که در اختیار دارید؛ بیشتر برای توسعه دهندگان وب، توانایی اجرای سریع برنامه شما و نمایش عمومی آن مستقیماً از دستگاه توسعه شما است. اینجاست که خدماتی مانند تونل های Ngrok و Cloudflare بسیار مفید هستند. در حالی که برنامه شما در حال اجرا است، عامل خود را روی دستگاه خود اجرا می کنند، می توانند برنامه میزبانی محلی شما را تحت یک URL منحصر به فرد در معرض اینترنت عمومی قرار دهند.
این خدمات تونل زنی http برای تیم ها یا دموهای فنی عالی هستند. جایی که نیازی به سرور یا دامنه اختصاصی ندارید، فقط یک راه سریع برای اشتراک گذاری دسترسی به برنامه خود. آنها همچنین نیازی به ارسال پورت ندارند، زیرا دستگاه شما ابتدا اتصال به سرور را باز می کند. به این معنی که آنها باید تقریباً در هر جایی که اینترنت در دسترس است کار کنند.
نتیجه
ابزارهای زیادی وجود دارد که می توان به آنها اشاره کرد، در واقع آنقدر زیاد که مقاله هرگز پایان نخواهد یافت. امیدوارم از خواندن این مقاله لذت برده باشید، شاید اکنون برای راه اندازی Docker یا نصب NeoVim عجله دارید. در این صورت امیدوارم از یادگیری فناوری جدید لذت ببرید!
این پست توسط هیچ یک از طرف های ذکر شده تایید یا حمایت نشده است. دیدگاه های من متعلق به خودم است.