March 20th, 2019

Бритоголовый и С1-97

Чтобы не пропало

Вот я тут в комментах у [info]mbr в очередной раз обосрал школьную информатику – но чтобы не пропало, вынесу сюда списочек “что должен знать интересующийся предметом старшеклассник”.

За “обязательный минимум” можно принять, скажем, COS 109 – курс Брайана Кернигана по “компьютерной грамотности” для студентов “нетехнических” специальностей в университете Принстона. Специально даю ссылку не на книгу (Understanding the Digital World), а на страничку курса – там есть довольно полезные “лабораторные работы” и наборы задач. В эти “лабораторные работы” входит, скажем, простой HTML, рисование фотожаб, работа с электронными таблицами, представление о программировании.

В этот минимум хорошо бы добавить еще умение пользоваться текстовым редактором и текстовым процессором (и понимание разницы между ними), какими-нибудь “мультимедийными” программами типа аудио- или видеоредакторов, 3D-редакторами, “переустановить винду” и вообще пользовательскую грамотность (не только применительно к ПК, но и для “мобильных устройств” с iOS или Android – как “перекинуть фоточки” и все такое).

Маленький дисклеймер – мне сейчас лениво искать образовательные стандарты и сравнивать их со своими представлениями о прекрасном – но скорее всего, “минимум” в моем представлении формально не покрывает даже “базовый” уровень (школьный курс информатики содержит немало странной фигни, почему-то считающейся обязательной), а следующая часть будет в отдельных случаях значительно перекрывать даже “профиль”.

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

- знакомство с двумя-тремя (а может, и побольше) достаточно разными языками программирования; к примеру, я в старших классах, помимо стандартного школьного Паскаля, “пощупал” пару вариантов QBasic, Visual Basic, Delphi, C (и даже написал пару-тройку сравнительно больших программ под Windows), PHP (по статьям в журнале Ксакеп), пару “игрушечных” языков (из этой книжки) (RL – диалект Лиспа и “игру в схемы” – своеобразный HDL);
- к предыдущему пункту – знакомство, пусть даже поверхностное, на уровне “а это тоже можно программировать”, с парой разных “платформ” – скажем, можно пощупать “десктопные” приложения, браузерный Javascript, CGI-приложения, приложения для мобильников, прошивки микроконтроллеров;
- представление о различных алгоритмах и структурах данных – то есть все эти стандартные “сортировки пузырьком”, “красно-белые деревья” и все такое (к этому же пункту отнесу и “теоретическую информатику”, но возможно – в сильно урезанном даже по сравнению со школьной программой виде);
- представление о том, что такое реляционные базы данных, ER-модель, умение написать простой SQL-запрос;
- понимать, как работает современный веб – где выполняется Javascript, что такое веб-сервер, как работают CGI-приложения, как это все связано вместе;
- к предыдущему пункту – какие-то основы сетей – знать, что такое TCP, IP и еще куча буковок, уметь настроить WiFi-роутер и с помощью Wireshark подрезать чужой пароль;
- элементарные навыки работы/администрирования Unix-образных систем (”переустановить винду” относим к компьютерной грамотности) – поставить две ОС на одну машину, знать основные команды в терминале, уметь настроить веб-сервер, поставить Wordpress, вот это вот все;
- “практика с железом” – раньше я написал бы сюда “умение сделать нуль-модемный кабель для игры в Doom”, сейчас даже не знаю, что можно считать аналогичным – но что-то все равно надо;
- “как это все сломать” – условно говоря, основы хакинга – от SQL injection и cross-site scripting до использования ошибок типа переполнения буфера;
- знать полное собрание сочинений Дани Шеповалова.

Вот как-то так :)

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).