مقدمه
احتمالا انسانهایی که در آینده متولد میشوند، از عصر ما به عنوان عصری تاریخساز نام خواهند برد چرا که ما شاهد رشد یک تکنولوژی هستیم که بدون شک یکی از تاثیرگذارترین و قدرتمندترین تکنولوژیهای آینده خواهد بود. این تکنولوژی یادگیری ماشین است.
احتمالا انسانهایی که در آینده متولد میشوند، از عصر ما به عنوان عصری تاریخساز نام خواهند برد چرا که ما شاهد رشد یک تکنولوژی هستیم که بدون شک یکی از تاثیرگذارترین و قدرتمندترین تکنولوژیهای آینده خواهد بود. این تکنولوژی یادگیری ماشین است.
ماشینها سالها است که اختراع شدهاند ولی تزریق دانش و فهم به آنها تا به امروز ممکن نبوده است. حالا یادگیری ماشین به کمک ما آمده تا بتوانیم بخشهای مختلف زندگی خود را متحول کنیم و از ماشینها کارهایی را انتظار داشته باشیم که پیش از این فقط انسان قادر به انجام آن بود. در این مطلب قصد داریم بیان کنیم که چگونه یادگیری ماشین توسعه نرم افزار را متحول خواهد کرد و چطور این تکنولوژی پیشرو به کمک این بخش از دنیای کامپیوتر خواهد آمد. پس تا پایان این مطلب با ما همراه باشید.
یادگیری ماشین مجموعه تکنیکهایی است که به تحلیل دادهها میپردازد و الگوهایی از دل این دادهها بیرون میآورد تا اطلاعات تبدیل به دانش شود. این دانش و الگوهای پنهان باعث میشود که بتوانیم اتفاقات آینده را پیشبینی کنیم و شکلهای مختلف تصمیمگیریهای پیچیده را انجام بدهیم.
بسیاری از ما نمیدانیم که همین امروز نیز در حال استفاده از این تکنولوژی هستیم. به عنوان مثال موتورهای جستجو از جمله گوگل، به طور روزانه با استفاده از این تکنولوژی اطلاعات ما را تحلیل میکند و صفحاتی که به ما نشان میدهد را طبق الگوهای استخراج شده از یادگیری ماشین انتخاب میکنند.
با رشد گوشیها تلفن همراه (که به نوعی کامیپوترهای جیبی محسوب میشوند) و فناوری اینترنت اشیا، تقریبا اتصال همه مکانها و فضاها به دنیای اینترنت و نرم افزارها ممکن شده است. در چنین دنیایی که لپ تاپ، تلفن، ساعتها، تلویزیونها و حتی روزنامهها و کلیدها و چراغها به هم متصل میشوند، تصور یادگیری ماشین به عنوان یک تکنولوژی پیشرو برای حل مشکلات آینده دور از دهن نیست.
یادگیری ماشین در حال ایجاد تحولاتی اساسی در توسعه نرم افزار است. با فراگیر شدن این تکنولوژی برخی از شغلهای مرتبط با حوزه توسعه نرم افزار از بین میروند و برخی شغلهای جدید ایجاد میشوند. ابزارها تغییر میکنند و متدلوژیهای جدیدی برای توسعه نرم افزار ایجاد میشود و سیستمهای تازهای برای توسعه راحتتر ایجاد میشوند. ما در مورد سیستمهایی حرف نمیزنیم که بتوانند خطاها را تشخیص بدهند و راهحلی را ارائه کرده و آن را به خوبی پیادهسازی کنند. چنین سیستمهایی شاید هرگز نیز به وجود نیایند اما بدون شک بهینگی توسعه با ابزارهای یادگیری ماشین بهتر خواهد شد.
یادگیری ماشین در سطوح مختلف توسعه نرم افزار از جمله معماری نرم افزار، کدنویسی و بخشهای مربوط به پیاده سازی کاربرد فراوانی دارد. در ادامه به برخی از مهمترین حوزههایی که یادگیری ماشین آنها را متحول خواهد کرد را بررسی خواهیم تا دید روشنی از این مسئله به دست بیاورید.
تکنولوژی یادگیری ماشین، تولید کد را بسیار بهینه کرده است. بسیاری از برنامههایی که روزانه از آنها استفاده میکنیم، میلیونها خط کد دارند. از آن جایی که در کد نویسی قرار است که یک دستورالعمل به یک ماشین بدون فکر داده شود، پیاده سازی بسیاری از مفاهیمی که فهم آنها برای ما آسان است، نیازمند نوشتن کدهای بسیاری پیچیده و طولانی است. وقتی یک ماشین بتواند از اجرای چندباره یک عمل، روش بهینه انجام آن را یاد بگیرد، دیگر نیاز نیست که این هزاران خط کد برای پیادهسازی یک عمل ساده نوشته شود.
مثال بارز کاهش حجم کد توسط این تکنولوژی، ترجمه ماشینی است. از آنجایی که کلمات و عناصر مختلف جمله به شکلهای مختلف به کار برده میشوند، برای ایجاد ترجمه ماشینی نیازمند نوشتن میلیونها خط کد برای تعیین تمام حالات ممکن برای کامپیوتر بودیم. وقت و تلاش زیادی نیز باید صرف خطاگیری این کدها میشد.
امروزه با یادگیری ماشین و استفاده از شبکه عصبی، با نوشتن کدهایی کوتاه میتوان به یک الگوی مشخص از کارکرد زبان رسید. برخی از کارشناسان معتقد هستند که کدنویسان آینده فقط به نوعی معلم برای کامپیوتر تبدیل خواهند شد که این دستگاه را آموزش میدهند. این تکنولوژی هم اکنون میتواند از این فهم، کدهایی کوتاه را تولید کند، بخشهای مختلف یک برنامه بزرگ را بهینه کند و نقش برنامه نویسان را عوض کند.
همه متخصصان حرفهای هوش مصنوعی میدانند که یادگیری ماشین میتواند ایندکس گذاری دیتابیسهای سنتی را بهتر کند. وقتی یک کامپیوتر بتواند پیشبینی کند که داده در کجا ذخیره شده، به جای طی کردن فرآیندهای پرتکرار و چک کردن تمام حالات مختلف، میتواند به راحتی دسترسی به ایندکس موردنظر را فراهم کند. هم اکنون کارشناسان این حوزه در حال توسعه تواناییهای یادگیری ماشین برای گرفتن کوئری، دسترسی به ایندکسهای چندبُعدی و مسائل این چنینی هستند.
این تکنولوژی همچنین راه خودش را به دنیای زیرساخت داده نیز باز کرده است. مهندسان داده از این تکنولوژی برای کنترل بهتر و بیشتر پایگاههای داده استفاده کردهاند. برخی از کارشناسان معتقد هستند که در آینده مشاغلی مانند مدیریت پایگاههای داده به طور کامل تغییر خواهند کرد و دیگر نیاز نیست که این افراد هزاران گزینه برای تنظیم ویژگیهای دیتابیسها چک کنند.
بسیاری از نرم افزارها، دارای لایههای مختلفی هستند. به عنوان مثال نرم افزاری که قرار است در یک شبکه 10 لایه اجرا شود، 10 به توان 10 حالت ممکن را برای ایجاد انتقال داده بین لایهها و نودهای مختلف باید بررسی کند. اکثریت قریب به اتفاق لایههای ایجاد شده برای پیادهسازی فرآیندهایی است که کامپیوتر بر خلاف انسان به راحتی آن را درک نمیکند. یادگیری ماشین میتواند با اضافه کردن توانایی تشخیص الگو، یادگیری و ثبت رویهها، بسیاری از این لایهها را حذف کند و عملکرد نرمافزارها را به عملکردهای انسانی نزدیکتر کند.
در این مطلب نگاهی به یادگیری ماشین انداختیم. همچنین دیدیم که چه جنبههایی از فرآیند تولید نرم افزار میتواند در آینده تحت تاثیر این تکنولوژی قرار بگیرد. بدون شک یادگیری ماشین یکی از مهمترین و اساسیترین تکنولوژیهای ما در سالهای پیشرو هست و تاثیر قابلتوجهی بر روی زندگی ما خواهد گذاشت و نرم افزارها را بهینهتر، سریعتر و باکیفیتتر خواهد کرد. این تاثیر احتمالا در آینده تا جایی پیش خواهد رفت که توسعه نرم افزار، فرآیندی بدون دخالت انسان باشد.