ضرورت برنامه نویسی برای مهندسان شبکه
در گذشته یک مهندس شبکه نیازی نداشت درباره مهارت های برنامه نویسی اطلاع زیادی کسب کند، تمام تخصص و دانشی که مهندسان شبکه به آن نیاز داشتند، چگونگی تعویض روترها، هماهنگ کردن روترها و سوییچ ها با یکدیگر از طریق دستورات پنجره خط فرمان، آشنایی با نحوه پیکربندی دستگاه های شبکه و نظارت بر ترافیک شبکه بود. اکنون شرایط تغییر کرده است. مهندس شبکه باید در یک بازار به شدت رقابتی با مبحث کدنویسی آشنایی کامل داشته باشد.
اگر یک متخصص شبکه درباره مهارت های برنامه نویسی اطلاعی نداشته باشد به سرعت از فهرست نامزدهای احراز یک شغل کنار گذاشته می شود، حتی اگر در رشته خود سطح بالایی از مهارت ها را داشته باشد. در سال های گذشته، نقش ها و وظایف مهندسان شبکه در مدیریت زیرساخت های ابری گسترش یافته و بیشتر شده است. مجازی سازی عملکردهای شبکه (NFV) و شبکه های نرم افزار محور (SDN)، ایمن سازی زیرساخت های ارتباطی، تسهیل دسترسی کاربران یک سازمان به شبکه های نسل چهارم و پنجم ارتباطی و مواردی این چنینی تنها بخشی از این تغییر و تحولات هستند.
این سیر تحولات نشان می دهند مرزهای میان یک مهندس شبکه و توسعه دهنده نرم افزار حذف شده و ضرورت آشنایی با مهارت های برنامه نویسی برای مهندسان شبکه دوچندان شده است. درست است که برنامه نویسی یک مهارت مهم برای مهندسان شبکه در نظر گرفته نمی شود، اما آشنایی با نحوه کدنویسی مزایای روشنی برای مهندسان شبکه به همراه دارد که از آن جمله به موارد زیر می توان اشاره کرد:
- صرفه جویی در وقت و زمان با خودکارسازی فرآیندها
- بهبود بهره وری بر مبنای مدل زیرساخت به عنوان کد
- انعطاف پذیری در انجام کارها
صرفه جویی در وقت و زمان با خودکارسازی فرآیندها
تا قبل از پیدایش و تکامل معماری SDN دستگاه های شبکه بر مبنای یک معماری مستقل طراحی می شدند. هر دستگاه باید به شکل دستی پیکربندی می شد و دسترسی به یک دستگاه در یک لحظه از طریق تلنت یا SSH و تایپ فرامین از طریق رابط خط فرمان (CLI) انجام می شد. هر تولیدکننده ای بر مبنای استراتژی خاص خود تجهیزات را تولید می کرد و مهندسان شبکه مجبور بودند برای پیکربندی صحیح دستگاه ها، دانش شبکه ای خود در مورد محصولات یک تولیدکننده را دائما به روز نگه دارند.
همچنین، بدون داشتن تجربه عملی پیکربندی صحیح دستگاه های تحت شبکه کار چندان ساده ای نبود. در آن زمان مهندسان شبکه مجبور بودند ساعت های متوالی به صفحه نمایش مانیتور خیره شوند و روترها را یک به یک پیکربندی کنند و مسیرهای آدرس دهی ایستا را برای روترها مشخص کنند. حال تصور کنید یک مهندس شبکه مجبور بود دست کم برای 100 روتر یک چنین کاری را تکرار می کرد و امکان انجام این کار به شکل یکپارچه وجود نداشت.
زبان های برنامه نویسی می توانند با خودکارسازی یکسری فرآیندهای تکراری به میزان قابل توجهی در زمان صرفه جویی کنند. در حال حاضر، فروشندگان سخت افزارهای شبکه قابلیت های بیشتری را از طریق رابط قابل برنامه ریزی کاربردی (API) به محصولات خود اضافه کرده اند. متخصصان می توانند از این رابط های برنامه ریزی کاربردی برای ساخت و استقرار برنامه ها روی چند دستگاه استفاده کرده، در کوتاهترین زمان اطلاعات مربوط به پیکربندی دستگاه های مختلف را استخراج کرده، گزارش های آماری و وضعیت دستگاه ها را جمع آوری کرده و در قالب یک نمایش گرافیکی اطلاعات را مشاهده کنند. یک برنامه می تواند به مدیریت خطاها پرداخته و در صورت لزوم، تنظیمات را به حالت اولیه بازگرداند تا تاثیر منفی خطاهای بوجود آمده به حداقل برسد. به عبارت دقیق تر، برنامه نویسی دستگاه های شبکه انعطاف پذیری و سفارشی سازی بیشتری را برای مهندسان شبکه به ارمغان آورده است.
همچنین، کتابخانه های قدرتمندی شبیه به netmiko یا NAPALM که برای پایتون آماده شده اند فرآیند خودکارسازی وظایف برای محصولات تولیدکنندگان مختلف را تسهیل کرده اند. رویکرد فوق به مهندسان شبکه مسلط به مهارت های برنامه نویسی اجازه می دهد با سرعت بیشتری به مدیریت زیرساخت های شبکه بپردازند. تکرار منظم یکسری وظایف بطور روزانه فرسودگی نیروی کار را به همراه دارد. این مشکل در تمامی مشاغل وجود دارد و باعث می شود متخصصان شاغل در صنایع مختلف پس از گذشت مدت زمانی از کار خود خسته شوند. در دنیای شبکه یکسری وظایف حالت تکراری دارند و سرپرستان شبکه مجبور هستند برای حصول اطمینان از عملکرد بدون مشکل شبکه، بررسی های روزانه را انجام دهند. کلید حل این مشکل خودکارسازی وظایف است. راهکار فوق ضمن صرفه جویی در وقت و اجتناب از انجام کارهای خسته کننده تکراری و کاهش هزینه ها یک فرآیند مدیریت ساخت یافته را ارائه می کند. بنابراین مهندسان شبکه این فرصت را پیدا می کنند تا وقت خود را صرف انجام کارها یا پروژه های مهمتری کنند.
بهبود بهره وری بر مبنای زیرساخت به عنوان کد
حفظ و نگهداری تنظیمات شبکه کار ساده ای نیست. زمانی در شرکتی مشغول به کار شدم که متصدی مربوطه شغل خود را ترک کرده بود و من عهده دار انجام وظایف او شدم. من به برخی اسناد، نمودارها و فایل های پیکربندی تجهیزات شبکه دسترسی نداشتم، زیرا متصدی قبلی تمام اطلاعات را در ذهن خود ذخیره کرده بود و پس از ترک شرکت، اطلاعات را نیز با خود برد! به همین دلیل مجبور شدم تک به تک به سراغ روترها و سوییچ ها بروم، اطلاعات مربوط به پیکربندی تجهیزات را جمع آوری کنم و سعی کنم دلیل بکارگیری برخی تنظیمات را درک کرده، به مستندسازی اطلاعات پرداخته و یک نمودار دقیق در مورد شبکه شرکت ترسیم کنم.
در آن زمان از اعمال تغییر در پیکربندی ها هراس داشتم و اطمینان نداشتم در صورت اعمال تغییر در تنظیمات ممکن است چه اتفاقاتی بوجود آید. هر بار که تصمیم می گرفتم تنظیمات را تغییر دهم، ابتدا پیکربندی های انجام شده را بررسی می کردم، مطمئن می شدم پس از اعمال تغییرات همه دستگاه ها و سرویس ها بدون مشکل کار خواهند کرد، اسناد و نمودارهای شبکه را به شکل دائم به روز می کردم و اطلاعات مربوط به پیکربندی را ذخیره می کردم. به عبارت دقیق تر برای هر تغییر - هرچند کوچک- یک بروزرسانی در تمامی مستندات انجام می دادم. امروزه یک چنین کاری دیگر قابل قبول نیست، زیرا باعث خستگی مفرط متخصصان شده و همواره این احتمال وجود دارد که برخی از نکات نادیده گرفته شود.
تصور کنید در سازمان بزرگی هستید که متشکل از سوییچ ها، روترها، شبکه ها و زیرشبکه های مختلفی است و در نظر داشته باشید برای هر تغییر کوچک اسناد زیادی را بروزرسانی کنید. از طرفی پیشرفت های مستمر فناوری اطلاعات باعث پدید آمدن دستگاه های تحت شبکه قابل برنامه ریزی شده که ظرفیت بکارگیری مفهومی به نام زیرساخت به عنوان کد را برای پیاده سازی کامل یک شبکه فراهم کرده اند. همچنین این امکان وجود دارد که بتوان دستگاه های شبکه را به عنوان بخشی از IoC در نظر گرفت. در این مکانیزم، فایل های پیکربندی متشکل از داده های ساخت یافته قابل فهمی هستند که برای ساخت آن ها از فناوری هایی شبیه به JSON، YAML یا XML استفاده می شود و درون سامانه های ذخیره سازی که برای مدیریت پروژه ها استفاده می شوند شبیه به گیت، پوپت، Ansible و نمونه های مشابه ذخیره می شوند.
در نتیجه این امکان وجود دارد تا تاریخچه مربوط به تغییرات اعمال شده در زیرساخت های یک شبکه را درون مکان واحدی ذخیره سازی و پیگیری کرد. زمانی که قرار است تغییراتی به وجود آیند، این امکان وجود دارد تا ویژگی ها یا تنظیمات جدید را در یک محیط مجازی آزمایش کرده و زمانی که اطمینان حاصل شد همه چیز در صحت و سلامت کار می کند و آزمایش ها با موفقیت به سرانجام رسیده اند، پیکربندی ها را بطور خودکار در محیط واقعی پیاده سازی کرد. در گذشته زمانی که قرار بود تغییرات به شیوه دستی در پیکربندی ها اعمال شود، احتمال بروز خطای انسانی زیاد بود، اما اعمال تغییرات به شکل خودکار اجازه می دهد سامانه ها براحتی بروزرسانی شده و نگرانی از بابت قطع دسترسی به خدمات شبکه را تهدید نکند.
به درخواست ها پاسخ داده و شبکه را به سمت جلو هدایت کنید
فناوری ها و ابزارهای جدیدی به دنیای فناوری اطلاعات وارد می شوند. رایانش ابری، اینترنت اشیا، هوش مصنوعی، یادگیری ماشین و تجزیه و تحلیل بزرگ داده ها تنها بخشی از تغییرات بنیادین فناوری اطلاعات در سال های اخیر هستند. در بطن تمامی این فناوری ها شبکه های کامپیوتری قرار دارد. شبکه هایی که به اشکال مختلف در سازمان ها پیاده سازی می شوند. افرادی که آشنا به مباحث برنامه نویسی هستند به راحتی نحوه عملکرد این فناوری ها را درک کرده و سعی می کنند از فناوری های نوین در انجام وظایف کاری خود استفاده کنند. شما می توانید خدمات نوین را با برنامه های کاربردی خود ادغام کنید، به شرطی که مهارت های برنامه نویسی را فرا گرفته باشید.
به طور مثال، می توانید یک برنامه کاربردی طراحی کنید که در تعامل با بلندگوهای هوشمندی همچون اکو آمازون یا گوگل هوم باشد و از طریق فرامین صوتی وضعیت شبکه را بررسی کرده و اگر مشکلی وجود داشت فرآیند عیب یابی را آغاز کرده و گزارش های مربوطه را برای شما ایمیل کند. در یک چنین سناریویی مهندسان شبکه ناآشنا به مهارت های برنامه نویسی از این غافله عقب مانده و مجبور هستند تمامی کارها را به شیوه دستی انجام دهند. اگر سطح مهارت های شما در این حوزه در حد عالی باشد و به خوبی بدانید که چگونه باید این فناوری ها را با یکدیگر مرتبط کنید، شانس شما برای احراز مشاغلی با درآمدهای خوب در شرکت های بزرگ زیاد خواهد بود. خلاصه اینکه، این روزها برنامه نویسی یک مهارت ضروری و راهگشا برای مهندسان شبکه است. شرایط حاکم بر بازار کار مهندسان شبکه نشان می دهد در آینده نزدیک تسلط بر کدنویسی به یک مهارت ضروری برای مهندسان شبکه تبدیل خواهد شد.
یک مهندس شبکه چه مسئولیت هایی دارد؟
مهندس شبکه یک متخصص فنی است که وظیفه برنامه ریزی، طراحی، کنترل و مراقبت از شبکه های کامپیوتری را عهده دار است. رشد گسترده شبکه های کامپیوتری باعث شده تا تقاضا برای جذب مهندسان شبکه پیوسته در حال رشد باشد. بطور مثال، یک مهندس شبکه مسلط بر سیستم عامل لینوکس بازار کار بهتری نسبت به فردی دارد که تنها با مباحث نرم افزاری و سخت افزاری شبکه آشنا است، زیرا این فرد به طور مستمر فناوری های روز را دنبال می کند و درباره تغییرات مختلفی که ممکن است بر شغل او تاثیرگذار باشد اطلاعات کافی دارد.
شبکه سازی نرم افزار محور
شبکه های نرم افزار محور در چند سال گذشته با استقبال چشم گیری روبرو شده اند. شبکه هایی که نرم افزار شالوده آنها را شکل داده و آشنایی با زبان های برنامه نویسی به منظور کدنویسی برخی از وظایف مرتبط با این شبکه ها، کلید احراز مشاغل مرتبط با آنها است.
آیا یک مهندس شبکه باید مسلط به زبان های برنامه نویسی باشد؟
با مطالعه این مطلب، ممکن است سوال کنید که باید به سراغ یادگیری زبان های برنامه نویسی بروم؟ پاسخ مثبت است. همچنین، پیشنهاد می کنیم به سراغ یادگیری زبان های برنامه نویسی همه منظوره شبیه به پایتون و روبی بروید. برخی از متخصصان شبکه می گویند زمانی که ابزارهای مختلفی برای انجام وظایف مرتبط با شبکه ها در دسترس است چه لزومی دارد به سراغ یادگیری مهارت های برنامه نویسی برویم. واقعیت این است که ابزارهای در دسترس نمی توانند به تمامی نیازهای کاری شما پاسخ دهند و از طرفی ابزارهایی شبیه به پوپت، Ansible و نمونه های مشابه از یکسری اصول برنامه نویسی پیروی می کنند. به همین دلیل لازم است در مورد اصول بنیادین برنامه نویسی اطلاعات کافی داشته باشید.
تسلط بر لینوکس و پاورشل
اگر در ارتباط با شل لینوکس و اسکریت نویسی پاورشل مایکروسافت دانش کافی داشته باشید، براحتی می توانید برخی از کارها را خودکارسازی کرده و به میزان قابل توجهی در وقت خود صرفه جویی کنید. زمانیکه در مسیر یادگیری این فناوری ها گام بردارید با کمترین زحمت ممکن با اصول و منطق برنامه نویسی آشنا خواهید شد. شبکه و امنیت دو مفهوم جدانشدنی از یکدیگر هستند، به همین دلیل پیشنهاد می کنیم به سراغ یادگیری لینوکس و به ویژه توزیع کالی بروید تا درباره مخاطرات امنیتی اطلاعات کافی به دست آورید.
یادگیری پایتون برای یک مهندس شبکه مهم تر از نان شب است!
پایتون هنوز هم یکی از محبوب ترین زبان های برنامه نویسی است و تقریبا بیشتر کارفرمایان از این موضوع اطلاع دارند. چرا پایتون محبوب ترین زبان در این زمینه است و ما تاکید خاصی روی آن داریم؟ خوب، همانگونه که متوجه شده اید، برنامه نویسی یک ضرورت برای مهندسان شبکه است. با این حال، هیچ شرکتی از یک مهندس شبکه انتظار ندارد بطور کامل روی برنامه نویسی متمرکز شود، زیرا شرح وظایف یک مهندس شبکه از یک توسعه دهنده نرم افزاری که سال های متمادی در این حوزه به فعالیت اشتغال داشته متفاوت است.
پایتون در مقایسه با جاوا و سی++ ترکیب نحوی ساده تری دارد و پیچیدگی های رایج این دو زبان را ندارد، در نتیجه یادگیری آن ساده تر است و به مهندسان شبکه اجازه می دهد برای انجام وظایف خود از کدهای ساده تر و روان تری استفاده کنند. پایتون اجازه می دهد با کدنویسی و بکارگیری اسکریپت ها بخش عمده ای از وظایفی که به شکل دستی انجام می شوند را خودکارسازی کنید و به ساده ترین شکل به مدیریت و پیکربندی سرورها بپردازید. پایتون با کنترل دستگاه های مختلف و بکارگیری واسط های برنامه نویسی (API) اجازه می دهد به شکل دقیق تر و هوشمندانه تری با شبکه های نرم افزار محور ارتباط برقرار کنید. مهندسان شبکه می توانند از پایتون برای ساخت اسکریپت های خاصی که قرار است فعالیت های مشخصی را انجام دهند استفاده کنند.
فراموش نکنید کتابخانه استاندارد پایتون از پروتکل های رایج شبکه پشتیبانی می کند که خود یک مزیت بزرگ بشمار می رود. یکی از مهمترین مزیت های پایتون در کدنویسی مختصر خلاصه شده، در نتیجه برای خودکارسازی یک وظیفه نیازی به نوشتن کدهای طولانی ندارید. در نهایت به این نکته توجه داشته باشید مهندسان شبکه مسلط به مهارت های برنامه نویسی در شغل خود پیشرفت های زیادی خواهند کرد. از طرفی، یادگیری یک زبان برنامه نویسی جدید هیچ ضرری ندارد و صرف وقت برای یادگیری یک زبان خیلی بهتر از هدر دادن وقت در شبکه های اجتماعی است.
آموزش برنامه نویسی پایتون