رئیس نصر کشور: فریلنسرها باید جایگاه حقوقی داشته باشند
رئیس نصر کشور گفت که ما درحال تدوین برخی از سازوکارها برای فریلنسرها هستیم. به…
۱۸ مهر ۱۴۰۳
۱۸ مهر ۱۴۰۰
زمان مطالعه : ۹ دقیقه
شرکت GitHub در کنار دو استارتآپ Enzyme و Debuild الگوریتمهایی بر مبنای هوش مصنوعی ارائه دادهاند که به کاربران اجازه میدهد تا با توصیف برنامهای که میخواهند بسازند، کدنویسی کنند. هیچ یک از این شرکتها هنوز محصولاتشان را بهصورت عمومی عرضه نکردهاند، اما نسخههای اولیه آنها امیدوارکننده است. به نظر میرسد که در سالهای آینده شرکتهای بیشتری از هوشمصنوعی برای توسعه محصولات خود در زمینه کدنویسی استفاده کنند.
به گزارش پیوست، ورود هوشمصنوعی برای کدنویسی در حال حاضر ایرادهای زیادی دارد اما باید درنظر داشت که این ابزارها در ابتدای راه هستند و به سرعت توسعه پیدا میکنند. با توجه به تواناییهایی که تا الان نشان دادهاند تصور کنید در چندین سال آینده چقدر قدرتمند خواهند شد. در این شرایط این سوال مطرح است که آیا واقعا برنامهنویسان باید نگران از دست دادن شغل خود باشند؟ آیا تحصیل در رشته توسعه نرمافزار برای دانشجویان اتلاف وقت است؟
هیچ یک از سه شرکت فوق محصولات خود را به عنوان جایگزین انسان بازاریابی نمیکنند. GitHub به وضوح محصول «Copilot» خود را به عنوان «دستیار هوشمصنوعی برنامهنویس» توصیف میکند و شریف شمیم، مدیرعامل «Debuild»، با این ایده که ماشینها جایگزین برنامهنویسان میشوند، مخالفت کرده است.
در ادامه ویژگیهایی از یک برنامهنویس را بررسی میکنیم که هوش مصنوعی فعلا نمیتواند آن را داشته باشد یا بدست آورد. با پیوست همراه باشید.
برخی افراد ممکن است به راحتی پیچیدگی معنای توسعهدهنده نرم افزار را دست کم بگیرند. نوشتن کد تنها بخش کوچکی از کاری است که برنامهنویسان انجام میدهند. توسعهدهندگان وظایف گستردهای دارند.
بیایید هوشمصنویی را در نظر بگیریم که میتواند مثل انسان کد بنویسد. حال برای اینکه جایگزین مشاغل توسعهنرمافزار شود، باید بتواند تمام وظایف یک توسعهدهنده نرمافزار را هم انجام دهد. این وظایف به قرار زیر است:
درک پیچیدگی اینکار بسیار سخت است. فهم نیاز کاربر نهایی و ترجمه فنی آن برای ماشین، رابط کاربری و در نهایت کدنویسی یکی از چالشبرانگیزترین مراحل توسعه نرمافزار است.
صاحب محصول، مدیر پروژه، طراحان، توسعهدهندگان و کاربران همگی تصویری متفاوت از این سیستم دارند. هر کس درک متفاوتی از نیازها، بودجه اختصاص داده شده و نحوه بهبود عملکرد دارد. هماهنگی و فهم نیاز واقعی کاربرنهایی به طور کلی بزرگترین چالش در توسعه نرم افزار است. مثالهای زیادی از شاهکارهای فناوری وجود دارد که بدلیل عدم شناخت نیاز واقعی کاربرنهایی با شکست مواجه شدهاند.
برقراری ارتباط از طریق یک زبان تجاری مشترک برای بشر به اندازه کافی دشوار است، چه برسد به الگوریتم. در یک تیم توسعه نرمافزار، توسعهدهندگان و صاحب محصول باید بتوانند به صورت دوطرفه با یکدیگر ارتباط برقرار کنند.
یکی از چالش برانگیزترین بخشهای ساخت هر محصولی، درک نیازهای تجاری و تبدیل آنها به مشخصات فنی و در آخر نوشتن کد است. این فرآیند از طریق چندین ذینفع انجام می شود. در حقیقت، به سختی میتوان انسانها را متوجه کرد که باید چه کاری انجام دهد، حال میتوان تصور کرد فهم این موضوع برای ماشین چقدر میتواند دشوار باشد.
ورود یک توسعهدهنده نرمافزار جدید به یک پروژه زمان زیادی را میطلبد. پروژههای نرمافزاری بزرگ پیچیدگی باور نکردنی دارند. یک فروشگاه کتاب آنلاین ممکن است به یک سیستم مدیریت محتوا (CMS، مانند وردپرس) متصل باشد که از طریق آن مدیران میتوانند محتوای جدید اضافه کنند. علاوه بر این، ممکن است با یک سیستم برنامهریزی منابع سازمانی (ERP) که همه سفارشات و محصولات را ذخیره میکند، ادغام شود. این وبسایت ممکن است با «React» به عنوان یک زبان برنامهنویسی پیشرفته، با تعداد زیادی وابستگی مختلف به کتابخانههای مختلف و C# به عنوان یک زبان پشتیبان ساخته شود.
ایجاد یک الگوریتم که این انسجام را درک کند، کار دشواری است. فرض کنید صاحب محصول میخواهد جریان جدیدی از سفارشات را به تجارت الکترونیکی خود اضافه کند که از طریق آن مشتریان میتوانند کتابهای خود را چاپ و منتشر کنند. چگونه به الگوریتم میگویید که این کار را انجام دهد؟ حتی اگر چالش ذکر شده برای درک الزامات تجاری حل شود، اکنون شما به الگوریتمی نیاز دارید که بتواند کل فضای فناوری را درک کند. باید بخشهای جدیدی را در «CMS» اضافه کند، متغیرهای جدیدی را به «ERP» ارسال کند و بفهمد چه کدی در «React» بنویسد و چه کدی در « C#» ایجاد کند.
درک برخی از پروژه های نرم افزاری برای انسان دلهرهآور است و برای الگوریتمها کار ساده ای نخواهد بود.
توسعهدهندگان زمان زیادی را صرف اشکالزدایی میکنند. قطعا هر توسعه دهندهای تجربه این را داشته که زمان بیشتری را برای اشکال زدایی نسبت به کدنویسی صرف کرده.
بیایید به مثال فروشگاه کتاب آنلاین را که قبلاً گفته شد، برگردیم. تصور کنید که داده های کاربر هر ده دقیقه بین «CMS» و سیستم های «ERP» همگام سازی می شود. ناگهان، این کار با اشکال مواجه شده یا به قول توسعهدهندگان “خطایی ایجاد می کند”. پیام خطا به به طور کلی میگوید “یک خطای غیرمنتظره رخ داده است”.
چگونه میتوانید یک الگوریتم برای اشکالزدایی این مشکل بسازید؟ الگوریتم از کجا شروع به رفع مشکل میکند؟ آیا مشکل مربوط به «CMS» است که در آن انتقال دادهها به صورت دورهای باید تنظیم شود؟ یا مربوط به تغییری است که در سیستم «ERP» اتفاق افتاده است؟ یا شاید برخی از کاربران دادههای خراب داشته باشند که به درستی مدیریت نمیشوند؟ الگوریتمی که بتواند اینکار را انجام دهد باید فوق العاده همه کاره باشد.
اشکالزدایی برنامههای بزرگ میتواند بسیار پیچیده باشد. و اگر می خواهید یک هوشمصنویی، کد نوشته شده توسط یک انسان را اشکالزدایی کند، فقط تعداد جلسات اشکالزدایی را طولانیتر خواهید کرد.
غیراز توسعهدهندگان هیچکس نمیتواند تصور کند بروزرسانی کتابخانههای نرمافزاری به آخرین نسخه چقدر میتواند پیچیده باشد. هنگامیکه تلفن هوشمند خود را به روز میکنید، کافی است تا با فشار یک دکمه اینکار برای شما انجام شود، خیلی بی اهمیت به نظر میرسد، اینطور نیست؟
دوباره به مثال فروشگاه آنلاین کتاب باز میگردیم. نسخه جدیدی از «CMS» موجود است که ویژگی های جدید، مفید و امنیتی را ارائه میدهد. ما باید نسخه خود روز کنیم. البته، به محض انجام این کار، متوجه میشویم که بسیاری از عملکردهای پشتیبان ما اکنون منسوخ شدهاند و باید به روز شوند. مجموعهای که ما برای ارسال ایمیلهای تأیید سفارش از طریق «CMS» استفاده میکنیم ، باید از ابتدا بازسازی شود.
به روز رسانی نرم افزار برای ویژگیهای جدید و کم کردن مشکلات امنیتی ممکن است بیاهمیت به نظر برسد، اما میتواند یک امر نسبتاً پیچیده باشد. هوشمصنویی باید روشهایی را که به روزرسانی یک کتابخانه میتواند بر کتابخانههای دیگر تأثیر بگذارد را درک کنند.
این موضوع انقدر مهم است که با وجود اینکه قبلا در موردش صحبت شد اما نیاز است بیشتر به آن پرداخته شود.
یک توسعهدهنده، باید با ذینفعان مختلف با استفاده از واژگان و تکنیکهای مختلف ارتباط برقرار کند. وقتی با سایر توسعهدهندگان در تیم صحبت میکند، میتواند از اصطلاحات فنی و پیچیده استفاده، در حالی که باید عملکردها را به صورت غیر فنی و ملموس برای صاحبان محصولات توضیح دهد. هنگامی که با مشتریان ارتباط برقرار میکند، باید هم با اعتماد به نفس و هم متواضع باشد، و باید اطمینان حاصل کند که زمان بیشتری را صرف گوش دادن میکند تا صحبت کردن. باید نگرانیهای آنها را بشنود و بفهمد.باید به طور مرتب پیشرفت پروژه را اعلام کند. درصورت بروز مشکل، باید آن را به اشتراک بگذارد.
یک الگوریتم هوشمصنوعی باید بتواند همه این کارها را انجام دهد.
برای جایگزین شدن الگوریتم یادگیریماشین و هوش مصنوعی با برنامهنویسان، در واقع این الگوریتم باید بتواند:
در واقع کار یک توسعه دهنده نرمافزار بسیار بیشتر از کدنویسی است و در عین پیچیدگی نیاز به مهارتهای متنوع دارد.در حال حاضر، این امکان کاملاً محتمل است که ما روزی به هوشمصنوعی دست یابیم که میتواند همه کارهای فوق را به خوبی یک انسان انجام دهد. زمانی که ما به چنین هوشمصنوعی دست پیدا کنیم که بتواند همه این موارد را انجام دهد، تقریباً میتوان گفت که هر کار دیگری نیز به صورت خودکار انجام میشود، و توسعه نرم افزار احتمالاً یکی از آخرین مشاغلی خواهد بود که خودکار می شود.
با این اوصاف، میتوان انتظار رشد روزافزون هوشمصنوعی برای کدنویسی را داشت، اما همچنان از آن برای توانمندسازی توسعه دهندگان به جای جایگزینی آنها استفاده میشود. الگوریتمهای یادگیری ماشین در ایجاد توابع کوچک و مستقل عالی هستند. برای مثال اگر توسعهدهنده به عملکردی نیاز داشته باشد که از توییتر، توییت دریافت کند، می تواند از یک الگوریتم بخواهد تا آن تابع را ایجاد کند.
برای کاربران عادی، هوشمصنوعی تولیدکننده کد میتواند به صورت خودکار وبسایتهای ساده بسازد، اما شما میتوانید از طریق خدماتی مانند وردپرس ، «Jimdo» یا «Squarespace» وبسایت ایجاد کنید، بنابراین این ابزارها می توانند با سیستمها ادغام شوند تا امکان سفارشیسازی بهتری را فراهم کنند.
شما به عنوان یک برنامهنویس یا یک توسعه دهنده نرم افزار در این مورد چگونه فکر میکنید آیا به نظر شما برنامهنویسان باید نگران آینده شغلی خود باشند؟ یا همانگونه که در این مقاله به آن اشاره شد به دلیل پیچیدگیهایی که برنامه نویسان با آن مواجه هستند فعلا هوش مصنوعی این امکان گه بتواند تمام توانایی های یک برنامه نویس را از خود بروز بدهد را ندارد. نظرتان برای ما بنویسد.