Секция 2: «Содержание и методика преподавания отдельных дисциплин» 24 октября 11:05 – 11:45

 

Доклад «Алгоритмы как путь эффективного мышления: взгляд из индустрии»

Докладчик:

Алексей Александрович Толстиков
руководитель региональных академических проектов; куратор минского филиала Школы анализа данных Яндекса; разработчик, Группа по взаимодействию с вузами

Аннотация: 

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

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

Запись доклада

Презентация доклада

Резюме: 

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

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

Алгоритмы – это некоторая комбинация математики и программирования, что позволяет под разным углом рассматривать задачи и выделять отдельные сложные компоненты, их обрабатывать и находить решение. Математика позволяет комплексно рассмотреть задачу, проанализировать её со всех сторон, построить математическую модель, обосновать её сильные и слабые места и сформулировать условия применимости предлагаемого решения. Только в случае выхода за условия применимости надо будет понимать, что именно пошло не так. Математические модели позволяют выполнить анализ применимости решения под «железо», под конкретные сервера, дисковые или сетевые устройства, выявить узкие места и адаптировать алгоритм действия или архитектуру приложения под конкретные условия. Или, вычленив слабый узел, постараться его заменить, улучшить. 

Далеко не всем специалистам в индустрии приходится использовать алгоритмы, придумывать сложные архитектурные слои. Чаще они используют стандартные алгоритмы и библиотеки, которые для них как «чёрный ящик». Но очень важно умение предугадать как алгоритм мог быть реализован и какие гарантии может дать. В большинстве случаев эту информацию можно найти в документации, посмотреть, как устроены используемые алгоритмы. Но и там часто встречаются чисто математические или научные формулировки, которые нужно понять. С другой стороны, нужно обеспечить эффективное использование вычислительной архитектуры, на которой алгоритм будет запускаться в проект. Алгоритмы нужно подстраивать под устройства, в которых они используются.

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

Существует миф, что задавать вопросы по алгоритмам на собеседованиях глупо, поскольку разработчик или аналитик не будут заниматься этими вопросами на работе. Подход к алгоритмическим собеседованиям менялся. Есть так называемые задачи-головоломки, решение которых за 10-15 минут кандидату найти практически невозможно. Многие коллеги придерживаются точки зрения, что если на собеседовании задача была решена быстро или вообще не решена, то время потрачено впустую. Мы фактически не получили информацию про уровень знаний кандидата, про процесс решения задачи. Грамотно выстроенный процесс собеседования с использованием алгоритмических задач позволяет оценить следующие характеристики кандидата: умение генерировать идеи, реакция на подсказки и уточнения, умение обосновать свою позицию и корректность алгоритма, сформулировать условия применимости. Вторая часть работы на собеседовании – написать код, реализующий предлагаемое решение. 

Хорошая алгоритмическая задача обладает следующими характеристиками: простое и понятное условие, разные подходы к решению, итоговое решение – законченный проект. Реализация должна быть не слишком короткая и не слишком громоздкая. 

Рассмотрим вопросы изучения компьютерных наук через алгоритмы или алгоритмы в компьютерных науках. Алгоритмы рассматриваются в следующих вузовских дисциплинах: Алгоритмы и структуры данных, Параллельные и распределенные вычисления, Базы данных и системы хранения данных, Машинное обучение, Криптографические системы и протоколы. Для закрепления навыков программирования, дизайна и разработки алгоритмов нужно как можно больше практики. Речь идёт о написании текстов алгоритмов, доказательстве их корректности. Реализацию алгоритма можно переложить на автоматизированное тестирование, заготовив некоторое количество задач. В проектах Яндекса используется либо внутриуниверситетские системы тестирования, либо платформа Яндекс.Контест.