Насколько необходимы основы программирования, та самая база?

📖 Бруно Роша, разработчик в Spotify, рассуждает в своей статье о необходимости алгоритмов, презирании этой темы в сообществе и проводит параллели с развитием музыканта.



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



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



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



Поднимаются важные вопросы



🔴 Теория не отражает того, что человек будет делать на самом деле в своей работе.



🔴 Знание теории не является показателем мастерства человека в данной практической роли.



🔴 Теория вообще бессмысленна. Зачем разработчику iOS знать, что такое граф?



Всё это создает у людей впечатление, что основы бесполезны, в то время как на самом деле они используют их постоянно!



Я не могу передать, сколько раз я слышал, как разработчик iOS говорил: "Я могу с уверенностью сказать, что никогда в своей работе мне не приходилось использовать граф", а затем радостно рассказывал о чем-то интересном, с чем они работали, используя иерархии UIView. Это одно и то же!



Объекты, которые могут соединяться друг с другом с целью создания единой связной карты элементов, - это буквальное определение графа, поэтому они не только знают, что такое граф, но и используют его с самого первого дня работы в качестве разработчика!



🟢 Графы/деревья: UIView.



🟢 Связные списки: UIResponder.



🟢 Хеш-таблицы: Dictionary<K,V> и протокол Hashable.



🟢 Побитовые операции: OptionSet.



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



Так действительно ли нужно всё это знать. Попробуем провести параллель с профессиональным музыкантом?



Для этого можно ответить самому себе на следующие вопросы:



🔘 Хочу ли я изучать это как хобби и никогда не выходить за рамки игры на диване для развлечения?



🔘 Хочу ли я играть в группе и зарекомендовать себя как музыкальный исполнитель?



🔘 Стремлюсь ли я выйти за рамки простого звания «музыкальный артист», живя и дыша классической музыкой, становясь неотъемлемой частью Венского филармонического оркестра, путешествуя по миру и войдя в историю как легенда, которая буквально сформировала концепцию самой музыки?



Так почему же ведущие компании делают то, что делают?



Для такой компании, как Google, неинтересно нанимать кого-то, кто посвятил свою жизнь изучению всего, что касается UIKit в iOS — их проблема не в том, какие API UIKit использовать, а в том, что API, которые им нужны, не существуют вообще.



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



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



📖 Про сложность алгоритмов можно прочитать здесь.

📖 Про подход в Neflix и Tiktok.



@iOS Dev