Website development
Programming
14 November 2012

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

From Sandbox
Сегодня я хочу поговорить о разнице между теми продвинутыми штуками, с которыми мы с вами имеем дело каждый день, и теми, которые мы можем сделать своими руками. О том, откуда эта разница взялась и чем грозит миру. Ну и в конце поста — немного скажу о способах борьбы с ней.

Все мы знаем, что такое iPhone. Мы примерно знаем, кто его придумал и за счёт чего он стал таким популярным. Мы знаем, что пятая версия длиннее, чем 4S, и что у неё выше разрешение экрана. Мы знаем, что в iPhone 4S два ядра вместо одного в iPhone 4 и кучу других деталей. Наконец мы знаем, что проект коммерчески невероятно успешен, и вывел Apple из производителя железа для гиков и профессионалов в мейнстрим, сделав её из самых богатых компаний мира.

Внимание, ключевой вопрос: можем ли мы воспроизвести iPhone? Повторить его. Ничего не выдумывая, взять и сделать точно такой же или хотя бы нечто, отдалённо его напоминающее? Пусть даже самую простую, старую и слабую его модель? Своими руками отлить из металла спаять, собрать, свинтить, скрепить, вырезать, вырастить…

Не можем. Существует колоссальная, огромная, и, судя по всему, уже никогда не преодолимая пропасть между тем, что я могу cмастерить сам и той невероятно навороченной хреновиной, которая лежит у меня в кармане. Почему? Ну например, по историческим причинам.

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

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

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

И ещё момент — давайте посмотрим на причины возникшей пропасти чуть детальнее. Современное прикладное ПО (aka игрушка под айфон) работает поверх огромного количества абстракций, каждая из которых чрезвычайно мощна и наворочена. Накладываясь друг на друга, вместе эти абстракции образуют систему совершенно невероятной сложности, проследить путь сигнала от нажатия на тачскрин в которой — совсем не тривиальная задача.

Таким образом, единственный способ держать ситуацию хоть под каким-то контролем — это понимать весь технологический стек, знать в лицо кажду матрёшку и каждый фрагмент в этом раздвижном телескопе. У этого факта есть очень просто следствие, которое, на мой взгляд, является важнейшей проблемой всего современного IT-мира и, прежде всего, мира программистов. Не будучи экспертом по своей технологии и по всем уровням абстракции, которые лежат под ней, Вы не сможете понять, как именно работает написанная Вами программа. Понять, по каким маршрутам ходят байтики и битики, почему эти маршруты именно таковы, и как их изменить. Как только у нас на каком-то из нижних уровней абстракции пропадает понимание происходящего — пиши пропало. Мы вынуждены тыркаться как слепой котёнок, двигаясь наугад и пытаясь предугадать результаты тех или иных изменений.

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

Один из способов изучения — чтение книг. Другой — посещение тематических лекций и семинаров. Например, если Вы — джавист, то стоит обратить внимание на JUG-движение, существующее в Питере, Киеве, Риге, Воронеже, а скоро — и в Москве. Если Вы дотнетчик — посмотрите на питерский AltNet. Если же Вас интересует, что вообще творится вокруг — то посмотрите на таллинский Devclub(видео, анонс ближайшей встречи), на его рижский вариант (видео) и на питерский CodeFreeze (видео), ближайшая встреча которого состоится уже в эту субботу и будет посвящена внутренностям MySQL.

Ну и конечно, не стоит забывать о третьем способе изучения деталей — чтении Хабра, $username$!

-12
5.8k 18
Comments 121
Top of the day