یادگیری برنامه نویسی در عصر LLM
آدرس مقاله: https://blog.ploeh.dk/2026/09/16/on-learning-programming-in-an-age-of-llms/ آدرس نظرات: https://news.ycombinator.com/item?id=49723873 امتیاز: 243 # نظر: 185
اخیرا یکی از خوانندگان نامهای طولانی با سؤالات زیادی در مورد یادگیری برنامهنویسی در این عصر LLM برای من نوشت. پس از اندکی رفت و برگشت، اجازه یافتم که به طور گسترده از نامه نقل قول کنم تا بتوانم به برخی از پاسخ ها در ملاء عام پاسخ دهم.
به نظر من هیچ یک از پاسخ های من سختگیرانه نیست. وضعیت آنقدر نامشخص است که من فقط میتوانم به بهترین تواناییهایم پاسخ دهم، اما ادعا نمیکنم که آنها هیچ نوع حقیقت تغییرناپذیری دارند.
من سعی میکنم بفهمم افرادی که نرمافزار را عمیقا میفهمند، در عصر هوش مصنوعی چگونه به یادگیری و شایستگی فکر میکنند. تقریبا مانند یک مورخ به آن میپردازم: مستقیما از مردم میپرسم که در حالی که واقعا از طریق آن زندگی میکنند، چگونه درک میکنند.
"حدود یک سال پیش مجذوب برنامهنویسی به کمک هوش مصنوعی شدم. علیرغم اینکه هیچ پیشزمینه رسمی CS نداشتم، با LLM موفق شدم یک سیستم TypeScript/JavaScript نسبتا بزرگ شامل APIها، PostgreSQL، خطوط لوله LLM، اتوماسیون تحقیقات و گردشهای کاری چند مدلی بسازم. آن را بساز
"اما اکنون سعی میکنم آن سیستم را به یک محصول تولیدی واقعی تبدیل کنم، و در حال مبارزه هستم. یک خطا را با هوش مصنوعی برطرف میکنم، سپس خطای دیگری ظاهر میشود، سپس بخشی دیگر به گونهای رفتار میکند که من کاملا درک نمیکنم. پس از ماهها بازسازی، متوجه ناخوشایندی شدم: ممکن است سیستمی ساختهام که بالاتر از سطح درک خودم است. وقتی همه چیز کاملا کار میکند، gap درست میشود.
"گاهی اوقات من واقعا نمی دانم بدون اینکه از مدل دیگری بپرسم چه کاری انجام دهم. این باعث شد به این فکر کنم که آیا یک سال را صرف ساختن یک محصول کرده ام یا تا حدی ظاهر یک محصول را ایجاد کرده ام: چیزی به اندازه کافی پیچیده برای کار کردن، اما هنوز آنقدر عمیق نمی دانم که بتوانم آن را واقعا داشته باشم.
«من اصلا ضد هوش مصنوعی نیستم. من شیفته این سیستم ها هستم و می خواهم به صورت حرفه ای با آنها کار کنم. اما من مطمئن نیستم که رابطه درست با آنها چگونه باید باشد."
در واقع، من هم مطمئن نیستم، اما قبل از ادامه، شفافترین کار را میبینم که موضع خود را فاش کنم. من هنوز در مورد هوش مصنوعی تصمیم نگرفته ام، اما تمایل دارم که آن را دوست نداشته باشم، زیرا به خوبی می دانم که ممکن است غیرقابل توقف باشد.
من کار می کنم و با آن آزمایش می کنم، و اغلب من را تحت تاثیر قرار می دهد. در مواقع دیگر من را ناامید می کند. معمولا زمانی است که بیش از همه مرا تحت تأثیر قرار می دهد که از آن رنج می برم.
وقتی بد است، میتواند ناامیدکننده باشد، اما حداقل میتوانم ذرهای گرما را در این توهم جذب کنم که چیزی که بیش از سی سال برای یادگیری آن صرف کردهام هنوز مرتبط است. وقتی در بهترین حالت است، گاهی فکر می کنم: کجا برای جهاد باتلر ثبت نام کنم؟
موضع من در مورد LLM فقط تا حدی بر اساس وضعیت اجتماعی-اقتصادی خودم است. من به اندازه کافی بزرگ شده ام و به اندازه کافی موفقیت داشته ام، که اگر همه چیز برابر باشد، می توانم از بیکاری جان سالم به در ببرم. از سوی دیگر، مطمئن نیستم که هر جامعه مبتنی بر دانش بتواند.
ممکن است LLM ها قبل از اینکه سایر مشاغل یقه سفید را انتخاب کنند، شغل برنامه نویسی را انتخاب کنند. به هر حال، برنامه نویسی ممکن است رشته ای باشد که در آن تأیید آسان تر از مثلا مدیریت خسارت بیمه است. با این حال، اگر به نقطه بیکاری گسترده در میان کارگران دانش برسیم، مطمئن نیستم جامعه آنطور که می دانیم زنده بماند.
من معمولا در مورد سوابقم به عنوان یک اقتصاددان زیاد صحبت نمی کنم، اما در این زمینه، ذکر آن را ضروری می دانم. به عنوان یک اقتصاددان، نمی توانم تصور کنم که بیکاری انبوه 30 تا 40 درصد تأثیر قابل توجهی بر اقتصاد نداشته باشد.
من بهطور دردناکی از استدلالهایی آگاه هستم که قبلا این اتفاق افتاده است: ممکن است از دست دادن شغل وجود داشته باشد، اما پیشرفت فناوری منجر به مشاغل جدیدی میشود که امروز حتی نمیتوانیم تصور کنیم. با معرفی قاب جوراب ساق بلند، موتور بخار، موتور احتراق داخلی، کامپیوترها و غیره اینطور بود. این فقط تا حدی درست است: بله، مشاغل جدید ایجاد شد، اما اغلب نه برای افرادی که شغل خود را از دست دادند. معدنچیان زغال سنگ فقط یک شبه برنامه نویس نشدند.
زمانی که چین در سازمان تجارت جهانی پذیرفته شد، از همین نوع استدلال استفاده شد. و در واقع، بسیاری از مشاغل جدید ایجاد شد، نه در دنیای غرب.
بنابراین، بر اساس تجربه زیسته و تاریخی، من به استدلال هایی که همه چیز خوب خواهد بود، شک دارم.
اما من از صمیم قلب امیدوارم که اشتباه کرده باشم. من عاشق برنامه نویسی هستم و برای ده سال دیگر مشکلی ندارم. شاید مهمتر از آن، من فرزندان جوانی دارم. امیدوارم دنیایی برای آنها نیز وجود داشته باشد.
"بنابراین من واقعا دوست دارم بدانم شما در مورد این موضوع چگونه فکر می کنید. آیا خوشحال هستید که اصول برنامه نویسی را قبل از وجود LLM ها یاد گرفته اید؟ اگر از امروز شروع می کردید، آیا هنوز به طور جدی زبان ها، ساختارهای داده، پایگاه های داده، شبکه ها، سیستم عامل ها، اشکال زدایی و معماری را مطالعه می کردید؟ آیا فکر می کنید هوش مصنوعی می تواند به مردم اجازه دهد که قادر به ساختن بسیار سریعتر از توانایی آنها برای درک باشد؟"
آیا خوشحالم که برنامه نویسی را قبل از LLM یاد گرفتم؟ بله، البته. این مهارت ها به مدت سی سال به من خدمت کرد.
اگر از امروز شروع می کردم، به طور جدی به یادگیری نجاری، فلزکاری، آهنگری اسلحه یا چیز دیگری که نیاز به هماهنگی دست و چشم دارد فکر می کردم. من می دانم که پیشرفت هایی در رباتیک نیز حاصل شده است، اما به نظر می رسد جایگزینی کار دستی در آینده دورتر باشد.
اما برای پرداختن به این سوال: من شخصا در حال یادگیری ساختارهای داده، معناشناسی زبان و غیره به عنوان بخشی از یک برنامه دانشگاه هستم. من این کار را به این دلیل انجام می دهم که کنجکاو هستم، و نه به این دلیل که انتظار دارم از آن پاداش پولی زیادی دریافت کنم.
آیا فکر میکنم هوش مصنوعی افراد را قادر میسازد سریعتر از آنچه که میتوانند پیشرفت کنند، پیشرفت کنند؟ این باید دید. توسعهدهندگان نرمافزار قبلا، برای دههها، روی انتزاعیهایی کار میکردند که نمیفهمیدند. اگر یک توسعه دهنده وب بودید، چیز زیادی در مورد برنامه نویسی کامپایلر نمی دانستید. اگر یک برنامه نویس کامپایلر بودید، چیز زیادی در مورد طراحی مدارهای مجتمع نمی دانستید. و اگر شغل شما مهندسی مدارهای مجتمع بود، چیز زیادی در مورد سطوح انتزاع بالای خود نمی دانستید.
یک قانون سرانگشتی خوب این بود: سطح انتزاعات را مستقیما زیر آنچه در آن کار می کنید و همچنین سطح بالا را درک کنید. این به شما امکان می دهد بیشتر مشکلات را عیب یابی کنید.
"و شما شخصا چگونه با آن برخورد می کنید؟ وقتی هوش مصنوعی می تواند فورا چیزی را حل کند، چگونه تصمیم می گیرید که چه زمانی از آن استفاده کنید و چه زمانی آن مشکل را خودتان حل کنید؟ اگر در موقعیت من بودید، با یک پروژه قابل توجه ساخته شده توسط هوش مصنوعی اما پایه های ضعیف زیر آن، آیا عقب نشینی می کردید و به طور سیستماتیک آن پایه ها را یاد می گرفتید، به ساختن و یادگیری با ظاهر شدن مشکلات ادامه می دادید، یا این دو را ترکیب می کردید؟"
این دو سؤال کاملا متفاوت است، زیرا من دیگر پایه ضعیفی در توسعه نرم افزار ندارم. حتی اگر با چیزی دور از آنچه که معمولا انجام میدهم سر و کار داشته باشم، میتوانم از آنچه قبلا میدانم استفاده کنم. بیایید تصور کنیم که شخصی به من وظیفه نگهداری یک برنامه کاربردی را که منحصرا با کد اسمبلی RISC-V نوشته شده است، داده است. این بیگانه ترین محیط نرم افزاری است که می توانم برای خودم تصور کنم. انطباق با چنین محیط توسعه ای برای من دشوار خواهد بود، اما هنوز آنقدر سخت نیست که برای شخصی که به طور کلی تازه وارد برنامه نویسی شده است.
باور کنید یا نه، من برنامه های تمرینی کوچکی را در RISC-V نوشته ام، و همچنین یک کامپایلر تمرینی که به RISC-V کامپایل شده است.
اما اگر تقریبا هیچ پیش زمینه نرم افزاری نداشتم چه می شد؟
خب منم یه زمانی دقیقا تو همین موقعیت بودم. زمانی که کارم را شروع کردم، برای سالها در انجام کارها در حین یادگیری در کار تعادل ایجاد کردم. از سال 1999، من مؤلفههای COM را در C++ نوشتم، و متوجه نشدم که چه کاری انجام میدادم. به نوعی، من هنوز آن را به کار انداختم، حتی تا حدی که توانستم هرگونه نشت آشکار حافظه را از بین ببرم.
با این حال، من هرگز خوشحال نبودم که چیزها را بدون اینکه بفهمم چگونه کار می کنند، به هم می زدم. بنابراین، همانطور که در این سوال پیشنهاد شد، برای یادگیری سیستماتیک اصول به عقب برگشتم. این برای حرفه ای که در اواسط دهه 1990 راه اندازی شد به خوبی کار کرد. آیا امروز خوب کار خواهد کرد؟
من چندان مطمئن نیستم: رسیدن به سطحی از شایستگی به اندازه کافی بالا که اعتماد به نفس گذشته شما را به وضوح در بخش بسیار ناآگاهانه منحنی دانینگ-کروگر تشخیص دهید، دهه ها طول کشید. امروز اینقدر وقت داری؟
مسلما، با LLM، میتوانید سریعتر یاد بگیرید، زیرا میتوانید سؤالات مستقیمتری بپرسید. سی سال پیش، کتاب هایی می خریدم به این امید که حاوی مطالب مفیدی باشد. این هنوز به معنای از بین بردن تعداد زیادی از مطالب آموزشی بود که فورا مرتبط با کار در دست نیست.
با این حال، من شک دارم که بتوان سرعت یادگیری انسان را به میزان قابل توجهی افزایش داد. گلوگاه به سختی معلمان و مواد است، اما مغز انسان با چه سرعتی می تواند دانش جدید را جذب کند.
آخرین چیزی که از شنیدن آن بسیار سپاسگزار خواهم بود این است که چگونه برنامه نویسی را خودتان یاد گرفتید، و چگونه امروز چیزهای فنی جدیدی یاد می گیرید. چگونه به یادگیری یک زبان جدید در اوایل زندگی حرفه ای خود نزدیک شدید؟ کتاب، پروژه، خواندن کد دیگران، تمرین ها، اشکال زدایی، چیز دیگری؟ و اگر امروز مجبور بودید یک زبان برنامه نویسی کاملا جدید را با هوش مصنوعی در دسترس یاد بگیرید، چگونه این کار را انجام می دادید؟
پاسخ کوتاه به سوال اول: به آرامی، بر اساس آزمون و خطای زیاد، گهگاهی با پشتوانه یک کتاب.
جدا از شروع نادرست اولیه با COMAL 80، اولین پروژه برنامه نویسی من محاسبه مجدد نمودارهای انشعاب و جذب کننده لورنز برای پایان نامه کارشناسی ارشدم در اقتصاد بود. با دستیابی به آنچه داشتم، آنها را در QBasic نوشتم، از نمونه هایی که همراه آن ارسال می شد یاد گرفتم، و همچنین گهگاه از یکی از دوستانم پرسیدم.
در حالی که من جزئیات زیادی را پنهان می کنم، در دهه های 1990 و 2000، بیشتر از مثال ها و مستندات یاد گرفتم. در حالی که من کتابی در مورد C++ خریدم، فکر نمیکنم هرگز آن را تمام کرده باشم، و گویشهای مختلف Basic و همچنین C# را منحصرا از مستندات و کد نمونه انتخاب کردم.
با این حال، اگرچه من هرگز برای یادگیری سی شارپ کتابی نخواندم، اما کتابها در آموزش F# و Haskell به من کمک کردند. در طول سالها، برای آموزش خودم به شدت به کتابها اعتماد کردهام، اما همانطور که نمایه گودریدز من نشان میدهد، به طور کلی عاشق کتاب هستم.
چگونه می توانم یک زبان برنامه نویسی کاملا جدید را امروز یاد بگیرم؟ باز هم، تجربه من برای کسی که در سال 2026 در برنامه نویسی تازه کار است بی فایده است: من اکنون زبان های برنامه نویسی زیادی دیده ام که اگر به زبان جدیدی برخورد کنم، معمولا می توانم آن را از بررسی کدهای موجود و جستجوی چند چیز که فورا واضح نیستند، دریافت کنم.
اما این پیشفرض است که زبان مورد نظر «عادی» است. اگر مجبور بودم دوباره به APL برگردم، حداقل باید یک آموزش پیدا کنم.
شاید متوجه شده باشید که من زیاد از LLM برای یادگیری استفاده نمی کنم. LLM ها توهم ندارند. آنها مزخرف می کنند، و من عمیقا به هر چیزی که به من می گویند بی اعتماد هستم. این بدان معنا نیست که من از LLM استفاده نمی کنم، اما تمایل دارم از آنها سوالاتی بپرسم که پاسخ های قابل تاییدی را به همراه داشته باشند. آیا می توانم این عبارت Haskell را مختصرتر کنم؟ هر پاسخ مفیدی برای چنین سوالی یک پیشنهاد کد است که یا کار می کند یا کار نمی کند. کوتاهتر است یا نه تأیید آن آسان است.
بعدش چی یاد بگیرم؟ از سوی دیگر، پاسخی قابل تأیید نمی دهد. من تمایل دارم که چنین سوالاتی را از LLM نپرسم.
در پایان، میتوانید بگویید که من ترجیح میدهم از LLM سؤالات جعلی بپرسم.
متن اصلی (انگلیسی)
Learning Programming in an Age of LLMs
Article URL: https://blog.ploeh.dk/2026/09/16/on-learning-programming-in-an-age-of-llms/ Comments URL: https://news.ycombinator.com/item?id=49723873 Points: 243 # Comments: 185