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

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

При работе над кейсом проекта Designet я поймал себя на том, что считаю термины «фронтенд», «клиентская сторона» и «интерфейс» синонимами. Чтобы расставить все точки над i и больше их не путать, я написал эту памятку. Надеюсь, что она поможет не только мне, но и коллегам — редакторам, копирайтерам, техническим журналистам, маркетологам, менеджерам проектов и всем, кто не имеет прямого отношения к программированию.



Интерфейс


Всё, что помогает человеку управлять инструментом, будь то программа, компьютер, бытовой прибор или панель заводского станка — это интерфейс. Элементами интерфейса являются меню, кнопки, клавиатура, мышь, монитор, переключатели, тумблеры, тулбары, поля для набора текста, экраны с ошибками и прочие способы взаимодействия и ввода/вывода информации. Применительно к интерфейсу программ и приложений в английском языке встречается словосочетание user interface (UI).

Интерфейс — это всё, что вы видите и что можете потрогать.

Интерфейс может быть удобным и неудобным. Критерием удобного интерфейса по сегодняшним меркам считается короткая череда действий, которая не бесит, не смущает, не выматывает и в итоге даёт желаемое. Сумма ощущений от пользования интерфейсом называется опытом взаимодействия, пользовательским опытом или user experience (UX). Он тоже может быть плохим или хорошим.



Интерфейс поисковой страницы Google — пример интерфейса с UX уровня «дзен».

Файловый менеджер FileMatrix — пример ужасного интерфейса из обсуждения на Stack Overflow. Не лезь, он тебя сожрёт.

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

Фронтенд


Если интерфейс — это прослойка между пользователем и кодом, запускающая последний в работу, то фронтенд — это тот самый код и есть. Возьмём, например, какую-нибудь страницу «Википедии». Чтобы открыть её, мы даём команду браузеру: «А покажи». Браузер запрашивает у внешнего сервера строительный материал страницы — код. Этот код исполняется на странице и рисует то, что вы попросили у браузера.

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

Фронтенд складывается из взаимодействия трёх технологий:

  • HTML (HyperTextMarkupLanguage). Язык разметки документа, понятный браузерам за счёт дескрипторов, или тегов. HTML указывает, какие элементы есть на странице, задаёт их порядок в документе и вложенность одного в другой;
  • CSS (Cascading Style Sheets, или каскадные таблицы стилей). Придаёт HTML особый вид, облагораживает его: подчёркивает и меняет цвет ссылок, задаёт размеры заголовков или шрифты и т.п.;
  • JavaScript. Язык программирования, имеющий доступ к элементам страницы и браузера, оперирующий данным в HTML и CSS и служащий для них подобием волшебного пенделя, потому что сами по себе HTML и CSS ничего не делают. С помощью JavaScript, например, в браузере работает анимация и всякие интерактивные штуки. Есть во всех браузерах за исключением Opera Mini, где он ограничен производителем для упрощения работы.




Одно нажатие F12, и страница показывает всё, что под ней спрятано.

Клиентская сторона


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



Этих клиентов уже никто не обслужит.

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

Закрепление


Клиент — это устройство для оперирования удалёнными данными.
Интерфейс — это набор элементов для управления программой или устройством
Фронтенд — это код, принятый клиентом, запущенный на нём и ставший интерфейсом, или веб-разработка на клиентской стороне как таковая.

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

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

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


  1. riot26
    28.02.2017 17:20
    +2

    Что дальше? Расскажете чем процессор отличается от системного блока?


    1. octob3rmut3
      28.02.2017 17:24
      -2

      Как и в данном случае, это будет зависеть от внутренней потребности.


      1. riot26
        28.02.2017 17:25

        Чей внутренней потребности? Зачем рассказывать об этом хабру?


        1. octob3rmut3
          28.02.2017 17:29

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


          1. riot26
            28.02.2017 17:37

            Такая обширная, когда всё можно было сократить только к пункту «закрепление» – нигде. Сокращённо подошло бы для какого-то вконтактовского паблика для начинающих, наверное. Но на хабре писать о том, что такое HTML и CSS – как минимум странно.


            1. octob3rmut3
              28.02.2017 18:56

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


          1. sleeply4cat
            28.02.2017 17:59
            +3

            Больше всего похоже на основательно пропущенный через копирайтера школьный учебник по информатике.


        1. eggstream
          06.03.2017 08:58

          потому что есть разрабы, на полном серьезе причисляющие ко фронтэнду серверный код, который отдает пользователю эти самые html, css и js


          1. Free_ze
            06.03.2017 09:33

            Вы считаете это бэкендом?


            1. eggstream
              06.03.2017 16:21

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


              1. VolCh
                06.03.2017 17:18

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


                1. eggstream
                  06.03.2017 18:00

                  то есть, человек, пишущий код для такого сервера, например на PHP будет front-end developer?


                  1. Free_ze
                    06.03.2017 18:16

                    del


                  1. VolCh
                    06.03.2017 18:27

                    Классические PHP-приложения объединяют в одном "инстансе" фронтенд- и бэкенд-серверы, в рамках одного процесса выполняя и бизнес-запрос (грубо — обращение к базе), и рендеринг HTML. Современные же, aka "(микро)сервисы", не рендерят HTML, отдавая либо непосредственно клиенту, либо фронтенд-серверу только данные, например в JSON/XML, обрабатывая только бизнес-запрос.


                    1. eggstream
                      06.03.2017 18:39

                      еще более сузим вопрос.
                      человек, который пишет ту часть кода, которая отвечает за получение данных с app-сервера а не html (twig,jinja etc) — тоже front-end developer?
                      и да, вам не показалось, я действительно хочу довести ситуацию до абсурда, когда белое будет названо черным


                      1. VolCh
                        06.03.2017 18:51

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


              1. Free_ze
                06.03.2017 17:56

                Я бы предпочел не заострять внимание на технической стороне, ибо реализовать можно что угодно и как угодно (да еще и спрятать это таинство от разработчика, как ASP.NET Web Forms, а жесткие определения здесь невозможны без кучи уточнений.

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


  1. saw_tooth
    28.02.2017 17:21

    Фронтенд — это код, принятый клиентом, запущенный на нём и ставший интерфейсом

    А чтобы враг молча отдал оружие, уточните, что отдельно взятая страница — уже интерфейс, а внутри неё работает фронтенд

    Определитесь что ли.


    1. octob3rmut3
      28.02.2017 19:42

      Давайте вместе. Что вас смущает?


  1. Alex_T666
    28.02.2017 17:54
    +2

    А что такое «Бэкенд»?


    1. Free_ze
      28.02.2017 20:11
      +2

      Его не существует, это выдумки невежд!


  1. Free_ze
    28.02.2017 20:23

    А если учесть, что «клиентская сторона» — это перевод термина «фронтенд»?


    1. octob3rmut3
      28.02.2017 20:35

      Термин «клиентская сторона» больше похож на перевод client side.


      1. VolCh
        28.02.2017 23:31

        Причём чаще употребляется «сторона клиента»


      1. Free_ze
        28.02.2017 23:39

        Очевидно, что это одно и то же) client side противопоставляется server side, frontend — backend.


  1. vintage
    28.02.2017 21:18
    +1

    А что такое "фронтенд сервер"?


    1. VolCh
      28.02.2017 23:32

      Сервер для передачи фронтенда на сторону клиента.


      1. vintage
        28.02.2017 23:34

        А бэкенд сервер — для передачи бэкенда?


        1. VolCh
          01.03.2017 07:27

          Для отдачи и обработки данных.


      1. Free_ze
        28.02.2017 23:39

        Только фронтенд? Данные он не передает?


        1. VolCh
          01.03.2017 07:26

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


          1. Free_ze
            01.03.2017 08:47

            А зачем это нужно в реальной жизни?)


            1. VolCh
              01.03.2017 11:02

              Разделять фронтенд и бэкенд. Обычный уже пример — nginx, отдающий статику и проксирующий вызовы api к json/xml бэкенду, может по http, может по, например, fastcgi или wsgi. То есть фронтенд сервер ничего не знает про данные, а бэкенд сервер ничего не знает про фронтенд, про html и css. Практическая польза — раздельное масштабирование, строгое разделение команды на фронтендеров и бэкендеров — как минимум нет споров о том, кто должен натягивать верстку на шаблонизатор бэкенд- движка :), возможность простого подключения клиентов, которые тоже ничего не знают о html/css, например нативные мобильные приложенияю


              1. Free_ze
                01.03.2017 11:17

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


                1. VolCh
                  01.03.2017 11:30

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


                  1. Free_ze
                    01.03.2017 12:00

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


                    1. VolCh
                      01.03.2017 12:35

                      То есть будут запросы к бэкенду на любой чих

                      Да, если не держать локальный кеш, не зависящий от HTTP заголовков.


                      Проксирование данных на «фронтовов бэкенде» — это сложное решение

                      Не понял, где проксирование?


                      1. Free_ze
                        01.03.2017 12:50

                        Не понял, где проксирование?

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


                        1. VolCh
                          01.03.2017 13:34

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


                        1. vintage
                          01.03.2017 14:35

                          фронтенд-бэкенде

                          Всё чудесатее и чудесатее.


                          1. Free_ze
                            01.03.2017 17:22

                            Сам в шоке)


                            1. vintage
                              02.03.2017 18:16

                              Опять сарказм не поняли..


                              /````````Фронтенд````````Клиент <=> Фронтенд-сервер <=> Бэкенд-сервер
                                         \_____________Сервер____________/


                              1. Free_ze
                                02.03.2017 18:24

                                В каждой шутке есть доля шутки. В принципе, если под «Сервер» понимать единое приложение, то SPA так и работает. Но деплой, да и вообще поддержка одного приложения — это недостаточно весело, правда?)


                                1. VolCh
                                  02.03.2017 19:32

                                  Очень часто "Сервер" не единое приложение, а, минимум три: веб-сервер со статикой ("фронтенд-сервер"), апп-сервер и СУБД. И нормально деплоится


  1. haiflive
    01.03.2017 06:38

    перестал читать сразу после небрежного определения интерфейс

    интерфейс — это способ общения программы с человеком или программы с программой. Может быть графический, текстовый, звуковой, нейроинтерфейс наконец…


    1. octob3rmut3
      01.03.2017 07:43

      Мы с вами разными словами описали одно и то же. Вы говорите «способ общения», я говорю «помогает управлять» и перечисляю, за счёт чего эта помощь оказывается.


      1. kolpeex
        01.03.2017 14:05

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


  1. sbnur
    01.03.2017 06:41

    Все смешалось — фронтенд забэкендил мимо интерфейса


  1. Digital_axe
    01.03.2017 09:50

    Заминусовали автора, а он хорошее дело делает) Своего читателя текст найдет.


    1. Ant-coding
      02.03.2017 17:47

      Согласен. И что Вы, товарищи всёзнающие, под любым знакомым Вам материалом в комментариях какаете?


  1. divergo
    01.03.2017 11:15
    +2

    Перед тем, как потратить свое время на написание статьи, следовало проконсультироваться со специалистом с опытом.
    Клиент — программа(в том числе прошивки приборов), запрашивающие данные или услугу у сервера. Услуга — обработка данных.
    Клиент не оперирует удаленными данными! Он их получает от сервера и обрабатывает локально.

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

    Интерфейс — средство взаимодействия. Чего с чем — определяется из контекста. В литературном языке трубуется явно укзать.
    Пользовательский интерфейс(UI) — средство взаиомдействия пользователя с ПО.
    Порграммный интерфейс(API) — средство взаимодействия программ между собой.
    Аппаратный интерфейс — взаимосвязь аппаратных компонент(шлейфы, разъемы и пр)

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


    1. octob3rmut3
      01.03.2017 13:19

      Я и специалист с опытом, который меня консультировал, плюсанули бы вам, если бы не нулевая карма.


  1. sp1ne
    01.03.2017 14:54

    Зачем публиковать на Хабре то, что и так очевидно всем его посетителям?