Экзистенциальным вопросом, вынесенными в заголовок в формулировке Гребенщикова, я задался после очередного раунда обсуждения в одном из сообществ на предмет того, нужны ли начинающему web backend девелоперу знания SQL, или ORM все и так сделает. Ответ решил поискать немного шире, чем просто про ORM и SQL, и в принципе постараться систематизировать, кто те люди, которые сейчас идут на собеседования на младшие и средние разработческие позиции, какова их история и в каком мире они живут. В целом-то мнение у меня было, но оно сформировано личным опытом найма и явно скорректировано под локальный рынок. В общем, стало любопытно. Вот что удалось найти.

Глобальная популяция разработчиков


Чтобы как-то подойти к вопросу, решил начать с поиска данных о том, сколько в принципе сейчас разработчиков в мире и как эта популяция изменяется с течением времени.
Оценки в разных источниках называют числа в вилке от 12 до 30 миллионов человек. Остановиться решил на данных от SlashData, потому что их методология показалась мне вполне сбалансированной и подходящей для моих нужд. В оценке они учитывали количество аккаунтов и репозиториев на Github, количество аккаунтов на StackOverflow, аккаунты npm и данные официальных источников о трудоустройстве в США и Европе. Также они откорректировали получившиеся числа при помощи своих собственных 16 исследований, которые охватывали примерно по 20 000 человек для каждого опроса.

По данным SlashData получилось, что в четвертом квартале 2018 года в мире было примерно 18.9 миллионов разработчиков, 12.9 миллионов из которых — профессиональные, то есть зарабатывают на жизнь программированием. Те, кто не является на данный момент профессиональными разработчиками — это люди, для которых программирование является хобби плюс те, кто сейчас изучает профессию (разнокалиберные студенты и самоучки). Ну то есть вот намек на численность группы, которая меня интересует — 6 миллионов человек. Честно признаться, это больше чем я ожидал.

Вторым сюрпризом для меня стали темпы роста поголовья программистов: со второго квартала 2017-го года по четвертый квартал 2018 оно увеличилось с 14.7 до упомянутых 18.9 миллионов, или выросло на 21% за 2018 год! Если бы меня попросили оценить темпы роста количества программистов, то я бы сказал, что это около 5% в год с небольшим ростом темпа ежегодно. А тут оказывается целых 20%.

Кроме того, SlashData оценивает, что к 2030-му году популяция достигнет 45 миллионов. Нетрудно посчитать, что это подразумевает рост на чуть больше чем 8% ежегодно, а вовсе не 20%, но они ссылаются на коррекцию с учетом проникновения интернета (сейчас около 57% в мире по данным Statista) и еще нескольких факторов, например количества разработчиков на душу населения. Географически, сильнее всего растет количество разработчиков в Индии и Китае, предположительно Индия обгонит США по количеству разработчиков к 2023 (это уже данные C# Corner).

В общем, программистов будет много, как ни крути, потому что спрос растет. Кстати, о спросе.

На что есть спрос?


Для оценки спроса я пользовался данными HackerRank за 2018 и 2019 года.

По языкам программирования самый большой спрос на JavaScript, Python и Java практически по всем индустриям, за исключением Computer Hardware. В последней наибольший спрос на C/C++, что и понятно, в железячных проектах еще сохраняются требования по ресурсоемкости и производительности соответствующего софта.



По фреймворкам наибольшим спросом пользуются AngularJS, Node.js и React, причем по ним самый большой разрыв спроса и предложения, что, кажется, объясняется скоростью, с которой меняется экосистема JavaScript-а, потому что например по ExpressJS предложение уже превышает спрос.



По компетенциям работодатели ожидают от кандидатов в первую очередь Problem Solving skills. Около 95% работодателей упоминает эти навыки как важные. Programming Language Proficiency на втором месте с 56%. К слову строчки с фундаментальными знаниями алгоритмов, структур данных и прочего Computer Science вообще нет, то ли не было в опроснике, то ли так массово академические знания уже не требуются.

Database Design нужен 23.2% компаний размером до 100 человек, и 18.8% компаний свыше 1000 человек. Ага, вот оно похоже про ORM и SQL! Логичное, имхо, объяснение в том, что в больших компаниях появляется выделенная роль DBA, который ответственен за этот аспект, а следовательно можно смягчить требования к девелоперам и нанимать быстрее. А вот с System Design наоборот: 37.0% в маленьких, 44.1% — в больших. Казалось бы, в больших должны быть выделенные архитекторы, но, возможно, они просто не в состоянии покрывать количество генерируемых систем. Или в System Design заодно вкладывают те самые фундаментальные алгоритмы и структуры данных, тогда становится немного понятнее.

Маленьким компаниям больше нужен Framework Proficiency и меньше вышеупомянутый System Design, из чего можно сделать капитанский вывод о том, что стартапам важно как можно быстрее запустить как-нибудь работающий продукт, а завтра будет завтра.



Что учат студенты?


Здесь я опирался на данные еще одного исследования HackerRank.
Важно учитывать, что несмотря на то, что программирование в том или ином виде преподается в университетах (имею в виду Computer Science специальности), больше половины опрошенных сказали, что занимаются в том числе и самообразованием.

Современные студенты предпочитают учиться по YouTube, в то время как более взрослые разработчики склоняются к тьюториалам и книгам. И те и другие активно пользуются StackOverflow. Отношу это на то, что видео — привычный медиаканал для поколения Z, в то время как представители поколения Y еще застали эпоху без блогеров.

Учат то, что востребовано работодателями: JavaScript, Java, Python. Указывают, что знают C/C++, но это вероятно потому, что эти языки используются для преподавания в университетах. Учат JS фреймворки, но спрос существенно выше предложения, поэтому видимо активно учат уже найдя первую работу.



В целом, ожидаемо учат то, на что есть спрос.

Студенты от первой работы ожидают в первую очередь профессионального роста, на втором месте (в некоторых странах на первом) work-life balance, на третем — интересные задачи.

Динамика популяции разработчиков по языкам программирования и типам ПО




Web приложения на первом месте с оценкой в 16.9 миллиона разработчиков. Это опять данные SlashData. Дальше Backend Services (13.6 млн), мобильные приложения (13.1 млн) и десктоп (12.3 млн). AR/VR и IoT сектора постепенно набирают популярность, AI/ML/Data Science существенно выросли за последние два года.

Быстрее всего растет Javascript, его сообщество уже сейчас самое большое, только за 2018 год выросло на 2.5 миллиона. На нем пытаются писать даже в секторах IoT и ML.
Python за 2018 год прирос на 2.2 миллиона за счет роста популярности ML, где он традиционно силен, а также за счет простоты освоения и удобства языка.

Java, C/C++ и C# растут с меньшей скоростью, чем общая популяция разработчиков. Они теперь редко являются языком программирования, с которого люди предпочитают начинать. Спрос на разработчиков тут более-менее сбалансирован с предложением. Думаю, что Java росла бы еще медленнее, если бы не Android.

PHP второй по популярности язык программирования веб приложений и он тоже существенно растет (на 32% в 2018 году). Его сообщество оценивается в 5.9 млн разработчиков. Несмотря на полярное мнение насчет репутации PHP, он довольно прост в изучении и широко распространен.

Как учатся современные молодые кандидаты в сравнении с прошлыми поколениями


Снова данные HackerRank. Те, кому сейчас от 38 до 53, своими первыми проектами указывают игры.

Подтверждаю, кстати, первым моим более-менее рабочим проектом были «крестики-нолики» до пяти в ряд с неограниченным полем, вторым — игра в 15. Писал я все это на БК 010-01, там был вильнюсский бейсик, он же BASIC-86 и фокал. Эх.

Современные начинающие программисты (до 21-го года) первыми проектами пишут калькуляторы и веб сайты.

Среди представителей поколения X почти половина начали писать код до 16 лет, многие так и вообще с 5 до 10 лет (преимущественно те, кому от сейчас от 35 до 45 лет). Более менее понятно почему: источников информации было мало, и чтобы стать программистом нужно было действительно этого сильно хотеть, а те, кто сильно хотел, начинали программировать рано. Те, кто хотел не так сильно, к сегодняшнему моменту скорее всего имеют другую профессию, поэтому картина по социологии именно такая.



Сегодняшние молодые кандидаты только в 20% случаев начинают программировать до 16 лет, большинство — где-то между 16-ю и 20-ю. Но им и значительно проще учиться, теперь это гораздо доступнее.

Выводы


Железобетонного ответа на вопрос, нужен ли сегодня начинающему web backend девелоперу SQL, я так и не нашел, но зато подкорректировал свое представление о современной популяции программистов.

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

Тех, кто знает, что латенси L1 кэша это ~4 цикла, и что кэш лайны лучше не сбивать без необходимости, становится меньше в процентном отношении к общему размеру популяции. Однако волноваться о трудоустройстве им не стоит, кто-то же в конце концов должен писать низкоуровневые вещи, где это по прежнему нужно. Равно как не стоит волноваться и тем, кто обладает глубокими фундаментальными знаниями в системном дизайне и приобрел их в кровопролитных практических боях, а не просто следует карго культу. Потому что умеющих «просто писать код» и «просто» пользоваться фреймворками в командах будет становиться больше, и для того, «чтобы не было мучительно больно за бесцельно прожитые годы» (с) их нужно будет балансировать как раз такими людьми.

Софт скиллы из категории желательных постепенно мигрируют в обязательные (в подтверждение этого у меня нет объективных данных, просто практические наблюдение). Количество программистов растет, и их всех нужно направлять для достижения результата, хоть прямым, хоть непрямым управлением, а для этого как раз и нужны софт скиллы.

«Войти в IT» представляется мне локальной региональной историей, характерной для тех локаций, где доход программиста существенно отличается от дохода сравнимого по квалификации «не IT» специалиста. В Минске, где я живу, так это вообще массовое движение, каждый день вижу рекламу очередных курсов о том, как попасть в заветное IT, а клининговые компании таргетятся в программистов с посылом «Понимаешь код на этой картинке? Значит можешь позволить себе не убирать в квартире, мы сделаем все за тебя.» То же самое по видимому происходит в какой-нибудь Индии. В доказательство этого данных у меня тоже нет.

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

Комментарии (114)


  1. Mogwaika
    02.10.2019 18:28

    Я не знаю, что такое ORM, но какие скилы нужны начинающему web backend девелоперу в итоге? SQL самый важный навык?

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

    А их точно не становится просто меньше, а не только в процентном отношении, если раньше это была необходимость и теперь трудоустраиваются специалисты которым это было нужно, не будет ли сейчас ситуации, что просто мало кому нужно этому учиться и работодателю дешевле будет кэш ускорить/увеличить на порядок?


    1. mephius Автор
      02.10.2019 19:19
      +1

      Я не знаю, что такое ORM, но какие скилы нужны начинающему web backend девелоперу в итоге? SQL самый важный навык?

      ORM — Object-Relational Mapping, в современных фреймворках предоставляет программисту способ обращаться к стораджу (базе данных) используя синтаксис языка и реляционные связи между объектами, абстрагируя конкретную базу данных. Т.е. ORМ за программиста сгенерирует и исполнит запрос к БД, предоставляя программисту интерфейс к эдакой виртуальной объектной БД.

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

      А их точно не становится просто меньше, а не только в процентном отношении, если раньше это была необходимость и теперь трудоустраиваются специалисты которым это было нужно, не будет ли сейчас ситуации, что просто мало кому нужно этому учиться и работодателю дешевле будет кэш ускорить/увеличить на порядок?

      Из источников, которые удалось найти, этого однозначно не видно. Я сам скорее склоняюсь к мнению, что нет, в абсолютных числах меньше не становится, периодически встречаю людей с опытом в 2-3 года, но хорошо ориентирующихся в этой области, и их вроде бы достаточно.


      1. dasFlug
        02.10.2019 21:58

        Таком образом, без SQL можно вполне обойтись.

        Я что-то сомневаюсь что получится. Можно попробовать собрать личную статистику использования ORM участниками. Я, например, знаю с десяток серьезных проектов использующих Hibernate. Практически везде дело дошло до custom queries. По разным причинам, но в основном чтобы улучшить производительность.


        1. mephius Автор
          02.10.2019 22:07

          Практически везде дело дошло до custom queries. По разным причинам, но в основном чтобы улучшить производительность.

          В моей практике всегда происходило так же.


          1. dporollo
            03.10.2019 00:18

            C custom queries гораздо проще и быстрее работать, если очень хитроумные запросы.
            Такое хоть и редко, но встречается.


        1. apapacy
          03.10.2019 13:11

          Работаю с sequelize (node.js) Проактически все проекты содержат если не полностью raw запросы то по крайней мере литералы(фича sequelize для встраивания raw фрагментов в запрос) в условиях where.


          Настколько я просматривал проекты на symfoby/doctrine — там практически все запросы, кроме самых простых идут на dql, который является зераклом sql, только с очень слодным для чтения синтаксисом.


        1. max_mustermann
          03.10.2019 16:11

          Практически везде дело дошло до custom queries.


          Для «web backend» 99.9% работы с базой — это CRUD-ы. Что там заменять на сustom queries?


          1. Kanut
            03.10.2019 16:20
            +1

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


            И иногда ORM не справляются в том плане что создают совсем не оптимальные запросы.


            П.С. И я например думаю что большинство из тех кто работал с тем же NHibernate хотя бы раз, но натыкался на "Select n+1 проблему" :)


            1. max_mustermann
              03.10.2019 16:37

              Если у вас более-менее сложные структуры данных и их надо в таком виде «тащить», то у вас очень быстро простейшее чтение из DB превращается в кучу джойнов.

              А в sql написаном руками эта куча join как-то магически не появится?

              И иногда ORM не справляются в том плане что создают совсем не оптимальные запросы.

              А иногда наоборот, генерируют sql гораздо более оптимальный чем написаный руками.

              натыкался на «Select n+1 проблему»

              Ну это очень детская ошибка. Всё, о чём она говорит, это то, что ORM не полностью избавляет от необходимости думать что делаешь.


              1. Kanut
                03.10.2019 16:46

                А в sql написаном руками эта куча join как-то магически не появится?
                А иногда наоборот, генерируют sql гораздо более оптимальный чем написаный руками.

                С этим я и не спорю. Речь о том что иногда ORM генерирует не особо оптимальные запросы и тогда нужна кастомизация в том или ином виде. Иногда и в виде SQL написанного вручную.


                Ну и иногда бывают какие-то хитрые "хотелки" и/или какие-то не зависящие от тебя ограничения и приходится просто проперти вручную мэппить через кастомный SQL.


                И это всё конечно редкости, но более-менее крупные проекты с ORM и без "кастома" я пока ещё тоже не встречал.


                1. max_mustermann
                  04.10.2019 11:39

                  нужна кастомизация в том или ином виде. Иногда и в виде SQL написанного вручную.


                  Да, разумеется и с этим никто не спорит. Иногда это требуется и иногда в «более-менее крупных» проектах можно позвать матёрого базовика с бородой и в растянутом свитре который сделает какую-то хитрую агрегацию, завернёт её в хранимку и всё полетит.
                  А рядовой гребец «начинающий веб бекэнд» этот pure sql и в глаза не увидит. О чём, собственно, и шла речь.


                  1. Kanut
                    04.10.2019 11:57

                    Да, разумеется и с этим никто не спорит.

                    Хм, а это тогда что было:


                    Что там заменять на сustom queries?

                    ?


              1. tonad
                03.10.2019 18:20
                -1

                Ну это очень детская ошибка. Всё, о чём она говорит, это то, что ORM не полностью избавляет от необходимости думать что делаешь.


                Пришел к выводу, что перед тем как пользоваться ORM, нужно хорошо узнать SQL. А иначе будет полно этих самых детских ошибок


          1. dasFlug
            03.10.2019 18:06
            +1

            CUD — обычно ничего. В R регулярно вылазили проблемы с нетривиальными агрегатами и composite objects. Поэтому альтернативы типа MyBatis с тулами для генерации boilerplate запросов для CUD частенько смотрятся предпочтительней. Например не надо еще и HQL знать.


      1. dporollo
        02.10.2019 23:52

        ORM это хорошо, легко и просто, ровно до тех пор, пока вы не задумываетесь о скорости. Я знаю, что можно создать практически любой запрос, но повторюсь, если вы думаете о скорости, то это однозначно чистый SQL.


        1. vassabi
          03.10.2019 00:28

          скорость и еще память — ORM даже если будет в проекции брать данные из БД (а не весь объект создавать), то все равно не так эффективно, как сделать все промежуточные расчеты в SQL, а потом вернуть готовый результат (например — суммы продаж по месяцам с учетом размера, цвета и т.д.)


          1. mayorovp
            03.10.2019 11:25

            А что помешает описать промежуточные расчёты на языке ORM, чтобы дальше библиотека их в SQL транслировала?


            1. Kanut
              03.10.2019 11:31

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


              П.С. А учитывая что он ещё сам всё может более менее грамотно кэшить, то и число запросов к БД заметно уменьшается.


              1. vassabi
                03.10.2019 12:36

                ну, кешить можно и при использовании native SQL


                1. Kanut
                  03.10.2019 12:56

                  Можно. Но для этого уже нужна определённая экспертиза в SQL и базах данных в целом. А она есть далеко не у каждого джуниора/миддла. Да и у сениоров наверное тоже не у всех.


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


            1. vassabi
              03.10.2019 12:36

              Если на ORM вашего ЯП\фреймворка можно написать джойн нескольких таблиц в комбинациях с группировкой (сначала таблица джойнится сама с собой, потом считаются суммы, а потом результат еще раз джойнится со справочными таблицами и получившееся группируется по датам), и возможной перестановкой полей в select — то не вопрос.


              1. Kanut
                03.10.2019 13:03

                Естественно у ORM есть свои границы. Но в 99% "обычных" бизнес-логик их хватает за глаза и за уши.


                И я бы сказал что ваш пример тот же NHibernate вполне осилит. То есть выполнить он его точно выполнит и вопрос только в том насколько оптимально. Может быть простого LINQ уже не хватит и надо будет немного "поковыряться".


                Ну и в крайнем случае ORM обычно имеют возможность добавлять свои плагины/расширения или даже просто использовать кастомные запросы в "чистом" SQL.


        1. apapacy
          03.10.2019 13:16

          Скорость скорости рознь. Например в symfony/doctrine (которую я по многим параметрам считаю наиболее совершенной ORM не только внутри экосистемы PHP) в течение одного запроса несколько запросов на изменения данных собираются в единый пакет и одним запросом только по реально измененным полям отправляются на сервер. То есть если разрабатывать нечто аналогичное на уровне приложения это будет очень громоздко. А если вделать несколько запросов пусть даже и RAW SQL — тут еще неизвестно какой из вариантов будет производительнее.


        1. max_mustermann
          03.10.2019 16:16

          Существует довольно широкий и распространённый класс задач, где ORM(например EF), благодаря expression tree и change tracking оказывается сильно быстрее чем «чистый» SQL, написаный руками.


      1. Mogwaika
        03.10.2019 00:41

        А если вопрос стоит по другому, джуниор знает sql, но не знает язык для бэкенда или знает язык, но не знает sql?
        Или необходимое условие для вас, чтобы знал оба?


        1. mephius Автор
          03.10.2019 00:46

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


          1. Mogwaika
            03.10.2019 00:54

            А это вот прям часто используется? Почему не аналитическая геометрия/статистика/вычматы?
            Кароч, какие алгоритмы/структуры/множества надо ботать тем, кто хочет сменить специализацию?


            1. mephius Автор
              03.10.2019 08:10

              знает язык, но не знает sql?

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


              1. Mogwaika
                03.10.2019 10:34

                Ну может ему одинаково просто разобраться и с обходом деревьев и с БД, если это понадобится, но на собесе он не ответит на такой вопрос без гугла?


                1. Kanut
                  03.10.2019 10:40
                  +1

                  На мой взгляд если ты хоть немного понимаешь что такое SQL и релациональные БД в целом, то это видно даже если ты вообще забыл синтаксис SQL.


                  Более того если человек нормально соображает, то это тоже обычно видно. То есть от сениора/миддла естественно требуется больше, а для джуниора/практиканта во многих фирмах может и этого хватить.


                1. mephius Автор
                  03.10.2019 10:49

                  Может с перепугу забыть определения и формулировки, но и без гугла можно порисовать на бумажке операции над множествами при помощи диаграмм Венна:
                  image

                  или на бумажке же найти декартово произведение:
                  image

                  Отсюда уже недалеко до джоинов в терминах SQL или до модели данных какой-нибудь простой задачи в реляционной БД.

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


      1. ilnoor
        04.10.2019 09:11
        -1

        Таком образом, без SQL можно вполне обойтись.

        Я считаю, что лучше обойтись без ORM.
        Потому что ORM в каждом языке свой, и часто не один. И часто опыт с одного на другой переносить нельзя.
        А SQL везде один и тот же, различия в диалектах незначительны.


    1. mephius Автор
      02.10.2019 20:40
      +1

      работодателю дешевле будет кэш ускорить/увеличить на порядок?

      Этот кэш работодателю просто так не ускорить, потому что тут речь о физическом кэше процессора.


      1. Dimtry44
        02.10.2019 20:43
        +2

        Лучше не придумаешь, хороший пример в подтверждении статьи.


      1. gbg
        02.10.2019 21:30
        +1

        Если только не начать гонять электроны по шинам веником.


      1. Mogwaika
        02.10.2019 23:49

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


        1. Fedorkov
          03.10.2019 10:48
          +1

          Это потому что смартфоны появились недавно. А вот десктопы уже приблизились к концу закона Мура, поэтому у винды системные требования не меняются уже 10 лет (Win7, Win10), а про другие системы я вообще молчу.


  1. pewpew
    02.10.2019 19:05

    нужны ли начинающему web backend девелоперу знания SQL

    Без алфавита сложно научиться писать, хотя можно научиться говорить. И всё же базовые знания SQL обязательно нужны. Не только для общего кругозора, но и для понимания основных принципов работы и устройства. Это как алгоритмы, паттерны проектирования, и рабочая терминология. Это может пригодиться и на практике. Например, в Tarantool есть возможность использовать как SQL, так и NoSQL. И даже можно комбинировать. Кроме того при проектировании разработчик может выбирать технологии в зависимости от задач. Или даже комбинировать технологии в разработке. Например, сервис может часть данных хранить в Redis, а часть в MySQL. И это может быть очень даже оправдано.


  1. apapacy
    02.10.2019 19:19
    +1

    Железобетонного ответа на вопрос, нужен ли сегодня начинающему web backend девелоперу SQL

    Во что выливается незнание SQL
    1) Забывают определять индексы в результате через некоторое время приложение останавливается и не могут найти почему.
    2) Не могут на практике применять нормализацию данных. Когда "мыслят объектами/сущностями" возникают из-за ошибок нормализации химерные результирубющие структуры таблиц.


    По перечни языков программирования интересно было бы узнать статистику по СНГ. В частности по ВУЗам. Если взять усредненный технический ВУЗ, то создается такое впечатление что там преподают как и 30 лет назад Паскаль плавно переходящий в Делфи.


    1. vchslv13
      02.10.2019 20:09

      Не статистика, конечно, но в моём простеньком ВУЗе в Кривом Роге (население около 600 000 человек, Украина) за время бакалаврата мы изучали MS VB 6, C++, C#, Java, PHP и JS. С другой стороны, количество вряд ли перешло в качество и для сдачи экзаменов/зачётов особо хорошего знания не нужно было (кроме С++ и С#, пожалуй).


    1. mephius Автор
      02.10.2019 20:53

      Во что выливается незнание SQL
      1) Забывают определять индексы в результате через некоторое время приложение останавливается и не могут найти почему.
      2) Не могут на практике применять нормализацию данных. Когда «мыслят объектами/сущностями» возникают из-за ошибок нормализации химерные результирубющие структуры таблиц.

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

      Поэтому решая не требовать знания БД/SQL у разработчиков, нужно очень четко знать, кто именно будет эти вещи контролировать и исправлять. Видел один раз процесс в большой компании, когда после исполнения задачи разработчик передавал ее на ревью DBA, который должен был в случае чего кричать «Ты не пройдешь!» аки Гэндальф Барлогу. Мой внутренний эстет от такого бьется в истерике, но я понимаю, что люди выкручиваются как могут в сложившихся условиях.


    1. PeterK
      02.10.2019 22:23

      Индексы, вроде, к SQL никакого отношения не имеют.


    1. Karl_Marx
      02.10.2019 22:39
      +1

      3) Забивают на констрейнты, иногда на транзакции и вообще на целостность данных
      4) Забивают на конкарренси


      1. mephius Автор
        02.10.2019 22:45
        +1

        5) дэдлоки
        6) уровни изоляции транзакций

        Это если мы по два пункта за коммент добавляем и не ограничиваемся исключительно SQL, а про работу с БД в целом.


    1. Mogwaika
      02.10.2019 23:51

      Мне в вузе вообще не преподавали языки, предполагалось, что студенты их знают и напишут курсовую на том, какой им удобнее.
      Ну кроме семестра про асм и машины Тьюринга))


    1. mayorovp
      03.10.2019 11:29

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

      А почему тут виновато незнание именно языка SQL, а не незнание основ баз данных?
      На SQL что, нельзя забыть создать индекс?


      Не могут на практике применять нормализацию данных. Когда "мыслят объектами/сущностями" возникают из-за ошибок нормализации химерные результирубющие структуры таблиц.

      А где тут связь?


      1. apapacy
        03.10.2019 13:35

        Спасибо за уточнение. Действительно выражение CREATE INDEX не входит в стандарт SQL (я об этом никогда не задумывался). Это не меняет того момента, что это выражение входит в конкретные реализации большинства SQL серверов баз данных и разработчики ORM хотя и знают что можно определять свойства у объектов связанные с индексацией очень часто этого не делают.


        Связь между незнанием теоретических основ нормализации данных и отсутствием практики в их применения такая, что результирующие отношение получаются не нормализованными. Хотя с точки зрения объектного анализа все может выглядеть достаточно правдоподобно.


        Привожу реальный пример. Разработчик связал объект "банкомат" с объектом "улица". Однако перепутал hasOne c belongsTo в результате получилась дикая структура, в которой улица принадлежит банкомату, а не банкомат улице. И все это работало без вопросов пока не нужно было переместить банкомат или переименовать улицу.


        1. mayorovp
          03.10.2019 14:21

          Ну, "перепутали" — не аргумент. Можно и на SQL много чего перепутать.


        1. michael_vostrikov
          04.10.2019 10:16

          результирующие отношения получаются не нормализованными. Хотя с точки зрения объектного анализа все может выглядеть достаточно правдоподобно.
          перепутал hasOne c belongsTo

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


          1. mayorovp
            04.10.2019 10:32

            Да нет, именно эти названия-то как раз предельно понятные. Для того кто знает английский и знает о существовании обоих понятий.


            1. michael_vostrikov
              04.10.2019 12:46

              Речь скорее об их назначении, о том, что они делают внутри фреймворка. Когда есть один hasOne и указываются конкретные поля, все просто и понятно. А когда их 2 с похожим смыслом, то уже не очень. belongsTo это тоже своего рода hasOne, да и по названию я бы предположил, что Street belongsTo ATM означает, что ATM главная сущность, и у него будет поле street_id.


              1. mayorovp
                04.10.2019 13:15

                Один hasOne невозможен, ведь обратное отношение не может быть тоже hasOne.


                да и по названию я бы предположил, что Street belongsTo ATM означает, что ATM главная сущность, и у него будет поле street_id

                Но почему? Street belongs to ATM переводится как "улица принадлежит банкомату". Но в таком случае у неё должен быть atm_id.


                1. michael_vostrikov
                  04.10.2019 14:41

                  ведь обратное отношение не может быть тоже hasOne

                  hasOne и hasMany достаточно для моделирования всех видов связей. Для связи один-к-одному оба будут hasOne.


                  // atm.street_id <=> street.id
                  ATM hasOne(Street::class, ['id' => 'street_id'])
                  Street hasMany(ATM::class, ['street_id' => 'id'])

                  А вот так было сделано в обсуждаемом примере


                  // atm.id => street.atm_id
                  ATM hasOne(Street::class, ['atm_id' => 'id'])
                  Street hasOne(ATM::class, ['id' => 'atm_id'])

                  Сразу видно, что поля как-то не так расположены, и что где-то должен быть hasMany.


                  Но почему? Street belongs to ATM переводится как "улица принадлежит банкомату".

                  Улица принадлежит банкомату, значит банкомат имеет улицу, так же как имеет ширину и высоту, значит и street_id должен быть в списке атрибутов банкомата.


                  1. mayorovp
                    04.10.2019 15:01

                    Для связи один-к-одному оба будут hasOne.

                    has — это отношение владения. Владение не может быть циклическим, кто-то обязан быть главнее.


                    Улица принадлежит банкомату, значит банкомат имеет улицу, так же как имеет ширину и высоту

                    Нет, это значит что банкомат имеет улицу как дочерний объект.


                    1. michael_vostrikov
                      04.10.2019 17:29
                      -1

                      has — это "имеет". ATM имеет одну улицу. Мы же связь описываем, она принадлежит в равной степени обоим частям.


                      Когда у банкомата есть street_id, street это тоже дочерний объект.


                      1. mayorovp
                        04.10.2019 18:31

                        Представим, что мы удаляем банкомат. Что произойдёт с улицей? Да ничего.


                        Представим, что мы удаляем улицу. Что произойдёт с банкоматом? Его тоже придётся удалить (ну, или отменить удаление улицы).


                        Вот и получается, что улица has банкомат, а банкомат belongsTo улица.


                        А вы в своих рассуждениях путаете саму улицу и её идентификатор.


                        1. michael_vostrikov
                          04.10.2019 19:24

                          Техническую сторону я знаю) Я говорю, что has это слишком общее слово, оно подходит для обоих концов связи, поэтому может кого-нибудь запутать (меня например). Если бы там было ownsOne и belongsTo, тогда было бы понятнее, а лучше has с явным указанием полей. В тех же терминах, в каких связи называются (one и many).


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


                          1. mayorovp
                            04.10.2019 19:40

                            Ну так street_id — это ж и есть деталь реализации. В объектной модели этого свойства может вообще не быть.


                            1. michael_vostrikov
                              04.10.2019 20:16

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


                              1. mayorovp
                                04.10.2019 20:47

                                Может.


    1. DrunkBear
      03.10.2019 17:45
      +1

      Из того, что видел:
      — У нас ORM! Оно само всё сделает, а для скорости включим кэш. SQL не нужен!
      В итоге:
      1. При старте приложения ORM начинает кешировать объекты и их свойства. Пара млн объектов + 10 свойств на объект + связи объектов ( тоже со свойствами), всё это в кеше = OOM на слабом железе (win x32) и тормоза при загрузке. «А нам не говорили, что там будет несколько миллионов объектов, на паре тысяч всё ок было!»
      2. Изменение 1 свойства и сохранение приводит к чему? Правильно, весь кеш выливается обратно на сервер. Да, ORM заботливо льёт обратно пару миллионов * 10 свойств объектов в БД, БД заботливо обновляет, перестраивая индексы таблиц, снаружи это выглядит как 2минутная медитация у компьютера. омм… омм… ООМ…
      Поэтому пусть лучше знают и SQL, и зачем нужны оптимизаторы, и как работает GC — не то, чтоб это было нужно с первых минут работы, но сэкономить неделю размышлений «а чойто оно такое делает и почему не делает что нужно?» вполне может.


      1. mayorovp
        03.10.2019 18:51

        Это какая-то очень странная ORM, если весь кеш выливается на сервер… Да и загрузка всех объектов при старте тоже из ниоткуда не возьмётся.


        Там, похоже, поверх ORM ещё и своих велосипедов нагородили.


  1. badstarosta
    02.10.2019 19:22

    По поводу опроса: я на собеседованиях спрашиваю SQL как опцию. Знает — хорошо, не знает — базовым вещам научим.


  1. Dimtry44
    02.10.2019 19:35

    Железобетонного ответа на вопрос, нужен ли сегодня начинающему web backend девелоперу SQL
    Я думаю что ответ достаточно прост. Хорошему/амбициозному нужен, обычному без особой разницы.


  1. hengenvaarallinen
    02.10.2019 20:08
    +5

    Искали разработчика. В тестовом задании помимо прочего нужно было создать бд для объектов и комментариев к ним. Один товарищ прислал базу такого вида: Для каждого объекта отдельная таблица (объект1, объект2, объект3), в которых первая запись — данные об объекте, вторая и последующие — комментарии.
    Так и не поняла, что это было. Даже жалею, что не позвала на собеседование — так и осталась эта структура бд для меня загадкой.


    1. Ahen
      03.10.2019 01:41
      +1

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


      1. catharsis
        03.10.2019 02:21

        Я картинку в подпись на форуме делал, которая каждому читающему показывала что-то своё.
        Быстро заметил, что 1500+ таблиц обновляются как-то медленно.
        Ну, попробовать стоило :)


    1. pae174
      03.10.2019 13:06

      > Так и не поняла, что это было
      Это была база данных в текстовых файлах. Такое в качестве примера дается в книжках «PHP за 24 часа» в разделе «операции с файлами».


      1. hengenvaarallinen
        03.10.2019 13:16

        Все бы ничего, но это было в mySql. Но да, пока писала коммент, тоже подумала, что возможно товарищ какие-то не реляционные решения пытался натянуть


  1. bkstan
    02.10.2019 20:26

    Разве Гребенщиков — а не Чайф/Шахрин??


    1. mephius Автор
      02.10.2019 20:28

      Гребенщиков в 1981 (Синий альбом), Чайф/Шахрин в 2000 (Симпатии)


  1. un1t
    02.10.2019 21:02
    +1

    Мне не нравиться тенденция, что все ломятся в IT.
    Везде многочисленные курсы, школы, как стать программистом за 2 месяца. И видимо у них есть клиенты.
    Один раз разговаривал с 39-летней женщиной, дак она тоже пошла учиться на программиста в универ. Можете представить мое удивление.
    В принципе тут нет ничего плохого. Если зарплаты IT превышают зарплаты в других отраслях, это логично.
    Но лично для меня это не очень. Т.к. одно дело, когда ты программист, а другое дело, когда ты «еще один программист».
    Круто когда ты умеешь делать что-то, что не умеют другие. А если теперь все будут программисты, — скукота.


    1. mephius Автор
      02.10.2019 21:10

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


      1. un1t
        02.10.2019 21:19

        > где зарплаты программистов сильно превышают зарплаты в других отраслях.

        ну так это большая часть мира — пост советские страны, восточная европа, индия, китай и т.п.


        1. mephius Автор
          02.10.2019 21:42

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

          Индия — да, но исторически они гораздо раньше пост советских стран начали развивать и экспортировать IT услуги, у них «войти в IT» уже устаканилось и сбалансировалось. Где-то мне еще попадалась информация о том, что тамошние крупные IT компании объединились в картель с целью не допустить роста зарплат разработчикам, особенно начинающим.


    1. c3gdlk
      02.10.2019 22:12

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


    1. Kanut
      02.10.2019 23:08
      +1

      Мне не нравиться тенденция, что все ломятся в IT.

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


      Круто когда ты умеешь делать что-то, что не умеют другие. А если теперь все будут программисты, — скукота.

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


      П.С. А на тему статьи: пока более-менее активно используются релациональные БД, бэкендеру надо хоть немного понимать SQL. Потому что во первых очень велика вероятность что рано или поздно, но ты с SQL в своей профессиональной жизни столкнёшься в том или ином виде. А во вторых, понимая как работают БД, и хороший/оптимальный бэкенд писать проще.


    1. arheops
      03.10.2019 03:46

      Ну так подождите, программистов станет столько, что у них зарплата будет всего в два раза больше, а не в 10, тогда всем опять будет влом учится на программиста.
      А вообще нормальные люди просто получают больше вайтишников и будут получать еще больше со временем. Ибо бизнесу нужны работающие решения, а не чтото, что работает только на тестовой базе и ложит mysql уже через неделю продакшена, причем переписать быстро — нельзя.


      1. Kanut
        03.10.2019 10:29

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


        И всё равно куча людей идёт в ИТ потому что как минимум сейчас работу можно найти вообще без проблем и похоже в ближайшее время это не изменится.


        1. A114n
          03.10.2019 17:41

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


          1. Kanut
            03.10.2019 18:00

            Ну у нас(Германия) и у айтишников удалённая работа не то чтобы особо распространена/популярна. Так что это имеет свои региональные особенности.


            А народ всё равно в ИТ толпами идёт.


            1. A114n
              03.10.2019 18:07

              Ну может вы и правы. В Голливуд тоже люди толпами идут, хотя звёздами становятся единицы.


    1. mad_nazgul
      03.10.2019 06:59
      +1

      Расслабтесь в 90-е точно так же куча народа шла в экономисты, менеджеры и юристы.
      Но потребности в хороших специалистах (экономисты, менеджеры, юристы) меньше не стало.
      В принципе в Индии это прошли в начале 0-х.
      Когда «бодишопы» брали «в ИТ» кого попало с улицы.
      Но это не помешало буму «в ИТ» в восточной Европе. :-)


  1. un1t
    02.10.2019 21:19

    del


  1. GarrySeldon
    03.10.2019 00:53

    Не понимаю как можно программировать не зная какие выполняются запросы? Такой ерунды можно наделать, простой пример: нам надо получить список элементов, скажем наименование статей, а так же получить к этим элементам информацию из других таблиц, пусть это будут авторы. Из одной коротенькой строчки кода может получиться совершенно разный результат, в обоих случаях всё будет работать. Только в одном варианте будет сделано два запроса, а в другом 1+количество элементов (статей). Здесь подробнее.
    Очень часто без сложных запросов с подзапросами просто не обойтись и тут ORM не спасёт.


    1. mayorovp
      03.10.2019 11:32

      Очень просто: достаточно знать как они выполняются.


  1. Ahen
    03.10.2019 01:27

    По фреймворкам наибольшим спросом пользуются AngularJS, Node.js...


  1. zabtech
    03.10.2019 05:30

    В веб-разработке далеко не все задачи можно решитъ возможностями Doctrine или Eloquent. Как толъко дело касается работы с теми же геоданными, требуется умение написатъ raw запрос для spatial, и здесъ от разработчика нужно хотя бы понимание в какой последователъности писатъ SELECT, FROM, WHERE.


  1. Fedorkov
    03.10.2019 11:02
    +5

    Современные студенты предпочитают учиться по YouTube
    Не понимаю, как можно учиться по такому медленному источнику, да ещё с последовательным доступом.

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


    1. oldbie
      03.10.2019 12:23
      +1

      Не первый раз вижу это утверждение, но слабо представляю это на практике. Хотелось бы посмотреть на на такие каналы или еще лучше гайд как пользоваться youtube для самообразования. Если кто-то знает — поделитесь.


      1. foxcode85
        03.10.2019 16:13
        +1

        Комрад Fedorkov кстати правильную вещь сказал. Ютуб хорош лишь в том, что там инфа может быть актуальной. Ну и конечно, для многих(для меня в том числе) проще визуально усваивать информацию, а не читать сухой текст.
        НО! Книга, тем более электронная — это как SQL база со связанными списками. Ты можешь быстро сделать выборку по названию в оглавлении, Перейти на связанную таблицу (тему) и т.д. А Ютуб как стэк — чтобы добраться до чего-то, придется разгребать то, что сверху.


        1. MTyrz
          03.10.2019 16:38

          Ютуб хорош там, где к сугубо текстовому потоку информации надо добавить визуальный. Десять страниц инструкции убористым шрифтом с трудом заменят тридцать секунд ролика там, где речь идет о сборке-разборке механического узла.
          Лучше один раз увидеть…


          1. foxcode85
            03.10.2019 16:40
            +1

            Мы же говорим о программировании вроде. Но насчёт узла вы правы.


            1. Fedorkov
              03.10.2019 17:14

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


              1. foxcode85
                03.10.2019 17:23

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


    1. Alexeyslav
      04.10.2019 09:28

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


  1. minamoto
    03.10.2019 11:31

    Не надо вам знать SQL, оставьте это профессионалам.

    Если более развернуто, то бэкендеру в крупной продуктовой команде надо знать свою часть, за базу отвечают разработчики БД. Если компания небольшая, и выделенных разработчиков базы нет, то нужно знать, причем на достаточно неплохом уровне, т.к. с базовыми вещами справится и ORM, а вот когда начнутся просадки по производительности, то нужно будет переписывать узкие места на качественно написанном SQL, и тут базовых знаний не хватит. Ну или нанять разработчика БД, который будет этим заниматься.

    Но это не отменяет возможности так называемого «T-shape» развития, когда, для понимания и нахождения общего языка с коллегами мы изучаем все понемногу.
    Я лично, как разработчик БД, знаю понемногу и бэк и фронт, и это бывает в некоторых ситуациях полезно.


  1. valis
    03.10.2019 12:01
    -2

    У кого много SQL разработчиков можно писать GRUD операции в виде SQL процедур.
    Тогда и ORM не нужен, базой занимаются профессионалы и бекедщики чуть больше сосредоточены на бизнес логике


  1. stantum
    03.10.2019 13:12
    +1

    Хорошее исследование и оптимистичные выводы. С автором поста согласен, а вот исследование SlashData хотел бы покритиковать. На собственном опыте: у меня нет аккаунтов ни на Github, ни на StackOverflow, ни на npm. А поскольку я контрактор, то и в евросоюзовские данные о трудоустройстве, скорее всего, не попадаю. Уверен, что у многих подобная ситуация. Вот и получается, что они прозевали существенный процент разработчиков.

    Писал я все это на БК 010-01, там был вильнюсский бейсик, он же BASIC-86 и фокал. Эх.
    Рад встрече, коллега!


  1. apapacy
    03.10.2019 13:39

    Возник вопрос может быть кто-нибудь подскажет.
    Сейчас многие ORM польуются для определения связей между объектами/таблицами такими определениями как belongsTo, hasOne, hasMany, manyToMany — но я недавно нашел первоисточник в котором эти слова были впервые определены именно в такой форме. Но сейчас уже не могу найти ссылку. Может быть кто-нибудь подскажет где это впервые было реализовано или описано?


    1. ArXen42
      03.10.2019 14:18

      Возможно Entity-relationship model.


      1. apapacy
        03.10.2019 15:15

        Ну это логика явления. Я имел в виду что есть источник на котором были впервые применены вот эти имена типа belongsTo. Или reversedBy. Кстати на мой взгляд довольно неудачные.


  1. korsarer
    03.10.2019 14:46

    А почему на этом графике нет C/C++? Хотя написали про них абзацем выше.
    image


    1. apapacy
      03.10.2019 15:11

      Насколько я понял это не языки а фреймворк и


      1. mephius Автор
        03.10.2019 15:30

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


      1. mayorovp
        03.10.2019 17:09

        Всё равно странная картинка.


        .NET Core — так себе фреймворк, больше почему-то на рантайм похож
        Node.js — то же самое
        ASP.NET WebForms и ASP.NET MVC куда-то пропали. Вот не верю, что с них уже все на ASP.NET Core свалили, но при этом на ASP всё ещё пишут!


        1. mephius Автор
          03.10.2019 17:29

          В целом согласен, из питона там только Django, PHP-шных фреймворков вообще нет. И, кстати, эта картинка из параграфа про студентов, а данные из репорта HackerRank «2018 Student Developer Report»:

          A total of 10,351 student developers completed the 10-minute online survey from October 16 to November 1, 2017.

          То есть тут точность серьезно ниже, чем у SlashData.
          Ну и у меня есть гипотеза, что когда интервьюируют человека на ASP.NET MVC приложение, спрашивают .NET Core и чем оно отличается от .NET Framework и отдельно про MVC и как оно реализовано в .NET (Core|Framework). Вполне может привести к тому, что все упадет в колонку .NET Core. На интервью PHP-шника будут спрашивать про PHP и меньше уделать внимания конкретному фреймворку. Этим может объясняться перекос в данных.


        1. Sindicollo
          03.10.2019 18:23

          Ага, странная, почему то AngularJS (это который 1.0) есть, а Angular (2.x) — отсутствует


  1. ssezya
    03.10.2019 16:14
    +2

    А вот и реклама прямо под постом ))


  1. A114n
    03.10.2019 17:47

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


    1. PowerMetall
      04.10.2019 08:31
      +2

      В Access уже десятки лет встроен конструктор запросов, и офисные сотрудники с ним прекрасно работали, не зная SQL

      Вот так я, будучи «уженешкольником» (студетном-первокуром) и активно используя MS Access в универе на лабе, впервые увидел SQL, случайно нажав кнопку «режим SQL».
      Поковырявшись чутка, выпросил Интернета у лаборантки, чутка погуглил, охренел от дивного нового мира…
      Вот так оно и понеслось с тех пор ))


  1. olezh
    03.10.2019 17:53

    Я бы вопрос сформулировал иначе: профессиональный рост обязательно ли подразумевает превращение бэкэнд-разработчика в dba?

    В моей практике написание sql-запросов занимало в лучшем случае 10% времени от всей работы, и идя собеседоваться лучше порешать задачки на тему, работодатели не прощают ошибок в sql-запросах


    1. mephius Автор
      03.10.2019 18:06

      идя собеседоваться лучше порешать задачки на тему, работодатели не прощают ошибок в sql-запросах

      Возможно, не все работодатели сами могут пообщаться на более глубокие темы работы БД, поэтому придираются к синтаксису? Ладно еще поговорить про семантику where и having, но синтаксис?


    1. apapacy
      03.10.2019 19:04

      Я неявно под знанием SQL имел в виду прежде всего знание теории реляцинных баз данных. Просто знание SQL — это очень просто и как гласит история разрабтывался даже не для сеньоров которые мечтают о погонах dba, а для пользователей. И это даже попало в американский кинематограф как на каком-то доисторическом терминале разведчик забивает некий текст и ему выводится табличка с данными.