среда, 5 августа 2020 г.

Рейтинг языков программирования 2020

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

Например, в середине в 80-х стал очень популярен язык Prolog, но потом его популярность резко снизилась. И сейчас на нем практически никто не пишет. А место популярного новичка занял Python.

https://books.google.com/ngrams

Как же узнать рейтинг языков программирования? Общего рейтинга не существует, так как нет простого способа собрать подобную статистику. Но существуют разные способы оценки популярности языков программирования. Рассмотрим самые популярные рейтинги.

 

1. Рейтинг TIOBE Index

www.tiobe.com/tiobe-index

Рейтинг TIOBE Index построен на оценке результатов поисковых запросов, содержащих название языка. Логика этого индекса очень проста: «Если язык ищут в поисковых системах, то он популярен». Конечно же, это заявление спорное, потому что программисты-профессионалы крайне редко будут искать в поисковике именно название языка программирования. Они чаще ищут решение конкретной задачи. Но громадный плюс этого рейтинга в том, что он достаточно объективно показывает интерес к тому или иному языку.

Индекс TIOBE показывает самые популярные языки программирования, информации о которых искали на 25-ти самых популярных поисковых системах, то есть запросы вида: «+»<language> programming». Индекс подсчитывается каждый месяц.

Индекс TIOBE на январь 2020 года выглядит так:

Также TIOBE назвала язык C языком программирования 2019 года.

На графике изменений индекса хорошо видны как менялась популярность языков программирования. Но при этом первое-второе место постоянно делят два языка Java и C. Хотя Java активно продвигается компанией Oracle, а язык C никто не продвигает.

И еще интересно то, что C++ ни разу не смог превысить по популярности C.

2. Рейтинг Wappalyzer для веб-приложений

Сервис Wappalyzer использует различные методы для идентификации веб-технологий. Рейтинг языков программирования для разработки сайтов на январь 2020 выглядит так.

В веб-программировании однозначно лидирует язык PHP, более 80% сайтов написано на этом языке.

4. Рейтинг IEEE Spectrum

Ежегодный рейтинг IEEE Spectrum Top Programming Languages использует 11 метрик из 8-ми источников, включая поисковые запросы, упоминания в твиттере и даже упоминания в вакансиях на работу программиста. С одной стороны этот рейтинг использует больше данных, но с другой стороны во многих источниках данные имеют связанный характер. Чем больше публикуются вакансий на некоторый язык программирования, тем больше запросов будет в поисковых системах. То есть у новых языков больше шансов попасть на вершину рейтинга.

Рейтинг IEEE за 2019 год выглядит так:

https://spectrum.ieee.org/static/interactive-the-top-programming-languages-2019

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

5. Рейтинг Stack Overflow

Сайт Stack Overflow — это площадка, на которой разработчики могут задавать и отвечать на вопросы по программированию. Этот сайт имеет около 40 миллионов посещений в месяц. Есть русскоязычная версия сайта: ru.stackoverflow.com

Этот рейтинг рассчитывается на основе опроса разработчиков. В 2019 году было опрошено более 90 000 разработчиков и составлен рейтинг языков программирования. Скорее это рейтинг языков, которые вызывают вопросы. В этом рейтинге лидером стал JavaScript.

insights.stackoverflow.com/survey/2019

Такая популярность вполне объяснима, сейчас JavaScript бурно развивается и каждая новая возможность вызывает массу вопросов, поэтому программисты идут на сайт Stack Overflow, чтобы задать вопросы.

Любопытно, что C не попал даже в первую десятку.

6. Вакансии на Head Hunter

Можно подойти к рейтингу языков программирования с другой стороны и посмотреть, какие языки указываются в вакансиях и сколько собираются платить. Одна из самых популярных площадок для поиска работы в IT-сфере — это сайт HeadHunter. Там есть отдельный раздел — вакансии для программистов.

hh.ru/vacancies/programmist

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

Здесь видно, что программист, знающий Pascal (среда Delphi), все еще востребован.

7. Google Books Ngram Viewer

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

books.google.com/ngrams

В начале этой статьи приведены графики использования слов Prolog и Python. А теперь введем JavaScript, Python и PHP.

Видно как в 1992 году появляется интерес к JavaScript и он быстро обгоняет Python и PHP.

Источник: Школа программирования ProgTips

понедельник, 7 октября 2019 г.

ГДЕ ГОТОВЯТ САМЫХ ВЫСОКООПЛАЧИВАЕМЫХ IТ-ишников В РОССИИ?

Сервис по поиску работы и подбору сотрудников Superjob составил рейтинг лучших технических вузов по уровню зарплат выпускников 2013—2018 годов. Первую тройку мест в нем занимают столичные университеты.
Superjob представил рейтинг вузов России по уровню зарплат занятых в ИТ-отрасли молодых специалистов, окончивших вуз в 2013—2018 годах. Как сообщили в пресс-службе сервиса, топ-3 рейтинга в этом году занимают вузы Москвы.
Рейтинг 2019 года возглавил Московский физико-технический институт. Зарплата его выпускников в столице увеличилась на 10 тысяч рублей и составляет 160 тысяч рублей. 91% выпускников остались работать в городе обучения.
Второе место в рейтинге занял Московский государственный технический университет имени Н.Э. Баумана. Прирост по зарплате также составил 10 тысяч рублей, а сам заработок – 140 тысяч рублей в месяц. В городе остались работать 73% выпускников.
Выпускники Московского государственного университета им. М.В. Ломоносова своими высокими заработками последних лет вывели альма матер на третье место, показав максимальный прирост по зарплатам за год (+25 000 рублей). Средняя зарплата айтишников из МГУ теперь 130 тысяч рублей, доля оставшихся в столице – 80%.
В пятерку лучших вузов вошли Санкт-Петербургский национальный исследовательский университет информационных технологий, механики и оптики (128 тыс. руб., 81%) и Национальный исследовательский ядерный университет МИФИ (125 тыс.руб., 79%).
На шестом месте – Новосибирский национальный исследовательский государственный университет (112 тыс.руб., 68%), на седьмом – НИУ ВШЭ (110 тыс.руб., 86%). Восьмую позицию делят Национальный исследовательский университет "МЭИ" (100 тыс. руб., 80%), Казанский федеральный университет (100 тыс.руб., 71%), НИТУ "МИСиС" (100 тыс.руб., 78%) и Санкт-Петербургский государственный университет (100 тыс.руб., 83%). На девятой строчке рейтинга – Новосибирский государственный технический университет (98 тыс. руб., 85%), на десятой – Уральский федеральный университет им. Б.Н. Ельцина (97 тыс.руб., 67%), Национальный исследовательский Нижегородский государственный университет им. Н.И. Лобачевского (97 тыс.руб., 76%) и Санкт-Петербургский политехнический университет Петра Великого (97 тыс.руб., 74%).
Надо учитывать, что эти средние зарплаты высчитывались по официальным данным. Но, как вы понимаете, айтишники продвинутый народ и основные свои прибыли прячут на скрытых счетах или переводят в криптовалюту. Так что, на самом деле, заработки у них гораздо выше.
Я бы в айтишники пошел – пусть меня научат!

пятница, 6 сентября 2019 г.

В Дартмуте появился памятник языку программирования BASIC



По инициативе журналиста Дэвида Брукса в штате Нью-Гэмпшир установили мемориальную доску в честь создания первого универсального языка программирования BASIC, авторами которого были профессора расположенного неподалеку Дартмутского колледжа.

Объясняя свой замысел, Брукс указывает на то, что увековечивать все значимые достижения местного населения в придорожных мемориалах — очень распространенная традиция в Нью-Гэмпшире: в общей сложности возле дорог на территории штата насчитывается 255 таких памятников. Они рассказывают о самых разных достопримечательностях, от мест рождения литераторов до архитектурных строений, однако гик-культура не находит в них никакого отражения. Журналист решил воспользоваться тем, что подать идею для нового мемориала может любой житель штата, чтобы восполнить это упущение.

Идея языка программирования BASIC возникла в 60-х годах, когда компьютеры стали широко доступны, в том числе и в учебных заведениях. Преподаватели Дартмутского колледжа Томас Курц и Джон Кенеми поставили перед собой и студенческим сообществом цель разработать максимально простой язык общего назначения, с помощью которого даже учащиеся без специальной подготовки могли бы решать свои задачи. В 1964 году BASIC был запущен в обиход, и несколько поколений студентов постигали основы программирования с его помощью. Впоследствии язык породил множество вариаций (в частности, Altair BASIC, который использовался в Microsoft); некоторые из них применяются и сейчас.

«Универсальный код символических инструкций для начинающих сделал больше для того, чтобы — привлечь широкий круг людей в программирование, чем любое другое человеческое творение, говорит Брукс в своей статье. — Я и сам в их числе: все рабочие программы, которые мне удавалось создать, были написаны на ванильном BASIC. В общем, он куда важнее, чем какой-нибудь удостоившийся таблички мост».

Брукс поделился своей идеей с Томасом Курцем и администрацией Дартмутского колледжа и получил поддержку обеих сторон. Изначально они планировали упомянуть в тексте также и другое нововведение, которое появилось вместе с BASIC — концепцию режима разделенного времени. Однако от этой мысли пришлось отказаться по техническим причинам: текст с подробным описанием обоих достижений не помещался на табличку. Брукс надеется воздать этому изобретению должное в будущем; также он упоминает о планах увековечить первый случай употребления термина «искусственный интеллект» на научной конференции в Дартмуте в 1956 году.

Из-за формальностей, связанных с землевладением, табличку не удалось установить на территории колледжа. Для «желающих сделать селфи» Брукс оставляет следующие координаты: шоссе 120, на полпути между зданием строительной компании Трамбелл-Нельсон и Центром общественных работ Хановера.

Источник: https://m.habr.com/ru/news/t/456628/ 

воскресенье, 20 января 2019 г.

Любопытные извращения из мира ИТ

http://thedailywtf.com/series/feature-articles
  • Перевод
Сайт The Daily WTF уже 14 лет собирает курьёзные, дикие и/или печальные истории из мира ИТ. Я перевёл несколько рассказов, показавшихся мне интересными. Все имена и названия компаний изменены.

На работу за 3 000 миль


Правдивая история из личного опыта нашего автора Snoofle. [Оригинал]

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

Спустя несколько месяцев возник ещё один подобный контракт. Компания снова наняла тысячу человек, чтобы показать, что у неё есть персонал. Ещё через несколько месяцев контракт снова был передан другому подрядчику, и компания снова уволила всю тысячу.


На протяжении двух лет такое повторялось несколько раз.

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

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

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

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

После того, как руководство назначало этих новых сотрудников на проект для ускорения работы над ним, новые сотрудники сказали «Постойте-ка, посередине этого проекта есть огромная дыра!»Руководство ответило, что эта часть проекта засекречена, и может изучаться только людьми с допуском к секретной информации и только на предприятии в Калифорнии. Были запрошены и получены соответствующие допуски, после чего опытных сотрудников отправили на две недели на предприятие в Калифорнии.

Прежде чем соглашаться на поездку, разработчики хотели узнать, как они смогут получать доступ к материалам после изучения. Ведь доступ возможен только на месте, в Калифорнии, а все сотрудники живут и работают в Нью-Джерси. Им сказали, что о подробностях они узнают в Калифорнии.

Ну ладно, все они прилетели на западное побережье, заселились в отели и поехали в офис.

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

Но, постойте у них же не было возможности обсудить это с семьёй! Как отсутствие 90% времени одного из родителей повлияет на детей? Захотят ли они жить в гостиницах и аэропортах в течение двух лет? Какого хрена компания не наняла сотрудников на месте, в Калифорнии, а занималась этим в Нью-Джерси?

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

Можно и не говорить, что остаток рабочего для менеджеры втирали о необходимости жертв ради компании, а разработчики задавались вопросом: «Какого чёрта?» Вечер четверга был занят бесконечными звонками домой. Утром пятницы все сотрудники уволились и направились в аэропорт, чтобы вернуться домой.

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

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

Случай отказа


[Оригинал]

image

В первый день на новой работе Себастьян не был особо воодушевлён. Он уже многое повидал и набрался равнодушия и пессимизма. Эта новая работа не должна была отличаться ни одной другой: куча надоедливых коллег, плохо продуманных требований, старых кодовых баз, полных спагетти-кода. Но она хорошо оплачивалась, а он устал от своей старой группы, ему надоели одни и те же привычные лица. Поэтому он внутренне приготовился к слегка новым оттенкам той же офисной политики и муторных заданий.

Он даже особо не расстроился, зайдя в ИТ-отдел за своими учётными данными и услышав жужжание и щёлканье старых серверов Packard Bell. Себастьян просто опустил на несколько уровней свою планку требований к рабочему компьютеру, и вернулся в новый офис. Да, его должность подразумевала собственный офис и соответствующую оплату. Ради этого он мог смириться со многим другим.

Его логин сработал с первой попытки, что было приятной неожиданностью. Он ожидал Windows XP; когда загрузилась Vista, он не был уверен, стоит ли ему радоваться более новой ОС, или ужасаться тому, что это Vista. Завершив получение полномочий администратора и урезав UAC, он даже на какое-то время мог притвориться, что это «семёрка». «Чтобы испугать меня, потребуется что-то большее», — подумал он и запустил Outlook.

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

Первое письмо было примерно таким:

Здравствуйте, Себастьян, добро пожаловать в нашу идеально отточенную рабочую среду. В ней всё делается правильно. При создании проектных документов вы будете работать с Bonk-Word (веб-приложение для документирования компании IBM). Не забывайте часто сохранять работу! При аварийном завершении Bonk-Word вам необходимо будет написать письмо в отдел ИТ для его перезапуска.

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

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

«Шесть страниц на завтра?», — забеспокоился Себастьян. «Наверно, я возрадовался эффективности слишком рано. Ну, по крайней мере, не будет скучно», — он хрустнул костяшками пальцев, открыл Bonk-Word и начал разбираться с так называемыми проблемами со шрифтами.

Первое, что он выяснил — менеджер не шутил о частом сохранении. К концу дня он мысленно делал ставки: что свалится первым — Bonk-Word или сама Vista. Оба они крашились примерно через каждые полчаса. Но ведение статистики вылетов на листочке почему-то успокаивало Себастьяна. Оно напоминало ему: в мире что-то ещё работает. Простейшие математические действия не впечатляли, но были надёжными. Регулярными. Стабильными.

Возможно, в этом офисе Себастьян чувствовал себя одиноко. Но он был тихим и отдельным. Пусть постоянные вылеты раздражали, но Себастьян всё-таки двигался вперёд. Он задержался на работе, чтобы изучить разнообразную литературу, посвящённую рендерингу шрифтов, в том числе спецификацию Postscript, сопроводительную литературу с рекомендациями по его использованию и информационные центры в World Wide Web, созданные для коллекционирования мудрости лучших умов отрасли в знакомом и удобном формате вопросов и ответов. Он пространно описал в документе «создание программы на Python для рендеринга каждого символа». Он потратил две страницы на описание того, что можно было рассказать в двух словах.

«Если им нужно шесть страниц, они получат шесть страниц», — думал Себастьян.

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

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

«Я сделал, как просили, и в нужном объёме. Скорее всего, это просто формальность, после которой я смогу приступить к работе».

Спустя час униженный и измотанный Себастьян вернулся в свой офис. В его ушах всё ещё звенела полученная им абсурдная, но жестокая критика. По словам президента, его заголовки разделов были едва «зеленоватыми», а не зелёными, как требовала компания, а заголовки глав — непростительно «красноватыми» вместо ожидаемо фиолетовых. Кроме того, ему недвусмысленно сообщили, что отладить шрифты с помощью Python «невозможно». Вместо него Себастьяну приказали работать на C++ и использовать «чудесные» программные библиотеки компании. Ожидая звонка президента, менеджер Себастьяна расхваливал документ, но во время проверки не сказал ни слова, неотрывно смотря на кирпичную стену за своим столом.

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

«Ну ладно», — сказал он вслух в пустом офисе. «Взглянем на эти библиотеки».

Первое, что он начал искать — это документация. Естественно, что в такой помешанной на документах компании документация к «чудесным» библиотекам должна быть точно набрана правильным шрифтом с идеально точным оттенком, с правильными заголовками глав и названиями разделов. Но документации… не было. Была уйма проектных документов с идеальным зелёным и фиолетовым цветами. Но в них описывалась только методология разработки библиотеки и ничего не говорилось об её использовании.

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

Он испытал ужас, но особого удивления не было: библиотеки состояли из плохо продуманных обёрток строковых функций из стандартной библиотеки.

Несмотря на постоянные фиаско, Себастьян держал удар. Его ежедневно вызывали для очередного раунда словесных запугиваний. Компания за четыре года не могла справиться с этой шрифтовой проблемой; тем не менее, ничто из предлагаемого им не устраивало президента. Себастьян отказался от собственной библиотеки компании, начав решать проблему на известном ему Python; в конце концов, если его всё равно будут гнобить, то зачем делать то, что тебе говорят? Но что бы он ни применял: собственный тестер на Python, или тестер Microsoft, или Apple, или Adobe — шрифт оставался полным хаосом. 488 неискоренимых, неисправимых, не решаемых заплатками конструктивных ошибок.

Президент категорически отказывался признать правду. Он утверждал, что это вина Себастьяна, ведь тот не использует великолепные библиотеки C++.

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

Почему-то он сомневался, что будет скучать по компании.

От такого здравоохранения можно заболеть


[Оригинал]

В любой отрасли есть информация, которую необходимо переносить между несовместимыми системами. Если вы жили жизнью праведника, то эти системы были просто разными приложениями на одной платформе. Однако если вы отклонились от благого пути, то эти системы были написаны на разных языках для разных платформ, работающих в разных операционных системах с разным порядком следования байтов. Представьте какое-нибудь Java-приложение в Safari под какой-нибудь версией Mac OS, которому нужно обмениваться данными с какой-то версией .NET под какой-нибудь версией Windows, которой, в свою очередь, нужно общаться с какой-то версией COBOL с двоичным кодом EBCIDIC, работающей на каком-нибудь мейнфрейме.

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

Не надеясь на лучшее, для упрощения работы мы написали поверх XML библиотеки обёрток.

К сожалению, они с задачей не справились.


В отрасли здравоохранения какие-то работающие с сopen-source ребята создали проект (H)ealthcare (API), или HAPI, который по сути является объектно-ориентированным парсером текстовых сообщений отрасли здравоохранения. К сожалению, они, похоже, страдали от синдрома «не знаю, когда остановиться».

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

Это API с приблизительно 15 тысячами вызовов методов! О чём вообще думали эти разработчики?

Например, класс: EHC_E15_PAYMENT_REMITTANCE_DETAIL_INFO может иметь от нуля и более product service разделов. Поэтому я сразу же начинаю думать о каком-нибудь массиве или списке. Поэтому вместо чего-то наподобие такого:

    EHC_E15_PAYMENT_REMITTANCE_DETAIL_INFO info = ...;
    List<EHC_E15_PRODUCT_SERVICE_SECTION> prodServices = info.getProductServices();
    // итерируем

… нам требуется выполнить что-то из этого:

    // Получаем подструктуру
    EHC_E15_PAYMENT_REMITTANCE_DETAIL_INFO info = ...;
 
    // Получаем из подструктуры встроенные product-service

    // ...если мы точно знаем, что в сообщение он только один:
    EHC_E15_PRODUCT_SERVICE_SECTION prodSvc = info.getPRODUCT_SERVICE_SECTION();
 
    // ...если мы не знаем, сколько их будет:
    int n = infos.getPRODUCT_SERVICE_SECTIONReps();
    for (int i=0; i<n; i++) {
        EHC_E15_PRODUCT_SERVICE_SECTION prodSvc = info.getPRODUCT_SERVICE_SECTION(i);
        // используем это
    }

    // ...или можно просто взять их и выполнить итерацию
    List<EHC_E15_PRODUCT_SERVICE_SECTION> allSvcs = info.getPRODUCT_SERVICE_SECTIONAll();

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

Можно сказать: «Да ладно, всё не ТАК уж плохо»; достаточно использовать то, что тебе нужно. Но потом ты осознаёшь, что некоторые из этих структур данных встроены на десять и более уровней вглубь, у каждой есть десятки подструктур и/или полей, и у всех них несколько методов доступа. Да ещё у всех них реально длинные названия. А потом ты осознаёшь, что разработчики HAPI устали печатать текст и начали использовать для всего сокращения с такими понятными названиями структур данных, как LA1, ILT и PCR.

API пытается быть полезным: если он не находит в поле, парсинг которого ты запрашиваешь, ожидаемого, то он выбрасывает исключение, и тебе нужно самостоятельно разбираться, что пошло не так. Разумеется, при этом подразумевается, что ты уже знаешь, что тебе передаётся в потоке данных.

Аноним работал в здравоохранении и занимался поддержкой библиотеки, обёрнутой вокруг HAPI. Ему регулярно давали задания (на выполнение которых отводилось по несколько недель) по простому парсингу одного дополнительного поля. Потратив кучу времени на пережёвывание томов документации по API, он написал общий парсер из одного класса в 300 строк с несколькими split, substring, parseDate и parseInt, в качестве замены всего интерфейса.

После этого добавление нового поля стало занимать не больше десяти минут.

понедельник, 10 декабря 2018 г.

На какие языки программирования и технологии точно не стоит тратить время — отвечают эксперты

С развитием IT-индустрии придумать что-то новое становится сложнее и сложнее. Языки программирования похожи друг на друга, компании копируют идеи друг друга, пытаясь одну и ту же конфету упаковать в разные фантики. Начинаешь понимать, что на изучение ряда вещей не стоит тратить своё время и усилия. Но из огромного множества можно случайно выбрать то, что уже неактуально, или то, что в скором времени пропадёт с рынка. Наш подписчик столкнулся с проблемой выбора и написал нам в редакцию с просьбой помочь ему:
«На какие языки программирования/технологии точно не стоит тратить время?»
За разъяснениями мы обратились к нашим экспертам, а полученные ответы предоставляем вашему вниманию.
Павел Романченко

Павел Романченко, технический директор Центра программных решений «Инфосистемы Джет»

Я бы пошёл от противного — на какие языки и технологии точно стоит тратить время. И тратить только на них. 😉
Во-первых, это языки, на которых ты и твоя компания зарабатываете деньги (Java, Python, Go, Javascript, Swift, C, C++ и т. д.).
Во-вторых, языки, которые заставляют по-другому взглянуть на программирование — например, Haskell, Rust, Prolog, Erlang, Clojure, Scheme. Если язык программирования не приносит ни денег, ни удовольствия, ни развития — не стоит тратить на него своё время и усилия.
Рейтинг полезности ответа: 13.4  
Андрей Коваленко

Андрей Коваленко, со-основатель и CTO Voximplant

Стоит понимать, что не всегда языкам уделяют время, чтобы затем использовать эти знания в работе: процесс изучения может быть интересным и ценным сам по себе. Кроме того, если тебе нравится писать на каком-либо языке, в него и стоит погружаться, а не задаваться вопросом о конечном профите.
Но грубо разделить языки на те, что точно заслуживают внимания, и те, что нет, всё-таки можно. К первой группе я отношу C-подобные языки, поскольку они все примерно одинаковые и можно легко переключаться между ними. Кроме того, эти языки позволяют разобраться, как всё работает изнутри, при этом не погружаясь совсем в дебри, как это делает Assembler. Даже в институтах преподают С/С++, и это стоящая дисциплина, в отличие от многих других. В первую группу я бы также включил JS.
Глобально не стоит тратить время на старые языки типа уже упомянутого Assembler или Fortran. В мой «чёрный список» входит также Ruby в силу серьёзных проблем с совместимостью разных библиотек — поставив одну, ты не знаешь, что может сломаться в другом месте.
Рейтинг полезности ответа: 0.1  
Дмитрий Казаков

Дмитрий Казаков, руководитель отдела веб-разработки RU-CENTER

Коротко — нет таких языков и технологий. Это не просто инструменты, это какие-то наборы концепций, которые сами по себе интересны для изучения. Любой инструмент, имеющий более одного автора и последователя, любопытен просто потому, что успешно используется кем-то для решения каких-то задач. В конце концов, вся карьера разработчика сводится к тому, что постоянно нужно решать задачи подходящими инструментами, а профессионализм оценивается знаниями максимального количества этих самых инструментов. К сожалению, об этом часто забывают в пылу религиозных войн о достоинствах своих инструментов и недостатках всех остальных. Конечно, можно оставаться адептом своего маленького технологического стека, но при этом лучше не ходить на работные сайты и не замечать там зарплат fullstack-разработчиков, например.
Конечно, мир не идеален, и существуют языки программирования, способные нанести молодому разработчику фатальные травмы сознания. Пожалуй, сейчас это Python, который своей универсальностью напрочь отбивает мотивацию к развитию. Вообще, будьте осторожнее с универсальными инструментами, как правило, эта универсальность на практике оборачивается полной бесполезностью. Не то чтобы Python был бесполезен, просто почти в каждой нише его применения есть инструменты лучше. Если прямо сейчас вы чувствуете неконтролируемый приступ гнева и лютое желание откомментировать — вам лучше задуматься, а не слишком ли вы прикипели к своему Python’у и не пора ли оглядеться по сторонам?
С технологиями всё аналогично — просто не верьте в серебряные пули и в то, что действия по одной и той же методичке подходят к любой ситуации. Не изучайте технологию заранее, но держите в голове область её применения на случай, если вдруг понадобится. А если запомнить не получается — всегда можно перед стартом проекта провести R&D по технологическому стеку. Ну, и адептов SCRUM на всякий случай обходите стороной — уж очень они на сектантов похожи.
Рейтинг полезности ответа: 1.9  
Дмитрий Горынин

Дмитрий Горынин, старший менеджер Технологического центра Accenture

Однозначной рекомендации тут дать не получится, так как всё зависит от того, с какой целью происходит изучение языка программирования или платформы.
Если речь идёт о серьёзном и вдумчивом изучении основ программирования, то я бы не рекомендовал использовать широко распространённые языки высокого уровня и построенные вокруг них фреймворки. Идеальным вариантом, на мой взгляд, в этом случае является старый добрый C++. С одной стороны, этот язык даёт прекрасную возможность освоить принципы ООП, которые являются фундаментальной основой современного прикладного программирования. С другой стороны, разрабатывая на C++, вы научитесь грамотно управлять памятью, писать оптимальный код.
Если вы мечтаете стать системным программистом и разрабатывать драйвера и операционные системы или программы для микроконтроллеров, то, опять же, не стоит тратить время на широко распространённые высокоуровневые языки программирования. Изучая C, а то и старый добрый Assembler, вы придёте к своей цели гораздо быстрее.
Если вы хотите быть мобильным в плане места работы и при этом неплохо зарабатывать, то следите за тенденциями в прикладной разработке. Грубо говоря, смотрите, на чём пишут сейчас сайты или фронтенд/бэкенд информационных систем. Быстрый поиск вакансий на сайтах поиска работы легко подскажет, на каких разработчиков сейчас наибольший спрос. Например, разработчики, владеющие Java, JavaScript и основанными на этих языках фреймворками (Spring, Node.js, React, Vue и т. д.), сейчас крайне востребованы. Соответственно, если ваши интересы лежат в этой области, то не тратьте время на те языки и платформы, которых не видите в информационном поле.
Если вы видите себя в разработке приложений для крупных бизнес-систем класса enterprise (ERP, eCommerce, CRM и т. д.), то изучите рынок в вашем регионе. Наверняка вы обнаружите лидеров в эти областях, которые имеют большое количество успешных проектов. В России и странах СНГ на хороших позициях в этом сегменте находятся решения таких производителей корпоративного ПО, как 1C, SAP (SAP S/4 HANA, SAP ERP, Hybris и т. д.), Miсrosoft (Microsoft Dynamics) и другие. Далее нужно сосредоточиться на изучении языков и технологий, лежащих в основе продукта, в разработке которого вы хотите стать гуру.
Ну, а если ваша мечта — стать экспертом в области разработки хранилищ данных или больших данных, то начать нужно с SQL. JavaScript, HTML, CSS в этом вам мало помогут.
Резюмируя вышесказанное — ориентируйтесь на ваши цели и не тратьте время на то, что не позволяет их достичь. При этом, язык программирования или платформа, на которые не имеет смысла тратить время будущему разработчику компьютерных игр, может быть фундаментальной основой для специалиста, который мечтает стать лучшим преподавателем информатики в России.
Рейтинг полезности ответа: 9  
Евгений Потапов

Евгений Потапов, генеральный директор ITSumma

Нет смысла привязываться к какой-то конкретной технологии или языку программирования. Как бы ни ругали высшее образование, но оно даёт основу для работы в любых сферах деятельности. Главное — это понять базовые концепции, и «набить руку» на каком-либо выбранном инструменте. А уже освоение новой технологии или языка — дело пары недель размеренного вникания. Руководствуясь таким методом, как таковых бесполезных технологий и нет. Важно освоить максимум возможных концепций. Вот на что точно надо тратить время. Ну, и, конечно, руководствоваться здравым смыслом. Вряд ли изучение Cobol или CVS имеет какой-то смысл, а вот Lisp — можно!
Рейтинг полезности ответа: 0.4  
Александр Кузнецов

Александр Кузнецов, ведущий разработчик TrueConf

Я считаю, что любой язык программирования заслуживает внимания и может быть полезным в зависимости от того, какие цели вы ставите перед собой. Кроме того, изучение новых языков — это, по сути, освоение новых горизонтов, что само по себе полезно для любого программиста.
При выборе языка нужно отталкиваться от своих целей. Если программирование — хобби, то для изучения подойдёт практически любой язык. Если вы заинтересованы в том, чтобы выйти на высокий доход от написания кода — для изучения выбирайте высокооплачиваемый на текущий момент времени язык. Для этого достаточно посетить, к примеру, HeadHunter и посмотреть, какие специалисты востребованы сегодня. Не стоит забывать, что высокооплачиваемые языки требуют углубленного и зачастую долгого изучения. При этом, можно оставаться востребованным программистом со средним уровнем зарплаты, изучив Java или PHP.
Я полагаю, что сегодня перспективно изучать web-разработку, например, JavaScript. Сейчас все процессы переносятся в web, и за этим будущее. Если не учитывать слишком молодые языки программирования, то можно сказать, что все направления актуальны и «умирающих» среди них нет.
Касательно технологий — практически каждую неделю разработчики выпускают новые веб-фреймворки, которые, по их мнению, должны стать «убийцами предшественников». Я считаю, что время, потраченное на изучение таких технологий, не окупится, потому как через год про очередного «убийцу» никто и не вспомнит, и полученные знания окажутся бесполезными. Рекомендую изучать технологии, которые существуют и развиваются хотя бы пару лет.
Рейтинг полезности ответа: 4  
Алексей Силаев

Алексей Силаев, директор по ИТ компании timebook

«Мёртвые» или «почти мёртвые» языки и технологии разработки ПО для собственного развития точно изучать не стоит. Список языков этого класса достаточно обширен — Fortran, Basic, Turbo Pascal, J#.
Исключения могут быть только в тех случаях, когда вам необходима именно эта технология для решения конкретной задачи. Сразу вспоминается история про последнего программиста космического аппарата Voyager в NASA. Он ушёл на пенсию, а аппарат по-прежнему функционирует, и его надо поддерживать.
Среди большого количества «живых» языков и технологий надо выбирать наиболее актуальные именно в той области разработки ПО, в которой вы собираетесь работать. Например, для низкоуровневой разработки «под железо» не стоит изучать PHP или Python — они там не используются. А при разработке бизнес-логики облачных сервисов — наоборот, но там, как правило, не используется такой язык, как С и т. д.
Если же под ваш класс задач подходят сразу несколько «живых» языков/технологий разработки ПО, тогда предпочтение стоит отдавать той, которая:
— больше распространена,
— более популярна в сообществе разработчиков,
— за этой технологией/языком стоит более правильная/мощная организация-разработчик.
Рейтинг полезности ответа: 4.1  
Игорь Павлов

Игорь Павлов, руководитель группы разработки Waves Node

Такой вопрос, скорее всего, приходит в голову людям, которые только собираются начать изучение одного из языков. Потому что опытный разработчик осмысленно выбирает каждый следующий язык программирования для изучения под конкретные задачи. В целом совет такой: не стоит в качестве первого языка выбирать какой-либо из малораспространённых языков. Выбирайте наиболее популярные классические языки, например, C++, C#, Java, JavaScript, Python, которые научат использовать правильный стиль программирования и мыслить как программист. Узкоспециализированные языки можно выучить позже, когда уже заложена основа. Это расширит ваш кругозор и дополнит сложившуюся картину. А там, кто знает, может быть, однажды вы сами создадите востребованный язык программирования. Естественно, не стоит тратить время на изучение языков, не предназначенных под ваши задачи. Например, нет необходимости учить C для реализации веб-интерфейса.
Я бы не стал тратить время на Objective-C. В силу перехода iOS-разработки на Swift, удел Objective-C разработчика — поддержка уже созданного ПО. Работу вы скорее всего найдёте, потому что такого ПО много, но, на мой взгляд, куда интереснее создавать новое. Не стал бы выбирать для изучения и Pascal, который воспринимался в своё время как стандарт для обучения программированию. Те редкие проекты на Delphi (Object Pascal), которые можно встретить, воспринимаются как что-то ужасно старое, как привет из прошлого. Также, если вы хотите выбрать Perl, я бы посоветовал рассмотреть замену в виде более простого и понятного Python.
Рейтинг полезности ответа: 6.1  
Эдуард Болмосов

Эдуард Болмосов, директор бизнес-юнита АТОЛ Sigma компании АТОЛ

Все языки программирования и технологии по-своему интересны. И, в принципе, все их можно задействовать в той или иной сфере. Вот только всегда ли это оправданно? Убежден, что при выборе решения главное — заранее понимать, как вы будете масштабировать свой продукт и во сколько вам это обойдётся. Покажу на примере.
Как человек бизнеса, занимающийся развитием SaaS-продукта, могу вас заверить: затраты на офис, зарплаты сотрудников и т. п. — лишь вершина айсберга. Что обязательно нужно учитывать, так это расходы на поддержание работоспособности платформы. Речь прежде всего о серверах/хостинге и софте. Именно они «отъедают» заметную часть бюджета, если технологии были выбраны не совсем удачно, но у платформы уже начался экспоненциальный рост числа пользователей.
Да, затрат на софт можно избежать за счёт Open Source-решений и других продуктов, которые выпускаются на условиях «свободных» лицензий (например, GNU GPL, Apache License). Возьмём известный язык программирования C#. Для запуска программ как таковых нужен лишь .NET Framework, который можно установить бесплатно. А вот чтобы запустить это ПО на сервере, требуется Windows Server с соответствующей лицензией. Причём в некоторых конфигурациях эта лицензия оказывается сопоставимой по стоимости с самим железом.
Далее. В любой современной системе надо хранить информацию, и база данных сегодня — это must have. В случае с Microsoft всё вроде бы просто: есть проверенный годами SQL Server. Но для большой системы его бесплатной редакции будет недостаточно. Значит, нам опять придётся потратиться на софт — примерно так же, как на железо. А если нам нужно хранить ОЧЕНЬ много информации? Тогда мы вспоминаем об Oracle Database. Но не все знают, что стоимость лицензии будет исчисляться в сотнях тысяч и даже в миллионах рублей. Иногда она превышает стоимость того железа, на которое ставится база. Если вы представляете крупный банк, то такие расходы, конечно, оправданы. Насчёт другого бизнеса я бы не был столь категоричен.
И в заключение. Нельзя однозначно сказать, какой язык программирования лучше: Java, PHP, Python, С++… И какая база данных оптимальна: PostgreSQL, MySQL, MongoDB, Cassandra или другая. Выбор технологии во многом зависит от ваших планов по развитию продукта и бюджета, которым вы располагаете.
Рейтинг полезности ответа: 2  
Не забывайте, что всегда стоит исходить именно из задач, которые ставятся перед проектом, а не из модных тенденций. В то же время, вряд ли много вопросов сейчас можно решить с помощью устаревших языков. Поэтому старайтесь подбирать им более современные альтернативы.
Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики. Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на experts@tproger.ru, мы расскажем, как это сделать.

https://tproger.ru/experts/legacy-technologies/?utm_referrer=https%3A%2F%2Fzen.yandex.com