Обзор того, что я считаю одним из лучших выступлений на WWDC.

Мероприятие Apple WWDC имеет долгую историю, восходящую к 1987 году. Очевидно, что если вы вернетесь в прошлое, то увидите, что в лучших видеороликах Apple WWDC сам Стив Джобс выступает в качестве шоумейстера. Хотя с технической точки зрения это отдельная история. На мой взгляд, один из лучших WWDC совсем недавно. Презентация человека по имени Дэйв Абрахамс два года назад на WWDC2018. Презентация, написанная его собственными словами, а не советы, приемы или новые функции. Это презентация о фундаментальных вещах, благодаря которым ваши программы работают. Источник надежности, ремонтопригодности и производительности этих программ. Я хочу в этой статье пройтись по тому, о чем он говорит, хотя я не хочу, чтобы вы просто прочитали это, посмотрели и презентацию. Вы не будете разочарованы.

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

Он показывает нам, как вычислительная сложность его решения стала причиной его падения. Его начальное решение — квадратичный алгоритм, окончательное решение — линейный. Мы продолжаем рассматривать код линейной реализации. Код, который находится в самой библиотеке Swift, является мастером простоты. Читабельно, конечно, потому что Swift теперь с открытым исходным кодом.

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

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

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

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

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

Узнайте, как выполнять поиск в Интернете. Узнайте, как эффективно использовать такие инструменты, как SO. [Он не упоминает ТАК конкретно, я подозреваю, что его кассир может не одобрить].

Используя SO в качестве примера здесь, когда вы найдете принятый ответ о переполнении стека, посмотрите дальше. Смотрите дальше, потому что чаще всего принятый ответ не самый лучший. Это первый рабочий! Человеку, задавшему вопрос, нужен был ответ, его не заботило, будет ли он лучшим. Если вы смотрите на проблему и есть несколько решений, ищите лучшее.

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

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

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

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

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

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

Сохраняйте спокойствие, продолжайте кодировать.