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

Меняется ли от этого суть работы? Мы в 1cloud попробовали разобраться в том, какую работу подразумевают такие специализации как «Programmer», «Software Engineer» и «Computer Scientist».


/ фото hackNY.org CC

Терминология


Изучение сути вопроса логично начать с понимания терминов. Самым понятным является «Programmer», который в Оксфордском словаре определяется как человек, ответственный за написание программы. И с переводом все просто: программист – он и в Африке программист. И даже в России. Сложности начинаются дальше.

«Software Engineer» (SE) (согласно статье в webopedia) — это дипломированный профессиональный инженер, имеющий достаточно знаний и навыков для применения инженерных дисциплин при создании программного обеспечения. Главное отличие — SE занимается разработкой, руководством проектов, а программист их реализует путем написания кода. На русский название должности переводится как «инженер-программист» или просто «программист».

Теперь разберемся с тем, кто такой «Computer Scientist» (CS). Если верить словарю, то речь идет о работе в области теории вычислений и проектирования компьютеров. Разные словари дают разный перевод на русский: «учёный, работающий в области теории вычислительных машин и систем (в области ВТ, в области компьютерных наук)» или «программист».

Итого, имеем три очень разных определения в английском и три «программиста» в русском.

Как сами программисты понимают эту разницу


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

Для обеспечения полноценной разработки ПО/кода программист должен быть сконцентрирован на своей работе и обеспечить последующее использование и интеграцию программных компонентов друг с другом. Энтони Щерба (Anthony Scherba), президент и основатель студии разработки Yeti, сравнивает этот процесс с решением сложной алгебраической задачи.

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

Необязательные компетенции: математический анализ, коммуникативные навыки и умение работать в команде — подробнее в блоге Алана Скоркина (Alan Skorkin).

Работа «Software Engineer» подразумевает комплексный подход и иногда ее можно сравнить даже с процессом создания произведения искусства, которое программист старается постоянно усовершенствовать. Так считает и Дэниел Каплан (Daniel Kaplan), опытный программист и сотрудник Pivotal Labs.

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

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

«Computer Scientist» — математик и технический специалист в равной степени. Он обладает математическими знаниями и объясняет, как и почему работает тот или иной инструмент, решение или алгоритм. Его работа имеет большое значение для развития программирования в целом. Также CS свойственна специализация в одной или нескольких сферах — ИИ, нейронные сети, теория языков программирования, базы данных.

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

Какую разницу видят учебные заведения и работодатели


Начнем опять с «программиста». Еще одно его важное отличие от всех остальных: как правило, отучившись в профильном ВУЗе, вчерашний студент становится не просто «программистом», а «инженером/бакалавром/магистром по специальности/направлению…».

Для западной образовательной системы это тоже характерно — взгляните, к примеру, на разнообразие специальностей в направлении «Software Development and Programming» Сиднейского Технологического Университета. Ни одна из них не содержит в своем названии слова «programmer» или «programming».

Нет, конечно, многие университеты предлагают курсы по программированию (даже бесплатные), но редко когда в дипломе написано просто «программист». А что хотят видеть работодатели?

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

Требования на российском рынке отличаются не сильно и включают разработку проектов, работу в команде, понимание принципов информационной безопасности (и всё те же навыки, отмеченные в абзаце выше). Таким образом, работодатели хотят видеть в программисте универсального (и творчески мыслящего) специалиста, а не просто человека, который пишет и тестирует код на определенном языке, решая кем-то поставленную задачу. Получается, что работодатель (как на Западе, так и у нас) под «программистом» очень часто понимает то, что словари обозначают как минимум как «Software Engineer».

Образовательные программы по профилю «Software Engineering» подразумевают, подход к разработке ПО с научной и инженерной точки зрения, разработку собственных проектов, аналитическую и управленческую деятельность. Помните, в предыдущем разделе эксперты говорили, что SE должен уметь реагировать на изменяющиеся требования? На магистерской программе помимо этого объясняют, как укладываться в бюджет и сроки.

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

Что касается точки зрения работодателей, то по их мнению в обязанности инженера-программиста входит написание кода, проверка технической реализации UI/UX, оптимизация работы приложений, разработка внутренней методологии и стандартов, контроль и управление требованиями. Кроме того, соискатель должен обладать лидерскими качествами. Технические требования не сильно отличаются от требований к «обычным» программистам: их примеры можно посмотреть тут: 1, 2 и 3.

Университетские программы по направлению «Computer Science» включают больше математических предметов, изучение теории алгоритмов, а также такие темы как машинное обучение, нейронные сети и облачные вычисления. Студенты изучают больше теории, но должны успешно применять на практике полученные математические знания, выявлять, формулировать и решать инженерные проблемы. Таким образом, у этого типа специалистов формируется наибольшая «широта взглядов» — в теории он может работать и программистом, и SE, и непосредственно по специальности.

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

Идеальный соискатель на должность «Computer Scientist» должен обладать знаниями по теоретической информатике, теории алгоритмов, проектированию баз данных, компьютерному моделированию, при необходимости выполнять задачи аналитика и проводить исследования, знать весь процесс от проектирования до внедрения ПО… Список можно продолжать долго (подробнее читайте тут и тут).

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

Что в итоге


Да, действительно программисты, SE и CS — специальности близкие, но не одинаковые, и готовят таких профессионалов на разных университетских специальностях. Наибольшую путаницу в трактовке терминов вносят работодатели – для них, например, разница между «программистом» и Software Engineer может быть совершенно не очевидна.

Судя по требованиям работодателей, от «просто программиста» ждут творческого подхода, универсальных знаний и soft skills, а «computer scientist» может решать важные, но при этом сугубо прикладные, узконаправленные задачи — говорить о том, что одна специальность «по умолчанию» лучше или «сильнее» другой тут не приходится.

О чем еще мы пишем в блоге 1cloud на Хабре:

Поделиться с друзьями
-->

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


  1. VolCh
    14.11.2016 16:36

    Если не ошибаюсь, то по официальным классификаторам в России программист — выпускник техникума/колледжа, то есть это среднее профессиональное образование, а не высшее.


    1. xRay
      14.11.2016 16:54

      В классификаторе профессий вроде бы не программист, а инженер-программист и он выпускник ВУЗа с высшим образованием.


      1. ainu
        14.11.2016 17:04
        +2

        Есть среднее профессиональное — «техник-программист».


      1. belurd
        14.11.2016 17:30

        К примеру, в Беларуси лет 10 назад было «Программист ППО» (прикладное программное обеспечение), среднее профессиональное тоже.


      1. VolCh
        15.11.2016 12:15

        В классификаторе есть:
        инженер-программист
        программист
        техник-программист


    1. LifeKILLED
      14.11.2016 19:48

      Программист — это рабочая должность. Образования вообще может не быть.


      1. VolCh
        15.11.2016 12:11

        Служащий, а не рабочий.


        1. MacIn
          16.11.2016 20:59

          Как проходит разграничение?


          1. VolCh
            17.11.2016 16:00

            Формально по классификатору смотрите. Общее впечатление принципов его составления — физический труд (пускай и механизированный и даже автоматизированный, типа станков с ЧПУ) и интеллектуальный.


            1. MacIn
              17.11.2016 23:07

              Странно. «Служащий» — старое понятие, подразумевающее госслужбу, кмк.


  1. TekhnoLife
    14.11.2016 16:38

    System Administrator в России часто, как ни странно, тоже «программист».


    1. LifeKILLED
      14.11.2016 19:44
      +1

      А ещё программистами называются всяческие инженеры по базам данных, ещё они называют системные блоки «процессорами» и работают с досовскими прогами.


  1. ainu
    14.11.2016 17:02

    Давайте опрос сделайте, что уж там. С тремя вариантами.


  1. stokker
    14.11.2016 17:16

    Т.е. работодатели, в основном IT-конторы, не разбираются в этой градации? Что-то не верится…


  1. mendler
    14.11.2016 17:57

    Мне больше симпатизирует градация Junior, Middle, Senior, Team Lead / Tech Lead и т.д.
    Programmer тогда интерпретируется как Junior, а вот Software Engineer, как я понимаю, это что-то среднее между Senior и Team Lead?


    1. MacIn
      14.11.2016 20:36
      +8

      При какой температуре кипит прямой угол?


  1. Andoran
    14.11.2016 18:19

    Какие курсы вы бы могли порекомендовать для человека, который перешел из совсем другой сферы? Меня интересует гейм-дев, мобильные приложения и для PC. Какие-нибудь толковые видео-курсы есть на русском или на английском? Начинал слушать на EdX курс по алгоритмам проводимый индусами, мозг просто ломался от их произношения…


    1. norlin
      14.11.2016 19:05

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


      1. LifeKILLED
        14.11.2016 19:33

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


        1. norlin
          14.11.2016 20:18

          Ну, да, в плане подходов к программированию, всякие ООП и т.д. оно более-менее общее.


    1. herr_kaizer
      14.11.2016 19:31
      +1

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

      Товарищу norlin — то же самое, книг по геймдеву — целые тучи. И алгоритмы, и математика, и структурирование кода, и вполне конкретные вещи типа обработки коллизий, например.


      1. norlin
        14.11.2016 20:22
        -1

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


        А видеоуроки крайне полезны в случае работы с визуальными средами, Unreal Engine, например или какой-нибудь Unity. И они очень удобны для понимания каких-то отдельных аспектов.


    1. LifeKILLED
      14.11.2016 19:40

      По поводу видеоуроков… Ну, они делятся на два типа: в духе лекций «главное, верить, и у тебя всё получится» или туториалы по совсем уж простым вещам.

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

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

      Потом уже, когда появится уверенность, можно делать самописные двиги или осваивать движки по-серьёзнее.


      1. norlin
        14.11.2016 20:25

        Возможно, я не прав, но Unreal Engine выглядит сильно более просто для начала освоения за счёт блюпринтов + сам по себе движок более мощный по максимальным возможностям.


    1. Fedcomp
      14.11.2016 20:03

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


      1. norlin
        14.11.2016 20:26

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


  1. iperov
    15.11.2016 09:20
    +1

    Главное отличие — SE занимается разработкой, руководством проектов, а программист их реализует путем написания кода


    есть пример где в России программист ТУПО реализует путем _написания_ кода?


  1. charypopper
    15.11.2016 09:56

    Тактик, стратег и учёный.


    1. ya-est
      15.11.2016 12:04

      солдат, снайпер, медик


  1. perfect_genius
    15.11.2016 11:59

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


    1. Eldhenn
      15.11.2016 14:19
      +3

      Про это будущее я читал ещё в десятом классе. С тех пор прошло больше двадцати лет — а будущее без программирования всё так же близко…


      1. perfect_genius
        15.11.2016 19:24
        -3

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


        1. michael_vostrikov
          15.11.2016 20:05

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


          1. perfect_genius
            15.11.2016 20:47

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


            1. perfect_genius
              15.11.2016 21:26

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


              1. michael_vostrikov
                16.11.2016 05:50

                Дополню, что да — это визуальное «программирование»

                Как думаете, сколько нужно переключателей, чтобы сделать интерфейс главной Хабра?) Не говоря уже про функциональность.


                1. perfect_genius
                  16.11.2016 19:08

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


                  1. herr_kaizer
                    16.11.2016 19:13
                    +2

                    По-моему вы вообще ничего не понимаете в том, о чем говорите.


                  1. mendler
                    16.11.2016 19:54
                    +2

                    Теперь мне становится ясно, как мыслят те, кто говорит: «да это делается 15 минут, чем ты занимаешься целый день?»


                  1. michael_vostrikov
                    16.11.2016 20:10

                    Не знаю, про какие переключатели вы говорите
                    Оформление рисуем курсором или пальцем.

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


                    1. perfect_genius
                      16.11.2016 22:54

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

                      подсветку текущего раздела в зависимости от URL с учетом пагинации и выборку статей из БД
                      Я не разбираюсь в такие вещах (даже не знал о таком слове), но попробую:
                      Допустим, что БД — это папка, в которой 30 пронумерованных текстовых файлов, в каждом в тексте встречается habracut. Человек хочет получить три страницы по десять текстовых блоков до хабраката и пагинацию снизу.
                      Перетягивает первый файл в окно программы, видит его текст, удаляет часть, чтобы остался текст до хабраката. Перетаскивает второй файл, делает всё то же самое, ставит текст выше первого текста. Нейросеть выявляет шаблоны — повторная загрузка с той же папки, нарастание цифры/названия, удаление с хабракатом, установка текста выше предыдущего. Предлагает применить шаблон на остальные 28 файлов по порядку. Человек выбирает 8. Теперь есть страница из 10 текстовых блоков. Человек рисует внизу кнопку с цифрой 1, потом с 2. Программа выявляет шаблон и предлагает нарисовать за человека кнопку с 3. Человек соглашается, потом отказывается от кнопки с 4. Кнопку с 1 закрашивает и учит закрашивать другие кнопки при нажатии на них и «открашивать» предыдущую нажатую. Также удаляет все текстовые блоки, если нажата не 1. Нажимает 2, тексты пропадают, начинает перетаскивать файл 11. Программа предлагает применить предыдущий шаблон для загрузки этого типа файлов с этой папки с нарастающими именами на следующие 10 как в прошлый раз. Человек соглашается, потом нажимает кнопку 1 и тексты первой и второй страницы наслаиваются друг на друга. Теперь учим скрывать тексты второй страницы при нажатии кнопок первой и третьей. Программа выявит шаблон и при нажатии цифры 3 предложит загрузить файлы с 21 по 30.

                      Похоже, это примерно как объяснять на пальцах глухонемому =)


                      1. michael_vostrikov
                        17.11.2016 07:20

                        Угу, только БД это не папка, и все остальное не имеет смысла. Но даже в случае с папкой:
                        — как фильтровать статьи по разделам «все подряд / по подписке» (причем содержимое раздела «по подписке» у каждого пользователя разное)?
                        — как задать, что текущий раздел не должен подсвечиваться при наведении?
                        — как отображать всплывающие окна (и как их вообще нарисовать, чтобы программа не путала их с основным интерфейсом)?
                        — как отображать новые статьи, мы ведь их не перетаскивали при обучении?
                        ну и т.д.
                        Вопросы риторические, просто задумайтесь.

                        Не говоря уже о том, что на самом деле все происходит гораздо проще — берем номер страницы из URL, пропускаем (N-1)*10 статей, берем 10, рисуем активную страницу другим цветом. Как именно берем и рисуем — тут уже появляются SQL, HTML, и другие аббревиатуры, которые ваша нейросеть должна знать и уметь применять.


                        1. perfect_genius
                          17.11.2016 14:46

                          БД это не папка, и все остальное не имеет смысла.
                          Наверно, БД может быть большим терабайтным образом-файлом не в текстовом виде и зашифрованным. Значит человеку надо сделать «прослойку-дешифратор» между БД и программой, и вот смысл мною написанного остаётся.
                          — как фильтровать статьи по разделам «все подряд / по подписке» (причем содержимое раздела «по подписке» у каждого пользователя разное)?
                          В текстовых файлах остались тэги, их и переносим. Если ОС, то она увидит шаблон, что человек соответственно переносит тэги к тем же загруженным текстам в программе.
                          Если не ОС, а программа, то придётся снова загружать первые два текстфайла и уже удалять всё, кроме тэгов. Программа предложить загрузить остальные и оставить тэги в том же месте у текстовых блоков, как у первых двух.
                          Человек собирает список нужных тэгов (например на отдельной странице, открываемой по кнопке «По подписке») и удаляет все текстовые блоки, в которых этих тэгов нет. Если программу учили загружать новые текстфайлы по мере появление на странице 4, то для проверки нарочно загружаем 31ый текстфайл с ненужными тэгами. Программа загрузит — удаляем текстблок или отменяем действие. Вот уже повтор, связь, шаблон, корреляция.
                          Если надо переключаться между разделами, то стандартно уже делаем две кнопки сверху и учим удалять ненужные текстблоки при нажатии «По подписке». Хочу отметить, что у программы есть слой для невидимых элементов. Список тэгов можно собирать в него и программа будет держать их только в памяти.
                          — как задать, что текущий раздел не должен подсвечиваться при наведении?
                          Да банально как с кнопкой — при наведении он подсветится, а человек обратно перекрасит. Переключаемся в другой раздел и повторяем — вот и шаблон, программа спросит применить ли это ко всем остальным кнопкам в ряду.
                          — как отображать всплывающие окна (и как их вообще нарисовать, чтобы программа не путала их с основным интерфейсом)?
                          Наверно имеются в виду окошки при наведении на ник хабраюзера? Всё рисуемое — отдельный объект, вот почему программа «жирная» вначале. Есть чёрный квадратик, пририсовываем от него чёрную линию — это всё равно два разных объекта. Если мы хотели один сплошной объект, то придётся подвигать их вместе — двумя пальцами на каждой или переместив и собрав оба в конечной точке в тех же положениях. Программа выявит повторяющиеся координаты элементов и предложит соединить. Стоит отметить, что это для обычных людей, для продвинутых есть ПРО-режим, в котором, как в векторном редакторе, можно удалить соприкасающиеся границы.
                          — как отображать новые статьи, мы ведь их не перетаскивали при обучении?
                          А вот это меня озадачило надолго =).
                          В папке появляется файл 31 (переносится или создаётся), человек переносит в окно программы. Создаётся текст 32. Если ОС, то она заметит, что уже два раза человек перенёс файл, отмеченный ею как новый. Передаст это программе, та предложит грузить только новые для неё (информация об уже загруженных файлах доступна и для ОС). Если не ОС, а программа, то при переносе файла сохраняет и список файлов исходной папки. При новом переносе сравнивает. Отмечает, что человек переносит только новый файл. Т.е. ОС за всем следит и всё знает, а вот программа вынуждена сама собирать информацию об окружении.
                          все происходит гораздо проще — берем номер страницы из URL, пропускаем (N-1)*10 статей, берем 10, рисуем активную страницу другим цветом. Как именно берем и рисуем — тут уже появляются SQL, HTML, и другие аббревиатуры, которые ваша нейросеть должна знать и уметь применять.
                          Это уже дело сети и компилятора, от человека-непрограммиста всё это скрыто.

                          Первая и единственная пока сложная задача — генератор псевдослучайностей. Как объяснить нейросети, обученной выискивать шаблоны, что в этом случае шаблона нет? =)
                          Примерно куда копать уже знаю, что истинной случайности нет, а так же нужны диапазоны.


                          1. michael_vostrikov
                            17.11.2016 16:28

                            Ну если вы хотите, давайте продолжим.


                            Значит человеку надо сделать «прослойку-дешифратор» между БД и программой, и вот смысл мною написанного остаётся.

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


                            В текстовых файлах остались тэги, их и переносим.

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


                            Программа загрузит — удаляем текстблок или отменяем действие.

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


                            Да банально как с кнопкой — при наведении он подсветится, а человек обратно перекрасит.

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


                            Программа выявит повторяющиеся координаты элементов и предложит соединить.

                            Ну круто, мы их соединили, открываем страницу, окно отображается сразу без всякого наведения. Мы же прямо поверх основного интерфейса рисовали. Привет, работа со слоями как в Photoshop.


                            Если ОС, то она заметит, что уже два раза человек перенёс файл, отмеченный ею как новый.

                            Я создал 10 файлов с интервалом в 1 час. Как определить, какие из них новые, какие старые? Когда новый файл становится старым?


                            Это уже дело сети и компилятора, от человека-непрограммиста всё это скрыто.

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


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


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


                            1. perfect_genius
                              17.11.2016 18:37

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

                              Если файл текстовый, как определить, что это именно тег, а не слово из статьи? Привет, специальные форматы и их обработка.
                              Даже если тэги не окружены в спецсимволы, а просто идут подряд через запятую в конце текста — это уже шаблон, такая строка сильно отличается от текста выше.
                              Кстати, как вы собираетесь хранить эту информацию для каждого пользователя?
                              Не понял, какую информацию? О том, как обрабатывать тэги? Писал выше, p2p. Или «как в программе хранить для каждого пользователя этой программы свои тэги». Проясните.
                              Как она должна угадать, что дело именно в тегах, а не содержимом статьи?
                              Вначале идут простые проверки и предлагаются простые варианты. Из текста быстро выявит шаблоны, что отрезки начинаются с заглавной буквы, могут иметь знаки препинания и заканчиваются точкой. А в конце текста есть строка со словами, выбивающаяся — начинается с маленькой, запятая через каждое слово. Эту часть проще проверить с такими же частями других текстов, так и выявится разница. Только потом идут сложные проверки. Не исключаю, что может ошибаться вначале.
                              как вы собираетесь ее учить искать все статьи с определенным текстом? И с пагинацией, да.
                              Вводим этот определённый текст и начинаем удалять те текстблоки, в которых их нет. Про 10 текстблоков на страницу программа уже знает, наверно придётся учить удалять лишние кнопки 2 и 3.
                              как определить, что текущий раздел сейчас такой-то? И что дело именно в текущем разделе, а не в том, залогинен пользователь или нет.
                              Это слишком сложно для меня, визуала =) Не могу уловить ход ваших мыслей. Зачем определять раздел? Какое «дело»? Причём вообще логин? %) Если он не залогинен — что меняется? Вы про «Интересные»? Про то, что Интересные до логина — не по интересами человека? Я не знаю, как выбираются Интересные — по рейтингу?
                              Вот мы выбрали цвет, навели мышку на кнопку, нажали мышкой, закрасили. Как различить ситуации «должна закрашиваться при наведении» и «должна всегда быть таким цветом»? Мышка-то в обеих ситуациях над кнопкой. И вдогонку — как сделать, чтобы кнопка закрашивалась только при нажатии на нее мышкой?
                              Закрашивание есть только в режиме создания/редактирования, в нём не запоминаются последовательности для программы. Чтобы кнопка закрашивалась при нажатии надо навести курсор к кнопке в обычном режиме, нажать на неё и не отпуская переключиться в режим редактирования. Тем самым остаётся «застывшая» информация о нажатии. Теперь закрашиваем кнопку. Можно повторить для другой кнопки.
                              Ну круто, мы их соединили, открываем страницу, окно отображается сразу без всякого наведения.
                              Наверно, дело в неописанной мной паузе — режиме редактирования. Наводим курсор на ник, переходим в режим редактирования/паузы, рисуем что надо, выходим в обычный вид программы, отодвигаем курсор, снова заходим в режим и удаляем окно. Теперь окошко появляется только при наведении.
                              Я создал 10 файлов с интервалом в 1 час. Как определить, какие из них новые, какие старые? Когда новый файл становится старым?
                              ОС отметит для себя, что последний — новый, но для программы, грузившей до этого 30 файлов, эти 10 будут новыми, нет? Программа хранит же список файлов папки и сверяется.

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


                              1. michael_vostrikov
                                17.11.2016 20:01

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

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


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

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


                                Не понял, какую информацию? О том, как обрабатывать тэги?

                                Какой пользователь на какие разделы подписан. Кстати, теги и разделы это не одно и то же.


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

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


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

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


                                Зачем определять раздел? Какое «дело»? Причём вообще логин?

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


                                отодвигаем курсор, снова заходим в режим и удаляем окно

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


                                Программа хранит же список файлов папки и сверяется.

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


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

                                Зачем неровно. Банально нарисовать два прямоугольника одинаковой ширины. Группировка линий, размещение блоков — это приемы работы в векторном редакторе. А уж растягивание блоков при разворачивании окна, это ближе к знанию верстки.


                                Пунктов не предлагает, только уточнение.

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


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


                                1. perfect_genius
                                  17.11.2016 20:36

                                  Таким образом мы можем составить ТЗ на главную Хабра прямо тут =)
                                  Но без картинок и текстом сложно тут объяснять, статью написать запланировано на будущее. К тому же я уже слишком много раскрыл, извиняйте.
                                  Да, я всё спихивают на нейросеть, но пытаюсь донести, что она относительно простая, она реагирует на повторяющиеся действия/события.
                                  Про заговор и уж те более про замедлении технического прогресса ваши выдумки, я писал что невыгодно автоматизаторам автоматизировать собственную профессию.
                                  Спасибо за критику. Вы будете первым, кому я изложил свои наработки. Надеюсь, это обсуждение войдёт в историю, готовьтесь =)


                            1. perfect_genius
                              17.11.2016 18:45

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


            1. michael_vostrikov
              16.11.2016 05:48
              +2

              Представьте, что человек «объясняет» компьютеру особым образом что хочет

              Это как бы и есть программа. Неважно, пишете ли вы ее на ассемблере или на формализованной версии русского языка. Чем меньше формализован язык, тем больше неоднозначностей в трактовках. Чем подробнее вы объясняете «особым образом» все неоднозначности, тем ближе у вас описание задачи к ТЗ (которое якобы «не понадобится создавать»), и затем к программе.
              Пока компьютер не научится понимать смысл, вы будете закладывать в него этот смысл сами. А когда научится и будет сам задавать вопросы, это уже будет ИИ, но это будет аналог живого специалиста.


              1. perfect_genius
                16.11.2016 19:36

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


                1. michael_vostrikov
                  16.11.2016 19:49

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

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


                  1. perfect_genius
                    16.11.2016 20:08

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

                    Может кто-то где-то уже изучал такое?


                    1. michael_vostrikov
                      16.11.2016 20:17

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


                      1. perfect_genius
                        16.11.2016 20:31

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


                        1. herr_kaizer
                          17.11.2016 17:46

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


            1. mendler
              16.11.2016 09:23

              так появился битрикс…


            1. MacIn
              16.11.2016 21:01
              +1

              Представьте, что человек «объясняет» компьютеру особым образом что хочет, и ПК тут же создаёт минимально жизнеспособную программу

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


              1. perfect_genius
                16.11.2016 21:59

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


                1. MacIn
                  16.11.2016 23:02

                  Человек рисует на экране

                  Это и есть программирование в данном случае. Есть уже лет 30 как графический язык программирования, военные использовали при разработке софта под МиГ и емнип.

                  а нейросеть по ходу пытается понять.

                  Если она настолько разумна, что может понять требования человека (т.е. составить условное ТЗ и перевести его в код), то она пройдет тест Тьюринга и тогда человек вообще не нужен. Как потребитель в том числе.


                  1. perfect_genius
                    17.11.2016 07:25

                    Вот гляньте выше написал насколько она «разумна»: https://habrahabr.ru/company/1cloud/blog/315230/#comment_9914148
                    Она лишь ищет шаблоны.


        1. bravo-ej
          16.11.2016 01:57

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


          1. perfect_genius
            16.11.2016 19:37

            Конструкторы мёртвые, не взаимодействуют с человеком.


    1. herr_kaizer
      16.11.2016 08:27

      Я вот сейчас читаю десятистраничное руководство по подключению модуля к проекту на ASP и считаю эту вашу идею утопией.


    1. Free_ze
      16.11.2016 10:08

      Практически так сейчас и работает массовый веб.

      А ваша фантазия про «оптимизации» далека от реальности потому, что заведомо плохой алгоритм скорее всего проще просто выбросить, частями или полностью, чем пытаться его допилить. Тогда какой смысл? Проведя аналогии с тем же вебом: сейчас есть CMS, которые могут выполнять некоторые общие задачи и в некоторых рамках кастомизируются. Но если проект нестандартный, то изначально CMS рассматривать не будут, т.к. переделка может встать дороже специального проекта.


  1. exfizik
    15.11.2016 23:52

    Есть еще Software Developer.


    1. VolCh
      17.11.2016 16:03

      На днях попалась на глаза статья про разницу между Software Developer и Software Engineer в США. Объективная разница — в США зарплата инженеров на 13 000$ в год больше. В Калифорнии — на 22 000$.


      1. exfizik
        17.11.2016 18:44

        Было бы интересно глянуть.
        А мне вот еще понравилось.