Skip to main content

Цели курса

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

Правила и пожелания по данному курсу

  • в ответе на вопросы не стоит использовать chatGPT - старайтесь отвечать сами, чтобы знания полученные в процессе занятий остались с вами. Я уверен, что chatGPT знает ответ, но чтобы ответ принадлежал вам, вам необходимо приложить усилия. Давайте сделаем это вместе;
  • каждое занятие имеет теоретическую и практическую части. Все вопросы из чата обсуждаются в конце теоретической части и в конце практической части. Кроме чата, вы, конечно, можете задавать свои вопросы голосом;
  • обсуждение практической части, в частности решение задач, происходит голосом;
  • задачи, которые будут обсуждаться во время занятия, делятся по уровню сложности, чтобы у каждого была возможность ответить;
  • вы можете отвечать на русском или английском;
  • мы уважаем себя и других, не оскорбляем участников дискуссии и не обсуждаем отличные от программы курса темы;
  • личная просьба - включайте камеру во время занятий. Это поможет вам в будущем быть готовыми во время прохождения реального интервью;
  • пожалуйста, готовьтесь к лекциям заранее, повторяйте пройденный материал и выполняйте домашнее задание.

Заметки и ответы на частые вопросы

  • занятия проходят по вт и чт в 4 pm по Калифорнии (4 часа дня);
  • курс рассчитан на 16 занятий;
  • в занятиях будет использоваться JavaScript;
  • я буду признателен любой вашей обратной связи, как лично мне, так и куратору школы;
  • все материалы курса и дополнительная литература находятся тут: Google Drive. Все материалы в этой папке защищены авторским правом и предоставляются вам исключительно для личного некоммерческого использования и в целях обучения. Копирование, распространение или любое другое использование этих материалов в коммерческих целях строго запрещено без предварительного письменного разрешения правообладателей.
  • вам не нужно знать высшую математику, чтобы начать этот курс или проходить его;
  • вам не нужно знать React для прохождения этого курса;
  • вам необходимо знать JavaScript syntax для уверенного прохождения этого курса и решения задач;
  • если вам тяжело дается какая-то концепция, то попробуйте прочитать другое ее определение. Вполне вероятно, что иная интерпретация может больше подойти вам. Буду признателен, если в этом случае вы поделитесь своим опытом и мы добавим его в данный курс;
  • вам не стоит сдаваться в самостоятельном решении одной задачи минимум 30 минут. Это время должно включать активное написание кода, использование (хотя бы) console.log() для поиска проблем в своем решении;
  • что делать если вы не можете решить какую-то задачу? Ответ будет зависеть от того, сколько времени в день у вас есть на решение задач в целом. Если у вас есть на решение алгоритмов более 1 часа в день, то при решении сложной задачи вам стоит приложить минимум 30 минут без посторонней помощи. Если после этого времени ответ у вас так и не появился, то стоит сформулировать основную проблему и погуглить ее или спросить совет у chatGPT. Если и после этого у вас не появилось решения, то стоит найти полное решение данной задачи и разобрать каждую его строку. После этого, на следующий день, нужно решить эту задачу без посторонней помощи. Через неделю необходимо вернуться к задаче и закрепить алгоритм ее решения;
  • ваш прогресс в изучении алгоритмов лежит не в том, сколько вы можете решить задач за один день, а в том сколько дней подряд вы можете показывать стабильный результат, решая n задач каждый день.

Программа курса

  • что такое алгоритмы и анализ сложности (Big O notation);
  • изучение рекурсии;
  • работа со строками и массивами;
  • методы решения задач с помощью хэш таблиц (hash table);
  • изучение структур данных: стек (stack) и очередь (queue);
  • изучение объектно-ориентированного программирования (ООП) через классы;
  • рассмотрение структуры данных связанный список;
  • рассмотрение деревьев и графов;
  • жадные алгоритмы;
  • реализация алгоритмов сортировки и поиска;
  • техники динамического программирования;
  • практическое решение программных задач.