В наши дни кажется, что все, что вам нужно, это подписаться на Twitter или выступить на TEDx, чтобы назвать себя футурологом. Но Тим О’Рейли - основатель легендарной компании по обучению технологиям O’Reilly Media - не такой гуру. Его вдумчивые наблюдения за тенденциями в области вычислительной техники и его поддержка открытого исходного кода (задолго до того, как это считалось крутым) дают ему должное уважение.
Поэтому, когда Тим О'Рейли недавно высказал мнение про будущее индустрии программного обеспечения, профессиональные разработчики обратили на это внимание. Вот что он сказал:
«Я думаю, что золотой век последних двух десятилетий, когда вы могли стать программистом и получить работу… в некотором роде закончился. Программирование теперь больше похоже на умение читать и писать. Просто нужно уметь это делать».
Звучит логично. Вы, вероятно, слышали другие версии аргумента «сегодняшние элитные навыки программирования - это базовая компетенция завтрашнего дня». Но действительно ли это отражает будущее индустрии программного обеспечения?
Кодирование как грамотность
Трудно спорить с целью повышения грамотности кодирования. Даже если вы не планируете писать собственное программное обеспечение, есть реальная ценность в понимании того, как работает код. Даже непрограммисты могут использовать базовые навыки, необходимые для создания веб-сайта, делать выводы из массива данных или автоматизировать простые задачи. И кто не проводит день в теплых объятиях алгоритмов Google, Facebook или YouTube? Программист или нет, понимание того, как работают машины вокруг нас, является важным аспектом, когда они формируют нашу жизнь.
Идея о том, что написание кода является частью этого нового типа грамотности, который в конечном итоге превратится из почти магической силы в обычную человеческую практику, - не новость. Но есть основания для подозрений. В конце концов, всего десять лет назад мы искали научную грамотность с целью дать рядовым гражданам знания, необходимые им для принятия взвешенных решений и выбора лидеров, которые могли бы проложить разумный курс в быстро меняющемся мире. Но обещания научной грамотности не оправдались. Сегодня средний человек в значительной степени полагается на современную науку, которой он не понимает или не верит, от компьютеров (квантовая механика) до вакцин (генетика) и GPS (общая теория относительности Эйнштейна). Если научная грамотность - это цель, которая никогда не была реализована, можем ли мы действительно ожидать, что грамотность в области программирования будет намного лучше?
Сторонники движения за грамотность в кодировании отмечают, что чтение и письмо начинались как специализированные навыки, и потребовались годы, чтобы они распространились от ученых к населению в целом. (Если бы в 1620 году вы предсказали, что через несколько сотен лет даже самый не амбициозный человек сможет написать грамматически связный пост в Facebook, вы бы показались диким мечтателем.) Но есть большая разница между обучением письму и написанием книг. Есть разница между изучением науки и тем, чтобы стать ученым. И есть разница между пониманием основ кода и обучением самостоятельному построению сложных систем.
Наши усилия по повышению грамотности в программировании на удивление мало подходят для подготовки будущих программистов. Фактически, мы часто уводим новичков от искусства программирования в крошечные ограниченные песочницы. В прошлом эти песочницы представляли собой макросы Excel и (если у вас было немного больше амбиций) Visual Basic и Access. Теперь это Power Apps. Чем больше меняются вещи, тем больше они остаются неизменными - если вы хотите стать профессиональным программистом, вам все равно нужно отклоняться от стандартного пути.
Современное образование снизило планку грамотности. Но это не изменило определение того, что значит быть профессиональным программистом.
Чего стоит программист?
Другая часть комментария Тима О’Рейли более тонкая. Проще говоря, если грамотность в программировании растет, угрожает ли это привилегированному месту программистов в рабочей силе? Некоторые из сегодняшних программистов помнят, как им велели изучать что-нибудь более прочное, например математику, потому что нужда в навыках программирования была близка к сокращению. Но есть и обратная сторона: предсказание без временной шкалы на самом деле вовсе не предсказание. Сегодня у нас больше программистов, чем когда-либо прежде, и армия иностранных рабочих, стремящихся удовлетворить наши ИТ-потребности. Нет недостатка в программистах. Но не хватает квалифицированных программистов. И этот дефицит оказался на удивление долговечным. Даже несмотря на то, что мы расширили традиционное образование, продвигая предметы STEM глубже в учебную программу, и нетрадиционное образование (с бумом учебных курсов по программированию на основе проектов), нехватка квалифицированных разработчиков осталась неизменной. По текущим оценкам, нехватка талантливых программистов в ближайшие годы будет только расти. Легко предположить, что нехватка квалифицированных программистов отражает недостаток опыта в новых и появляющихся технологиях, таких как машинное обучение и аналитика больших данных. И хотя это правда, что разработчики в этих областях пользуются большим спросом, это не похоже на источник дефицита. Вместо этого не хватает квалифицированных разработчиков среднего уровня. Это люди, которые владеют основами программирования, но также понимают эффективную командную работу, сотрудничество и другие полезные навыки.
Квалифицированные разработчики среднего уровня сочетают навыки программирования с менее поддающимися количественной оценке навыками, такими как способность анализировать большие системы, отлаживать реальные проблемы, управлять проектами и общаться с заинтересованными сторонами.
В будущем новоиспеченные программисты могут столкнуться с трудностями при поиске работы, в зависимости от их местного рынка труда и своего резюме. Но опытные разработчики будут оставаться ценными десятилетиями. Даже продвижение инструментов генерации кода на основе искусственного интеллекта не заменит эксперта, который может ориентироваться в интерфейсе между кремниевой реальностью и реальным миром.
Станут ли когда-нибудь навыки программирования настолько распространенными, что программисты потеряют свою власть над ценой? Может быть, но сегодня на это указывает мало признаков. Более очевидное препятствие заключается в том, что любой, кто занимается программированием в поисках легких денег, вероятно, сгорит, прежде чем получит опыт, необходимый для успеха.
Приход нового золотого века
Цитата Тима О'Рейли намекает на будущее, в котором навыки программирования не станут залогом успешной карьеры. Но что, если золотой век вычислительной техники не про легкие деньги и обеспеченность работой? Что, если то, что мы теряем, на самом деле менее важно, чем то, что мы приобрели за полвека разработки программного обеспечения?
С годами кодирование стало все более сложным. Но в то же время нас осыпали богатством - IDE, которые вылавливают ошибки, вычислительное оборудование, которое компилирует код за секунды, фреймворки, автоматизирующие обычные задачи, такие как проверка ввода и сортировка списков. Я до сих пор помню дни, когда программистам приходилось искать информацию, и надежная книга на такую ??тему, как Windows API, распространялась по офису и пролистывалась до тех пор, пока не сломался переплет.
Сегодня, с появлением веб-сайтов с бесплатными учебными пособиями, курсами YouTube, стримерами по программированию Twitch и StackOverflow, барьеры для входа практически исчезли. Вместо стены тайных знаний, отпугивающей новичков, теперь у нас есть сообщество экспертов, которые приглашают новичков и готовы поделиться своей работой над проектами с открытым исходным кодом. Если мы выберем золотой век, измерив трение, мешающее нашим идеям, это будет золотой век.
В истории не было времени, когда было бы проще превратить идею в программный проект и поделиться им со всем миром.
Мы не можем сказать, когда закончится золотой век, но одно можно сказать наверняка. Двери королевства по-прежнему открыты настежь.
timka05
Тим О'Рейли конечно крутой чувак. Но хочу напомнить другого, не менее серьезного в информационных технологиях товарища, и его: "640 килобайт должно быть достаточно для каждого".
DrPass
Даже если отбросить тот момент, что сам факт приписывания этой фразы БГ не имеет никаких подтверждений, фраза эта датирована 1981-м годом, когда домашние компьютеры имели 16К памяти, а профессиональные 64К. И упомянутых 640К вполне себе было достаточно всё это десятилетие.
И да, к слову, в 1981-м году, когда якобы БГ сказал эту фразу, персональных компьютеров с возможностью установки 640К памяти не существовало :)
timka05
Дела не в конкретном примере, а в том, что регулярно достаточно компетентные люди делают прогнозы, которые не сбываются чуть более, чем полностью на каком-то вменяемом отрезке времени.
Программисты существуют уже лет 60-80 и потребность в них не уменьшается, хотя казалось бы, весь софт, который можно придумать, уже написан.
Sonnenwendekind
Потребность в программистах из 60х со знанием ассемблера, алгоритмов шестнадцатеричной системы и умением паять, практически сошла на ноль. Программирование становится всё более высокоуровневым и мейнстримовым.
ZuOverture
Насколько мне известно, FPGA программируют именно такие люди, и это не какой-то маргинальный рынок. Может быть их стало меньше, чем раньше, но скорее в относительном выражении, чем в абсолютном.
Sonnenwendekind
Только это уже не программирование, а микроэлектроника и проектирование электронных схем. От программирования там разве что текстовый формат описания логики.
Arenoros
«Что значит имя? Роза пахнет розой, хоть розой назови ее, хоть нет»
Sonnenwendekind
По такому принципу и составитель инструкции является программистом, поскольку описывает последовательность действий в текстовой форме. Надо посоветовать дядьке, ответственному за производственную безопасность, подать резюме в айти компанию на программиста :)
dorne
Точно… а буква P в аббревиатуре FPGA там как-то побоку. Особенно учитывая, что даже программирование станков все еще программированием остается.
Sonnenwendekind
Программируемая материя, программируемые станки с ЧПУ...
edogs
Firz
А откуда Вы знаете? Может 99.99% программистов и сейчас сами хотят вылизывать свой код до идеала, чтобы он и на «640кб» запускался, вот только кто готов им платить за кучу потраченного на это вылизывание времени? Особенно когда речь не о экономии ресурсов компании, которые еще можно обосновать как выгоду от затрат, а о ресурсах пользователя.
p.s. Возможно, это одна из причин, почему open source софт частенько бывает лучше(производительнее) платного — есть возможность оптимизировать код хоть по синения, если разработчику нравится, в отличии от платного софта, где бывает вообще вся суть приложения в красивом интерфейсе.
nixtonixto
Кроме компьютера, в каждом доме несколько десятков устройств на микроконтроллерах, от часов до телевизоров, в автомобилях микроконтроллеров вообще под сотню. И все их, внезапно, надо программировать в 16-ричной системе, со знанием ассемблера хотя бы на уровне отладки и умением паять. Мейнстрим нынче — как раз микроконтроллеры и встраиваемые микропроцессоры, и такие специалисты, со знанием схемотехники, нарасхват.
ptr128
И сюда пришел прогресс. Появляются всяческие кубы, а вслед за ними и программисты, вообще не способные читать ассемблер.
woddy
А зачем? «Появляются всякие компиляторы а вслед за ними и программсты вообще не способные читать х86 ассемблер»
Современый компилятор дает код не хуже чем если писать на ассемблере
ptr128
Не травите душу. Если с ARM уже стало более-менее терпимо, хотя все равно временами приходится сваливаться на ассемблер (HAL часто изобилует совершенно не нужным в конкретной ситуации универсальным кодом), то при компиляции для AVR или STM8 на код, генерируемый современными компиляторами, без слез не взглянешь.
Например, попробуйте без использования ассемблера выжать 8 мегабит из SPI на ATMega328P. У меня получилось только на ассемблере.
Я просто не знаю такого МК, где можно было бы обойтись без изучения сформированного компилятором ассемблерного кода при отладке.
nochkin
Смелое утверждение. У меня как раз противоположное впечатление — чем больше софта написано, тем больше софта не хватает.
sumanai
Чем больше софта я использую, тем больше софта я хочу переписать (((
Wingtiger
я именно так и стал "программистом", хотя на программировании за всю жизнь заработал меньше 10 тысяч современных рублей.
Firz
Предположу что желающих использовать железо, под которое весь этот старый софт был написан, не много, если это железо еще можно будет где-то вообще найти.
brom_portret
Во фразе «640 килобайт должно быть достаточно для каждого» не хватает уточнения на какой срок делается прогноз. Крайне сомневаюсь что БГ имел в виду что-то более 10 летия.
Alexey2005
Ну на самом деле этого вполне достаточно для решения любой пользовательской задачи, а дополнительная память просто упрощает работу программистов, которым в результате требуется на порядки меньше времени, чтобы написать соответствующий софт (ведь можно не только забить на оптимизацию, но ещё и юзать готовые фреймворки, что охрененно ускоряет и упрощает процесс).
anonymous
Alexey2005
Бортовой компьютер «Вояджера» содержал всего 70Кб памяти. Однако же это не мешало ему справляться с обработкой и отправкой фоток через всю солнечную систему.
Для стриминга же и вовсе решающее значение имеет не объём, а скорость работы памяти, чтобы она успевала пропускать через себя нужное количество данных. А объём именно что упрощает программисту жизнь (когда всё в одном линейном буфере и не надо думать о переключении страниц, это на порядки проще закодить).
fshp
Это не так работает. Какая бы у вас быстрая память не была, вы ограничены скоростью сетевого интерфейса.
Если брать в расчет только лишь память, без каких-либо других факторов, то окажется, что память то совсем и не нужна. Достаточно научиться транслировать картинку прямиком в мозг.
Кстати это работает абсолютно для любого алгоритма.
ptr128
Если речь о стриминге, то это подразумевает все же не многогигибитный HDMI, а куда менее скоростные каналы. Следовательно, речь о передаче сжатого потока.
А раз звучало «HD-видео», то и кодеки подразумевались соответствующие. Поэтому кодировщику необходимо хранить не только последний ключевой кадр (как в DivX), но и целый ряд промежуточных, чтобы использовать их, как опорные, при кодировании очередного кадра.
Иными словами, чем эффективней применяемое кодирование при том же уровне качества, тем ниже требования к каналу связи, но выше к памяти и вычислительным мощностям. И наоборот, имея 48 Гбит/c HDMI 2.1 можно действительно обходится без памяти.
Боюсь, что очень мало кто может похвастаться каналом в 48 Гбит/c или выше.
fshp
Ну так о том и речь. Абстрактный стриминг в памяти не нуждается. Но как только появляется какое-то реальное требование, то внезапно памяти нужно много.
ptr128
Ну мы же не абстрактного сферического коня в вакууме обсуждаем?
Так что все сложнее. В общем случае балансируем между каналом, вычислительными мощностями и памятью. Например, чем выше вычислительные мощности, тем ниже требования к памяти, так как данные в памяти можем позволить себе хранить сжатыми.
fshp
Вы точно комментатором не ошиблись? Я ведь говорю тоже самое, но другими словами.
ptr128
Ваши слова?
fshp
Да, это мои слова.
Это тоже мои слова. Как только появляется конкретное требование пропихнуть N бит в секунду в канал шириной M бит в секунду, где N > M. Да ещё с избыточностью, с кучей клиентов, реалтайм, возможностью перемотки.
Какими кодеками вы все это будет жать абсолютно неважно. Вы как площадка стриминговая можете вообще поток не жать, этим будет заниматься стример например хардварной картой захвата.
Но даже без кодирования 640 килобайт становится мало.
Goupil
Не содержал, а содержат. Старичкам 44 года, и они все еще живы и бибикуют из кромешной тьмы.
anonymous
Это в теории так. А на практике может оказаться так, что вам при стриминге нужно делать удаление шумов, а еще автокоррекцию яркости и баланса белого, и без хранения кадра в памяти целиком вы это не сделаете никак, потому что многие подобные вещи выполняются в два прохода.
А ещё может оказаться, что канал связи для стриминга у вас не десятки гигабит, а гораздо меньше, и нужно наворачивать алгоритм компрессии. И тогда придется хранить в памяти ещё и другие карты, как минимум чтобы эффективно рассчитывать дельты между ними.
А потом выяснится, что стриминг нам нужен не постоянный, а только при детектировании движения в кадре на протяжении нескольких секунд… Дальше продолжать? :)
TheSprightlyDuke
Если рассматривать фразу как есть (то есть без контекста) невозможно однозначно утвердить верный посыл. Варианты:
1. «Должно» в контексте «не более и точка»
2. «Должно» в контексте «вероятно (удивлюсь, если не хватит)»
3. «Должно» в контексте «надо, очень желательно, хотелось бы, итп»
Каков контекст, уточните, пожалуйста.
timka05
Спросите у Гейтса )
TheSprightlyDuke
Вряд ли он знает, что имели ввиду Вы, упоминая его фразу тут :)
MinimumLaw
А ещё не менее крутой чувак заявил "Луна твердая" и поставил собственную подпись.
На самом деле истинная крутость как раз и проявляется в возможности сделать такое громкое заявление и взять на себя ответственность за него. Ну, и конечно, в признании ошибки, когда именно благодаря такому утверждению произошел рывок, который и обесценил его.
Вообще говоря «элитарность» профессии программиста сильно мешала все это время. Очень многие решили, что круче только вареные яйца. Нет, друзья. Закончить курсы javascript и грести бабло лопатой, пуская и мансарды самолетики из пятитысячных купюр (привет
авторуидеологу небезизвестного мессенджера) — это про другую реальность. И хорошо.Точно так же появление 3D принтеров не обесценило грамотных конструкторов. Просто теперь и нас появился фильтр, позволяющий отсеивать «производственников» от «разработчиков». Другое дело, что в такой реальности «программист» уже совсем не программист — он скорее тот, кого называли несколько раньше «системотехник». Правда, тут на работу один из коллег принес замечательный томик на 700 страниц, 70-ого года выпуска. И тут я понял, что системотехник из меня… Скорее всего даже на троечку не тянет. Желающие уронить свою самооценку могут ознакомиться.
Но в целом мысли правильные. А вот оценка… Я бы не сказал, что буйство пены вокруг программирования это «золотой век». Пена — это просто пена. Покипит и успокоится.
lockywolf
cd ~/Repos/WebRTC/ && grep AUTHORS | wc -l
127
И это большей частью не люди, а организации. По 640 килобайт на каждого программиста — довольно дофига.