почему так мало программистов
Как много разработчиков и как мало программистов…
Возможно кто-то воспримет эту статью, как очередное нытье на тему того «как плохо жить». Но я все же напишу ее с надеждой, что кого-то это сподвигнет на самосовершенствование. И, вдруг, текущий релиз нашей разумной (хотелось бы верить) цивилизации станет чуточку стабильнее.
Причиной моего недовольства стал очередной неудачный опыт работы с фрилансером, именующим себя «мобильным разработчиком». Человеку была поставлена задача, он ее даже выполнил — приложение как-то работало, хотя некоторые баги с удалением объектов навевали грустные мысли о неправильной работе с индексами списков. А это — плохая примета. Если человек не умеет работать с удалением из списков, то это скорее всего только начало проблем, и далее стоит ожидать худшего.
Так, в принципе, все и случилось. Когда ТЗ было почти что выполнено, полностью оплачено и исходники переданы, я понял, что просто зря выкинул деньги на ветер.
Напомню, что приложения Android пишутся на Java — объектном (с небольшими оговорками) ЯП. Или даже некоторых объектно-функциональных (тоже с оговорками) ЯП типа Kotlin и Scala.
Наш же герой, назвавшийся «разработчиком Android», не освоил даже процедурного программирования (своеобразный «бронзовый век» программирования) и остался где-то на уровне структурного («каменный век»). Своим каменным топором на палке с единственной функцией «копи-паст», он и сколотил все мое будущее приложение.
О, этот человек — гений копипасты. Например, каждый раз, когда надо было взять объект по id из списка, он писал цикл. А когда ему попадался список списков, он писал вложенный цикл. Поэтому мое новое приложение на 80% состояло из «лесенок» циклов разной степени вложенности…
Все эти циклы были до боли похожи друг на друга, но создать приватный метод, например, getObjectById «разработчик» так и не догадался. Надо ли говорить, что методы insert и update длиной по 200 строк совпадали на 90 процентов?
Я занялся рефакторингом этого «чемодана без ручки» (нести неудобно, бросить жалко — деньги же уплочены). IDEA честно мне подсвечивала дублирующиеся куски и предлагала вынести их в функции. Методом простого нажимания F2 (переход к следующему предупреждению), Alt-Enter (показать варианты действий) и Enter (выбор первого дефолтного варианта). Мне удалось сократить исходный код в 1.5 раза. Остается загадкой, что мешало сделать это самому разработчику. Незнание, что в IDEA есть предупреждения?
Потом я занялся уже рефакторингом классов, которые тоже были тупо скопированы, без малейших попыток создания супер-классов с общей функциональностью. Пришлось серьезно поработать и над инкапсуляцией и побочными эффектами — статичные публичные свойства классов с успехом заменили человеку отсутствие глобальных переменных в Java. Например, id редактируемого объекта было просто глобальной переменной главного Activity.
В общем, исходный код был раздут как минимум в трое-четверо. А я напомню основную аксиому программирования:
Чем меньше кода, тем меньше глюков.
Не глючит только код, которого нет. Отсутствующий код (при сохранении функциональности) – это предел, к которому надо стремиться. Из этой аксиомы неудивительным образом следует утверждение «больше кода — больше глюков». Избыточный код — это главная проблема копипасты — она примерно квадратично увеличивает количество багов в коде. Для борьбы с этим явлением еще на заре императивного программирования придумали процедуры. Но наш программист не искал легких путей…
Впрочем хватит ныть. Речь ведь не о нем, а о методиках обучения программированию в ВУЗах, когда свежего первокурсника сажают сразу на какой-нибудь С++ (прямо скажем, не самый лучший язык для новичков) учить ООП или зубрить алгоритмы сортировки с «о-большое-от-эн-логарифм-эн». И хорошо, если перед этим им хотя бы объяснили «черепашью графику». По факту же люди не знают самых основ программирования.
Но давайте по чесноку! Вот вы там такие умные сидите сейчас и думаете «Ну это же детский сад! Я бы так никогда не сделал.». Допустим, все так, и настолько глупого кода с копипастой вы не напишите. Но насколько вы усвоили (и применяете) остальные, более сложные, концепции и парадигмы? Ведь любой современный ЯП — мультипарадигменный. И все эти парадигмы надо применять одновременно: создавая методы объекта, выделять смыслово-законченный или повторяющийся код в процедуры, возвращая замыкание в качестве результата обобщенной функции, не забыть про инкапсуляцию, заводя в проекте новый утилитарный модуль, вспомнить про решаемый аспект, и т.д.
Ниже в статье голосовалка — проверь себя, все ли из перечисленного ты знаешь. Там нет ни одной технологии или библиотеки специфичной для предметной области, только общие парадигмы. Я убежден, что любой, кто называет себя программистом просто обязан знать и применять все перечисленные подходы в любом языке программирования (от CSS до Erlang, от прости-господи-1С до Rust).
Итак, что ты знаешь (можешь объяснить суть и плюсы-минусы в 2-3 предложениях и дать примеры, как ты это применял в последнее время)?
Если что-то для тебя там новое или ты не уверен, что можешь правильно объяснить, советую погуглить на досуге и немного повысить свой уровень с «разработчика» (в плохом смысле этого слова) до настоящего лампового «программиста».
Почему программисты через 10 лет будут не нужны?
Это один из распространённых вопросов о судьбе программирования: мне не раз приходилось его слышать от журналистов, блогеров и родителей, чьи дети выбирают будущий вуз. Для меня этот вопрос звучит довольно удивительно: во-первых, 10 лет для программирования это не такой уж большой период, чтобы выпасть из обоймы, во-вторых, я пока не вижу никаких прорывных движений в этом направлении, в-третьих, мне не кажется что за 10 лет полностью исчезнут компьютеры или люди — а это два единственных условия для уничтожения программирования на планете. Между тем вопрос есть, он в топах поисковых запросов по теме, а значит, это жжжж неспроста. Давайте разбираться.
Мы открываем в блоге RUVDS на Хабре новую рубрику — вопросы с поиска. Принцип прост: выбираем самые интересные и популярные поисковые запросы о программировании, технологиях, программистах и карьере в ИТ и отвечаем на них с помощью наших постоянных экспертов. Будет интересно.
Итак, а откуда родом вопрос?
Если обратиться к российским и зарубежным источникам, форумам, социальным сетям, этот вопрос можно встретить. И действительно, даже у самих программистов есть опасения, пригодятся ли они через 10 лет или пора переучиваться на другую специальность и искать новые места для наработки практики. Разномастные эксперты, футурологи и аналитики предсказывают разные формы кончины программирования: от возврата в экологичный мир без технологий до глобальной победы искусственного интеллекта, который будет воспроизводить сам себя и писать программы по устному указанию любого пользователя. Как всегда, обе крайности напрочь несостоятельны, но среди вероятных причин отмирания профессии программиста есть несколько замысловатых и небезынтересных концепций.
▍ Абстракция и контейнеры
Есть версия, что программирование будет более абстрактным, оно станет заметно отличаться от того, с чем мы имеем дело сегодня. Многие аналитики и визионеры полагают, что serverless-технологии и контейнеризация ощутимо изменят облик программирования, а разработчики откажутся от низкоуровневого программирования. Они будут пользоваться «кубиками» разделов программы и собирать некие «модульные» решения, как в конструкторе или, если ближе к миру ИТ, в готовых шаблонах проектирования сайтов (типа Tilda или WordPress).
Сразу скажу: эти рассуждения довольно далеки от глубинных сущностей программирования. Ни одно подобное решение не сможет существовать без поддержки разработчиков и опять же минимальная кастомизация такой модульной программы «на всём готовеньком» требует знаний программирования, понимания работы алгоритмов и даже владения необходимым языком программирования и специфическими инструментами. Думаю, это не нужно объяснять никому из тех, кто работал с готовыми шаблонами сайтов и конструкторами — если нужна чуть более серьёзная функция, сразу к вашим услугам раздел для создания и редактирования кастомного кода. Сделай сам, если хочешь круто. С абстракциями в будущем программирования та же история: каждое чуть более глубокое требование будет нуждаться в реализации силами программиста.
▍ Всех спасёт Low-code
Каждый пользователь сможет справиться с кодом самостоятельно, — самоуверенно заявляют эксперты, которые верят в low-code платформы. Это уже даже не лукавство, а огромная ложь, сформулированная устами кабинетных маркетологов. Те из вас, кто внедрял ПО для бизнеса, обучал пользователей или хотя бы смотрел, как бухгалтер отчаянно ломает 1С, знает, что low-code это обычная рекламная замануха и никак уж не убийца классического программирования. Чтобы задеплоить на платформе low-code самый обычный рабочий процесс и связать его с 2-3 сущностями из оперативной работы компании, нужно уже что-то знать про реляционные базы данных, ключи, алгоритмы, оптимизацию. Иначе получится школьная контрольная по Access — что-то вроде соединил и красиво, а таблицы и окна не работают.
▍ Электроник напишет программу за Сыроежкина
Помните главный посыл «Электроника»? Робот, стань человеком. Евгений Велтистов знал, о чём он пишет: преодоление порога между искусственным и естественным интеллектом — обычная научная фантастика и научить робота понимать человеческие требования затруднительно. Однако сторонники теории исчезновения профессии программиста полагают, что искусственный интеллект станет самым продвинутым разработчиком, а главным инструментом оставшихся программистов станут обученные модели и нейросети, которые выдадут нужный код по паре ключевиков. Останется сделать копипаст (правда, ничего нового? ;-)), скомпилировать, немного изменить дизайн и вуаля, программа готова. Однако это слишком оптимистичный прогноз: искусственный интеллект может быстро искать по массивам кода и выбирать нужный, но он никогда не сможет учесть все требования пользователей и запрограммировать всё именно так, как того требует заказчик. Тут у людей-то через раз получается… И потом, а кто будет разрабатывать искусственный интеллект и нейросети?
▍ Вавилон наоборот
А вот этот прогноз кажется разумным и логичным: есть предпосылки того, что появится какой-то один суперуниверсальный язык программирования, максимально близкий к нативному английскому, который избавит мир от сложностей совместимости, стандартов, миграций, интеграции и т.д. Кто-то видит такой язык наследником Python, кто-то предполагает, что появится язык блоков и готовых функций, из которых можно будет собрать программу. Эксперты считают, что этот новый язык станет доступным для спикеров с любым родным языком, а также легко портируется в сенсорные формы для незрячих программистов.
Однако пока это выглядит тоже научной фантастикой: миру программистов многие годы предстоит поддерживать старые проекты и огромный пласт легаси-кода на всех тех языках, которые мы привыкли использовать в работе. К тому же, универсальный язык может в своём развитии пройти путь в десятки лет, пока станет доступным и приемлемым как для простого учебного проекта, так и для сложной системы безопасности или инжинирингового продукта. Так что пока — только призрачная иллюзия конца вавилонского столпотворения в разработке.
Кстати, есть и обратный прогноз — так, портал TechRepublic уверен, что языками программирования будущего являются Go, Kotlin, Python, TypeScript, R, Scala, Swift, Rust, Ruby и Haskell. Однозначно интересный и почти на 100% справедливый список (за исключением дискуссий в рамках вкусовщины), но, очевидно, что не хватает как минимум С/С++, которые играют огромную роль в машинном обучении, алгоритмах, нейросетях и т.д. Опять же, несмотря на присутствие в перечне будущего «детей Java», самой Java также не хватает — а она гарантированно будет продолжать играть огромную роль спустя 10 лет. И, если честно, при всей привлекательности концепции, я тоже не верю в новый универсальный язык, а вот в более простые и изящные высокоуровневые языки в будущем верю. Но, кто знает теорию и практику возникновения новых крутых языков программирования, тот сразу скажет, что с появлением новых публичных и популярных языков количество программистов будет только расти.
Как видите, большинство прогнозов с позиций айтишника выглядят несостоятельно, хотя некоторые моменты хотелось бы реализовать в нашей повседневной работе.
А что случится с программистами через 10 лет на самом деле?
Начнём с того, что не через 10 лет, а за эти 10 лет. Эволюция идёт непрерывно и изменения нарастают с каждым днём. Поэтому человеку, погружённому в мир современного ИТ, никакого труда не составит наметить реалистичный прогноз.
▍ Какие технологии будут в тренде?
Сложно точно предсказать, что именно будет востребовано в течение 10 лет и через 10 лет (вспомните 2020, который породил новые требования и тренды совершенно внезапно, на фоне форс-мажора). Я выделю пять интересных технологий, которые могут дать значительное конкурентное преимущество профессионалу.
Ржу не могу. Да-да, всё так. Многие говорят, что программистов заменит ИИ. Позвольте мне вам прояснить кое-что.
Программисты станут последними, кого заменит ИИ. Не думаете ли вы, что другие рабочие места будут заменены ИИ гораздо раньше программистов?
Менеджеры, хех. Руководители, хех. Правительство, хех. Любая другая работа белых воротничков, хех.
Я бы сказал, что если этот чёртов день настанет, облажаемся мы все, и это будут лучшие годы для человечества.
Так почему же люди говорят только о замене программистов? Просто эти люди глупы, им не терпится увидеть, как более умные люди потеряют работу.
В общем, друзья, опасения напрасны. Работы у программистов через 10 лет будет много, но работа будет другой. Смело идите в программирование, развивайтесь в программировании — эволюция технологий окажется в ваших руках.
«Программистов уже слишком много»!
27 Mar 2019 в 11:03
27 Mar 2019 в 11:03 #1
Почему на форумах когда человек спрашивает как ворваться в сферу программирования, челики пригорают от того что очередной новичок решил попробовать себя в этом?
За последние 10 лет программирование очень расхайплено и множество множеств челиков пытаются научиться этому чтобы обеспечить себя работой. Людей привлекают следующие факторы:
1. Не требуется корочки для того чтобы устроиться на работу, следовательно очень низкие денежные затраты на обучение
2. Работа за компьютером, особенно в странах СНГ очень ценится, ибо на заводе за копейки корячиться это ГГ. Уж лучше за копейки сидеть за столом чем на морозе трубы сваривать.
3. Ходит миф что в этой сфере крутятся огромные деньги, следовательно высокие зарплаты
4. Есть возможность работы не выходя из дома. В своем уютном теплом домике без лишних людей. Также экономия денег на транспорт.
Так почему челики пригорают от того что очередной человек хочет в эту сферу? Пригорают они от того, что боятся конкуренции. Думают что работы на всех не хватит. Да, это правда, но проблема ОЧЕНЬ преувеличена.
Всё дело в том, что те люди которые пришли в сферу только из-за денег, без какого либо конкретного желания проявить себя в этой сфере, не будут хорошими работниками. Многие из них бросят это дело после того как поймут что это слишком сложно или неприятно для них. Многие со временем устанут от того что приходится постоянно самообучаться, на это требуется дисциплина и сила воли. Многие будут работать, заставляя себя через силу. Они тоже отфильтруются от хороших рабочих мест, так как качество их работы будет едва выше минимального, при котором уже увольняют. И только лишь малая часть из них действительно готова самообучаться и делать работу качественно. Они и добавят конкуренции уже существующим программистам. Но их очень мало. Подавляющее большинство отфильтруются с помощью естественного отбора.
Так что настоящим программистам которые пишут код не на коленке, бояться нечего.
27 Mar 2019 в 11:06 #2
у них просто дата регистрации 2012 года, олдфаги типа
27 Mar 2019 в 11:07 #3
Почему на форумах когда человек спрашивает как ворваться в сферу программирования, челики пригорают от того что очередной новичок решил попробовать себя в этом?
За последние 10 лет программирование очень расхайплено и множество множеств челиков пытаются научиться этому чтобы обеспечить себя работой. Людей привлекают следующие факторы:
1. Не требуется корочки для того чтобы устроиться на работу, следовательно очень низкие денежные затраты на обучение
2. Работа за компьютером, особенно в странах СНГ очень ценится, ибо на заводе за копейки корячиться это ГГ. Уж лучше за копейки сидеть за столом чем на морозе трубы сваривать.
3. Ходит миф что в этой сфере крутятся огромные деньги, следовательно высокие зарплаты
4. Есть возможность работы не выходя из дома. В своем уютном теплом домике без лишних людей. Также экономия денег на транспорт.
Так почему челики пригорают от того что очередной человек хочет в эту сферу? Пригорают они от того, что боятся конкуренции. Думают что работы на всех не хватит. Да, это правда, но проблема ОЧЕНЬ преувеличена.
Всё дело в том, что те люди которые пришли в сферу только из-за денег, без какого либо конкретного желания проявить себя в этой сфере, не будут хорошими работниками. Многие из них бросят это дело после того как поймут что это слишком сложно или неприятно для них. Многие со временем устанут от того что приходится постоянно самообучаться, на это требуется дисциплина и сила воли. Многие будут работать, заставляя себя через силу. Они тоже отфильтруются от хороших рабочих мест, так как качество их работы будет едва выше минимального, при котором уже увольняют. И только лишь малая часть из них действительно готова самообучаться и делать работу качественно. Они и добавят конкуренции уже существующим программистам. Но их очень мало. Подавляющее большинство отфильтруются с помощью естественного отбора.
Так что настоящим программистам которые пишут код не на коленке, бояться нечего.
Рынок уже насыщен если че, но как и везде хорошие спецы всегда нужны. Сеичас хаип это анализ данных, машинное и глубокое обучение.
Кадровый ИТ-голод: почему в России не хватает айтишников и где их искать
Кризис на рынке труда в инновационных отраслях экономики обостряется — подобрать подходящего кандидата на вакансию в сфере высоких технологий становится всё сложнее. По данным опроса международной рекрутинговой компании HAYS, в 2018 году нехватку специалистов ощутили 84% российских компаний. 38% из них заявили о дефиците квалифицированных кадров. Еще 46% сказали, что остро нуждаются в редких и новых специалистах. 78% компаний ждут трудностей с подбором кадров в ближайшие годы, причем 15% опасаются, что вообще не смогут найти подходящих кандидатов. СТО ИТ-холдинга TalentTech Сергей Ахметов рассказал, как обеспечить свою компанию квалифицированными кадрами.
Читайте «Хайтек» в
В числе наиболее востребованных профессий — разработчики мобильных приложений, эксперты по работе с большими данными, петрофизики и специалисты по электронной коммерции. Рынку не хватает разработчиков алгоритмов машинного обучения и ИИ, проектировщиков умных домов и цифровых фабрик.
В сфере высоких технологий, по данным опроса, на одного кандидата на вакансию приходится от двух до семи рабочих мест. При этом эксперты в HR отмечают, что для некоторых востребованных специальностей из сферы ИТ зарплаты в разы выше средних по рынку. Например, глава направления по цифровой трансформации компании может рассчитывать на компенсацию в размере 700 тыс. рублей в месяц.
Причины кадрового голода на российском ИТ-рынке
Российские вузы ежегодно выпускают более 25 тыс. новых специалистов, из которых лишь 15%, по оценке ИРИ (Института развития интернета), готовы немедленно приступить к работе. Таких студентов из лучших вузов страны обычно разбирают в крупные компании еще на этапе учебы. Остальные же нуждаются в дообучении или переквалификации.
По результатам исследования KPMG, в список основных барьеров на пути у готовых к цифровизации компаний входят отсутствие необходимых компетенций и недостаточный уровень ИТ-грамотности сотрудников. Связано это, в первую очередь, с тем, что ИТ-образование в России (как и любое другое) больше стремится к фундаментальности, нежели к прикладной направленности.
Ситуация усугубляется тем, что лишь малая часть студентов выбирает специальность осознанно. Большинство приходит на ИТ-факультет под влиянием друзей, родителей и моды. Такой слабо мотивированный контингент быстро сдувается, столкнувшись со сложнейшим материалом и учебной нагрузкой ИТ-специальностей. Преподаватель из Новосибирска Дмитрий Гоков говорит о том, что в итоге из 100 поступивших на ИТ-факультет до выпуска доходят не более 50 человек. При этом по профессии начинает работать едва ли половина из них.
Диджитал-навыки нужны любому специалисту вне зависимости от того, в какой области он трудится. Ситуация похожа на историю компьютерной грамотности: если раньше обращаться с компьютером умели только избранные, то сейчас это обязательное требование практически на любой позиции, причем не только в офисе. Поэтому цифровым навыкам стоит уделять особое внимание на самых ранних этапах обучения детей. В век цифровых технологий способность работать в цифровой среде нужна не меньше, чем умение писать и читать.
Как обеспечить свою компанию надежными и эффективными кадрами
В этой ситуации некоторые работодатели предпочитают расставаться с недостаточно квалифицированными кадрами. И, возможно, теряют лояльных и перспективных сотрудников, которых достаточно было бы хорошо прокачать. Другие учатся сами растить специалистов под свои потребности.
Многие ИТ-компании практикуют целевые стажировки, в рамках которых студенты профильных вузов проходят жесткий квалификационный отбор, обучаются за счет компании, получают знания и навыки, необходимые для работы в команде, а впоследствии — предложения о работе.
В крупных информационно-технологических компаниях России, как правило, есть собственные учебные центры. Работодатели рангом помельче заводят корпоративные библиотеки, организуют квесты и программистские баттлы и даже открывают свои собственные корпоративные бизнес-инкубаторы для инвестирования в стартапы сотрудников.
По данным Нетологии, из всей аудитории их онлайн-курсов 32% — корпоративные клиенты. Крупные компании стали всё больше придавать значение обучению и направлять своих сотрудников на онлайн-курсы, это считается глобальным трендом.
Постоянное развитие навыков сотрудников позволяет компании оставаться успешной в условиях цифровизации бизнеса. Технологии развиваются, и команда должна уметь работать с ними, а для этого нужно постоянно обучаться новому. Например, нельзя один раз научиться работать в Excel, так как он из года в год обрастает новыми функциями — а значит, нужно постоянно обновлять знания. И так во всем.
Набирает популярность аренда ИТ-специалистов. К примеру, у вас есть срочная задача, и вы не успеваете обучить под нее своих сотрудников. В этом случае бизнес обращается к фрилансу или аутсорсинговым компаниям и специально под проект нанимает сотрудника/команду, а по завершении возвращает специалистов, причем уже с повышенной квалификацией.
Если столичные айтишники избалованы и зарплатой, и предложениями, то в регионах ситуация несколько иная. Уровень оплаты труда там, как правило, ниже, при этом на рынке есть множество кандидатов, к которым стоит присмотреться. Здесь компания может пойти двумя путями: выбрать один-два города и открыть там свои филиалы или заняться построением удаленной команды.
Управлять удаленной командой сотрудников не так сложно, как может показаться. Правда, в такой ситуации классических управленческих навыков недостаточно — здесь на первый план выходят навыки работы с системами коммуникаций и ИТ-решений, направленных на оптимизацию взаимодействия между членами такой команды. Для общения можно использовать WhatsApp, Telegram, Skype, Zoom. Для постановки и отслеживания статуса задач — Trello. Для совместной работы с документами — Google Drive или «Яндекс.Диск». Функция «Безопасная сделка» крупнейшей в России фриланс-биржи FL.ru дает возможность не беспокоиться о формальностях и рисках.
Цифровые компетенции нужны не только в ИТ-сфере. Диджитализация бизнеса стала основным условием выживания компаний в конкурентной борьбе.
Некоторые предприниматели уже почувствовали последствия недостаточного внедрения цифровых инструментов в виде сбоя продаж или падения прибыли. Ужесточилась конкуренция, так как на рынке появились молодые цифровые игроки, которые быстро заняли лидирующие позиции.
Диджитал меняет правила ведения бизнеса, бизнес-модели, каналы коммуникаций между потребителем и брендом. Для успешной цифровой трансформации очень важно качественно подготовить персонал к внедрению инноваций. Как сотрудники, так и руководство должны быть готовы к непрерывному развитию, обучению и повышению квалификации, а вовлекаться в ИТ-среду лучше с самых юных лет.