Когда говорят про вводный курс Python, обычно представляют классический набор: print("Hello, world!"), калькуляторы, задачи на циклы, списки чисел, сортировки и “угадай число”.
Формально всё это работает. Но когда ты приходишь с таким набором к лингвистам, филологам или преподавателям гуманитарных направлений, очень быстро становится понятно, что одной технической корректности кода недостаточно.
Людям важно не просто написать цикл. Им важно понять, зачем этот цикл нужен в их профессиональной деятельности. Нужен был другой вход в программирование — через текст, язык, учебные материалы и задачи с практической целью.

Python для гуманитариев: почему синтаксиса недостаточно
Во многих вводных курсах Python первые примеры выглядят так:
numbers = [1, 2, 3, 4]
или так:
for i in range(10): print(i)
С точки зрения программирования всё правильно. Но для человека, который работает с текстами, учебниками, переводами, анкетами, студенческими работами и исследовательскими материалами, такие примеры часто выглядят оторванными от реальности.
Возникает ощущение: “Хорошо, я поняла, что Python может вывести числа от 0 до 9. А зачем мне это?”
Проблема не в гуманитариях и не в Python. Проблема в контексте входа: с чего начинается обучение. Если человек ежедневно работает с языком, ему проще понять программирование через операции над текстом:
посчитать количество символов;
найти необходимое слово в массиве текста;
удалить стоп-слова и настроить свой список стоп-слов;
посмотреть, какие части речи, именованные сущности встречаются чаще.
Это всё ещё базовый (хоть и с NLP-элементами) Python, но теперь он встроен в понятную задачу.
Первая лабораторная: начать не с чисел, а с текста
В первой лабораторной мы не стали начинать с абстрактного калькулятора. Мы начали с текста.

Обучающиеся видели не просто переменную x, а переменную text (работали, кстати, с текстами разными - художественными и научными):
text = """This is the story of Little Red Riding Hood. She’s got a red coat with a hood.She loves the coat."""
И дальше узнавали про текст базовые вещи, но делали это с помощью команд на Python:
print(type(text)) print(len(text))
В первой лабораторной мы разбирали:
как сохранить текст в переменную;
что такое строка;
как посчитать количество символов;
как привести текст к нижнему регистру;
как найти слово в тексте;
как разбить текст на список слов;
почему компьютер различает
Text,textиTEXT.
Именно на примере регистра очень легко объяснить, зачем вообще нужна предобработка. Если одно и то же слово написано с заглавной буквы, строчными буквами и капсом, Python будет воспринимать это как разные элементы. А значит, статистика будет искажаться.
Вторая лабораторная: первая исследовательская задача
Во второй лабораторной мы перешли к более прикладному анализу текста.

Здесь уже появились:
очистка текста от пунктуации;
удаление стоп-слов с помощью nlp библиотек;
Counter;таблица частотности;
проценты;
графики;
облако слов (фавориты));
частеречная разметка через
spaCy.
Цель - посмотреть какие слова в тексте задают его содержание?
Примерно такой код становится уже не просто упражнением, а инструментом:
from collections import Counterword_counts = Counter(words_without_stopwords)print(word_counts.most_common(10))
Потом результат можно превратить в таблицу:
import pandas as pd freq_table = pd.DataFrame( word_counts.most_common(20), columns=["word", "frequency"] )
И добавить проценты:
freq_table["percent"] = freq_table["frequency"] / sum(word_counts.values()) * 100

Важный принцип: доступность без потери содержания
Когда говорят “курс для гуманитариев”, иногда это понимают как “сделать максимально простенько”. Я думаю, это ошибка. Гуманитариям не нужен упрощённый курс. Им нужен переведённый на их профессиональный язык курс.
Плохой вариант:
“Давайте не будем ничего сложного, просто напишем пару print”.
Хороший вариант:
“Давайте возьмём кейс из сферы. Например, поработаем с текстом и посмотрим, какие операции нужны, чтобы подготовить его к анализу”.
В лабораторных я стараюсь не убирать сложность полностью, вводить материал постепенно. А еще обязательно делать а-ля коммуникативную установку:) Если сказать только: “Вот spaCy, он сам определяет части речи”, — у обучающихся легко возникает ощущение черного ящика. Поэтому я старалась разбирать такие блоки в два этапа.
Первый этап — предметный: Что мы хотим сделать с текстом и для чего?
Мы хотим понять, какой перед нами текст: больше описательный или событийный. Для этого определяем части речи и смотрим, чего больше: существительных, прилагательных или глаголов.
Второй этап — технический: Как это записано в коде?
Мы загружаем языковую модель, передаем ей текст, получаем обработанный объект
doc, а затем проходим по его токенам (минимальной единице текста, с которой работает программа после разбиения текста) и выводим слово вместе с его частью речи.
После объяснения я часто прошу объяснить обучающихся объяснить логику программы.
Например:
import spacy
— что мы здесь подключаем?
nlp = spacy.load("ru_core_news_sm")
— что такое nlp в этой программе: текст, модель или функция-обработчик?
doc = nlp(text)
— что происходит с текстом в этой строке?
for token in doc[:10]: print(token.text, token.pos_)
— что именно мы выводим?
Такой прием оказался очень полезным. Когда обучающиеся объясняют код, они перестают быть пассивными наблюдателями, не просто копируют ячейку из Colab, а восстанавливают логику действия: что было на входе, что делает программа и какой результат получается на выходе.
Что оказалось важнее синтаксиса. И вот он.. коммуникативный подход!
После первых занятий стало понятно: самая сложная часть — не сам код.
Сложнее другое:
объяснить технические термины;
не перегрузить людей математикой и этими самыми техническими терминами на вводных занятиях;
показать, что ошибка в коде - это не что-то нерешаемое, а нормальная часть работы;
постоянно отвечать на вопрос “зачем мы это делаем?”.
Это хорошо тесно связывается с методикой преподавания иностранных языков, в частности с принципом коммуникативной направленности обучения. В обучению иностранному языку упражнение не должно быть оторвано от речевой задачи. Например, грамматика эффективнее усваивается не как набор правил, а через речеосмыслительную задачу. Мы не просто “изучаем Past Simple”, а учимся рассказать о событии в прошлом. Аналогично в Python мы не просто “изучаем метод строки”, а учимся готовить текст к автоматизированному анализу.
Почему NLP мотивирует лучше, чем абстрактные задачи
NLP хорошо работает как стартовая зона для гуманитариев по нескольким причинам.
Во-первых, объект анализа знакомый. Текст не нужно дополнительно мотивировать: с ним уже работают филологи, лингвисты, переводчики, преподаватели.
Во-вторых, результат быстро виден. После нескольких строк кода можно получить список слов, частотность, график, облако слов или части речи.
В-третьих, NLP связывает программирование с исследовательским мышлением. Код становится не целью, а способом задать тексту вопрос.
Например:
какие слова повторяются чаще всего?
какие слова исчезнут после удаления стоп-слов?
как изменится результат после приведения к нижнему регистру?
какие части речи доминируют в тексте?
можно ли по частотным словам понять тему текста?
где автоматическая разметка ошибается?
Последний вопрос особенно важен. Гуманитарии хорошо понимают неоднозначность языка. Поэтому им легче принять мысль, что автоматический анализ требует интерпретации и проверки человеком.
Что уже сработало на первых занятиях
Сейчас курс ещё в процессе, но первые занятия уже прошли, и обратная связь оказалась очень показательной. Самый ценный фидбэк был не “интересно”, а именно:
“понятно объясняете”.
Начинать с понятного объекта — текста.
Каждую команду привязывать к смыслу: зачем она нужна для анализа.
Давать много маленьких шагов, а не один большой блок кода.
Оставлять место для самостоятельной подстановки своего текста.
Просить не только запускать код, но и интерпретировать результат.
Например, после частотного анализа важно не просто вывести таблицу, а спросить:
какие слова действительно характеризуют тему текста?
какие слова оказались “шумом”?
что изменилось после удаления стоп-слов?
Так лабораторная становится настоящим исследованием, мини, конечно, но исследованием)
Несколько выводов
гуманитариям не обязательно начинать с классических задач программирования. Им можно и нужно давать вход через профессионально значимые данные.
NLP - это хороший старт, потому что текст для гуманитариев является естественным объектом работы.
прикладной контекст снижает страх перед кодом. Когда человек понимает, зачем нужна строка кода, она перестает выглядеть как случайный набор символов.
важна не только программа курса, но и язык объяснения. Иногда достаточно добавить одну фразу “зачем мы это делаем”, чтобы сложный блок стал понятным.
гуманитарный курс Python - это не упрощенная версия технического курса, а отдельная методическая конструкция, где программирование становится инструментом анализа текстов, данных и образовательных процессов.
Что дальше
Дальше хочется развивать курс в сторону более сложных, но всё ещё прикладных задач. И, конечно, постепенно добавлять математику, векторы, модели и машинное обучение. Но не в самом начале, а тогда, когда у слушателей уже есть ощущение:
“Я понимаю, зачем мне это нужно”.
Dimsml
У всяких там лингвистов и переводчиков вообще-то должны были быть пары по формальным языкам и грамматикам, где им должны были бы объяснить что это и зачем оно нужно, но как всегда про это забывают.
Ну это так, к слову, потому что я помню что у нас весь поток вообще ничего в этом не понимал, а я сидел в обнимку с Introduction to Automata Theory, Languages, and Computation за авторством Hopcroft, Motwani и Ullman и тихо сходил с ума от сигма-нотации и прочих таинств дискретной математики, которые взрывали мой мозг начисто.
Ну и возникает вопрос такого подхода:
Вот привыкли они, что есть объекты и методы, а дальше перед ними традиционная проблема такого прикладного обучения питону: вот попалась им задача, в которой непонятно что делать, имеющиеся методы библиотеки ничего полезного не делают и т.п.
Вопрос: они понимают, что там внутри этого метода живёт такой же код? Что он разбит на малые части, которые индивидуально решают какую-то подчасть задачи, а потом другие части решают более сложные подчасти используя предыдущие результаты?
И не обязательно заставлять их считать числа Фибоначчи, тот же бинарный поиск это, считай, поиск иностранного слова по словарю где нет оглавления, но все слова по порядку.
Просто я к тому, что в таких случаях неплохо бы обучить их методу "разделяй и властвуй" и что внутри этих методов такой же код, который они при желании могут написать сами.