Если бы я мог вернуться назад и что-то изменить в своем путешествии по программированию, я бы начал с гарвардского курса CS50x. Лектор, Дэвид Малан, использует динамичный стиль преподавания, используя соответствующие аналогии и визуальные эффекты, чтобы сделать сложные концепции более понятными.

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

Курс состоит из десяти лекций, каждая продолжительностью около 2,5 часов, и включает в себя множество вспомогательных материалов, таких как заметки, дополнительные видео и задачи для решения. Я прошел версию курса 2022 года, и, хотя в версии 2023 года могут быть некоторые изменения, ее стоит проверить на https://cs50.harvard.edu/x/2023/.

Я выделил три часа бодрствования, пять-шесть дней в неделю, с 6:00 до 9:00, на изучение CS50 и прошел курс за три месяца.

Неделя 0: Скретч

Основы 101 за 2 часа.

Назначение

Нас попросили создать игру с использованием Scratch, языка программирования на основе блоков, ориентированного в первую очередь на детей.

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

Я разработал простую игру с табло, которое увеличивалось каждый раз, когда игрок успешно перепрыгивал препятствия, подобно игре «T-rex runner» без интернета в Chrome.

Неделя 1: С

Изучение C, низкоуровневого языка программирования, позволило мне глубже понять языки более высокого уровня, такие как Python и JavaScript, которые предлагают более удобный интерфейс для программистов благодаря своим абстракциям и автоматическому управлению памятью.

Однако C также предлагает определенные преимущества, такие как больший контроль и потенциально более высокая производительность из-за его скомпилированного характера, то есть исходный код превращается в машинный код перед запуском программы.

В отличие от Python, который является интерпретируемым языком, это означает, что интерпретатор читает и выполняет код построчно во время выполнения, что в некоторых случаях может привести к снижению скорости выполнения.

Назначение

В каждом наборе задач было два варианта: «менее удобный» для новичков и «более удобный» для более комфортных людей.

В основном я выбирал «менее удобный» вариант, который и без того был сложным.

Проблема: Марио — написал код на C для воссоздания пирамиды с использованием хэшей. Я думаю, что эта проблема действительно помогла мне понять, как использовать внешние и внутренние циклы.

Кредит. Я выбрал кредит, хотя это был «более удобный» вариант, потому что я использовал алгоритм Луна раньше, поэтому знал, как его решить. Хотя я закончил его на Python до того, как написать его на C, было, ngl, головной болью a##.

Неделя 2: Массивы

Массив — это непрерывный блок памяти, в котором хранится несколько элементов одного типа данных.

В C строки — это, по сути, массивы символов.

CS50 предоставила свою собственную<cs50.h>библиотеку, также известную как обучающие колеса, используемую для абстрагирования некоторых более сложных концепций, которые были зарезервированы для более поздних лекций.

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

Интересно, что термин «ошибка» на самом деле возник в 1945 году, когда инженеры, работавшие над компьютером Mark II в Гарвардском университете, обнаружили, что мотылек вызвал сбой в работе системы.

Назначение

Лаборатория: игра Scrabble — написала код на C, чтобы определить, какое из двух слов в Scrabble имеет большую ценность.

Проблема: Удобочитаемость –использовался индекс Коулмана-Ляудля расчета приблизительного уровня оценки, необходимого для понимания некоторого текста.

Caesar- реализовал программу, которая шифрует сообщения с помощью шифра Цезаря, похожего на шифр Rot-13.

Неделя 3: Алгоритмы

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

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

Я чувствую, что наконец понял концепцию рекурсии и смог успешно применить ее в ката Codewars, что было для меня моментом гордости.

В целом, это была очень эффективная и приятная лекция.

Назначение

Лаборатория: Сортировка — определение того, какие алгоритмы сортировки использовались для каждого предоставленного файла.

Проблемы: Plurality —написал код на C для реализации программы, имитирующей выборы с множественным голосованием.

Второй тур — то же самое, но имитировал второй тур выборов.

Неделя 4: Память

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

Лекция касалась памяти кучи и стека, а также очередей — терминов, с которыми я сталкивался раньше, но теперь лучше понимаю.

Мы также изучили форматы файлов изображений, такие как JPEG, и то, как они содержат заголовки с информацией об изображении, такой как размер файла и тип сжатия.

Было полезно увидеть эти абстрактные концепции в действии и глубже понять, как они работают.

Назначение

Лаборатория: Volume — написал программу, которая изменяла громкость звукового файла с заданным коэффициентом.

Проблемы: Фильтр —применялись различные фильтры, такие как оттенки серого, сепия, отражение и размытие, к изображению,что было непросто.

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

Восстановление. Один из самых приятных наборов задач, над которыми я работал, включал восстановление файлов JPEG из криминалистического изображения, что было похоже на детективную головоломку. У меня также была возможность использовать функции malloc и free, что было полезным опытом обучения.

Неделя 5: Структуры данных

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

Меня мотивировала перспектива перейти на Python, который стал следующим языком обучения. Я видел свет (Python) в конце туннеля.

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

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

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

Назначение

Лабораторная работа: Наследование —создание семьи определенного размера поколения и присвоение аллелей группы крови каждому члену семьи. Это было забавно для меня, исходя из биологического фона науки.

Проблема: Правописание — реализована программа, которая проверяет орфографию в файле с помощью хэш-таблиц.

Неделя 6: Питон

«Если вы чувствуете, что находитесь в черной дыре, не сдавайтесь. Выход есть», — Стивен Хокинг.

Ах, наконец, из черной дыры C. ♡

Прошелся по простоте синтаксиса и в основном реализовал коды предыдущих недель в Python. Научился импортировать различные библиотеки, созданные прекрасными людьми, которые помогли автоматизировать различный повторяющийся код.

Назначение

Лаборатория: World Cup —написал программу для моделирования чемпионата мира по футболу FIFA.

Проблема: Здравствуйте (распечатайте простое приветствие для пользователя), Марио, Кредит и Удобочитаемость, что было просто повторением предыдущих задач, но на Python .

ДНК - пришлось написать программу, которая идентифицирует человека на основе его ДНК, опять же, связанной с наукой, так что это понравилось.

Неделя 7: SQL

По мере того, как курс продвигался после C, недели, казалось, становились немного легче.

У меня уже был некоторый опыт работы с SQL, поэтому материал был мне знаком и относительно прост для понимания.

Тем не менее, лекция предоставила более глубокое освещение, чем то, что я узнал ранее, что было полезно.

Назначение

Лаборатория: Песни — нужно было написать SQL-запросы, чтобы ответить на вопросы о базе данных песен.

Проблема: Фильмы: приходилось писать SQL-запросы, чтобы отвечать на вопросы о базе данных фильмов.

Fiftyville. Это была одна из самых приятных задач, над которыми я работал. Она заключалась в написании SQL-запросов для решения загадки. Это был очень захватывающий и увлекательный вызов, и, работая над ним, я чувствовал себя детективом, пытающимся собрать воедино улики.

Неделя 8: HTML, CSS и JavaScript

Увы, я с нетерпением ждал этой недели курса, так как он охватывал темы, которые будут в центре внимания моих исследований после CS50.

Я многое узнал об Интернете и сети, а также о том, как данные передаются и переносятся.

Хотя мне понравилось содержание, я бы хотел, чтобы было больше времени, посвященного JavaScript, так как это была лишь небольшая часть лекции.

Назначение

Лаборатория: Викторины —нужно было написать веб-страницу, на которой пользователи могли бы отвечать на викторины.

Проблема: Домашняя страница: нужно было создать простую страницу «обо мне» с использованием HTML, CSS, JS и функций Bootstrap.

Неделя 9: Фляга

Flask — это легкая веб-инфраструктура Python для создания веб-приложений.

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

У меня не было опыта бэкенд-программирования, поэтому мне было очень любопытно посмотреть, как это работает.

И мне это очень понравилось, пожалуй, чуть больше, чем фронтенд.

Назначение

Лабораторная работа: Birthdays. нужно было создать веб-приложение для отслеживания дней рождения друзей.

Проблема: Финансы: нужно было реализовать веб-сайт, который позволял бы пользователям покупать или продавать акции. Использовал API впервые.

Неделя 10: смайлики/кибербезопасность

Эти две лекции были почти необязательными, но тем не менее информативными, заданий на эту неделю не было.

Последний проект

Для своего проекта я решил создать веб-приложение под названием «TimeBox» с использованием инфраструктуры Flask.

Тайм-боксинг — это метод тайм-менеджмента, который включает в себя выделение фиксированного количества времени для конкретной задачи.

Чтобы создать приложение, я настроил базу данных для хранения имен пользователей и хешированных паролей с помощью SQL.

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

Я также включил раздел «мозговой дамп», где пользователи могут записывать свои мысли и идеи и извлекать важные задачи для расстановки приоритетов.

После того, как пользователь закончит писать свои задачи, он может нажать кнопку «Сохранить», которая затем выделяет цветом раздел временного интервала со связанными задачами. Я добавил эту функцию, чтобы добавить ярких красок в минималистский дизайн. Пользователи также могут очистить страницу, нажав кнопку очистки после выполнения своих задач.

Кроме того, я включил раздел «Вдохновляющие цитаты», который генерирует случайные цитаты, чтобы помочь пользователям оставаться мотивированными и продуктивными.

Я смог завершить проект за две недели, хотя я чувствовал, что время торопится, так как я хотел закончить его до крайнего срока (31 декабря 2022 г.).

Несмотря на цейтнот, я был доволен своей способностью воплотить идеи в моей голове в работающий код.

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

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