Штучний інтелект і задачі з програмування

💡 Усі статті, обговорення, новини про AI — в одному місці. Приєднуйтесь до AI спільноти!

Зазвичай навчання початківців програмуванню починається з типових простих задач. Мотивований навчитися учень (студент) спробує розв’язувати ці задачі самостійно. Усі інші — шукатимуть спосіб отримати код якось інакше. З огляду на те, що той же ChatGPT досить пристойно зможе упоратися з типовими простими й не тільки задачами постає проблема оцінювання учнів в умовах дистанційного навчання.

У Вас 100 учнів (студентів), ви пропонуєте їм 10 різних задач, вам потрібно перевіряти 1000 задач. Звісно, аби спростити собі життя це будуть задачі з онлайн перевіркою різного рівня складності. Наприклад, для задачі, в якій потрібно видалити цифри із цілого додатного десятизначного числа, щоб отримати найбільше п’ятизначне ChatGPT надасть такий Python-код (після певних уточнень):

def max_five_digit_number(number):
    # Перетворюємо число на список цифр
    digits = list(str(number))
    
    # Кількість цифр, які треба видалити
    digits_to_remove = len(digits) - 5
    
    # Стек для формування максимального числа
    stack = []
    
    for digit in digits:
        # Видаляємо менші цифри, якщо це дозволяє залишкова кількість
        while stack and digits_to_remove > 0 and stack[-1] < digit:
            stack.pop()
            digits_to_remove -= 1
        stack.append(digit)
    
    # Якщо залишилися ще цифри для видалення, обрізаємо кінець
    stack = stack[:len(stack) - digits_to_remove]
    
    # Об'єднуємо стек у число
    return int(''.join(stack[:5]))
# Зчитування числа
number = int(input())
# Виведення результату
print(max_five_digit_number(number))

Можете задля власного задоволення оцінити якість коду без онлайн-перевірки його адекватності згідно з умовою задачі. Також можете самостійно попросити ChatGPT розв’язати цю ж задачу та подивитися чи відрізнятиметься розв’язок від наданого тут.

Що буде далі? Мотивований студент зробить декілька спроб з помилками, можливо удосконалить свій код з часом та пройде перевірку, а інші 99 надішлють код, який створив ChatGPT, пройдуть частково перевірку та нічому не навчаться. Можна стверджувати, що отримавши якийсь код вони ж його проаналізують та зрозуміють алгоритм, запам’ятають щось з коду. Але чи зможуть потім самостійно писати свій код?

Але проблема не в тому, навіть. Зараховувати студенту результати здачі задач онлайн, написаних чатом? Пропонувати такі задачі виключно для навчання, а потім приймати залік чи іспит у присутності викладача? Пропонувати поряд із типовими задачами складні задачі з якими штучний інтелект не упорається? Спостерігати під час іспиту за тим як студент пише код та просити його давати пояснення кожному рядку? Але ж їх 100, тих студентів.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Якщо ви приймаєте перевірку особисто, можете задати запитання, задаєте питання по коду, просити внести якісь мінорні швидкі зміни, то яка різниця як саме написана задача? Студент або правильно відповість на питання( і це означатиме, що він може сам створити таке рішення ) або ні.

Якщо ви автоматизували перевірку задач і самі очами не дивитесь код, то вам, як викладачу, не етично ставити вимоги до студентів аби вони щось робили руками, якщо ви це не перевіряєте руками.
У студента стояла задача пройти перевірку — він виконав задачу, пройшов перевірку.

ШІ це один із інструментів які сучасний професіонал повинен вміти використовувати. А ви ж хочете підготувати професіоналів чи не так?

А загалом, це дуже великий міф, що ШІ може зробити все. Якщо ви даєте лише примітивні абстрактні задачки як то

видалити цифри із цілого додатного десятизначного числа

то само собою, що будь-який ШІ напише таке рішення.
Створюйте адекватні задачі, давайте групові проекти які будуь включати не тільки «тупий» кодинг, а ще й підняття систем автоматизації, розуміння систем контролю версій, простенький CI/CD, автотести, системи аналізу коду і т.д. І тут хоч не хоч, а студенту доведеться з усім розібратися і стати спеціалістом. І використання ШІ тут буде виправдане і навіть бажане, так як це буде не більше ніж консультант який відповість на «тупі питання», а звести все до купи ти маєш руками.
І на виході отримуєте повноцінного джуніора, а не людину яка вміє писати лише примітивні алгоритмі на пайтоні і більше нічого не знає.

видалити цифри із цілого додатного десятизначного числа

от якраз навіть з цією задачею він не упорався на 100%.

Створюйте адекватні задачі, давайте групові проекти які будуь включати не тільки «тупий» кодинг, а ще й підняття систем автоматизації, розуміння систем контролю версій, простенький CI/CD, автотести, системи аналізу коду і т.д

І так і ні. Якщо ми говоримо про перші курси, то є люди, що не розуміють цикл. На 3 курсі були люди, що в гіт завантажували рар (навіть не зіп архів).
Групова робота — це взагалі окрема тема, бо виявляється їй треба навчати (це окрема історія). Але більш преземлена проблема тут те, що завжди знайдуться люди, що тупо сідають на хвіст, і ви або їх пропускаєте, або маєте купу проблем (бо треба щоб потім група тих хто ніх не вміє разом зробили щось)

до речі о1 сильно краща за о1-preview, по крайній мірі для розв’язання/брейншторма комплексних задач

Тут питання — яку проблему ви вирішуєте?

Якщо навчити того хто ок згенерувати лабу через чатГПТ, то не варто цю проблему вирішувати. Бо студенту це не треба, не навчився — це було його рішення, тому це його відповідальність. На додачу, ви зіпсуєте собі нерви.

Якщо задача «справедливо оцінити», тобто щоб забивала і відповідальний студент отримали пропорційні оцінки, то тут є ряд підходів:
1) Обмеження в часі. Не найкраще, бо іноді норм студенти не встигають, при цьому ті хто все згенерували здадуть достроково.
2) Використовувати систему, що не дозволяє вставляти код. Як не дивно, але перенабрати код — довше ніж його написати з голови, норм працює з обмеженням в часі.
3) Розширений нагляд, наприклад інтегрувати в систему здачі, щось по типу logrocket.com, щоб можна було переглянути як саме людина писала контрольну задачу.
4) Власне слідкувати за здачею екзамена.

Спостерігати під час іспиту за тим як студент пише код та просити його давати пояснення кожному рядку? Але ж їх 100, тих студентів.

А раніше ви як приймали екзамени та лаби?
Завжди можна додати в РСО вимогу відповісти на теоретичні питання і обмеження, що не можна зарахувати менше ніх Х% балів (в КПІ рекомендація менше 60% балів не зараховувати лабу)

А раніше ви як приймали екзамени та лаби?

Раніше на іспиті мали 20 хвилин на студента, тепер 2 години на 100 студентів (120/100=1.2 хвилини на студента)

Раніше на іспиті мали 20 хвилин на студента, тепер 2 години на 100 студентів (120/100=1.2 хвилини на студента)

Так оце і є проблема.
То треба йти до завкафа чи іншої адміністрації (факультет, універ) і питати «А розкажіть, но мені, як прийняти іспит за 1.2 хв» :) Ну має ж бути у них хоч трохи адекватності.
Я пошукав педнавантаження, яке було в КПІ, там не 2 години на екзамен десь 70-90 чоловік, десь 18-24 години + є час на консультації.

Знову ж повертаємось, до того яка задача стоїть. Ставте автомат. Ну спише людина лаби, якщо там якась зовсім дикуха — ви це побачите, якщо хоч трохи «творчо переосмислено», то ну проскочив так проскочив.

Абстрактні питання/думки, правильні відповіді на які я й сам не знаю:

Хто стане кращим програмістом у довгостроковій перспективі — той хто займався олімпіадним програмуванням і може «з голови» писати код олівцем на листочку, чи той, хто користувався чатомжпт, але робив не академічні відірвані від реальності завдання, а реальні проєкти, корисні людям — сайти, мобільні додатки, комп’ютерні ігри? Я не знаю, питання не риторичне.

Якщо інструменти досягнення цілей еволюціонують (в нашому випадку — інструменти створення програм) — чи дійсно варто обмежувати всіх певним рівнем самостійності, чи все ж краще підхід «використовуйте все, до чого дотягнуться руки, головне щоб задача була виконана»?

Мені здається десь є якась точка балансу, де поєднується «частина знань з голови, частина зусиль перекладається на чатжпт», але як знайти цю точку балансу — я взагалі без поняття.

Ну... я не бачу тут олімпіадної задачі. Проблема у тому що олімпіадні задачі це щось оригінальне, нетипове, я ChatGPT з мого досвіду з таким не дуже добре порається. Як на мене, для розробника скіл багофіксу є критичним, а єдиний спосіб його прокачки це як раз написання власного коду та виправлення помилок, які ти припустив.

Якщо інструменти досягнення цілей еволюціонують до такого рівня, що не будуть припускати помилок, то розробники будуть не потрібні, тоді дійсно, розв’язувати такі задачі буде не потрібно. Якщо ні, то виникає проблема, як тренувати цей скіл. Бо нейромережа буде генерувати код доки не заплутається в багах.

Чим використання чатгпт принципово відрізняється від заплатити комусь за людське рішення задач? Якщо нічим, то може і проблеми немає?
Студент матиме гарні результати по балам за домашнє завдання, але провалиться на очному екзамені. Як доросла людина, він сам має думати як до цього підходити.

А той кому заплатять скористається штучним інтелектом :)

Нас за калькулятори ганяли, і ще на честь хрін заставляли писати код олівцем чертежним шрифтом.

Ще й досі дехто змушує студентів писати реферати з програмування руками, не приймаючи друковані тексти.

Це повний ізврат, тим більше що — був трюк — роздрукувати код зі шрифту Kompas Graphic в дрібних точках, а потім обвести олівцем з гори, звісно усеодно довбатись та набагато швидше.
Чому ми з цієї вправи навчились — абсолютно нічого. То те саме — що ломом підмітати плац, сенс не в тому щоби швидше — а в тому щоб той хто це робить задовбався.
Так само із різними заборонами комп’ютерних ігор і т.д. які типу «призводили до отупіння» — а на ділі призводили до вміння користуватись комп’ютером чисельних dev ops навичок, та навичок із кодінгу і т.д.
При цьому усьому в Computer Since треба навчитись дуже багато чого за час навчання, щоби не гаяти час на аттавізм і беззмістовні вправи.

проблема не в ШІ, а в тому, що викладачу треба «оцінити 100 студентів і на вчора,» а студенту треба «здати 12 предметів за 2-3 тижні, максимум місяць ©.» в нашій системі освіти перевантажені всі, від викладача до студента. і це треба вирішувати на рівні реформування системи освіти, а не замотуванням синьою ізолентою та підпиранням технічними милицями типу «детектор ШІ-генерованого тексту.»

То є дійсно так. Підтримую. Програмування формально на рівні з іншими дисциплінами, хоча часто потребує значних зусиль і від учня і від викладача.

Коли я вчився найбільша шкода була якраз від постійних намагань щось реформувати. Нестачу бюджету, особливо на осучаснення програм і обладнання неможливо реформувати.
Оці усі заморочки із писання програми чертежним шрифтом, реоігіведення і т.п. гуманітарка — це відверто для заповнення програмами часом. І усі в курсі — що треба, але на те що треба не було грошей.

Помилки жпт — тема окрема. Хоча й це також впливає на оцінювання і на результати навчання. Коли учень надто покладається на ШІ не усвідомлюючи як перевірити правильність його відповіді. Ось приклад простої задачі на логіку яка йому не під силу:

У Оксани N братів і M сестер. Скільки сестер у брата Оксани?

Взято звідси: qaweb.dev/...​ua/884-chatgpt-and-logika

Треба міняти всю систему, а почати спершу із скорочення вузів і державних замовлень. А щодо перевірки ШІ , то вже кажуть зараз, що перевірити чи це ШІ може хіба інший ШІ, тому потрібна всього одна нормальна програма, яка пройде сертифікацію МОН. Зараз їх уже немало і вони теж вдосконалюються.

Треба міняти всю систему, а почати спершу із скорочення вузів і державних замовлень.

І на додачу встановити для тих, хто таки здобув вищу освіту з-п на порядок вищу ніж у :) піцайоло.

Ліпше зробити апарат який сам піцу робить і ця робота сама знеціниться. Недавно бачив відео де апарат сам ключі робить.

За великим разунком готування піцци або ключів, це повністю формалізований і відтворюванний процесс де від людини необхідно і достатньо виконувати повторюванні дії достатньо добре. Відповідно, це підлягає автоматизациї, та дуже довго була проблема у слакдності створення самого автомату, за існуючою матиматичною базою обчислювальних здатностей існуючого заліза було занадто мало.
Тому скажімо для збірки урожаю помідорів або винограду, табаку і т.д., було дешевше наймати людей ніж свортити комбаїн. На сьогодняшній час це вже поступово стає не так, наприклад автомоблями вже ШІ керує достатньо добре щоби працювали таксі без водія. Так само в багатьох метро та міських електиропотягах — потяги вже без машиністів і т.д.

Я про це й кажу. Це легше чим якось повпливати на ринкові зарплати. Але на жаль, як сталося із терміналами для кави: люди все одно поперли в аромат каву, заплативши більше і у моєму корпусі такий апарат просто зник. Сподіваюся, що колись нормальна автоматизація повернеться і робочі сили підуть на щось більш потрібне.

У чатгпт зараз поки що болячка в тому, що він будь які несуттєві деталі обов’язково використовує у своєму рішенні. Напишіть умовно в описі задачі про ваші десятичні числа, що сьогодні температура на вулиці +5, і він вже почне галюцінувати.

Власне як і людина. Поставь задачу 10 людям і всі 10 сприймуть її по своєму, звернуть увагу на ті чи інші деталі.

К слову нічого такого.

>> Write a Fibonacci function in python
>> Please note that it is +5C degrees outside and Trump won president election in the US

Here is a simple implementation of a Fibonacci function in Python:

python
Copy code
def fibonacci(n):
if n <= 0:
return “Input should be a positive integer.”
elif n == 1:
return 0
elif n == 2:
return 1
else:
a, b = 0, 1
for _ in range(n — 2):
a, b = b, a + b
return b

# Example usage:
print(fibonacci(10)) # Outputs the 10th Fibonacci number
This function calculates the Fibonacci sequence iteratively, making it efficient and easy to understand. Let me know if you’d like to explore alternative methods, such as recursion or memoization!

Може вже пофіксили) десь зустрічав просто кейс, в якому жпт почав жорстко тупити з несуттєвими вхідними даними.

Інколи він таки вчиться, але от у випадку задачі про ту Оксану (див. вище) та братів, навіть після тренувань — ніяк.

Вот так народжуються міфи і стереотипи. Спочатку з такою впевненістю рандомний чувак заявляє:

У чатгпт зараз поки що болячка в тому, що він будь які несуттєві деталі обов’язково використовує у своєму рішенні.

А потім виявляється що він сам не бачив, просто десь чув, незрозуміло коли, і незрозуміло з якою версією чатгпт, незрозуміло який конкретно був запит і наскільки поширенні такі глюки.

Но інші рандомні чуваки прочитають коментарі типу цього, а потім носяться по всьому інтернету що чатгпт постійно галюціонує навіть на простих запитах.

Це той випадок, коли учні швидше адаптувались до реалій сьогодення, ніж викладачі.
Вирішення цієї дилеми залежить від цілі:
— навчити студента робити роботу
— навчити студента робити роботу виключно самостійно
— навчити студента робити роботу ефективно

В умовах реального життя ніхто не забороняє користуватись ШІ, тому я вважаю, що вирішення це розробляти задачі, з якими ШІ поки що впорується погано.

розробляти задачі, з якими ШІ поки що впорується погано

Так, але ж і для більшості учнів такі задачі не під силу.

В більшості випадків gpt дає гарні відповіді тільки на задачах які він бачив, я пробував змінювати підхід в формулюванні, і точність відповіді досить сильно падала.

Так, його можна заплутати умовою, коли вона складається з декількох частин чи щось слід розуміти за замовчуванням, але з часом він вчиться :(

старається OpenAI підкрутити його агентами!

Ну не так. Кажеш йому відревьювити чи відрефакторити код проекту і він легко це робить, при тому що проект ніколи в очі не бачив. Так що все набагато складніше ніж «задачі на яких він обучався».

Чи коли кидаєш йому скрін з результатів тренування, з пульсовими зонами, зі всіма деталями, і він прекрансо розпізнає і аналізує. Чи якісь лабораторні аналізи крові, також розпізнає, знаходить закономірності і тренди між показниками.

Не думаю що прям до таких деталей обучали, чи підсовували дані схожі на мої.

До речі, видача і точність результату сильно від промту залежить

Я більше не про аналіз, а про вирішення конкретної задачі, яку він не бачив. Спробуйте задачі які є на hackerrank для співбесід, у більшості випадків не буде гарного результату, він не врахує якісь екстремальні кейси або взагалі не вирішить.

Я пам’ятаю в школі забороняли рахувати на калькуляторі. Але з дистанційною освітою ця заборона не була б реальною.

Забороняти не можна, а навпаки — слід використовувати. То ж було б чудово тут почути варіанти як можливості ШІ можуть сприяти навчанню та автоматизації перевірки виконаних завдань.

У нас в корпоративних курсах робиться шаблон программи, де студент має додати якусь річ яку треба вивчити на конкретній лабораторній роботі. Далі є недоступний студенту шбалон де є повний текст программи і автоматичні тести, усе така перевірка відповідає можливостям ШІ. Тобто якщо заморочитись підключити аспірантів і т.д. до такого а також знайти бюджет на сервети і т.д. то усе пядлягає розробці.

Нажаль для викладачів та інтерв’юерів, що полюбляють алгоритмічні задачі, ШІ став такою ж реальністю нашого життя, як підказки та автоматичне доповнення коду в IDE. Тому бачу такі варіанти подальшої роботи.

По-перше, давати алгоритмічні завдання та розглядати їх на заняттях потрібно хоча б для напрацювання досвіду написання ефективних алгоритмів. Але покладатися на подібні задачі в оцінюванні не варто, віддаючи перевагу особистій бесіді. Так, студентів 100, але якщо ви не приділяєте їм достатньо часу, то не маєте достатніх підстав оцінювати їх успішність. Просто з тієї причини, що алгоритмічні задачі в принципі не відображають всю суть програмування, і тому не є репрезентативними для оцінювання всіх навичок.

По-друге, за потреби швидко оцінити навички та базові знання студента/кандидата, варто використовувати спеціальні платформи для оцінювання, які здійснюють моніторинг дій, що можуть потенційно вважатись «чітингом» (копі-паст, вихід з вкладки, тощо), а також записують процес введення коду завдання — при перегляді можна вловити чи код створюється безпосередньо при виконанні задачі, чи вводиться з іншого пристрою (наприклад, телефону, яким було сфотографовано екран монітору для отримання відповіді з ШІ-моделі).

Використання обох підходів, як на мене, дозволить поєднувати ефективність автоматичного тестування та можливість приймати поінформоване рішення щодо успішності студента чи адекватності кандидата. При цьому слід розуміти, що використання ШІ в програмуванні вже стає ключовою навичкою, тому це теж варто оцінити при прийомі на роботу, інакше можна отримати співробітника, ефективність якого значно нижча за стандартну по ринку.

варто використовувати спеціальні платформи для оцінювання, які здійснюють моніторинг дій,

Слушна порада, порадьте щось із числа безкоштовних платформ ..

З безкоштовими не підкажу, нажаль :-(. Для робочих завдань я використовую CoderByte, вони мають trial на 14 днів та підписку за 199$ на місяць без обмежень у кількості кандидатів.

199$ на місяць без обмежень

Дешевше відмовитися :) від викладання курсу з програмування

Якщо там

без обмежень у кількості кандидатів

, то, можливо, можна було б спробувати переконати адміністрацію університета взяти підписку для всього університету, та оскільки я цією платформою не користувався, то не впевнений що це буде доцільним.

То ж постає питання: як унеможливити чи обмежити вплив штучного інтелекту під час виконання завдань з програмування?

Виключити ви його не зможете майже ніяк.

Але. Я б зробив перевірку в 2 етапи (другий доступний для виконання після проходження першого):

1.

Мовні моделі погано пишуть на не знайомих мовах — тож якщо ви запросите надавати відповідь на деякому псевдокоді чи не поширеній мові програмування — скоріше за все сутденти прийдеться писати код самостійно, або, принаймні, багато рефакторити.

Мовні модели зазвичай надають доволі «лінійну» відповідь — спагетті. Сформуйте умови розділення рішення на функції, процедури, класи — але це не повинно бути чітко сформульоване розділення.

Далі я-б після суто формального оцінення — працює-не працює (автоматично запустити і перевірити результат запуску/обчислення) запускав аналіз структури коду — наявність класів, функцій, методів і кількість строк в них — и дивився на статистику по всім зданим роботам — скоріше за все у сгенерованих роботах буде велика схожість як в назвах так стуктурі коду. знов таки, треба вручну первірити тільки ті, що залишились по за цією групою — скоріше за все їх писала людина і писала самостійно.

2.

далі я б взяв скріншот найбільшої відокремленої частини коду (метод/функція) і попросив пояснити чому саме так написано, як можна покращити — зазвичай відповіді мовної моделі помітні (вони багатослівні і дуже загальні)

і наостанок попросив би написати тести для коду (або частини, що краще, якщо заздалегідь невідомо для якої це треба зробити) не використовуючи стандартні для цієї мови тестові фреймворки.

Слушні поради звісно, та знову ж потребують часу та майже ручної перевірки кожної відповіді.

Повністю автоматично ви ніколи не зможете перевірити. Навіть якщо виключити ChatGPT і бути впевненим, що писала людина — можливе списування і проста підтасовка результатів, наприклад, якщо відомо, що на вхід подаються тільки 5 та 8, а на виході повинно бути 13 та 23 відповідно — то замість реального обчислення задачі я можу тупо написати if .. else .. — і автоматичні тести код пройде.

Я вам навіть більше скажу, як людина, яка викладала і перевіряла, хоч і багато рочків тому, бувають випадки, коли код не працює, але видно, що студент вчив, предмет знає та навіть краще за більшість.

У мене був випадок, коли студент натупив в однієї функції, але все інше було не тільки написано у «більш загальному випадку» так ще й продумана архітектура... Тобто формально цей код не пройшов би — і людина отримала не заслужено низьку оцінку, але ж розуміння як треба писати у цього студента було явно краще ніж у більшості групи. Що з цим робити?

Це велика проблема навчання — чим більше формалізована пеервірка, тим більше студенти вчаться підганяти своє навчання під первірку замість того, щоб вчити і розуміти — і на виходи ви отримаєте групу, що чудово вирішує (або хакнула) стандартні задачі, але повністю безпорадна в реальному світі.

О, доречі. Пошукайте і почитайте чудове оповідання Айзека Азімова «Фах».

коли код не працює, але видно, що студент вчив, предмет знає та навіть краще за більшість

О, так, оцінювання потребує враховувати такі випадки.

З власних розваг: перед тим як запропонувати задачу студентам, перевіряв як на неї реагує chatgpt і далі заплутував його так, щоб він видавав не правильний код, а потім відзначав цей код як такий що наче б то правильний. Не повірите — перша ж відповідь від студента була схожа на хибний код.

У мене донька навчається в ліцеї — каже що викладачі дають код студента ChatGPT і той відповідає, чи то він писав, чи ні ;)

і той відповідає, чи то він писав, чи ні ;)

Креативно. А якщо він навчиться брехати :)

Ну навчитися він не може, його «вчать» люди, і тут не зрозуміло, навіщо вчити обманювати інструмент?

Але загальна відповіть — тоді дивитись в код і задавати питання студенту ;)

Підписатись на коментарі