Skip to main content

Программирование — обучение и тренировка

Предыстория

Программирование для меня началось в 5 классе. В то время (1996 год) в школах еще было очень мало компьютеров и компьютерных классов, и многие школьники изучали информатику как чисто теоретический предмет.

Мне в этом плане очень повезло, в нашем лицее было достаточно машин для проведения уроков информатики даже в младших классах. В то время было невозможно сразу обучать детей реальному языку программирования (даже простому, типа BASIC). Сейчас это звучит странно, но в 96 году около 5-10% учащихся имели дома компьютер. Для развития наших алгоритмических навыков нам предложили особенную игру – Исполнитель Муравей. Это был простейший интерпретатор с элементарными задачами для детей. Работал он из под DOS.

Выглядело это примерно так:
Исполнитель Муравей

Читать дальше

Наши вопросы по БД и Web-технологиям

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

Было несколько кандидатов-студентов, которые занимались написанием сайтов, но это были скорее люди, которые настраивают плагины для CMS и не имеют представления о том, как это работает внутри.
Читать дальше

Первый день использования Windows 10

Логотип Windows 10

Вместо предисловия

Microsoft провела большую пиар акцию связанную с бесплатным обновлением Windows 7 и Windows 8/8.1 до Windows 10, которая должна была начаться 29 числа. Владельцы лицензионных версий получили возможность зарезервировать лицензионную версию, чтобы начать обновление как можно быстрее.

Установка обновления

Накатить обновление на сотни миллионов компьютеров в один день задача непростая. Но я верил в Microsoft, и предполагал, что замечательная утилита начнет скачивание дистрибутива заранее, скажем 20 числа. Скачает 95%, а самые важные 5% докачает в день релиза. Организовать это совсем не сложно. А защищаться от людей, которые решат из превью версий выдрать 5% и заставить это работать, на мой взгляд совсем не стоит. Но Microsoft похоже думает иначе.

Долгожданное обновление игнорировало меня до самого вечера. Лишь ближе к 23:00 система решила попробовать установить обновление, долго пыталась скачать дистрибутив и вывалилась с ошибкой.

Как оказалось, Microsoft заявила, что обновление будет выходить волнами и может вам достаться чуть позже. Причем это чуть может занимать несколько месяцев. По словам пиарщиков, это сделано потому, что часть оборудования не поддерживается новой ОС и его необходимо допилить. На мой взгляд, такая пиар компания выглядит как минимум странно. Это всё равно что помахать конфетой перед лицом ребенка и сказать, что получит он ее через месяц.

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

Читать дальше

Маленькие полезности для Git

Логотип Git
Это вторая статья, источником которой служат мои презентации для отдела разработки ПО в нашей компании в конце 2014 года. В ней я расскажу о маленьких хитростях при работе с git, которые не очень хорошо известны.

Posh-git

Posh-git это набор фантастических скриптов для работы с git в PowerShell. Многие программисты в Windows используют графический интерфейс для Git, например, TortoiseGit. А с появлением поддержки Git в Visual Studio использовать его стало еще проще.

Я же привык пользоваться консольным клиентом git. Наверняка сказываются многие часы работы с git в linux. Раз уж я заговорил о консоли, не могу не отметить отличную работу, которую проделала Microsoft при разработке своего Powershell. Совместимость с командами linux терминала — это просто гениальная идея. Надеюсь, что в будущих версиях прикрутят работу через pipe и grep.

Вернемся к posh-git. Если вы используете Chocolatey (см. предыдущий пост), то для установки надо просто выполнить
cinst -y poshgit

Читать дальше

Наши вопросы по криптографии

Криптография
Так как наша компания (https://ancud.ru/) занимается защитой информации, то хорошее знание криптографии никому не помешает.

Криптография

  1. Что такое симметричная и асимметричная криптография?
  2. Что такое хеш-функция? Какие хэш-функции вы знаете? Почему CRC32 не подходит? HMAC? KDF?
  3. Какие симметричные алгоритмы вы знаете? AES, 3DES, ГОСТ 28147-89, RC5, Blowfish?
  4. В чем отличие блочных шифров от поточных шифров? Сеть Фейстеля?
  5. Что такое режимы шифрования? ECB (простая замена), CBC, гаммирование, CFB (гаммирование c обратной связью).
  6. Какие асимметричные алгоритмы вы знаете? RSA, DSA, ГОСТ 34.10-2012?
  7. Причем тут односторонние функции? Дискретный логарифм и эллиптические кривые.
  8. Цифровая подпись (ЭЦП) и асимметричное шифрование.
  9. Инфраструктура открытых ключей (PKI). Зачем? Что содержит сертификат?
  10. Алгоритмы аутентификации. Как работают симметричные и асимметричные?
  11. Выработка сессионных ключей. Почему Диффи-Хелман – это не аутентификация? Что такое Forward Secrecy (прямая секретность)? Защита от MITM атак.
  12. Как часто надо менять ключи? А пароли? От чего это зависит?
  13. Чему равна криптостойкость пароля? А если его выбирает пользователь?
  14. Почему для криптографии важны случайные числа? Приведите пример атаки на ДСЧ.

Chocolatey

Chocolatey

Небольшое предисловие

В конце 2014 года я готовил что-то вроде конференции одного выступающего для своих коллег в отделе разработки ПО. Для этой конференции я подготовил ряд выступлений с презентациями о различных интересных вещах, которые происходят в мире разработки ПО, о наших внутренних проблемах с проектами, а так же о различных хитростях работы Git.

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

Читать дальше

Наши вопросы по программированию на C/C++

Вопросы C/C++

Следующий блок вопросов это самые важные вопросы для кандидата на позицию C/C++ программиста. Вопросы поделены на две категории. Надеюсь в современном мире все в курсе, что такое C++14. Но на всякий случай, оставлю тут ссылку на wiki. Знание совсем новых плюсов не обязательно, но крайне рекомендуется. На мой взгляд если человек работает в какой-то области и не интересуется, что в ней происходит последние лет 5, то ничего хорошего в этом нет.

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

Читать дальше

Наши вопросы по сетям

Вопросы по сетям
Так как до публикации ответов руки почти не доходят, я решил опубликовать все наши вопросы в надежде, что их сможет найти кто-то из наших кандидатов и подготовиться =)

Вопросы по сетям

  1. Модель OSI с примерами протоколов, устройств и программ, работающих на каждом уровне (если есть)?
  2. Маршрутизация внутри сети. Как работает ARP? Зачем нужен MAC и IP?
  3. Маршрутизация между сетями. Автономные системы, OSPF и RIP, BGP?
  4. Разница между TCP и UDP? Что такое соединение и как оно создается?
  5. Как работает DHCP? Зачем он нужен?
  6. Как работает DNS? Зачем он нужен?
  7. Что такое NAT? Как он работает? NAT traversal?
  8. Зачем придумали IPv6? Какие проблемы и как именно он решает?
  9. Что такое VPN и как он работает? IPSec, PPTP, PPPoE и L2TP?
  10. Что такое SSL(TLS)?