За последний год из своей домашней библиотеки мне пришлось выкинуть не один десяток книг по обучению разработке на той или иной технологии или языке. Единственное что в этой чистке уцелело было раннее издание «Как программировать на С++» Дейтелов. Данную книгу я передал знакомому подростку, который хотел научиться программировать. Я начал для себя задумываться, почему так вышло, и пришел к не очень утешительному выводу. Книжки, обучающие программированию на C#(конкретно языку) не содержат хоть сколько-нибудь практического применения данного языка или наоборот, обучают в контексте той или иной технологии. А книги по технологиям (в моем случае ASP.NET) делают вид, что программист знает язык хорошо и уже может писать что-то полезное. Это не хорошо и не плохо, это данность. Что же меня оттолкнуло от этих книг и привлекло в старой библии про C++? Практические задания.
Парадокс, но почти все бумажные пособия по разработке под ASP.NET описывают - как написать интернет-магазин. Простите, но мы живем в 2019 году и на голой платформе интернет-магазины пишут только психически больные. Можно привести в пример OZON, но простите, этот магазин не вчера появился. Там тонны унаследованных решений, которые работают и оттестированы. Миллионы трудочасов затрачены на реализацию этого продукта. А то, что описывается в книгах – решается за пару часов CMS-кой. Еще бонусом помогут любую платежку картами подключить.
И вот я начал думать - какой бы продукт мне было интересно предложить для реализации потенциальному ученику. При условии, что ученик с этой задачей бы справился и ничего не сломал. Да еще и в работе бы пригодилось. Хорошо бы было использовать реальные данные и реальные сервисы, а не генераторы больших объемов данных. И, разумеется, все это должно использовать реальные решения, а не на коленке склеенное «лишь-бы работало». Поскольку мы сейчас говорим про бэкенд-разработку, то вопросов пользовательского интерфейса касаться не хочется, но все же озвучу одну задачку для визуализации. Мне пришла в голову идея ведения небольшого реестра сделок. Любая мировая биржа, будь то ММВБ или Nasdaq имеет на своем сайте возможность получения истории сделок и вот эту штуку хочется предложить освоить.
Для начала, мне кажется, нужно бы освоить идею авторизации и аутентификации. Самый простой и быстрый, на мой взгляд, способ запилить данную систему – прикрутить OAUTH-авторизацию известной социальной сети, на выбор. Данный подход позволит получить несколько интересных навыков:
1) Взаимодействие с внешним API. Данный навык потребуется в любом проекте. Разница лишь в том, что сервис может быть внутрикорпоративным, а может быть и третьей стороной. В любом случае опыт пригодится.
2) Понятие авторизационных токенов. Да, собственное API можно и на куках построить, но полезным будет научиться использовать токены.
3) Знакомство с тем как реализованы методы API в крупной компании с большим потоком запросов. Тут и стили именования, и формат запросов/ответов. В противном случае велик риск начать изобретать велосипед и найти несколько грабель.
Причем данную идею можно доработать, украсив проверкой прав пользователя. Например, для доступа необходимо состоять в группе или быть подписчиком некоего пользователя.
И так в систему мы попали. Теперь нужно получить данные для отображения. Тут встает вопрос «на подумать». Получать ли эти данные у внешнего сервиса биржи или из собственной БД(ну или хранилища). Идеального решения тут нет – оба способа хороши. Для обучения я бы рекомендовал придумать способ загрузки данных в собственную БД, а уж из нее извлекать, так как вам хочется. Вот тут встает преимущество идеи с биржей. Мы имеем возможность получить сразу:
1) Большой объем данных
2) Постоянно обновляемый объем данных
3) Реальные цифры и поисковые слова
4) Строгие схемы для анализа корректность файла
Как мне кажется тут тоже можно получить много интересного опыта и навыков. Например – анализ и парсинг XML/CSV файлов, загрузка больших объемов данных в БД, продумывание архитектуры базы данных для хранения. А если к этому еще и добавить анализ данных из разных источников – получится даже что-то похожее на приложение. Ну, даже если и не получится приложение – можно научиться работать с хранилищем данных.
Предположим мы осилили загрузку данных. Ну а теперь эти данные нужно отдать клиенту. Тут мы получаем и задачу на формат запросов/ответов, и продумывание как реализовать пагинацию, а она понадобиться. Также будет смысл поразмышлять над корректностью полученных данных и можно ли клиенту отдать «грязные» данные. Заодно познакомиться и с тем, что это такое.
Ну и на десертик задачка для интерфейса, если необходимо. Полученные данные имеют очень широкий диапазон для экспериментов по визуализации. Их много, они разнородны. Можно спокойно учиться строить графики, компоновать элементы для лучшей читаемости. Ну и по классике – валидация входных параметров запроса на клиентской стороне. Кстати – валидация, это конечно хорошо. Но форма должна не кричать о том, что ее заполнили неправильно, а не давать пользователю возможности заполнить неправильно.
Наверное, пора потихоньку закругляться. Что хочется сказать еще? Когда я учился программировать – мне немного повезло с преподавателями. Мне сразу дали курсовой проект, который на выходе должен был быть рабочим приложением. К сожалению сегодня не все программисты учатся в институтах, а те, что учатся, не всегда пишут код и уж тем более рабочие приложения. Лично я считаю, что для учебного процесса – одним из важнейших элементов является практика. В этом вопросе я как раз вернусь к началу своего поста – ради интереса почитайте, какие есть задачки в том стареньком учебнике по C++. Лучше конечно дальше первых 3-4 глав. На сим откланиваюсь. Если кому-то внезапно стало интересно читать моё бурчание под нос – пишите. Ну или пришлите какие-нибудь учебные проекты. Ради интереса могу сделать ревью.