company_banner

Как ответить запросом на запрос, или Базы данных не для чайников

    В Технопарке я преподаю студентам курс «Базы Данных». Уже из названия ясно, что речь идет о неотъемлемой части современной IT-грамотности — без этой дисциплины сегодня трудно представить себе компьютерную специальность. Базы данных в том или ином виде сегодня окружают нас повсюду — в самом обычном смартфоне их сотни, что, разумеется, далеко не предел.




    Я — преподаватель


    Зачем молодые люди идут в систему образования? Почему хотят работать со студентами в качестве дополнительной профессиональной нагрузки? Мне очень часто задают подобные вопросы.

    С начала своей профессиональной карьеры, я собирал необходимые мне данные по крупицам, из самых разных источников. За семь лет набралось немало, со временем я начал понимать, что хочу делиться этим со студентами, ведь тогда они смогут сократить ту часть пути, которую с таким трудом прошел я, не накапливать уже существующую базу знаний самостоятельно, а использовать это время для ее дальнейшего расширения.

    «Мне казалось, что у преподавателя в ВУЗе есть очень важный рычаг воздействия на студента — отчисление»


    Свою преподавательскую карьеру я начинал школьным учителем информатики. Тогда мне казалось, что у преподавателя в ВУЗе, в отличие от школы, есть очень важный рычаг воздействия на студента — отчисление. Со временем я понял, что это не совсем так: студенты, с которыми я работаю сейчас, настолько замотивированы (об этом я расскажу чуть позже), что, если они что-то делают не так, то проблема, или, по крайней мере, ее корень, с большой степенью вероятности следует искать в преподавании, а не в них.

    Немного лингвистики: слово «учитель» происходит от глагола «учить», а преподаватель — от «давать» (даже «отдавать», если заметить каламбур :). И не зря первое употребляется по отношению к школе, а второе — к высшему образованию. Главная цель вузовского преподавателя заключается в том, чтобы дать студентам информацию. Дать информацию, а не научить конкретным действиям — и в зависимости от качества ее усвоения оценить свою работу. То есть задача в том, как дать информацию. Кажется, что это лежит на поверхности, все об этом помнят и даже доходят в этом направлении до крайностей: например, превращают учебный материал в пошаговую инструкцию к действию в разных ситуациях: из А в B, из В в С. Возможно, даже из A в C. Но нам нужно научить их, как проложить дорогу из точки А в любую другую точку с использованием всех остальных букв, а также букв тех алфавитов, которые будут использовать люди программисты будущего, если хотите.

    «Самое сложное — сделать так, чтобы студенты заинтересовались курсом и вынесли из него как можно больше пользы»


    Создать хорошую программу курса — задача не самая простая. После каждой итерации курса я модифицирую его, и сколь бы значительными не были преобразования, он все равно бесконечно далек от идеального. И дело здесь не столько в критичном подходе к себе, а в том, что знания в этой области модифицируются на глазах, и успевать за ними — и есть задача нашего образовательного процесса.

    Я часто вспоминаю свои студенческие годы, анализирую методы и программы собственных преподавателей, чтобы разобраться, почему от одного курса оказалось много пользы, а от других — почти нет.

    Одними из самых запомнившихся мне курсов стали «Управление предприятием» и «Автоматизация производства». Первый читала женщина, которая прежде была владелицей собственного предприятия, и на протяжении курса она рассказала нам всю историю становления её бизнеса, начиная от регистрации фирмы и заканчивая рейдерским захватом. Она приводила массу примеров, они казались нам такими интересными и захватывающими, что никто не пропускал ни одной лекции. А все потому, что материал был настоящим — не отрешенным от реальности, а наглядным.

    Другой курс вел руководитель отдела автоматизации производства. В течение пяти дней он работал у себя на заводе, а в субботу приезжал к нам и чаще всего начинал лекцию со слов «а вот вчера…» и рассказывал реальные примеры из своей практики.

    С этим аспектом мне было справиться довольно просто, ведь все преподаватели Технопарка каждый день занимаются непосредственно тем, о чем рассказывают своим студентам. Они постоянно находятся в курсе всех современных технологий, и это делает дисциплины уникальными, современными и живыми.

    «Нельзя просто так взять и спроектировать базу данных»


    Первым делом я попытался вспомнить тот курс, который прослушал в своем вузе: нам рассказывали про базы данных, ориентированные на MS Access, а языку SQL была посвящена всего пара лекций. С тех пор я больше никогда не пользовался MS Access, и ценность приобретенных знаний стремится к нулю.

    Поэтому при проектировании своего курса я решил отталкиваться от того, с чем непосредственно работаю в настоящее время сам. Без зазрения совести рассказывать о своих ошибках и неудачах, показывать реальные примеры из своих программ и пояснять задачи, которые приходится решать каждый день.

    С чего начинается строительство? Конечно, с проекта. Так и в базах данных необходимо сперва подготовить макет того, что вы ожидаете получить. Поэтому мой курс начинается с проектирования баз данных, создания логических схем, выделения сущностей и связей. Ну а получив конкретную структуру, ей необходимо придать некую описательную форму — с этим прекрасно справляется DDL (DATA Definition Language).



    Готовая структура — это как скелет — объект, неспособный к самостоятельной жизни, но являющийся невероятно важным каркасом для реального человека. Поэтому следующей необходимой частью, естественно, стал разбор языка манипулирования данными SQL.

    Очень часто именно на этом и заканчивается курс подготовки студентов по базам данных: студентам дают снасти и заставляют уже самостоятельно осваивать мастерство. Но цель Технопарка в целом и моего курса в частности — вырастить уверенных и полноценных разработчиков. Поэтому в нашем курсе этот этап — не конец и даже не середина.

    Одной из важнейших задач, которую я хотел решить в ходе своего курса, это подготовка ребят к работе с высоконагруженными системами, где на счету каждая доля секунды. Так, в следующем разделе курса студенты учатся находить проблемы и узкие места в своих запросах, и самое главное — решать эти проблемы.

    «Готовая структура — это как скелет»


    Конечно, при работе с базами данных невозможно пройти мимо вопроса правильного конфигурирования сервера базы данных, его администрирования и безопасности. Можно найти огромное количество примеров того, как даже самые большие сайты страдают от проблем с SQL-injection, о безопасности запросов написано огромное количество статей, но каждый день появляются все новые и новые примеры того, как люди пренебрегают простейшими правилами.

    Кажется, что программа получилась обширной и всеобъемлющей, но все равно чего-то не хватает, правда? Коль мы говорим о нуждах современного разработчика, невозможно обойти стороной столь ныне популярные NoSQL базы данных. Им и посвящены последние лекции курса, которые одновременно и подводят ему своеобразный итог.



    Ну, вот теперь точно все. Или нет? Я уже упоминал снасти, которые висят на стене. Так вот, мы постарались сделать так, чтобы в ходе курса они там не висели, а шли в дело и студенты научились бы ими умело пользоваться.

    В течение всего семестра студенты разрабатывают собственные проекты. Сначала проектируют, потом оживляют их при помощи запросов. Создают для них высокую нагрузку и оптимизируют работу. Кроме того, в ходе семестра проводится несколько практических работ на проверку умения писать правильные и быстрые запросы. Но это не столько контроль знаний, сколько набор задач из реальной жизни, с которыми им еще предстоит столкнуться не раз. И уже сейчас они могут найти на них правильные ответы, пусть не всегда самостоятельно, иногда с помощью коллег и преподавателя. Я очень надеюсь, что за полгода им удается перенять от меня то, чему я учился десяток лет. И я очень хочу увидеть, как они превзойдут меня и даже чему-то научат.

    «Чаще всего правильные решения студенты находят сами»


    Так что же сделано? В рамках курса я стараюсь уходить от строго теоретической информации. В любой момент можно открыть руководство и посмотреть синтаксис того или иного запроса или конструкции. Поэтому я стараюсь приводить максимум примеров из реальной жизни, но не примеры решений, а примеры задач. Чаще всего студенты сами находят правильные решения, это придает им уверенности в себе и увеличивает их опыт.

    Наши лекции снимаются на видео (пока они доступны только для участников Технопарка, но в будущем будут выложены в открытый доступ) и если студентам пришлось пропустить лекцию, то они всегда могут посмотреть ее запись дома. Бывает и так, что студенты смотрят прошлогодние записи лекций до самой лекции, и приходят уже подготовленные. Но и для них находятся задачи, которые придется решать.

    Конечно, нельзя обойти вниманием практику. Я уже вскользь упомянул о проекте, который пишут студенты в ходе курса, но только им дело не ограничивается. В частности, одна из первых практических задач — это построение схемы базы данных. При этом проверкой правильности занимаются студенты из других групп — тем самым они учатся находить ошибки в существующих схемах. Кроме того, есть несколько семинарских занятий по построению запросов. И в этом году будет разработана автоматическая система проверки ответов, при помощи которой вы можете отправить ваш запрос, и она скажет, правильно ли тот был написан. Мне кажется, это добавляет какой-то азарт, элемент игры в учебный процесс.

    Студенты Технопарка: какие они?


    К студентам Технопарка нельзя относиться как к обычным студентам или даже как к студентам Бауманки. Для поступления в Технопарк они проходят специальный отбор, состоящий из трех этапов. Сначала — заочное тестирование, затем — очное, которое проводим уже мы, преподаватели Технопарка, и в завершение — тестирование с HR-специалистами.

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



    Помимо базового набора курсов Технопарка, наши студенты посещают еще как минимум 6 пар лекционных занятий в неделю, и выполняют довольно внушительные домашние задания. Многие из них становятся стажерами, и в этом случае еще и работают по 20 часов в неделю. Кто-то из студентов подсчитал, что при такой нагрузке свободной остается только половинка воскресенья. Вот и судите, какие они.

    Они работают. И я не о стажировке. Я об отношении к учебе. Это не просто отсиживание лекций — это упорная работа, работа на качество и результат. И благодаря этой работе эти молодые люди получают бесценный опыт и знания.

    Они голодные. Нет, это не та история о студенте, который вечно хочет есть. Они голодные до знаний. На лекциях они сами предлагают темы для обсуждений, делятся своими историями решения тех или иных задач. А почти после каждого занятия подходят и задают вопросы: «А как это? А это?»

    Они умные. Редко возникает вопрос, на который они не могут найти ответ, а часто и не один. Иногда я задаю вопросы, в которых очевидным оказывается неправильный ответ, и у меня уже наготове комментарий, который должен подтолкнуть их к обнаружению ошибки. Но они опережают меня и сразу доходят до таких решений, о которых я не знал и которые лучше моих. Возможно, прозвучит пафосно, но ученики постоянно превосходят своего учителя. И в этом та радость, ради которой мы преподаем.

    Что же в итоге


    Прошло уже две итерации моего курса, многие из слушателей стали стажерами Mail.ru Group, большинство уже сейчас успешно влились в ряды наших разработчиков. Несмотря на это, а, если честно, благодаря этому, они часто приходят ко мне за советами, и я вижу в этом только плюсы. Они не боятся взаимодействовать вместо того, чтобы сидеть на месте, растрачивая силы и время в тех случаях, когда продуктивнее решать вместе. Они знают, что я могу помочь найти выход из сложных ситуаций, задать путь для поиска решений, и в этом я вижу основной показатель того, что успешно справляюсь со своим преподавательским амплуа. Теперь моя задача — не останавливаться, развиваться вместе со своими студентами, сегодняшними и будущими, ведь программирование, как и все на свете, не стоит на месте.

    Павел Щербинин,
    программист контентных проектов
    Mail.Ru Group 751,49
    Строим Интернет
    Поделиться публикацией
    Комментарии 35
    • +11
      На диаграмме из первого рисунка у вас клиент может оформить только один заказ, состоящий только из одного товара. И вообще, странная какая-то схема.
      • +3
        Клипарты такие клипарты…
        • +26
          Да и на фото я не очень получился
          • 0
            Чувство юмора у преподавателя — очень хорошо! Но вы всегда отшучиватесь, когда коллеги или студенты указывают вам на ошибки?
            • +7
              При условии, что мы не знаем конкретных требований к данной ИС, нельзя с уверенностью утверждать, что она содержит ошибки.
              • –1
                Даже не зная конкретных требований к данной ИС, можно с уверенностью утверждать, что она содержит орфографические ошибки.

                Извините, но после этой картинки, которая находится до ката и привлекает внимание, у меня испортилось впечатление о вашей статье. А статья хорошая.
                • +2
                  Спасибо за замечания и за хороший отзыв. В следующий раз буду более внимательно подбирать клипарт для статьи.
          • –2
            Какая схема? Там есть схема?
            • 0
              это может быть логическая схема со связями «многие ко многим», не отображёнными связующими таблицами.
              • 0
                Нет, там же явно указаны внешние ключи. Если бы, например, в «Order» не было «Product_ID», то тогда можно было бы предположить ваш вариант, что в связи «Order — Product» инкапсулирована таблица, реализующая «многие-ко-многим».
            • +2
              Красота, а что делать программистам из небольших городов, недавно закончивших университет по профессии, из которого вынесли ноль на палочке. Которые хотят учится и развиваться, при этом оставаясь жить в своём родном городе?

              Лично для себя, ради закрепления знаний, думаю получить сертификаты по MySQL и PHP, НО кроме меня эти сертификаты никому не нужны. «Погоня за идеалами вызывает депрессию и приводит к прокрастинации...» вот и получается, что бы жить счастливо нужно занижать свою планку ожиданий от профессии.

              P.S: Стаж веб-программиста 8 лет, пойду дальше двигать баннеры :(
              • 0
                >> хотят учится и развиваться, при этом оставаясь жить в своём родном городе
                два условия создают нулевое множество решений, придется выбирать (есть исключения, их единицы)
                • +9
                  По поводу отсутствия образования. В очень скором времени будет опубликовано видео наших курсов и познакомиться с ними сможет любой желающий. О таких проектах как www.coursera.org/, edx.org/, www.udacity.com/ и иже с ними, думаю напоминать не стоит. В общем, ищущий да обрящит.

                  Где родился там и пригодился? Я, конечно, могу ошибаться, но для программистов этот вопрос стоит менее остро. Найти удаленную работу вполне реально, конечно, зарплата будет отличаться от той которую вы могли бы получать в DEFAULT_CITY, но предложений вполне достаточно.

                  Дерзайте!
                  • 0
                    Не знал о таких сайтах — спасибо за ссылки!
                • +15
                  Только еврейские Базы Данных отвечают запросом на запрос.
                  • +1
                    Я так и не понял смысла заголовка.
                    Результат SQL запроса — новый SQL запрос, получается?
                    Если нет, то заголовок совсем неудачный.
                    А текст нормальный.
                  • +1
                    А где можно найти учебную программу курса?
                  • +1
                    А (по поводу клипартности клипарта) с чего это вдруг Primary Key называется [ИмяТаблицы]_ID? Это стандарт такой?
                    • +3
                      Это распространенный вариант именования PK, имеет свои плюсы и минусы.
                      В частности есть NATURAL JOIN который объединит таблицы по атрибутам с одинаковым именем.
                      Или оператор USING:
                      t1 JOIN t2 USING(t1_id)
                      
                      • 0
                        У меня такое прижилось тоже. Не помню точно, то ли Delphi то ли Access по умолчанию так именовали.
                        Там общая идея в итоге была в уникальности имен полей по всей базе данных. Ей и сейчас следую, по крайней мере не вредит.
                        • +2
                          Обычно есть два устоявшихся стандарта именования
                          [ИмяТаблицы]_ID или ID_[ИмяТаблицы] везде

                          либо же
                          ID — в таблице
                          ID_[ИмяТаблицы] — во внешнем ключе

                          Я предпочитаю второй вариант так-как сразу видно где первичный ключ где внешний.
                        • +2
                          Не понял заголовок, а именно: «Как ответить запросом на запрос?» Я думал тут какой-то принцип, сделать запрос в бд и в ответ получить новый запрос. В чем смысл такого заголовка?
                          • 0
                            Еврейская база данных отвечает запросом на запрос.
                            • +1
                              Возможно, что автор вкладывал следующую мысль: запрос на образование по теме «как правильно делать запрос» => «Запрос на запрос».
                            • +1
                              Спасибо за статью! Легко читается и остаются только приятные мысли, которые наводят на размышления…
                              Увлекательно почитать о Вашем опыте преподавания. :)
                            • 0
                              Павел, а скажите пожалуйста, Вам не стыдно работать в компании которая в большинство десктопных программ начиная с 2004-2006 года пихала AdWare в виде галок «поставить мейлру спутник», «поставить мейлру агент» которые было очень сложно вычистить и люди >60 с этим впринципе не справлялись?

                              Ну а рассказ мне больше показался самопиаром из серии «как я искал таджиков которые будут работать за еду». Так много студентов стали стажерами, ой как много… прям пупок развязался и ЧСВ подскочило…

                              При чем тут БД за Вашей болтологией я так и не разглядел, видимо для этого просто надо стать студентом технопарка и потом непременно продаться мылу в рабство. Все верно, плюньте на изучение Erlang, Scala и С++, смотрите еще пару лет на картинки с дурацким выражением лица Шона Бина, слушайте речи о том какие же хитрые базы данных, да и вообще будьте зомби-стадом на службе у Господина!
                              • +1
                                Хабы: Блог компании Mail.Ru Group, Учебный процесс в IT, Программирование*
                                К первым двум вопросов нету, а вот программирование тут причем?

                                Теги: Технопарк, mail.ru, базы данных, проектирование баз данных
                                Опять же к первым двум нету вопросов,
                                базы данных видимо притянуты перечислением,
                                про проектирование баз данных тоже ничего нету, кроме того что в технопарке я вас научу как это делается.

                                Статья объемная и я даже для чего-то её прочитал, и только потом понял что зря потратил время…
                                • +1
                                  Думаю, важно ещё дать студентам представление о возможностях дальнейшей специализации в данной области. Например, разобрать структуру сертификаций в Data Platform от Microsoft или Oracle, рассказать о темах экзаменов и курсов — думаю, всплывёт много новых терминов, которые должны быть для студентов хотя бы узнаваемыми.
                                  • 0
                                    Спасибо за идею. К следующей итерации курса, я постараюсь пересмотреть его с этой стороны.
                                  • 0
                                    Где можно посмотреть видео/слайды лекций?
                                    Мне трудно представить как за 4 часа можно рассказать DML, DDL, TCL, да так, чтобы потом можно было говорить о хранимых процедурах и профилировании.

                                    В курсе вы говорите о Transact-SQL и pl/SQL. Какая именно БД используется?
                                    • –3
                                      Первым делом я попытался вспомнить тот курс, который прослушал в своем вузе: нам рассказывали про базы данных, ориентированные на MS Access, а языку SQL была посвящена всего пара лекций. С тех пор я больше никогда не пользовался MS Access, и ценность приобретенных знаний стремится к нулю.

                                      Поэтому при проектировании своего курса я решил отталкиваться от того, с чем непосредственно работаю в настоящее время сам.


                                      То есть, вы решили полностью повторить ошибку вашего вузовского преподавателя и дать студентам информацию, которая, вероятно, нигде им потом не пригодится?
                                      • +1
                                        Паш, добавь в качестве семинара или в качестве основного материала рассказ об основных способах хранения деревьев. Я думал, что ты такое даешь, и очень удивился, когда студенты четвертого семестра попросили рассказать. У меня ушло 15-20 минут беглого обзора.
                                        • 0
                                          Заголовок поста слабо соотносится с содержанием. Немного автобиографии, самолюбования, рекламы своей работы, много-много воды. Реально полезной информации ноль. Ставлю жирный минус.

                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                          Самое читаемое