Почему не нужно идти в айти — демотиватор +15


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

Введение

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

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

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

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

Идея

Подводя черту под вышесказанным, хочу донести очень простую мысль: нельзя быть разработчиком на языке <X>.

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

Отсюда вытекает простой вывод - нужна какая-то база, позволяющая такое вот "плавание".

База

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

  1. Язык компьютера (железок) - ассемблер

  2. Язык операционной системы - С

  3. Язык работы с операционной системой - Bash/PowerShell

  4. Язык прикладных программ для платформы - Python/Swift/Java/C++/C#/Ruby/..

  5. Язык браузера - JavaScript

  6. Язык баз данных - SQL

  7. Язык функциональный - Haskell/Lisp/Elixir

  8. Язык документации и литературы - английский

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

Детальное рассмотрение

Пробежимся по каждому пункту, чтобы понять, зачем он нужен

  • Язык железок - ассемблер

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

  • Язык операционки - С

    Актуальный язык низкого уровня, однако находится посередине между машинно-ориентированными языками и языками, понятными пользователю.
    Его изучение даст понимание основ подкапотной работы ОС, системного ПО, большого количества библиотек. Язык даст возможность ощутить "близость к машине". Не так, конечно, близко, как ассемблер, но все же.
    Так что этого динозавра, безусловно, нужно изучить.

  • Язык работы с операционной системой - Bash/PowerShell

    Специализированные языки, позволяющие "общаться" с операционкой, как с обычной программой. Находить файлы, устанавливать/удалять программы. Словом, решать повседневные задачи при работе на компьютере. Знание команд и умение работать в командной строке - необходимый навык для любого разработчика. Работа с тем же Git выполняется через консоль.

  • Язык прикладных программ для платформы - Python.. и компания

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

  • Язык браузера - JavaScript

    Браузеры сегодня уже можно называть операционными системами. По аналогии с Си, JavaScript является языком работы с браузером. Определенно требует изучения, так как использование браузера становится неотъемлемой частью повседевной жизни.

  • Язык баз данных - SQL

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

  • Язык функциональный - Haskell/Lisp/Elixir

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

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

    Забить саморез молотком можно, но это будет не так эффективно. Для этого применяется ФП, понимание которого позволит использовать наиболее эффективный способ в зависимости от задачи - нет ограничения объектами и классами. Такой подход упрощает работу с кодовой базой и тестирование. Та же библиотека Redux, обычно работающая вместе с React, использует функциональный подход, так как основная концепция Redux — использование чистых функций без побочных эффектов.

  • Язык документации и литературы - английский

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

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

Резюме

Подводя итоги, хочу сказать одно - никто не заставляет изучать все из того, что я перечислил. Можно освоить HTML, CSS, JS и называть себя сайтоклепателем веб-программистом. Но стать настоящим специалистом без всего остального будет проблематично. Для дальнейшего роста будет необходима такая база.

Я привел свое видение тех моментов, с которых начинается путь в айти.

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

P.S. Спасибо, что дочитали до конца. Если не согласны с чем-то или нашли ошибку, то жду фидбека в комментариях :)




Комментарии (199):

  1. in_heb
    /#24462704 / +18

    Пропущен целый слой индустрии - собственно разработка движков/компонент браузеров, движков баз данных, движки AI-фреймворков. А то получается так что sql и js существуют, а то что их исполняет рождается само по себе. Ну и тот же движок tensorflow это не python, а просто имеет python-биндинги.

    И тут возникает внезапно C++ или его модные/современные заменители (golang, rust), которые не подходят ни в одну из описанных вами категорий

    • amarao
      /#24462998 / +8

      Да, я только хотел сказать, что происходит магическое превращение из C и JS. Хотя это не так, и там есть огромный слой кода, который, возможно, толще, чем всё "под" и "над" ним (особенно, если учесть условный Qt).

  2. lxsmkv
    /#24462720 / -19

    Мой юбилейный (1000-ый) комментарий!

    Для меня разработчики делятся на две категории, те которые могут с нуля написать компилятор и всех остальных :) Первые это инженеры. Другие это ремесленники. Индустрии нужны и те и другие.

    • Breathe_the_pressure
      /#24462756 / +53

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

      • lxsmkv
        /#24462886 / +2

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

        На самом деле мне в работе нужно знать к кому и с какими вопросами можно обратиться, когда мне нужен совет. Потому что у меня, как автоматизатора, широкий, но не глубоко развитый набор знаний и навыков. И если я хочу быть уверен, что этот совет основан на фундаментальном понимании устройства системы, то в таком случае мне нужен инженер (часто это например архитектор на проекте). Если вопрос практической направленности то тут, выбор к кому обратиться будет шире. Условно говоря, regex помочь написать может любой, а подсказать как лучше сделать какую-то сложносоставную систему, типа фреймворка - нет. С инженером можно говорить практически на любые айтишные темы, с линейным разработчиком - скорее выборочно. Во всяком случае на в моей практике так и было.

        • lebedec
          /#24463388 / +13

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

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

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

          • lxsmkv
            /#24463604 / +4

            Есть опытные линейные разработчики. Спрашиваешь у него про другой фреймворк, а он ни к чему другому даже руки не прикладывал. Т.е. узкий специалист. Но в своей области он точно наступил на все грабли какие есть, поэтому с вопросами по этой системе я пойду к нему. Или человек который восемь лет сидит на одном проекте и делает одну и ту же работу. Хорошо делает. Но ничем больше не интересуется. Таких примеров масса. Ничего в этом такого оскорбительного нет. Это линейные разработчики, им дали борозду, они и пашут и хорошо пашут. Качественно.

            Если я знаю, что наши разрабы делают что-то похожее или сталкиваются с подобными задачами я пойду к ним. И были такие случаи, где я знал что они применяют какой-то шаблон, который может мне быть полезен, и я спрашивал как его применить в моем контексте. Но если мне нужен принципиально "другой взгляд" или какой-то принципиально/философский вопрос, то я пойду к инженеру/архитектору. Потому что у них них чаще видение широкое. Они могут смотреть на вопрос с разных сторон, а не только со стороны своих личных предпочтений. (Тоже не все)

            И что все обиделись, как будто я "водителя-механика" назвал "шофером". Нет. Есть водитель-механик, а есть инженер-конструктор. Разные классы задач.

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

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

            • lebedec
              /#24463684 / +5

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

              • lxsmkv
                /#24464048 / +1

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

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

                А, ну вот, я сам тоже пришел к этому определению. Это экспертность. Он эксперт в своей области. И да если ему дать программировать фронтенд, он скорее всего довольно быстро полезет в дебри смотреть как там node.js плохо устроена внутри. А это совсем не нужно заказчику. Т.е получается уровень экспертности это не то, что обязательно нужно повышать. Для некоторых видов задач, она может оставаться низкой.

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

                • lebedec
                  /#24464980 / +6

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

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

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

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

                  Увлекаюсь программированием независимо от того, приносит это деньги или нет. Работаю над собственными проектами и на выходных, и параллельно основной работе.

                  Раньше удивлялся, почему многие люди вокруг не вкладываются в изучение технических дисциплин, с такой же упоротостью, как и я, ведь это так интересно и перспективно!

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

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

            • fcoder
              /#24466294 / +6

              И что все обиделись, как будто я "водителя-механика" назвал "шофером". Нет. Есть водитель-механик, а есть инженер-конструктор. Разные классы задач.

              "Обиделись" все на то что вы по какой-то непонятной причине решили что разработчик компилятора (т.е. программы превращающий команды процессору из текстового формата в бинарный) разительно отличается от веб-разработчика. Что программа для монопольной переработки файлов многократно сложнее например чем система высокочастотного трейдинга или современный графический движок.

              Такое себе деление конечно

    • Ritan
      /#24463184 / +2

      А что в вашем понимании "с нуля"?

      • lxsmkv
        /#24463310 / -9

        То же самое, что и идиома "from scratch".

        • Sau
          /#24467990 / +4

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

          • ushankax
            /#24468736

            Вот да, отличный комментарий. И на каждый последующий вопрос в целом нужен свой спец.

            В познавательных целях можно книжку почитать в духе 'writing a compiler in go', но это не поможет сделать что-то толковое без опыта) имхо, вместо изучения кучи языков стоит сфокусироваться на области, в которой ведется работа на текущий момент

    • Nbx
      /#24463522 / +15

      те которые могут с нуля написать компилятор и всех остальных
      Сам то как? Осилишь?

      Ну и вопрос — литературой можно пользоваться или надо в 30 минутный интервал уложиться на whiteboard? Если можно, то напишут процентов 95. Если нет, то наверное теже 95, но уже получится говнокомпилятор.

      • lxsmkv
        /#24463664

        Нет, не осилю. Я уже ответил в другом комментарии что для меня это потолок практического осмысления. Но я и не пытался, так в общих чертах, "чего-то там абстрактное синтаксическое дерево" помню и все. Хотя те кто это делал говорят, что это не самая сложная задача.

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

        Ну и вопрос — литературой можно пользоваться или

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

        Если можно, то напишут процентов 95. Если нет, то наверное теже 95, но уже получится говнокомпилятор.

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

        • Nbx
          /#24463678 / +4

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

          Когда стоит задача «написать компилятор», то в рамках «30 минут на whiteboard» это может значить генерация P-кода для арифметических выражений (можно без поддержки скобок). Такое сделают «хоть как-то», ну пусть не 95, но 80 процентов уже точно.

          • lxsmkv
            /#24463902 / +2

            Не обьяснить как работает, а написать. И не интерпретатор, а компилятор. Он должен ведь не только прочитать и распарсить, а самое главное что, перевести инструкции в машинный код который бы соответствовал бинарному протоколу операционной системы. Т.е. нужны знания из нескольких дисциплин информатики, чтобы охватить эту задачу с начала и до конца. А до уровня операционной системы большинству программистов сегодня вообще не приходится опускаться. Многие программисты на Javа могут даже не знать как работает JVM, которая выполняет их код.

            Я думаю если распределить всех айтишников по глубине знаний то получится вафельный рожок, перевернутая пирамида, где 80% болтаются где-то в верхнем слое системных абстракций. Т.е. на уровне языка программирования и никогда не спускались ниже. И это нормально. Я на каком-то довольно свежем докладе слышал, что по оценкам специалистов для того чтобы угнаться за будущими потребностями индустрии (в частности в автомобильном секторе) нужно ускорить темп разработки ПО в три раза. В три. Поэтому прикладных програмистов должно быть сравнительно много. Этот тот слой который первым принимает на себя удар. И только если им не удается впитать задачи приходят системные интеграторы, а за ними системные программисты и развивают системы под новые потребности индустрии. Вот например потребности криптомайнинга пробили всю пирамиду насквозь аж до железа.

            • yerbabuena
              /#24463974 / +2

              для того чтобы угнаться за будущими потребностями индустрии (в частности в автомобильном секторе) нужно ускорить темп разработки ПО в три раза.

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

            • Nbx
              /#24464110 / +2

              И не интерпретатор, а компилятор. Он должен ведь не только прочитать и распарсить, а самое главное что, перевести инструкции в машинный код который бы соответствовал бинарному протоколу операционной системы.
              Зачем инструкции в мышинный код? LLVM же есть, если уж так надо мышинный.

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

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

              • 0xd34df00d
                /#24464112 / +25

                компилятор [...] с си++, это конечно уже настоящий, можно бэджик выдавать с ачивочкой.

                И скидку на лечение в дурке.

                • Nbx
                  /#24464122 / +1

                  Даже если реализовал для версии C++ 1.0?

                  Думаю что было достаточно энтузиастов которые первые версии в одиночку тянули.

                  Так что максимум в санаторий, на принудительный отдых.

              • lxsmkv
                /#24465364

                Написать под бекенд типа LLVM или QBE (который собственно и будет в конце концов выполять перевод в машинный код) действительно не самая сложная задача. Я ведь не имею ввиду, я имею ввиду все полностью, с нуля, без ничего, вот у тебя язык программирования на операционке, и пиши на нем. А после компиляции, компилированый исполняемый код должен работать под этой операционной системой. Там уже не все так просто.

            • AllexIn
              /#24464986 / +1

              Почему вы считаете что перевод уже отпарсенного текста в маш код это проблемы? Это же по сути самая простая часть: буквально словарь который переводит лексемы в маш коды. Ну да, надо этот словарь иметь. Но глобально задача то вполне по силам нормальному джуну.
              Написать грамотный парсер(если никогда не писал) выглядит более сложной задачей.

              • AnthonyMikh
                /#24466390

                Это же по сути самая простая часть: буквально словарь который переводит лексемы в маш коды.

                Если вы не пишите компилятор для чего-то типа Pascal, который специально проектировался так, чтобы быть компилируемым в один проход — в какой-то момент вам придётся писать аллокатор регистров. Хотя бы такой, который будет тупо всё на стек спиллить.

                • AllexIn
                  /#24468052

                  Речь же об абстрактном компиляторе.
                  Естественно написать компилятор для того же современного С++ - задача весьма не слабая.

          • vadimr
            /#24464016 / +1

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

        • altaastro
          /#24469220 / +3

          Извините, но если вы не в состоянии написать сходу рекурсию, то ваше мнение о разработке совершенно нерелевантно.

        • jetteim
          /#24469224 / +3

          Я и рекурсию написать не смогу сходу.

          wat?

      • vadimr
        /#24463682 / +2

        Не-не, не так просто написать говнокомпилятор. Это как бы такое программирование второго порядка, требует большой абстрактности мышления.

        Думаю, что процентов 80 за месяц не отладят до такого состояния, чтобы легко не находился ошибочно транслируемый пример. А процентов 20 – за всю жизнь.

        Хотя во времена старика Уэзерелла подразумевалось, что это рядовая задача для изучающего программирование.

        • lxsmkv
          /#24463780

          Спасибо за отсылку! Мне эта книга еще не попадалась.

        • Olevin84
          /#24463944 / +6

          Даже у Уэзерелла написание компилятора не считалось рядовой задачей:

          "Не каждый студент возьмется в одиночку за создание компилятора" (стр. 158 в русском переводе)

          Это предполагалось направлением специализации (спецкурс), т.е., далеко не для всех изучающих программирование. И оценивалась такая работа как курсовая (минимум — семестровая).

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

          • vadimr
            /#24463982 / +1

            Да, у нас как раз и был расширенным курсовиком. За работающий учебный компилятор (порождающий исполняемый код) ставили автомат по ТФГ. Причём можно было писать вдвоём.

            Просто на курсовик достаточно было построить деревья.

    • sved
      /#24463972 / +11

      Не понятно, с какого перепуга написание компиляторов стало таким убер-критерием.

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

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

      • lxsmkv
        /#24464132

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

        А как на Ваш взгляд? Какие программные системы самые сложные в разработке? Уклончивый ответ типа "Те к которым плохо прописаны требования" не принимается :)

        • flx0
          /#24465542 / +5

          Я работал над одной коммерческой ОС. Сложность там не "hard", а скорее "complex". Много компонентов, разные подходы к их исполнению и к архитектуре, из которых нужно выбрать подходящий. Написать минимальную ОС типа загрузчик + планировщик + менеджер виртуальной памяти тянет на хороший курсач (а то и диплом), а вот поддерживать дальше всякие libc, сдк, драйвера - это уже в одно рыло просто не затащить, просто потому что этого слишком много.

          Собственно, все то же самое относится и к компиляторам с движками. Самому не так уж сложно накатать что-то на коленке, но оно так и останется игрушкой, ибо в аналоги уже вложено over 9000 человеко-лет, а у вас столько нет.

          • cepera_ang
            /#24465648 / +1

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

      • hogstaberg
        /#24464798

        И у меня группа когда-то писала примитивные «компиляторы» в качестве курсовой. Сдали практически все, но вот объяснить своими словами как оно вообще работает, хотя бы очень примерно… Ну вы поняли =)

    • leonidy85
      /#24464568

      Насчёт компилятора не знаю, а интепретатор Бейсик подобного языка для микроконтроллера писал на сишнике, но при этом я вэб разработчик и 90 процентов своего рабочего времени клепаю сайтики, так кто я?

      • lxsmkv
        /#24464778

        То чем человек занимается для заработка не имеет значения. Может хоть рыбой на рынке торговать.

    • AllexIn
      /#24464982 / +1

      Сложность написания компиляторов преувеличена.
      Будучи юным специалистом написал свой язык скриптовый(с JIT компиляций), потому что... не осилил интеграцию Lua в проект.

      • lxsmkv
        /#24465688

        А что за и на чем написана была система в которую понадобился DSL?

        P.S.:Глянул ваши проекты - круть.

    • Shishmak
      /#24469226

      А время учитываеися?

      "Могу хоть сейчас" и "Могу через год, когда изучу тему" это и то и другое "Могу" но как говорится есть нюанс

  3. iiwabor
    /#24462778 / +1

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

    • in_heb
      /#24462936

      "нужно бизнесу" измеряется количеством публично доступно вакансий в какой-то конкретной стране/городе/регионе? ну если так, то в условном верхнем урюпинске "нужны бизнесу" максимум 1С-ники и "специалисты" по изготовлению сайтов на тильде

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

  4. ripandtear
    /#24462900 / +30

    Автор, не обижайтесь, но какая-то бесполезная статья, созданная с непонятной целью.

    Уже более 6-8 лет успешно программирую на С и С++ микроконтроллеры, DSP-процессоры, различные Cortex-A. Применяю ОСРВ и Linux (портирую с использованием ассемблера при необходимости на архитектуры, где до этого их не было).

    При этом не бум-бум в CSS, HTML. Ниразу мне не пригодились зачатки этих знаний со времен университета - я далек от вэба так же, как и топор от плавания в воде. Да и не хочется мне в эту сферу даже смотреть (Так же, как например в финтех)

    Я не настоящий программист/специалист ?

    • mdlufy
      /#24463110

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

      Программированием микроконтроллеров не занимался, не могу что-то внятное ответить.

      По поводу CSS, HTML могу сказать только то, что в "списке базы" я их не упоминал. Все приведенное должно помочь при желании покопаться в какой-то смежной сфере, если захочется ее поменять. Для вас это может быть не актуально.

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

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

      • Kelbon
        /#24463190 / -6

        Знание JS скорее минус, чем плюс, потому что засоряет разум

        • tommyangelo27
          /#24463236 / +4

          Полезно «знать» JS, чтобы избегать мест/задач где он необходим :)

        • lxsmkv
          /#24463344 / +4

          Язык как язык. Как и любой язык не идеальный и со своими особенностями.

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

          • 1Tiger1
            /#24467178

            Засорит невозможно а вот на работать паттерны мышления запросто. И когда разработчик с подходами одной области приходит в другую он непроизвольно начинает их применять. В голове джуна который освоил весь этот набор на хорошем уровне будет творится такой хаос, что когда он придёт в конкретную область на конкретный проект, ему (и команде) будет тяжело. Если новую область изучает уже достаточно опытный разработчик (верхняя планка мидла и выше) уже проще, он понимает отличия и их причины, он уже отделяет их, понимает применимость, хотя эффект все равно наблюдается. Тут как с изучением языков, если ребёнка с младенчества параллельно учить сразу нескольким обычным языкам то он будет их смешивать и путаться. Ну или как с "мышечной памятью" у борцов единоборств. Мозг отлично нарабатывает паттерны, любого уровня, от рефлексов до серьёзных абстракций, и когда наработал старается их использовать, меняет он их очень неохотно.

        • lebedec
          /#24463426 / +13

          Мне кажется, вам бы понравилось в средние века. Там многие считали, что «знание» в принципе от сатаны, засоряет не только разум, но и душу. А вот вера в кресты — единственное спасение.

        • DonVietnam
          /#24463696 / +5

          А некомпетентность, демонстрирующая подобными формулировками, засоряет комментарии.

      • motoroller95
        /#24465718

        тех, кто разрабатывает движки и тех, кто на их основе что-то создают.

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

    • Newrbinez
      /#24467586

      Можете в общих чертах рассказать про область embedded? Перспективы, зп, рынки потребителей, рынки труда, как в мире, так и в России?

      • ripandtear
        /#24468098

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

        Я попытаюсь написать в совсем общих чертах с точки зрения наемного работника.

        В России есть своя специфика, связанная в первую очередь с тем, что очень много вакансий и проектов связано с военкой. На обычные проекты попасть можно, но придется фильтровать вакансии, работу возможно придется искать какое-то продолжительное время. В целом работа будет сильно зависеть от руководителя - процессы редко где налажены, как заведено в конкретном месте - так и будет. ЗП находятся около нижней границы рынка, здесь сейчас все очень плохо. Жена, которая работает сеньором (C#, бэкенд) в обычной, среднестатистической компании (чисто софт) зарабатывает в ~2 раза больше меня. Ну и в целом условия такие, что про удаленку никто не слышал, и т.п. и т.д.

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

        Грубо говоря, и сильно обобщая - из всего IT, embedded пока находится в роли догоняющих, и особенно сильно это проявляется в том, что область сильно консервативна - вам никто не даст писать прошивки на С++ или Rust, если вы не сами определяете технологический стэк. Никто не будет отправлять вас на конференции для повышения квалификации т.п. - если вы работаете там, где все это есть - вам очень сильно повезло.

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

  5. cepera_ang
    /#24462926 / +19

    Как некая глобальная база перечислено то, что в нормальном вузе по специальности должны в первые два курса рассказать :)


    Вместо ассемблера и С — архитектура компьютера, вместо баша — курс по ОС, вместо питона — введение в программирование (условный SICP/CS50), там же и ФП удастся посмотреть, вместо SQL — введение в базы данных.


    До нормальной программы не хватает самой малости — теория вычислений/алгоритмы, компиляторы, компьютерные сети, распределённые системы. В общем https://teachyourselfcs.com/


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

    • amarao
      /#24463004 / +2

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

      • cepera_ang
        /#24463032

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

      • 0xd34df00d
        /#24463614 / +2

        Ну фиг знает, можно типы начать с того же Пирса, там имхо очень доступное изложение и упражнения.

    • melodictsk
      /#24464706 / -5

      Как по мне, зачем идти в вуз на программиста, если этих знаний нет до поступления? В программисты должны идти по призванию, а не потому, что модно и это надо бизнесу. Это как научится дизайнерству и т.п.

      • cepera_ang
        /#24464950 / +2

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


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

      • AllexIn
        /#24464996 / +1

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

        • sovaz1997
          /#24465094 / +3

          Систему и связи даёт практика, а не ВУЗ

          • AllexIn
            /#24465112 / -1

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

            • sovaz1997
              /#24465176 / +4

              Если постоянно работать с матрицами, придет понимание, что нужно дополнительно почитать. ВУЗ ускорит это понимание, не спорю, но вовсе не обязателен.

              • AllexIn
                /#24465206

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

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

                Ну и вернемся к первоначальному тезису: практика НЕ дает систематизацию. Она лишь закрывает те пробелы, с которыми сталкиваешься.

      • yerbabuena
        /#24465046 / +3

         В программисты должны идти по призванию, а не потому, что модно и это надо бизнесу. 

        Угу, и в адвокатуру надо идти по призванию, а не потому что закрываемый по 228.4 готов отдать здесь и сейчас 1.5 миллиона лишь бы съехать по недоказанности или хотя бы по условке. Или в милицию идти, потому что верю в дядю Степу, а не потому что за помощь в (не)находе угнанного кайена отдают 16000 долларов. Или во врачи идти потому что хочется лечить людей, а не ожирение бумажника, вымогая 6 миллионов за курс химии в блохе. Чем ИТ сектор так уникален, что от него ожидается работа исключительно по призванию?

        • Neikist
          /#24468248

          Кмк, во все перечисленное так то по хорошему тоже стоило бы по призванию идти…

  6. iig
    /#24463028 / +5

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

  7. fougasse
    /#24463036

    Без конкретики в SQL, FP и JS всё отлично. Как и (в меньшей степени) без shell.

  8. Kelbon
    /#24463068 / +5

    Чтобы быть хорошим специалистом нужно знать:

    1. Язык компьютера (железок) - С++

    2. Язык операционной системы - С++

    3. Язык работы с операционной системой - С++

    4. Язык прикладных программ для платформы - C++

    5. Язык браузера - С++

    6. Язык баз данных - С++

    7. Язык функциональный - метапрограммирование на шаблонах С++

    8. Язык документации и литературы - английский

    • aceofspades88
      /#24463112 / +24

      а английский вам зачем? доку тоже на плюсах пишите

      • Kelbon
        /#24463124 / +5

        самодокументируемый код, да, надо будет исправить

        • AnthonyMikh
          /#24464444 / +8

          Самообфусцируемый, вы хотели сказать.

      • raamid
        /#24463342

        а английский вам зачем? доку тоже на плюсах пишите

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

        • SergeyMax
          /#24463450 / +1

          Может гугл тоже на плюсах.

      • AllexIn
        /#24465004 / +2

        Чтобы вот так не было:
        void PoluchitSummu(int vneshniyPrixod, int vnutrenniyPrixod)

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

    • Sdima1357
      /#24463276 / +19

      Чтобы быть хорошим специалистом нужно знать:

      ... C++

      ... C++

      ... C++

      C++ не знает никто, включая его автора, следовательно, хороших специалистов не существует !

      • raamid
        /#24463354 / +7

        C++ не знает никто, включая его автора

        Runtime error: Автор не входит в состав пустого множества.

    • tandzan
      /#24463430

      1. Получить job offer на позицию программиста С++

    • Zer0Sum
      /#24465324 / +6

      После первых семи пунктов английский будет очень легко выучить - они там почти все слова из C++ взяли.

  9. Matshishkapeu
    /#24463096 / +7

    1. Язык компьютера (железок) - ассемблер

    2. Язык операционной системы - С

    3. Язык работы с операционной системой - Bash/PowerShell

    4. Язык прикладных программ для платформы - Python/Swift/Java/C++/C#/Ruby/..

    5. Язык браузера - JavaScript

    6. Язык баз данных - SQL

    7. Язык функциональный - Haskell/Lisp/Elixir

    8. Язык документации и литературы - английский

    А потом годами на полную ставку докерфайлы писать и всякие AWS-ные джейсоны.

  10. Smart_IT
    /#24463234 / +5

    Название статьи не соответствует ее смысловой нагрузке. Получается название ради хайпа?

  11. Crafter2012
    /#24463242 / +8

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

    Кому должен? Работодателю, чтобы тот заработал на новый феррари быстрее?
    Не зря говорят, не сотвори себе кумира. Master of all trades, master of none.

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

    • cepera_ang
      /#24463250 / -3

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

      • 0xd34df00d
        /#24463618 / +2

        Но в стоимость окружающих товаров входит далеко не только стоимость труда программистов (и вообще цифровые сервисы), поэтому это вполне себе может быть выгодно.

        • cepera_ang
          /#24463674

          В плане стоимости может быть и будет выгодно, а как насчёт того, что рабочих рук не будет хватать на все задачи и те штуки, которые могли бы быть потенциально доступны — не будут созданы? :) Эту логику легко проследить в обратную сторону — вот было бы клёво, если бы я был единственным программистом, тогда можно было ставить произвольную цену на свои услуги. Да? Ну нет, тогда бы не существовало всё то, что позволяет тебе работать программистом, потому что для его существования тоже нужны программисты. И следовательно, мы не знаем, чего бы мы имели, что делало бы нас более ценными, будь в мире ещё больше специалистов.

          • 0xd34df00d
            /#24463724 / +1

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

    • 0x131315
      /#24463766

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

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

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

      На начальном этапе это будет тормозить развитие и нежелательно. Но после - почему бы и нет?

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

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

    • AllexIn
      /#24465026 / +2

      Кому должен?

      Себе. Я в целом с автором не согласен. Но программист всегда должен себе. Потому что если он делает то что должен - то становится более востребованным и высокооплачиваемым.

      Чем меньше программистов в будущем, тем больше зп у меня.

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

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

      Подводя итог: выгодно быть крутым специалистом, рядом с толпой середняков.

      • Crafter2012
        /#24466756

        Но программист всегда должен себе.

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

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

        Жить, чтобы программировать, или программировать, чтобы жить?

        Чем меньше программистов в будущем, тем больше зп у меня.

        Тут я несколько постебался все же. Но если все затронуть эту тему.

        начнется стагнация рынка.

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

        • GothicJS
          /#24466792 / +1

          Жить, чтобы программировать, или программировать, чтобы жить?

          Да вы что, как можно программировать, чтобы жить? Набежали такие в ойти из-за денях и даже ассемблеров на знают, и не кодят 24 на 7 из-за интересного интереса!

        • 0xd34df00d
          /#24467170 / +3

          Жить, чтобы программировать, или программировать, чтобы жить?

          Надо сначала определить «жить».


          Человек не будет пользоваться 5 ОС, 5 браузерами, 5 офисными пакетами, 5 почтовиками, и тд. Поэтому в этих сегментах итак нет массовой потребности в программистах.

          На земле сильно больше одного человека.

  12. alliumnsk
    /#24463314 / +4

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

    Сколько строк кода надо, чтобы вывести один пиксель по центру экрана? Мне кажется, тут число строк кода только растёт.

  13. ustas33
    /#24463364 / +2

    Базовое понимание бизнеса и мира ещё бы не помешало. Некоторые 80% времени формашлепят фичи для 5% пользователей. - А зачем?
    Ну и сложность используемых теологий для того чтобы потом красиво вставить в резюме.
    Можно было сделать в 3х проще. - А зачем?

    • Svbakulin
      /#24464774

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

    • sden77
      /#24464910

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

  14. gurovofficial
    /#24463384 / +7

    Немного всё совсем не так:)

    1. Язык компьютера (железок) - ассемблер

    Правильно писать "Архитектура ЭВМ" ( взаимодействие с железками ).

    2. Язык операционной системы - С

    Большинство драйверов действительно пишется на С. Но язык операционной системы - это язык, на котором написана ОС. Он может быть любым, даже asm.

    3. Язык работы с операционной системой - Bash/PowerShell

    Это называется одним словом - shell, и это не язык операционной системы. Это командный интерпретатор - обычная app, которая имеет доступ к ОС, а взаимодействие идёт через другие процессы/app. Обычно говорят, что это командная строка.

    4. Язык прикладных программ для платформы - Python/Swift/Java/C++/C#/Ruby/..

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

    5. Язык браузера - JavaScript

    JS - это встраиваемый язык, который больше всего распространён в браузерах. Но он совсем не язык браузера. Например, есть интерпретатор Node.js транслирующий JS в машинный код (движок V8). А язык браузера - это протокол, который браузер понимает.

    Ну и т.д.

    Вывод: Путь в IT надо начинать с предмета "Архитектура ЭВМ".

  15. Xapu3ma-NN
    /#24463396

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

    • xSVPx
      /#24465134

      Чтобы знать чем быстрая от медленной отличается, насколько она быстрая итд итп.

      Эрудиция инженеру не вредна. Вредно ее отсутствие.

      Просто отсортировать ? А при каждой следующей сортировке элементы с одинаковыми значениями будут меняться местами ? Да ? Нет ? Уверены ?

      Все непросто. Все.

      • 1Tiger1
        /#24467184 / +1

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

  16. Alex_ME
    /#24463412 / +1

    Про то, что вы пишете (практически) только про веб-разработчиков, полностью опуская как разработчиков всего нижележащего (ОС, компиляторы, движки, фреймворки итп), так и забываете прикладников из других отраслей (где помимо Python и JS - C#, Java, Kotlin, Swift, C++ и чего только нет) уже сказали.

    О том, что это все может быть ненужно для того, чтобы быть спецом - тоже сказали.

    Но я не соглашусь с тезисом.

    демотиватор

    сложности с которыми можно столкнуться по пути и ответить на вопрос, что делает кодоклепателя настоящим специалистом.

    Разве это демотиватор? Я трогал и работал с кучей технологий из разных направлений, потому что это было интересно в тот или иной период. Разработка GUI приложений под винду на WinAPI, Qt (C++), Windows Forms, WPF (C#). Веб разработка на ASP.NET и весь этот вот HTML, CSS, JS, React, Vue. Разработка мобильных приложенйи на Java, Kotlin. Программирование микроконтроллеров на C. Библиотеки и утилиты под линукс на C и Python. Разработка модулей ядра Linux. Компьютерное зрение на OpenCV. Роботы на ROS. Нейронные сети с Keras. OpenGL. Ассемблер. Ядро ОС. Где-то в универских годах пылятся трансляторы и verilog.

    Я дилетант широкого профиля (в основном - всё-таки Си), и не такой успешный, как 25-летние сеньоры, получающие 500к/нсек. Но ничуть не могу сказать, что столкновение с кучей технологий на разных языках, стеках и уровнях абстракции - это какой-то демотиватор, отталкивающий от работы программистом. Наоборот, это просто офигенно, и возможность потрогать какую-нибудь технологию, иногда совсем из другого конца стека технологий - это приятно и интересно.

    • cepera_ang
      /#24463476

      Это демотиватор для тех, кого на самом деле вообще не интересуют технологии, какая разница как там всё устроено и какие есть смежные темы. Дайте денег за мою узкую область и отстаньте.

  17. 0x131315
    /#24463448

    С ЯП низкого уровня согласен - знать нужно, не обязательно хорошо, но пощупать стоит, и желательно вглубь: "Code: The Hidden Language of Computer Hardware and Software" дает неплохую базу, как и старые советские детские книжки времен dos. Ну а если удалось "пощупать" cpu изнутри, например писали что-то под микроконтроллеры - это вообще замечательно: многие из "железных" проблем и абстракций становятся ближе и понятнее, как и уникальные возможности, которые на уровне прикладного софта просто недоступны.

    Понимание ООП+ФП тоже нужно. В новых курсах некоторые уже начинают сразу оба подхода параллельно давать: где-то применим один, где-то другой. А заодно рассказывают и о других, уже устаревших, подходах - для целостной картины мира.

    Все это начинает играть где-то со 2-3 года опыта, когда рефакторинг выходит на значимое место.

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

    Там, где нужна интерфейсная часть, везде своя специфика: где-то достаточно cli, где-то требуется gui, ну а где-то web-интерфейс или какое-либо апи.

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

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

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

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

    • Stronczzz
      /#24465594

      > Code: The Hidden Language of Computer Hardware and Software

      Спасибо за наводку! Скачал - классная книга. Что-то подобное, но на русском есть?

      • ardraeiss
        /#24466342 / +1

        Есть её перевод от МИФ "Код: Тайный язык информатики"

  18. kaiu
    /#24463708 / +3

    После слов «Да, теперь можно знать только один язык, чтобы писать программы. » я закрываю эту статью и даже читать не буду. Загляну сразу в конец «Но стать настоящим специалистом без всего остального будет проблематично.» и понимаю, что вы вводите людей в заблуждение. Писать можно программы на одном языке и зваться программистом на этой языке - это факт и если рынок вам за это платит вы можете этим заниматься хоть 100 лет. Но на рынке труда надо знать сейчас намного больше языков и иметь больше знаний, чем это было лет так 20 назад. Так что с одной стороны вроде проще стало программировать с помощью готовых библиотек, но с другой стороны стало сложнее из-за множества языков и быстрого отмирания разных направлений. Кто-то сидел делал сайт наикрутейшие на флеше, миллионы рублей стоили...и где они? Уроды, даже через вебархив не смог взглянуть и всплакнуть :) Так что все умрет...но где-то и останется и скорее всего останется как раз не веб, а обычная локальная программа на любом умершем языке может жить на виртуалке. Не, у кого-то может и сайт так живет, только для него обычно намного больше надо, да и что за жизнь такая одному. Короче, идите вы туда, куда хотите и если деньги платят, то почему бы и нет...ну или не платят, но есть интерес, то почему бы и не программировать под древние компьютеры...ну, просто так, кому же это в виде увлечений и нравится.

  19. /#24463718

  20. majstar_Zubr
    /#24463720

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

  21. anaken
    /#24463726 / +8

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

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

    Я занимаюсь профессиональной разработкой более 17 лет и ни разу не сталкивался даже отдаленно с Haskell/Lisp/Elixir. А вот чего действительно у многих нынешних программистов не хватает - так это знаний основных комбинаторных алгоритмов.

    • Stronczzz
      /#24465612

      Можете дать ссылку на хорошее руководство / пособие по алгоритмам, желательно с минимумом теории и максимумом практики.

      • anaken
        /#24466614

        Возможно вам стоит посмотреть в сторону каких то онлайн курсов на udemy/coursera/яндексе, там, как правило, встречается больше всего практики (пример: https://practicum.yandex.ru/algorithms/).

  22. ageikin
    /#24463736 / +1

    Ну а чего не указали какой-нибудь бесполезный язык который может потребоваться в будущем, например Q# (для квантовых компьютеров)

  23. Dark_Purple
    /#24463814 / +3

    Часто вижу что даже "писатели" на крестах и решетке не знают битовых операций, что уж говорить про всякие там, прости господи, java. Но все гордо называют себя программистами. :(

    • 1Tiger1
      /#24467198 / +1

      У вас фетиш на низкоуровневые операции?

  24. mvv-rus
    /#24463930 / +2

    TLDR
    Так как это не статья, а комментарий, то изложу максимально кратко, чисто тезисами, по возможности — без пояснений и примеров. Надеюсь, что это будет хоть сколько-нибудь понятно, но — не гарантирую, ибо сам резал этот комментарий по-живому (но все равно получилось слишком длинно IMHO, однако, увы, короче я не умею)

    Начну с банальности: программист занимается созданием программ — решений задач, используя для этого некий исходный материал. Материал, из которого программист делает программы — это абстракции: некие идеальные сущности, обладающие определенными свойствами.
    Но материалом программисту могут служить не всякие абстракции, а лишь абстракции, реализованные в реальной жизни чем-то материальным, что может работать и исполнять программу самостоятельно, а не только в голове человека (этим программирование отличается от, например, математики).
    Обычно реализации абстракций имеют слоистую структуру: абстракции определенного слоя (иначе — уровня) реализуются на базе абстракций более низкого уровня. И этих уровней может быть много. Один пример я все-таки приведу, а то, наверное совсем непонятно будет: веб-приложение сделанное на базе фреймворка (первый уровень) для языка JS (второй уровень), исполняющееся в веб-браузере(третий уровень), написанном на языке высокого уровня, например C++ (четвертый уровень), откомпилированном в систему команд определенной архитектуры процессора (пятый уровень), которые команды процессор исполняет в рамках своей микроархитектуры (шестой уровень), реализованной электронными элементами — транзисторами, конденсаторами и т.д. (седьмой уровень).
    Такое слоистое построение абстракций, используемых программистом, резко упрщает его работу: в идеале программисту не нужно задумываться, что там происходит на нижних уровнях.Но это — в идеале.
    А в нашем реальном мире реализации абстракций, с которыми программист работает, практически всегда являются неполными и неточными, или, как говорят — абстракции имеют дыры (или, используя выражение-кальку с английского — «протекают»). И это осложняет работу программиста: ему приходится заглядывать через эти дыры на нижние уровни и работать с тамошними абстракциями. Насколько осложняется работа зависит от разных факторов. Например — от качества абстракций, грубо говоря, как много дыр они имеют. А еще — от требуемой эффективности использования тех устройств реального мира, которые будут исполнять программу.
    Дыры в абстракциях делятся, в целом на два класса. Первый класс — это ограничения, они возникают из-за того, что абстракция реализована не полностью. Типичный пример (ещё один, к сожалению) — абстракция натуральных чисел, которых бесконечно много, реализованная челочисленным типом данных, который имеет максимальное значение, и при превышении этого значения «что-то происходит»: что именно — зависит от рализации, но всегда совсем не то, что ожидается от натурального числа. И это поведение приводит, в общем случае, к ошибкам в программе.
    Но, на самом деле, ограничения это не так страшно: их можно сделать частью абстракции, а потом следить за тем, чтобы они не нарушались. Сложнее с другими дырами, влияющими на эффективность реализации абстракций. Пример (все-таки ещё без одного примера не обойтись): хотя программисты, даже работающие напрямую с архитектурой и системой команд процессора (а тем более — с более высокими уровнями абстракции), как правило, используют абстрактный процессор, выполняющий команды с одной скоростью и чисто последовательно, и память, время доступа к ячейкам которой не зависит от истории доступа, реальные современные процессор и память устроены совсем не так. И, если требования к эффективности программы достаточно велики, то программисты этого и более высоких уровней вынуждены для успешной работы учитывать дыры в абстракциях процессора и памяти.
    Таким образом, именно из-за несовершенства абстракций, появляется требование к хорошему (а то и к обычному) программисту, которое фактически изложено в статье — способность работать на разных уровнях абстракций, понимать эти уровни. Иначе говоря — изучать многое за пределами того уровня (например, фреймворка), которого, в идеале, было бы достаточно для реализации программы решения задачи. С точки зрения развития и раскрытия возможностей человека это даже хорошо, но вот с точки зрения экономики, это плохо — повышаются требования к работнику достаточно массовой профессии, то есть — снижается число людей, способных ее освоить, и растет время, требуемое на обучение этой профессии. Иначе говоря: увеличивается цена труда такого работника и издержки производства, в котором он задействован.
    Но, увы, наш реальный мир — он такой. И куда он пойдет — неизвестно: с одной стороны, появляются все новые уровни абстракций — например, 30 лет назад не было ни браузеров, ни JS — в которых тоже неизбежно сеть и будут дыры, с другой — абстракции уточняются, а влияние дыр сокращается (например, из-за роста производительности оборудования). Потому лично я совета идущим в айти — ограничиваться ли только одним фрейворком или отлодить с сторону все приятные дела и учить много всего — дать не могу.

    • cepera_ang
      /#24463994

      У профессора Онура Мутлу из Цюрихской Высшей Школы есть отличный курс по архитектуре систем, в котором он отлично формулирует похожий тезис: «Мы заставляем электроны решать задачи из реальной жизни с помощью стека абстракций». И пока улучшения на нижнем уровне, в железе («закон Мура») давали «бесплатный» рост количества решаемых задач, то абстракции прекрасно работали, но сейчас мы подходим к такому моменту, когда рост внизу замедлился и стало ценным и востребованным умение пробивать эти уровни стека, создавая более специализированные решения под конкретные задачи.


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

      • 1Tiger1
        /#24467372

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

    • Mayurifag
      /#24465732 / +1

      В вашем спойлере «TLDR» не то, что принято считать под «TL;DR».

    • 1Tiger1
      /#24467416

      Время, все упирается во время. Слои как вы сказали множатся, плюс растут горизонтально, плюс проекты усложняются и к каждому слою повышаются требования для входа и работы. Плюс внутри слоев появляется все больше абстракций (внешние сервисы, инструменты, фреймворки, хранилища данных, шины данных, альтернативные языки и технологии и прочее). Нельзя быть специалистом во всем. А лезть в область в которой ты не специалист часто опасно для проекта. Поэтому широкие знания того с чем соприкасаешься (на уровне понимания возможностей, областей применимости, плюсов, минусов, схем использования) и глубокие той области и инструментов с которыми в основном работаешь. Первое нужно чтобы понимать где лучше отдать другим, или какой инструмент лучше использовать для специфический задачи. Второе - для работы самому. Разработка давно уже коллективная работа. Подключить специалиста по нужному профилю лучше чем пытаться что-то сделать самому. Написать, при проблеме, разработчикам инструмента или сервиса надёжнее чем пытаться исправить самому. Применить другой инструмент более подходящий для задачи выгоднее чем пытаться всеми силами выжать нужные параметры из изученного до деталей инструмента. Например лет 5 назад я ещё встречал разработчиков которые пытались выдать максимум из mysql или postgresql, оптимизируя до фанатизма, и тогда им сложно было принять что если просто посмотреть на проблему под другим углом, вынести часто используемые данные в redis или эластику, то и страдать не надо и производительность получается даже выше чам та за которую боролись. Простой пример. Сейчас это норма. Но люди сознательно ограничили свой стек, привыкли к нему, погрузилась, изучили, и из-за этого у них не было времени и желания поэкспериментировать с альтернативой. Время, все упирается в время, усилия, энергию, мышление. Поэтому лично я даю обычно совет: Широкие и актуальные знания того с чем соприкасаешься, и относительно глубокие того с чем работаешь. И знания возможностей (о том что существует инструмент, библиотека, сервис и прочее) и как ими пользоваться, важнее глубоких знаний нескольких инструментов, особенно если они не из твоей области. Банально потому что углубить знания всегда можешь когда видишь дефицит, а вот то о чем не знаешь использовать не сможешь.

      • yerbabuena
        /#24467716

        И знания возможностей (о том что существует инструмент, библиотека, сервис и прочее) и как ими пользоваться, важнее глубоких знаний нескольких инструментов, особенно если они не из твоей области.

        Как-то это плохо стыкуется с типичным подходом хрюш из корпоративного мира, где сплошь и рядом считается что jack of all trades - master of nothing.

  25. garwall
    /#24464380

    *С сумрачным сарказмом*

    Для пытливых умов давно уже написан теоретический минимум программиста.

    • 1Tiger1
      /#24467346 / +4

      Какой ужас. Хочу пообщаться с джуном который все это знает, на достаточно адекватном уровне. Причём лучше не на собеседовании а сразу в бар, взять по бокалу пива, и проникновенно так спросить: "что же такое случилось в твоей жизни парень, что ты так перестраховываешься? Ты потратил столько лет жизни, только для того чтобы Начать программировать, сформировать свой минимум, почему? Понимаешь ли ты что за эти 4-6-10 лет ты мог стать весьма неплохим профессионалом в своей области, с твоей то обучаемостью? Ты мог даже попробовать несколько областей и в каждой набрать неплохую базу опыта. И осознаешь ли ты что 95% этой информации ты скорее всего воспользуешься пару раз в ближайшие 10 лет, а потом многое из этого станет не особо актуальным? ". И выпить с ним этот бокал за то чтобы следующие 5-10 лет он потратил на то чтобы изучать то что нужно ему, а не что придумали какие-то странные люди и оформили в список обязательного минимума некого абстрактного программиста в сферическом вакууме. А потом заказать ещё по паре бокалов, потому что у парня будет стресс, столько усилий потрачены почти зря, и я, как честный человек, обязан помочь ему этот стресс преодолеть.

  26. sden77
    /#24464918

    ИМХО, прийти в айти в РФ будет становиться сложнее, т.к. иностранные компании ушли/уходят/не хотят тут аутсорсить, иностранные фриланс биржи закрылись для РФ, но при этом желающих попасть в айти меньше не будет

  27. panzerfaust
    /#24464994 / +4

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

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

    • yerbabuena
      /#24465070

      Ну это как совет носить каску каждый день. Типа вдруг кирпич - а ты в каске, с "базой".

      Абсолютно не работает, если ты на войне и под страховкой. Или на стройке хотя бы.

  28. Tunerok
    /#24465076 / +1

    Язык компьютера (железок) - ассемблер

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

  29. lexx59
    /#24465538 / -2

    А где язык математики???

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

    • DirectoriX
      /#24466666 / +1

      Какой из «языков математики» вы имеете в виду? Хватит ли матлогики с комбинаторикой, или нужно сразу до аксиом Пеано нырять? Что насчёт топологии?
      Я знаю, что в большинстве стандартных библиотек языков, sort() использует быструю сортировку (или её варианты), поэтому будет работать в среднем за O(n log n). Но я не уверен, что смогу это доказать формально (строго, не «ну там как бы дерево из рекурсивных вызовов, глубина — логарифм от количества элементов, поэтому вроде как всё сходится»). Значит ли это, что я должен прямо сейчас забросить своё ворочание JSON'ами в Rust и идти читать теорию алгоритмов?

      • 0xd34df00d
        /#24466738 / +2

        или нужно сразу до аксиом Пеано нырять? Что насчёт топологии?

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

      • cepera_ang
        /#24466740

        забросить своё ворочание JSON'ами в Rust

        JSON’ы в Rust’e! Какой харам, нужно использовать нативные zero-copy binary форматы :)

        • DirectoriX
          /#24467474

          Я бы с радостью, но с одной стороны WebSocket с (кривым) JSON-RPC, а с другой — REST API, тоже только на JSONах. Оба эндпоинта — сторонние, без возможности смены формата, поэтому приходится терпеть…

  30. arTk_ev
    /#24465656 / -3

    Языки вообще тут не причем, это довольно простой инструмент. Любой язык изучается максимум за пару часов.

    Более корректный вопрос - нужно ли идти на разработку, в любой сфере, не только в it?Разработку выдержит не каждый, и в ней как раз неминуемо выгорание.

    Другой вопрос - какая платформа? Готовы вы годами копаться в ней, постоянно подгорая от проблем в ней?

    • Stronczzz
      /#24466300 / +2

      > Любой язык изучается максимум за пару часов.

      Серьёзно? Можете описать свой подход к изучению языка за 2 часа?

      • cepera_ang
        /#24466394 / +3

        «Так, язык, ага, где у него там официальный сайт? Вот, скачать компилятор, так дока, угу, хелло ворлд, компилируем, запускаем. Так, ага, как тут пакеты-зависимости добавлять? Цмейк-римейк, мавен-градл, энпээм-пипенв, ну всё понятно. Эта, где чо там на стэковерфлоу, оп, нашёл, хорошо. О, IDE надо поставить, угу, запустил, подсветочка кода, интелисенс, все дела. Короче, разобрался, в докере-херокере запускаем и кайф»

    • 0xd34df00d
      /#24466554 / +2

      Любой язык изучается максимум за пару часов.

      Предлагаю за пару часов изучить идрис или агду.

      • yerbabuena
        /#24466724

        Зачем так жестоко, пусть для начала T-SQL или WPF/XAML освоит на свободном уровне. Или F#

        • arTk_ev
          /#24467252 / -1

          F#, Haskel, BrainFuck уже и так знаю. XAML и SQL - это вообще не языки программирования.

          Если вы не можете загуглить несколько основных команд и синтаксис языка - то вы некомпетентны. Это умещается в одну страницу.

          А вот на изучение платформ .Core, Java VM, x86 и других, может уйти десятилетия, и в основном методом проб и ошибок.

          • 0xd34df00d
            /#24467382 / +3

            Изучение языка — это чуть больше, чем изучение синтаксиса и «основных команд» (что бы последнее не значило). Кстати, какие основные команды в хаскеле?


            Если вы не можете загуглить

            Ну пусть вы даже загуглили это (кстати, умещается на одну страницу) или это — сильно поможет?

            • arTk_ev
              /#24468418 / -4

              Вы путаете язык и платформу. Тот же С++ может быть скомпилирован и на .Core, x86, Arduino, GPU. Общее между ними только синтаксис.

              C# и F# на одной платформе .Core и CLR , это значит что можно на обоих языках писать в фукнциональном и императивном стиле, или писать сразу на двух языках одновременно.

              Тот же C# может быть и для платформы Mono, WebAssebly и Unity3d.

  31. hewlett-pacific
    /#24465894

    Да, dotnet разработчику определенно нужны Pure C и ассемблеры, java разработчику тоже. А уж фронтендерам-то как они нужны, ух! И никак иначе, база, обязательно, не станет, не поймет. И обязательно должен уметь с нуля написать планировщик виртуальной памяти, только так, надо, надо.

    • cepera_ang
      /#24465988

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

    • AllexIn
      /#24466014 / +1

      Хотя бы общее представление надо иметь.
      А то потом нафигачат в каждый кадр конвертацию string to int для координат объектов на карте и удивляются: "а чё всё тормозит"?
      P.S. Это не выдуманный пример.

      • 1Tiger1
        /#24467314

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

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

        • AllexIn
          /#24468066 / +1

          "Хорошие процессы". Да, вы смешно пошутили )
          Я нее знаю в каком мире вы живете, я живу в мире где хорошие процессы есть у одной компании из 10.
          Еще две из 10 пытаются изображать процессы. Остальные даже не пытаются.
          Хотя, конечно, все декларируют отличный уровень процессов.

          • 1Tiger1
            /#24468986

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

            • AllexIn
              /#24470432

              Я работаю в одной из 10. Это не отменяет факта существования других 9.

        • M_AJ
          /#24470700

          Увидит, отдебажит, исправит, зазапомнит.

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

  32. Blumfontein
    /#24466080 / +1

    Прежде чем ездить на АКПП, надо освоить сначала механику?

    • motoroller95
      /#24466218

      чтобы починить АКПП нужно хотя бы базово понимать что такое машина

      • 1Tiger1
        /#24467218 / +5

        Чтобы починить АКПП вам нужен автосервис.

        • motoroller95
          /#24468368

          приезжаешь в автосервис, а там говорят "Прежде чем ездить на АКПП, надо освоить сначала механику?"

          • 1Tiger1
            /#24468994

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

  33. GothicJS
    /#24466454 / +2

    Язык компьютера (железок) - ассемблер

    Язык компьютера это нолики и единички, а не ассемблер. Как вы в айти то вошли, не зная этого?

    • cepera_ang
      /#24466470 / +2

      У компьютера вообще нет языка, только зубы архитектура набора команд, а нолики и единички — лишь битовое представление данных в памяти. Как вы в айти то вошли, не зная этого?

      • GothicJS
        /#24466538 / +1

        У компьютера вообще нет языка

        Умение абстрактно мыслить - главный навык программиста.

      • lexx59
        /#24466550 / +1

        У компьютера нет набора команд. Там только электроны бегают )

        • cepera_ang
          /#24466642

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

        • 1Tiger1
          /#24467072

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

  34. axmct
    /#24466500

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

    В прошлом веке в вузе я брал дополнительные курсы по системотехнике на несколько месяцев чтобы стать хорошим программистом. Все три тома Крута прочитал. Ну, почти прочитал :)

    В 21 веке, в средней школе (типичной развитой страны) курс информатики все это покрывает с тем же результатом. Дочь в 14 лет в системном блоке как в своей косметичке.

    стать полноценным специалистом можно только обладая всеми навыками.

    Очень вредный посыл.

    Профессионализм и компетенция это прежде всего понимание того что важно, а что нет.

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

    Хороший программист это давно уже не технический стэк, с которым дети уже чуть-ли не рождаются давя кнопки с 2 лет.

    • M_AJ
      /#24470734

      Дочь в 14 лет в системном блоке как в своей кокосметичке.

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

  35. GothicJS
    /#24466552

    Можно освоить HTML, CSS, JS и называть себя сайтоклепателем
    веб-программистом. Но стать настоящим специалистом без всего остального
    будет проблематично. Для дальнейшего роста будет необходима такая база.

    А с чего вы это взяли ?

  36. 1Tiger1
    /#24467062 / +3

    О боже, опять, каждый год одно и то же. И снова в комментариях понты про программистов, кодеров, инженеров, ремесленников и конечно же веб разработку. Про php пошутить забыли. Или не забыли? Программирование сейчас это узкая специализация. Программисты работают с абстракциями, с api, не важно rest это, инструменты фреймворка, или функции микроконтроллера. В работе используется куча инструментов, библиотек, внешних и внутренних сервисов. Исходя из аналоги и выводов статьи для хорошей работы вам надо знать детали их реализаций. Так? Но это невозможно, в сутках тупо нет столько времени, даже если бы они не обновлялись, а они это делают. Вам надо знать их ожидаемое поведение, их api, понимать что делает этот чёрный ящик, как с ним работать, как получить нужный вам результат и если это невозможно как найти другой ящик который вам подойдет. В сам ящик залазить придётся крайне редко, и то если его разработчики накосячили с документацией или кодом. В большинстве случаев вам нужно просто нагуглить уже эту ошибку и обновится, или написать разработчикам если ещё не обнаружили и не исправили. Чем вам поможет среднее знание js (если вы бэкенд например) на проекте со сложным фронтом? По хорошему вас туда даже пускать нельзя, есть api, есть фронтендеры, это их задача. Чем поможет знание ассемблера или C в случае если у вас проблема с тем же mysql? Вы реально полезете его декомпилировать и оптимизировать? Сколько раз вы это делали? Теперь по существу, вот почитает новичек такую статью и начнёт учить все по списку (а этот ещё короткий, я видел намного длиннее) . Потратит год, два, может больше, с нуля это все поднять не просто, учитывая разную логику языков. И захочет устроится, ну например в геймдев. Как вы думаете куда его пошлют с такими навыками? Правильно, учится дальше. На его удивлённый вопрос "так а как это так, у меня же есть База!??" опытный лид который его собеседовал ему ответит: "твоя база это твоё мышление, умение работать с абстракциями, понимание ООП тоже неплохо, хотя и не везде, это то что общее. А все остальное очень зависит от области. ты эту базу нарабатываешь в процессе, вместо всей этой чепухи лучше бы ты игру сделал и в процессе разобрался в том что тебе интересно и в той области где ты планируешь работать. Если тебе будет потом не хватать понимания чего-нибудь, ты изучаешь когда это будет актуально, то что нужно, в нужное время и тогда расширишь свою базу. А сейчас она бесполезна. Нам не нужны (да и тебе тоже) твои знания js и ассемблера. Более того, она вредна, пока ты во всем этом разбирался ты наработал привычки, зависимые от области и языка привычки, которые тут будут мешать, теперь тебя переучивать придется". Ну а теперь традиционный совет: хотите изучить программирование - программируйте. Берите и делайте то что нравится, не книжки читайте а сделайте то что работает, результат а не теория и примерчики с книжки. Но, в процессе, читайте статьи, книги, видео, смотрите как сделать это лучше. Ну а когда наберёт минимальный объем - идите в компанию, и ориентируйтесь не на зарплату или размеры компании, а на команду и проект. На интересном сложном проекте вы будете развиваться быстрее, а хорошая сплоченная команда с хорошими процессами и культурой укажет на ошибки, покажет как лучше и вы будете набирать свой опыт. Не надо учить языки просто ради языков, это бесмысленно, более того это вредно. Язык это только инструмент, ваше мышление, опыт, наработанные схемы решения проблем и умение выходить за них и применять новые - это делает вас программистом, а не языки. Захотите потом поменять язык - поменяете, это не так уж и сложно, это будет меньшая из ваших проблем при смене области, язык это очень небольшая часть знаний и навыков по сравнению со всем необходимым. Ну и раз уж в статье была аналогия, дам другую, поближе к реальности - настоящий писатель должен великолепно разбираться в лингвистике и знать русский, английский, китайский, немецкий, испанский и французский, это база, без неё никуда, и её достаточно чтобы начать писать отличные книги. Такие настоящие писатели пусть сидят на кафедре плохого университета, а хорошие писатели просто берут и начинают писать, в процессе уже набивая руку и повышая мастерство (плохие тоже, их единственное отличие они мастерство не повышают, тупо гонят текст, не анализируя хорошо или плохо, не улучшая, не переписывая и не читая других писателей, не слушая ничьих советов и зацикливаясь на небольшом наборе привычных им сюжетов и приемов ).

    • cepera_ang
      /#24467108 / +4

      База — это разбивать текст на абзацы.

      • 1Tiger1
        /#24467220 / -1

        Тоже верно. А так же хорошее продуманное изложение, желательно краткое но емкое и понятное. Я в курсе что всего этого в моем комментарии нет. Но вам шашечки или ехать? Форма или содержание? Спор или результат? Суть или придраться? Ну вы поняли, по сути комментарии есть?

        • victor_1212
          /#24467438

          > Ну вы поняли, по сути комментарии есть?

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

          ps

          так и хочется сказать bootstrapping :)

        • cepera_ang
          /#24467624 / +1

          Нет, не осилил прочитать. Если вам лень структурировать изложение, значит вы и сам считаете, что мысль неважная, почему я должен в неё вчитываться?

    • GothicJS
      /#24467940 / -1

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

    • M_AJ
      /#24470784

      Программисты работают с абстракциями, с api, не важно rest это, инструменты фреймворка, или функции мимикроконтроллера.

      Проблема в том, что у микроконтроллера обычно очень плохо с api :) И там таки надо понимать детали реализации, так же как вам надо будет их понимать, если вы захотите написать ОС. Это как раз тот уровень где кончается API и начинаются регистры, порты, страницы и адреса, и API тут придётся уже вам самим проектировать.

  37. Dier_Sergio_Great
    /#24467106 / +1

    ☹️☹️ Бред. Поток мыслей неврастеника. Очень похоже на статью: "Послушайте меня о моём горьком опыте, почему я Не стал бизнесменом".
    Такие мысли посещают всех без исключения программистов со стажем более 2х лет.
    Напоминает то как девушка за 30 предпринимает пойти на отчаянный шаг пожертвовать молодостью за богатого маленького миллиардера. Такая девушка думает что только она пришла к такой мысли. Не понимая то что все без исключения за 30 приходят точно к такой же мысли.
    Так и автор материала думает что только он думает об этом, и что как он думают еще 10 человек в России. А если бы он по больше бы общался с людьми, он бы понял, что об этом думают практически все.

  38. Whitech
    /#24467734 / +2

    То что Вы называете "База" в быту называется профильное высшее образование, где Вам дадут эту базу, а уж специализацию Вы потом сами выберете по душе.

    Нынешние же модные курсы "приди в IT за 30 дней" порождают армии весьма странных специалистов, натренированных на решение узких синтетических задач ограниченным числом инструментов.

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

  39. 0UTS1D3R
    /#24467970 / +1

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

    Ну и из разряда "держу в курсе": Моя практика привела к тому что целесообразно сперва что-то начать делать, а потом разбираться в процессе. Я даже слышал что это называется "Модель Колба". Мне помогло очень при разработке игры. Игра простенькая, но я ее хотя бы сделал, а не увяз в изучении теории, что уже радость

  40. GothicJS
    /#24468006

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

    Типичный пример по фронте - пишут на реакте, но толком не зная js. Или в бэке - используют фреймворк, не зная SQL. И реальность такова, что эти люди каким то образом устраиваются на работу, получают зарплату, растут по карьерной лестнице.

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

    То есть существуют две такие крайности, и как они стыкуются между собой в реальности?

    • cepera_ang
      /#24468022

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

      • 1Tiger1
        /#24469118

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

        • cepera_ang
          /#24469358 / +1

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

          • 1Tiger1
            /#24469900 / +1

            Ох, уел так уел, и даже 2 раза с одной подколкой. Простите, а можно нескромный вопрос: вам сколько лет? А то у меня ощущение что я общаюсь с капризный ребёнком которому читать лень, обсуждать по сути беседы влом, зато подколоть и поспорить (с победой конечно же) очень важно для почесывания ЧСВ и повышения социального статуса хотя бы в своих глазах.

    • 1Tiger1
      /#24469230 / +1

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

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

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

      • GothicJS
        /#24469794 / +1

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

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

        Насчет применения чистого SQL - это же вроде популярный холивар: SQL или ORM.
        Я замечаю тенденцию, что за чистый SQL топят, например, прогеры на Go и Node js.

        • yerbabuena
          /#24469844

          Я замечаю тенденцию, что за чистый SQL топят, например, прогеры на Go и Node js.

          Может это потому что у них в экосистеме нет ORM, и все приходится делать как на механике - выжал сцепление, приотпустил, газу поддал, воткнул первую, поехал?

        • 1Tiger1
          /#24469892

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

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

  41. Penguinus2008
    /#24468314

    Довольно странный вообще выбор технологий.

    Допустим, вот у меня научрук был анализу данных - знает SQL, R и немного JS. И ОЧЕНЬ МНОГО МАТАНА. Вот матана там действительно много было. Был ли он плохим специалистом? Да не, он был отличным специалистом, мог за все кишочки пояснить, а т.к. опыта довольно много - он показывал недокументированные штуки, о которых он знал - а вот нагуглить это не представлялось возможным. Назвал бы я его разработчиком? Нет. Но вот к айти он точно относится.

    К чему я это? К тому, что во-первых, АйТи не ограничивается разработкой; во-вторых, чтобы быть крутым в чем-то, внезапно, нужно лезть вглубь, а вот это вот: ассемблер изучи, си изучи, перл изучи, чтобы потом гонять json в базу на спринге - это оставьте для студентов и людей, которым заняться нечем.

  42. likhtarovich
    /#24468462 / -1

    Поставил минус статье за низкий технический уровень материала ( и инвайта бы не давал автору ). За комментарии можно поставить плюс. Как понимаю, автор вместо вопроса с чего начать новичку где-нибудь на stackoverflow или quora, решил попробовать написать статью в духе копирайта.

    Учить язык X, учить язык Y, учить язык Q - не задаваясь вопросами зачем эти языки нужны и какую цель они выполняют - наивность. Короткие скомпилированные вырезки в формате что это язык операционной системы, а это железа - вводят новичков в заблуждение потому что несут мысль - выучи язык и поймешь как это работает. Нарушена причинно-следственная связь.

    Лучше прислушаться к комментаторам, которые рекомендуют пройти обычную бакалаврскую программу по computer science ( или хотя бы ее основы, здесь спасибо за крутейшую ссылку @cepera_ang https://teachyourselfcs.com/ ). И начать с архитектуры компьютера, курса алгоритмов и операционных систем. Тогда будет понятно ЗАЧЕМ и ПОЧЕМУ создавались те или иные языки, а главное КАКУЮ ЗАДАЧУ они решают.

    Из литературы, которая по-настоящему погружает в мир компьютеров и программирования, и с которой, с моей скромной точки зрения, следует начинать обучение: это Computer Systems A Programmer’s Perspective - https://csapp.cs.cmu.edu/
    Насколько понимаю книга не переведена на русский язык, поэтому читаем на языке оригинала. После нее вопросы что такое стек, куча и как выполняется программа будут кристально ясны. Попутно освоите на минимально необходимом уровне язык ассемблера и C, поймете как собираются программы, чем user space от kernel space отличается, что такое сигналы, виртуальная память и далее. Короче, настоящий must have для человека, который хочет стать профессионалом в компьютерном деле.

    Ну а дальше как пойдет. Успехов!



  43. GordonFreemann
    /#24469744 / +2

    IMHO главное отличие трушного програмера - это железный зад, трезвый взгляд и чтобы пёрло, от того что делаешь

  44. Rost381
    /#24469746

    Мой знакомый 30 лет пишет на С/С++, с 1992. Он в гробу видал JS и всякие Хаскелы. Они ему не нужны, он специалист в своей области. При этом его солидная зарплата совсем не зависит от локации, сейчас работает в Австрии. Скажу ему, что он не "настоящий" программист.

    • 0xd34df00d
      /#24469918

      Я, если честно, не представляю, как можно 30 лет писать на C++. Меня на 15 хватило.


      А хаскель — это очень хорошо.

    • justPersonage
      /#24470660

      Мой знакомый 30 лет пишет на С/С++, с 1992

      А какая предметная область? Что он разрабатывает?

  45. SiegKlas
    /#24469748

    С js не согласен, в остальном да. А ещё на английском надо гуглить

  46. SitaBurat
    /#24469750 / +1

    Очередная статья как стать "настоящим" программистом. Выучи кучу языков, которые непойми по какой логике стали БАЗОЙ, и стань сразу кем? Знатоком языков? Дискретная математика, основы микроэлектроники, компиляторы, ядро операционной системы, не не не знание асемблера и С оказывается расскажут как это работает. А хирургу не курс анатомии рассказывает как операции проводить, а скальпель с зажимом. Изучи скальпель и зажим и ты настоящий хирург! Удалите статью не вводите в обман новичков, и не тратьте их время пуская по ложному пути.