چگونه برنامه نویس وب شویم؟ – بخش سوم: پلتفرمها و ابزارها
این مطلب بخشی از یک سری نوشتهها برای افراد مبتدی است که علاقهمند هستند برنامه نویس وب شوند. اگر بخشهای قبلی را مطالعه نکردهاید، پیشنهاد میکنیم بخش اول و بخش دوم را ابتدا بخوانید. در ادامه مباحثی که در خصوص توسعه وب داشتیم، از زبانهای خاص برنامهنویسی فاصله میگیریم و به جای آن روی محیطهایی که اپلیکیشنهای وب اجرا شده و توسعه مییابند متمرکز میشویم. همچنین، مطالعه مقاله «برنامه نویسی وب چیست» نیز میتواند به درک بهتر چیستی توسعه وب و مباحث پیرامون آن کمک کند. در این بخش موضوعات زیر را بررسی خواهیم کرد:
- ابزارهای ابتدایی توسعه که هر توسعهدهندهای باید با آنها آشنا باشد.
- از آنجا که اپلیکیشنهای ما روی وب هستند باید با مباحث ابتدایی شبکهبندی نیز آشنا باشیم.
- محیطهایی که اپلیکیشنها قرار است در آن اجرا شوند نیز حائز اهمیت هستند.
- مقاله پیشنهادی: چگونه برنامه نویس شویم ؟ — راهنمای شروع و موفقیت در برنامه نویسی
ابزارهای توسعه
از همان ابتدا باید مطمئن شوید که با ابزارهای توسعه راحت هستید تا بتوانید در نوشتن کد و دیباگ کردن اپلیکیشنهای خود سریع پیشرفت کنید. هر پلتفرم که در آن به توسعه مشغول باشید، ابزارهای خاص زیادی برای خود دارد؛ اما برخی از این ابزارها از سوی تقریباً اکثر برنامهنویسها استفاده میشوند و ما میخواهیم در مورد این ابزارها صحبت کنیم.
ویرایشگرهای کد
ویرایشگر کد در واقع خانه هر توسعهدهنده نرمافزاری محسوب میشود. این همان جایی است که همه چیز اتفاق میافتد. ویرایشگرهای کد ابتدایی مجموعه ویژگیهای کاملاً ضروری مانند هایلایت کردن کد، بازسازی کد و همچنین قابلیت دیباگ کردن را ارائه میدهند. همچنین ویرایشگرهای پیشرفتهتری نیز وجود دارند که به نام «محیط یکپارچه توسعه» (IDE) شناخته میشوند و طیف گستردهای از ابزارها و قابلیتهای یکپارچه قدرتمندی را ارائه میدهند. در ادامه برخی از محبوبترین ویرایشگرهای کد را معرفی میکنیم:
ویژوال استودیو کد (Visual Studio Code)
این IDE یک ویرایشگر کد رایگان و چند پلتفرمی تولید شده از سوی مایکروسافت است. این ویرایشگر به صورت پیشفرض قابلیت پشتیانی از زبانهای جاوا اسکریپت، تایپاسکریپت، CSS و HTML را دارد. همچنین با اضافه کردن افزونههایی میتوان قابلیت پشتیبانی از زبانهای برنامهنویسی بسیار دیگری را نیز به آن افزودن. VS Code امکانات هایلایت کردن کد، تکمیل خودکار کد، code snippets برای تولید کد، بازسازی (refactoring) و ترمینال درونی را ارائه کرده است. همچنین یک دیباگر درونی دارد که به عیبیابی باگها در اپلیکیشن کمک میکند. با این که مجموعه ویژگیهای این ویرایشگر کد به اندازه IDE های پولی نیست؛ اما برای شروع قطعاً امکانات کافی را دارد.
JetBrains IDEs
IDE های جتبرینز در واقع یک خانواده از نرمافزارها هستند که برای پلتفرمهای مختلف ارائه شدهاند. WebStorm برای توسعه کد فرانتاند، Intellij IDEA برای توسعه جاوا، PhpStorm برای توسعه کدهای PHP و همین طور موارد دیگر. هر یک از این موارد بر روی پشتیبانی از زبانهای خاصی متمرکز شدهاند و ابزارها و فریمورکهای آن را ارائه میکنند.
این مسئله به همراه ارائه ویژگیهای کمکی مانند ادغام سیستمهای کنترل نسخه، سوابق تغییرات محلی یا وظایف اجرایی باعث شده است که این مجموعه نرمافزارها به محیط کاری کاملاً کارآمدی تبدیل شوند. این محصولات پولی هستند؛ اما میتوانید از نسخه جامعه (Community Edition) IntelliJ به رایگان استفاده کنید.
Visual Studio IDE
ویژوال استودیو یک IDE پولی است که از سوی مایکروسافت عرضه شده است. این نرمافزار سه نسخه دارد» نسخه جامعه، حرفهای و سازمانی. این نرمافزار از طیف وسیعی از زبانهای برنامهنویسی و ابزارهای مختلف برای توسعه و دیباگ کردن اپلیکیشنها پشتیبانی میکند. علاوه بر آن ادغامهای مناسبی با محصولات و سرویسهای دیگر مایکروسافت مانند Azure یا Azure DevOps دارد. سیشارپ و تایپاسکریپت جزو زبانهای درجه اول در ویژوال استودیو هستند.
سیستمهای کنترل نسخه
سیستمهای کنترل نسخه (VCS) نقشی کلیدی در فرایند توسعه روزمره دارند. VCS امکان ذخیرهسازی سابقه کامل تغییرات کد را در یک ریپازیتوری ریموت فراهم میکند. بدین ترتیب میتوان ریپازیتوری را جستجو و سابقه تغییرات را مرور کرد، نسخههای مختلف را با هم مقایسه نمود و یا نرمافزار را به نسخههای قبلی بازگشت داد. بدین ترتیب چند توسعهدهنده میتوانند تغییراتی که ایجاد میکنند را به ریپازیتوری یکسانی پوش کنند و با همکاری یکدیگر، کدهای محلیشان را همگامسازی کنند. امروزه VCS به عنوان منبع نهایی اعتماد به کد مورد استفاده قرار میگیرد و به عنوان ستون فقرات فرایندهای توسعه مدرن نگریسته میشود.
سیستمهای VCS را میتوان از طریق رابطهای خط فرمان مورد استفاده قرار داد؛ اما کلاینتهای گرافیکی مختلفی نیز برای ویرایشگرهای کد متفاوت افزونههایی عرضه کردهاند. دو سیستم کنترل نسخه محبوب وجود دارند:
گیت (Git)
گیت با فاصله زیادی محبوبترین VCS محسوب میشود. گیت یک سیستم توزیع یافته است، یعنی وقتی یک کاربر ریپازیتوری را کپی میکند، سابقه کامل پروژه را دریافت میکند و میتواند به صورت آفلاین روی آن کار کند. در برخی موارد کاربران نیاز دارند که تغییراتشان را روی ریپازیتوری ریموت مرکزی منتشر کنند و تغییرات صورت گرفته از سوی دیگران را دانلود نمایند. سرویسهای مختلفی اقدم به میزبانی گیت کردهاند. محبوبترین آنها شامل گیتهاب و بیتباکت هستند.
سابورژن (Subversion)
سابورژن یا SVN یک سیستم دیگر برای کنترل نسخه است. SVN برخلاف Git امکان بررسی تنها یک شاخه (branch) را میدهد. برای تغییر به شاخه دیگر باید آن را از ریپازیتوری ریموت دانلود کرد. با این که SVN همچنان در موارد مختلف استفاده میشود؛ اما Git بسیار محبوبتر است و ابزارها و سرویسهای بسیار بیشتری پیرامون آن شکل گرفته است.
ترمینال یا اعلان فرمان (Command Prompt)
شما به عنوان یک توسعهدهنده باید حتماً در استفاده از ترمینال در OS X یا لینوکس و اعلان فرمان در ویندوز مهارت داشته باشید. حتی اگر بتوانید اغلب کارهای خود را در رابط گرافیکی (GUI) انجام دهید، همچنان ابزارهای مفید بسیار زیادی وجود دارند که تنها در رابط خط فرمان ارائه شدهاند. همچنین ممکن است در پارهای موارد مجبور شوید با رایانههای ریموتی کار کنید که کلاً هیچ GUI-یی ندارند. بنابراین باید اطمینان حاصل کنید که میتوانید کارهای مقدماتی مانند پیمایش سیستم فایل را انجام دهید، فایلها را ایجاد یا حذف کنید، محتوای فایلها را ببینید و ابزارهای CLI را اجرا کنید.
اسکریپت نویسی برای شِل (Shell)
زمانی که در استفاده از دستورهای شل مهارت یافتید، میتوانید با خودکار سازی وظایفی مانند توزیع نرمافزار، تدارک زیرساخت یا اجرای وظایف توسعهای از طریق شل اسکریپتها، کارها را به روش بسیار آسانتری انجام دهید. بسته به این که از چه سیستم عاملی استفاده میکنید، باید روش نوشتن Bash در لینوکس و یا فایلهای Batch یا PowerShell در ویندوز را یاد بگیرید. در اغلب موارد نرمافزارهای دیگری که با مجموعهای از اسکریپتها برای استفاده از این شلها عرضه شدهاند و امکان خواندن و درک دستورهای تشکیلدهنده را میدهند کاملاً مفید خواهند بود.
لینوکس
لینوکس به خانوادهای از سیستمهای عامل متن-باز گفته میشود که بر اساس کرنل لینوکس ساخته شدهاند. توزیعهای مختلفی از لینوکس مانند اوبونتو (Ubuntu)، دبیان (Debian)، سنتاواس (CentOS)، مینت (Mint)، اوپنسوزه (openSUSE) و غیره وجود دارند.
توزیعهای لینوکس روی دستگاههای مختلفی اجرا میشوند که از دستگاههای توکار الکترونیکی تا گوشیهای هوشمند و سرورها را شامل میشود. لینوکس از چند لحاظ از ویندوز متفاوت است و از این رو اگر روی سیستم عامل ویندوز مهارت دارید، لازم است برخی مسائل بنیادی لینوکس مانند ساختار سیستم فایل، شیوه کنترل گردش کار، نحوه نصب نرمافزار و مواردی از این دست را بیاموزید.
آشنا شدن با لینوکس برای یک توسعهدهنده نرمافزار امری حائز اهمیت تلقی میشود، زیرا لینوکس سیستم عامل کاملاً محبوبی از نظر اجرا روی وبسرورها محسوب میشود. کتابها و منابع یادگیری بسیار زیادی برای لینوکس عرضه شدهاند؛ اما برای یادگیری عمیق لینوکس باید شروع به استفاده از آن بکنید. لینوکس را میتوان به عنوان سیستم عامل اصلی یا جنبی برای کاربردهای روزمره روی رایانه نصب کرده و مورد استفاده قرار داد. زمانی که شروع به استفاده عملی از لینوکس بکنید، بقیه جزئیات را در طی مسیر خواهید آموخت.
شبکهبندی
وقتی از برنامهنویسی وب صحبت میکنیم، باید بدانیم که شبکهها نقشی بسیار مهم در این زمینه ایفا میکنند. کاربران اپلیکیشنها با استفاده از اینترنت از طریق یک شبکه کابلی یا بیسیم به اپلیکیشن دسترسی مییابند. اپلیکیشنها خودشان با سرویسهای دیگری از طریق شبکه در ارتباط هستند. برای درک طرز کار همه اینها میبایست تا حدودی با فناوریهای مقدماتی شبکهبندی آشنا باشید.
پروتکلها
پروتکل به مجموعهای از قواعد در مورد چگونگی ارتباط اپلیکیشنها با همدیگر گفته میشود. پروتکلها شیوه آغاز اتصال، ترتیب و قالب پیامهای ارسالی و مواردی از این دست را تعیین میکنند. چند پروتکل مهم وجود دارد که اغلب وب اپلیکیشنها از آنها استفاده میکنند:
پروتکل انتقال ابرمتن (HTTP)
این پروتکل تشکیلدهنده وب جهانی است و شیوه درخواست مرورگرها یا کلاینتهای دیگر برای دسترسی به منابع وبسرورها را تعیین میکند. زمانی که URL یک وبسایت را در یک مرورگر وارد میکنید، در واقع یک یا چند درخواست HTTP به سرور ارسال میکنید تا فایلهای HTML، CSS و دیگر منابع را بارگذاری کند. پروتکل انتقال ابرمتن (HTTP) امکان رمزگذاری اطلاعات انتقالی جهت برقراری یک اتصال امن را فراهم ساخته است.
HTTP/2
نسخه دوم HTTP یک بهروزرسانی عمده در آن محسوب میشود که با هدف بهبود عملکرد اپلیکیشنهای وب ارائه شده است. بدین ترتیب امکان multiplexing فراهم میشود، یعنی میتوان محتوای متفاوتی را روی یک درخواست باز منفرد به طور همزمان انتقال داد. این پروتکل الزام به رمزنگاری دارد و با فشردهسازی فیلدهای هدر، سربار پروتکل را کاهش داده است.
پروتکل کنترل انتقال (Transmission Control Protocol)
پروتکل TCP یک پروتکل لایه انتقال است که امکان ارسال بستهها بین اپلیکیشنهای مختلف را به روشی پایدار، مرتب و عاری از خطا فراهم میسازد. HTTP و HTTPS در واقع روی TCP کار میکنند.
پروتکل اینترنت (Internet Protocol)
پروتکل IP یک پروتکل لایه اینترنت است که شیوه مسیریابی بستهها از یک میزبان به میزبان دیگر را توصیف میکند. TCP از IP برای مسیریابی استفاده میکند. دو نسخه عمده از این پروتکل در حال حاضر وجود دارند که شامل نسخه 4 IPv4 و نسخه 6 IPv6 میشوند.
سیستم نام دامنه (DNS)
سیستم نام دامنه (Domain Name System) مسئولیت ترجمه اسامی قابل خواندن از سوی انسان برای منابع اینترنتی را به آدرسهای IP متناظرشان بر عهده دارد. resolve کردن یک دامنه به یک آدرس فرایندی کاملاً پیچیده است و شما باید دستکم دانشی مقدماتی از طرز کار آن داشته باشید تا بتوانید اپلیکیشنهای خود را به طرز صحیحی پیکربندی کنید.
وبسرورها
وبسرور، نوع خاصی از نرمافزار است که از طریق پروتکلهای مختلف مسئول گوش دادن به اتصالهای ورودی و پاسخ دادن به درخواستها بر اساس محتوای مورد تقاضا است. وبسرور میتواند فایلهای استاتیک، مانند HTML، فایلهای جاوا اسکریپت یا تصاویر را عرضه کند و یا این که اسکریپتهای دینامیکی که به زبانهای مختلف نوشتهاند ارائه دهد. وبسرور همچنین میتواند به عنوان یک پراکسی برای پردازشهایی عمل کند که به عنوان اپلیکیشنهای مجزایی هستند.
وبسرورها میتوانند با فعال کردن فشردهسازی، کش کردن و توزیع بار، نقش مهمی در بهبود عملکرد اپلیکیشنها داشته باشند. در ادامه برخی از وبسرورهای رایج معرفی شدهاند:
آپاچی وبسرور (Apache HTTP Server)
وبسرور آپاچی یک نرمافزار متن-باز است که از سوی بنیاد نرمافزار آپاچی توسعه یافته است. این نرمافزار یک وبسرور قدرتمند محسوب میشود که میتواند برای عرضه محتوای استاتیک پیکربندی شود؛ اما برای اجرای اسکریپتهای نوشته شده به زبانهای PHP، پایتون و غیره نیز استفاده میشود.
Microsoft IIS
IIS یک وبسرور چند منظوره است که از سوی مایکروسافت به عنوان یکی از قابلیتهای سیستم عامل ویندوز سرور ارائه شده است. IIS یک انتخاب رایج برای شرکتهایی است که از مجموعه فناوریهای مایکروسافت استفاده میکنند.
NGINX
انجینایکس وبسروری است که معمولاً به عنوان سرور با عملکرد بالا برای عرضه محتوای استاتیک یا به عنوان پراکسی برای اپلیکیشنهای دینامیک استفاده میشود. NGINX برخلاف آپاچی خودش نمیتواند محتوای دینامیک را عرضه کند؛ اما در پارهای موارد میتواند عملکرد بهتری ارائه دهد. NGINX یک وبسرور رایگان و متن-باز است که نسخه پیشرفته آن به نام NGINX Plus پولی است.
عیبیابی شبکه
برخی اوقات ممکن است با مواردی مواجه شوید که اپلیکیشن یا وبسرور شما به دلایلی از کار بیفتد. با این که دیباگ کردن چنین واردی ممکن است پیچیده باشد و دلایل مختلفی برای این از کار افتادن ممکن است وجود داشته باشد؛ اما برخی ابزارها وجود دارند که با آنها میتوان در چنین موقعیتهایی عیبیابی کرد و به ریشه مشکل دست یافت.
Ping
پینگ یک ابزار CLI چند پلتفرمی است که میتوان برای تأیید امکان دسترسی به یک IP خاص مورد استفاده قرار داد. این ابزار همچنین نرخ گم شدن بستهها و زمان رسیدن بستهها را اندازهگیری میکند که میتواند ایدههایی در مورد سلامت اتصال شبکه به دست بدهد.
Ncat
این نرمافزار یک ابزار CLI قدرتمند برای لینوکس است که یک ابزار همهکاره در زمینه شبکهبندی به حساب میآید. Ncat امکان ارسال پیام با استفاده از پروتکلهای مختلف، اسکن پورتهای باز، ایجاد تونل و موارد بسیار زیاد دیگر را ارائه کرده است.
مجازیسازی (Virtualisation)
مجازیسازی مفهومی بسیار مهم در علوم رایانه به حساب میآید، زیرا شیوه مدیریت منابع را به مقدار زیادی دگرگون ساخته است. با استفاده از مجازیسازی، میتوان سرورها، ایستگاههای کاری، فایلها، شبکهها یا دیسکها را روی یک دستگاه سختافزاری از هم جدا ساخت. از دید کاربران همه این منابع به صورت منابع فیزیکی واقعی مستقلی به نظر میآیند؛ اما در واقع با استفاده از نرمافزار و با انتزاع از لایه سختافزاری زیرین ارائه شدهاند.
ماشینهای مجازی
یکی از پرکاربردترین استفادهها از مجازیسازی، اجرای نرمافزارهای مختلف و یا حتی سیستمهای عامل مختلف روی یک دستگاه منفرد فیزیکی است. این نرمافزارها ماشین مجازی نام دارند و محیطهای کاملاً مستقلی ارائه میدهند که هر یک برای خود، حافظه، فضای دیسک و نرمافزارهای جداگانه دارند. ماشینهای مجازی میتوانند به منظور توسعه برای اجرای سیستمهای عامل مختلف روی ایستگاههای کاری استفاده شوند؛ اما کاربرد مهمتر آنها اجرای اپلیکیشنهای چندگانه روی یک سرور سختافزاری منفرد بدون تداخل با همدیگر است.
نرمافزار ایجاد و اجرای ماشینهای مجازی به نام hypervisor شناخته میشوند:
VirtualBox
ویرچوالباکس یک hypervisor متن-باز چند پلتفرمی است که در حال حاضر از سوی Oracle توسعه مییابد. این نرمافزار از اجرای چند ماشین مجازی و همچنین اشتراک منابعی مانند پوشهها یا کلیپ بورد با ماشینهای میزبان پشتیبانی میکند.
Parallels Desktop for Mac
این نرمافزار امکان اجرای اپلیکیشنهای ویندوز را روی سیستمهای مک فراهم ساخته است. در صورتی که بخواهید یک محیط توسعه ویندوز را روی رایانهای مک راهاندازی کنید تا به تست چیزی روی ویندوز بپردازد، پارالل گزینهای ایدهآل محسوب میشود.
کانتینر (Container)
کانتینر یک سازوکار مجازیسازی متفاوت برای اجرای نرمافزار است که برخلاف ماشینهای مجازی، کل یک سیستم عامل را اجرا نمیکند؛ بلکه محیط زمان اجرای کانتینر را به اشتراک میگذارد. این امر موجب میشود که کانتینرها بسیار سبکتر باشند و سریعتر آغاز شوند، یعنی میتوان کانتینرهای بیشتری را روی یک ماشین منفرد بدون نیاز به اتلاف منابع اجرا کرد. بهترین رویه برای کانتینرها این است که هر اپلیکیشن متفاوت مانند سرویس بکاند، وبسرور یا پایگاه داده را در یک کانتینر مستقل اجرا کرد تا با این استقلال از اپلیکیشنهای دیگر بتوان کنترل بیشتری روی آن داشت و آن را از خطرات دیگر حفظ کرد.
Docker
داکر محبوبترین زمان اجرای کانتینر چند پلتفرمی است که از سوی شرکت Docker توسعه یافته است. با استفاده از داکر میتوان تصاویری از کانتینر تهیه کرد که برای اجرا به یک فایل داکر نیاز دارند. این تصویرها را میتوان در یک رجیستری منتشر کرد تا افراد دیگری نیز از آن استفاده کنند یا این که آنها را روی یک وبسرور توزیع نمود. با استفاده از داکر میتوان یک محیط تمیز و از پیش تعریف شده برای توسعه اپلیکیشن ایجاد کرد و سپس از همان تصویر برای اجرا در محیط production استفاده نمود. طیف وسیعی از ابزارها برای مدیریت تصویرها و اجرای کانتینرها ارائه شدهاند. همچنین سرویسهایی وجود دارند که امکان میزبانی اپلیکیشنهای کانتینر شده را فراهم میسازند.
Kubernetes
کوبرنتیز یک پلتفرم متن-باز است که برای توزیع کانتینرها روی یک کلاستر از رایانهها ارائه شده است. این پلتفرم امکان تعریف سرویسهایی مبتنی بر تصاویر کانتینر و پیکربندی پارامترها و همچنین ایجاد ذخیرهسازیهای مجازی یا منابع شبکه را فراهم ساخته است.
کوبرنتیز همچنین قابلیتهای عملیاتی مانند مقیاسبندی، توزیع بار و گزارشگیری را ارائه میکند. کوبرنتیز را میتوان روی رایانههای شخصی میزبانی کرد یا از یکی از سرویسهای مبتنی بر cloud استفاده نمود. کوبرنتیز پلتفرمی کاملاً قدرتمند و انعطافپذیر است که به سرعت در حال رشد است.
در این بخش پایانی از راهنمای سهگانه «چگونه برنامهنویسی وب شویم» به معرفی ابزارها و پلتفرمهایی پرداختیم که میتوانند روی پلتفرمهای مختلف برای توسعهدهندگان مفید باشند. با این حال وقتی شروع به کار با یک پلتفرم خاص بکنید، ابزارهای جدیدی بسیار زیاد دیگری را کشف میکنید که در آن چارچوب خاص مفید هستند.
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای طراحی و برنامه نویسی وب
- مجموعه آموزشهای برنامهنویسی
- آموزش کدنویسی سریع HTML و CSS با Emmet
- چگونه برنامه نویس شویم ؟ — راهنمای شروع و موفقیت در برنامه نویسی
- مناسبترین زبان برنامهنویسی وب برای اهداف مختلف چیست؟
- آموزش طراحی وب با HTML – مقدماتی
- معرفی کتاب آموزش طراحی سایت با پایتون — بهترین منابع یادگیری
==