Задание из вступительного курса «Введение в информатику» на платформе Code Studio
Сайт для обучения программированию Code.org попал в неловкую ситуацию. Из-за «технических проблем» на платформе Code Studio утром 20 января с 9:19 до 10:33 PST работы школьников по программированию — весь написанный код и другие действия на сайте — не удалось сохранить.
Технический директор образовательного сайта Джереми Стоун (Jeremy Stone) оперативно опубликовал объяснение произошедшего: «До нынешнего времени мы хранили работы по программированию учеников в таблице с 32-битным индексом, — написал он. — Эта база данных может хранить только 4 млрд строк информации об активности. Мы не осознавали, что приближаемся к этому лимиту, и таблица заполнилась».
«Сейчас мы сделали новую таблицу активности студентов, которая сохраняет учебный прогресс. С новой таблицей мы перешли на 64-битный индекс, который позволяет хранить до 18 квинтиллионов строк информации, — объяснил технический директор. — Положительной стороной является то, что новая таблица сможет хранить информацию об учебных работах миллионы лет».
Из-за проблемы с переносом данных сайт вообще на некоторое время ушёл в офлайн, что могло обеспокоить 16 миллионов учеников, которые проходили там задания и сохраняли результаты. Позже учебная платформа по программированию вернулась в строй с частично восстановленными данными.
Администрация пояснила, что код, созданный между 9:19 до 10:33 PST, сохранить не получилось, он потерян безвозвратно. Кроме того, на время переноса данных из старой таблицы в новую некоторый сохранённый ранее код был временно недоступен. Но в течение суток программисты Code.org закончили перенос данных, и вся сохранённая информация пользователей снова появилась в их аккаунтах.
Code.org — некоммерческая организация и сайт, который помогает школьникам и другим начинающим ученикам освоить основы программирования. На сайте размещена бесплатные уроки программирования. Сайт открылся в январе 2013 года с первоначальной целью составить каталог компьютерных курсов в школах США. Основатель проекта Хади Партови (Hadi Partovi) тогда заметил, что в 90% американских школ вообще не преподаётся программирование, хотя это «фундаментальная дисциплина». Инициатива получила всеобщую поддержку. В феврале 2013 года в рекламе Code.org снялись Билл Гейтс, Марк Цукерберг, Джек Дорси и другие программисты и предприниматели — все они говорили, как важно научиться программировать.
В декабре 2013 года Code.org запустил общенациональный конкурс Hour of Code Challenge, в котором предлагалось принять участие всем студентам и школьникам страны. Участники решали простые задачки на программирование: нужно было написать небольшой фрагмент кода на визуальном «детском» языке программирования Blocky, чтобы достичь поставленной цели. После запуска конкурса в нём поучаствовал даже тогдашний президент США Барак Обама, а также руководители крупнейших ИТ-компаний, в том числе Microsoft и Apple. В общей сложности около 20 млн участников написали более 600 млн строк кода.
Поскольку в большинстве школ отсутствовали уроки программирования, организаторы Code.org начали решать эту проблему. С 2014 года там открылись курсы программирования, в которых могла участвовать любая школа. К 2017 году обучение на Code.org прошли более 51 тыс. учителей информатики. Были заключены партнёрские соглашения со 120 учебными округами и множеством школ на обучение школьников на сайте Code.org. По опросу учителей, 99% из них рекомендуют вступительный курс «Введение в информатику» (20-часовые курсы по основам информатики для всех возрастов, доступны на русском языке).
По текущей статистике, на учебной платформе Code Studio зарегистрированы 506 546 учителей информатики и 16 472 129 учеников.
Сейчас организаторы национальной американской программы ставят перед собой цель устранить неравенство в информатике: привлечь в программирование девочек и меньшинства (афроамериканцев и латиноамериканцев), добавить информатику во все 12-е классы американских школ и заставить власти всех 50 штатов признать информатику базовым учебным предметом (20 штатов уже сделали это). Code.org теперь вышел за пределы Америки: сейчас курсы программирования доступны на 45 языках мира, в том числе на русском.
Наверное, когда проект создавали в 2013 году, организаторы не рассчитывали на такую популярность, поэтому изначально спроектировали 32-битный индекс для учебной платформы. Мол, 4 млрд строк должно быть достаточно для каждого.
Если посмотреть на эту проблему философски, то 20 января 2017 года ученики на курсах программирования получили по-настоящему ценный практический урок из реального мира. Изначальный выбор архитектуры проекта может иметь непредвиденные последствия для внедрения, управляемости и жизнеспособности проекта в долговременной перспективе. К тому же, этот случай поощрит детей к размышлениям, как избежать рисков, вызванных надзором некоторых взрослых. И что облаку нельзя доверять на 100%.
Комментарии (43)
saboteur_kiev
23.01.2017 19:51+4Нигде нет информации, сколько конкретно из 16 млн школьников хотя бы залогинилось 20 января?
Баг конечно забавный и поучительный, но «потеря домашней работы» явно не критичная…Ommonick
23.01.2017 22:19+1Тут критична не столь «потеря домашней работы», а тот факт что в продукте для пользователей затаился подобный баг. А если вместо кода школьников хранилась бы история болезней пациентов? В общем мотать на ус.
pewpew
24.01.2017 01:17-1Кажется продукт некоммерческий. С чего бы им вообще кому либо что либо обещать? Они делают проект из альтруистических побуждений. А вы с них ещё чего-то требуете.
Ommonick
24.01.2017 19:50Если я альтруистически делаю автомобиль — у него не должны на 100т.км пробега отваливаться колеса. Особенно когда им пользуются другие. И продукт для пользователей != коммерческий продукт.
pewpew
24.01.2017 19:56Никто никому ничего не должен.
К слову, ребята достойно вышли из положения. Не зассали. Спокойно объявили о произошедшем инциденте, признали свои ошибки, закрыли сервис, внесли корректировки и отчитались.
Профессионально и вполне качественно.
Doverchiviy_kot
23.01.2017 20:23-7Если посмотреть на эту проблему философски, то 20 января 2017 года ученики на курсах программирования получили по-настоящему ценный практический урок из реального мира.
Думаю что некоторые поняли то, что нужно в программках просто для каждой переменной давать float/строку.daiver19
23.01.2017 21:07+17И потом получать оценку в 4.9999999997 балла.
General_Failure
24.01.2017 05:15+5С отбрасыванием дробной части вместо округления в формировании ведомостей и других учебных документов
vlivyur
24.01.2017 09:33А зарплату надо считать на PHP и JS, с переменными типа float/строка, желательно ещё и чередуя типы на разных этапах вычислений.
Delics
23.01.2017 21:27Золотое правило:
«индексы таблиц должны быть bigint».Sioln
23.01.2017 22:36+8Такое же золотое, как золотой унитаз.
Всё зависит от конкретной ситуации.uterr
24.01.2017 11:38+1Конечно зависит, любое «золотое правило» имеет исключения. Вот только проблема с 32-битным ключом возникает намного чаще, чем проблема из-за того, что ключ был bigint, даже сложно представить, когда это будет иметь существенное отрицательное влияние.
Sioln
24.01.2017 15:28+1На моей практике и 32-битный PK далеко не везде нужен. Много где обхожусь (MS SQL) tinyint(byte), smallint (short).
И в этом есть выгода. Место, скорость чтения (когда на страницу больше полезных данных поместится), объёмы индексов.
UPD: Когда объём одной базы (а их несколько) приближается к половине терабайта, как-то начинаешь думать о таких вещах.
mayorovp
24.01.2017 06:07+1Только не индексы, а суррогатные ключи.
Delics
24.01.2017 06:50Да, так. Только внешние индексы должны быть такого же типа, как и ключи. Иначе проблема из сабжа сохраняется.
mayorovp
24.01.2017 06:55Что такое, по-вашему, "тип индекса"? В моем мире у индексов нет типов...
Delics
24.01.2017 07:52Просто «ваш мир» не учитывает, что индекс обязан хранить значение индексируемого поля, за исключением данных переменной длины. В этом его смысл.
А значит тип у индекса есть и равен типу индексируемого поля.
Просто указать тип ключей таблицы как bigint недостаточно. Надо чтобы и все внешние индексы были тоже такого типа. Нарушение этого правила является распространенным источником проблем.
GerrAlt
24.01.2017 09:24вроде бы UUID тоже хорошо работает, и от подобных проблем неплохо застрахован
mayorovp
24.01.2017 15:39Там свои приколы. Например, куча утилит для ORM для генерации модели по базе или базы по модели не понимает как это UUID может генерироваться на стороне СУБД. А это обычно требуется если его надо сделать последовательным.
А последовательным его делать надо, чтобы записи в кластерный индекс были локальные, а не по всему объему...
tartarelin
24.01.2017 01:53+4Дааа, вот также помню в X-COM: UFO Defense, качаешь солдат качаешь, качаешь-качаешь, а потом у них характеристики становятся больше 255 и их приходится отправлять в отставку
instalator
24.01.2017 08:07во времена Sega в игре Dune2 замечал такой баг, хотя может это было сделано специально, если купить много юнитов то вражеские башни стреляют дальше ракетниц и захватить базу становится сложнее.
ripatti
24.01.2017 10:01+3Ну тогда уж вспомним еще Цивилизацию, где когда ИИ играл за Индию и прокачивал максимальный пацифизм, переменная агрессии переполнялась через ноль до максимального значения, у Ганди сносило крышу, и он шел всех кромсать в капусту…
Mad__Max
30.01.2017 20:08Не в отставку, а в элитный отряд, который пойдет на штурм марсианской базы в конце. Единственное нужно успеть отравить в резерв за одну миссию до переполнения одной из критически важных характеристик типа скорости (у меня 1м чаще всего переполнялось здоровье, которое ближе к концу игры уже не важно — энергоброню редко пробивают, а когда это все-таки случается урон здоровью обычно небольшой).
hdfan2
24.01.2017 07:18Кстати, хороший повод объяснить детям, что такое разрядность числа, и в каких случаях нужно использовать 32-битные, а в каких 64-битные числа. Хорошо запомнится, особенно тем, у кого домашка пропала. На чужих ошибках тоже нужно учиться.
is7beta
24.01.2017 11:27Подскажите пожалуйста на скрине Code.org русскоязычный интерфейс, но зарегался/зашел все англ.
Я правильно понял, что скрин получили транслейтом сайта?
Есть какой-нибудь подобный ресурс на русском (чтобы ре мог все сам, самостоятельно)?
simple-simple
24.01.2017 11:31+2Так кто должен извлечь урок?
Взрослый: Агаа! Так-так. Буду аккуратнее и сделаю бэкапы.
Ребенок: Моё творчество пропало. Прграммировання полно факапов и это урок. Ок. Пойду пока поиграю в мяч.
amarao
24.01.2017 23:01-1Yet another code bite the 32-bits indexes.
Уж сколько лет твердили свету — не использовать 32-битные id'шники… Но воз и ныне там.
Areso
Задним числом все умны, но неужели нельзя было сделать триггер на 90% для оповещения DBA/SA?
Scf
В этом и состоит главная проблема алертинга — правила алертинга появляются после инцидентов, а не до. Всё очень сложно предусмотреть заранее.
IRI
О, серьёзно? То есть проблема с теми же айпишниками и системным временем никого ничему не научила и за четыре года эволюции проекта никто не осознал, что аудитория как-то разрослась?
saboteur_kiev
Предварительный рефакторинг не нужен.
Думаю создатели ресурса изначально не предполагали, что он станет настолько популярным. А потом навалились другие таски, и никто не задумывался, тем более что бэкапы небось все время делают — ведь по сути никто не пострадал.
staticlab
Но неужели никто из админов не заметил, что в одной из таблиц стало 4 млрд строк?
vlivyur
В ней могло быть и меньше 4. Но для этого всё равно надо иногда смотреть внутрь базы.
mayorovp
Такой триггер не имеет смысла. Тот, кто знает о возможной проблеме — он сразу закладывает 64 бита. А тот кто не знает — он и про триггер не догадается.