Back-end — какой язык стоит учить как альтернативу php для бек енда


Содержание

Простыми словами о «фронтенде» и «бэкенде»: что это такое и как они взаимодействуют

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

Давайте начнем с определений.

Фронтенд — все, что браузер может читать, выводить на экран и / или запускать. То есть это HTML, CSS и JavaScript.

HTML (HyperText Markup Language) говорит браузеру, каково содержание страницы, например, «заголовок», «параграф», «список», «элемент списка».

CSS (Cascading Style Sheets) говорит браузеру, как отображать элементы, например, «после первого параграфа отступ в 20 пикселей» или «весь текст в элементе body должен быть темно-серым и написан шрифтом Verdana».

Granatum, удалённо, средняя по рынку от 60 000 до 150 000 ₽

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

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

Для бэкенда вы можете использовать любые инструменты, доступные на вашем сервере (который, по сути, является просто компьютером, настроенным для ответов на сообщения). Это означает, что вы можете использовать любой универсальный язык программирования: Ruby, PHP, Python, Java, JavaScript / Node, bash. Это также означает, что вы можете использовать системы управления базами данных, такие как MySQL, PostgreSQL, MongoDB, Cassandra, Redis, Memcached.

Структура взаимодействия бэкенда и фронтенда

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

Серверные приложения

В этом случае HTTP-запросы отправляются напрямую на сервер приложения, а сервер отвечает HTML-страницей.

Между получением запроса и ответом сервер обычно ищет по запросу информацию в базе данных и встраивает ее в шаблон (ERB, Blade, EJS, Handlebars).

Когда страница загружена в браузере, HTML определяет, что будет показано, CSS — как это будет выглядеть, а JS — всякие особые взаимодействия.

Связь с использованием AJAX

Другой тип архитектуры использует для связи AJAX (Asynchronous JavaScript and XML). Это означает, что JavaScript, загруженный в браузере, отправляет HTTP-запрос (XHR, XML HTTP Request) изнутри страницы и (так сложилось исторически) получает XML-ответ. Сейчас для ответов также можно использовать формат JSON.

Это значит, что у вашего сервера должна быть конечная точка, которая отвечает на запросы JSON- или XML-кодом. Два примера протоколов, используемых для этого — REST и SOAP.

Клиентские (одностраничные) приложения

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

Такой фронтенд общается с бэкендом через HTTP, используя JSON- или XML-ответы.

Универсальные/изоморфные приложения

Некоторые библиотеки и фреймворки, например, React и Ember, позволяют вам исполнять приложения как на сервере, так и в клиенте.

В этом случае для связи фронтенда с бэкендом приложение использует и AJAX, и обрабатываемый на сервере HTML.

Вне фронтенда и бэкенда

Автономный фронтенд

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

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

Легкий бэкенд

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

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

Размытые границы

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

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

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

Какой язык для back-end выбрать?

Бт Иван
24.08.2020
Чтобы не приводели пример с вилкой, ложкой и ножом, замечу, что сайт у же написан: kitaptar.bashkort.org
Уже все сделано на php+mysql, местами js для отрисовки. Проект довольно популярен (в Башкортостане), а сервер пока слаабенький, не стоит ли переписать его, учитывая, что код на php оставляет желать лучшего? Проект башкирская библиотека.

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

Ponyfag1337
24.08.2020
Если код на php оставляет желать лучшего, нужно менять не язык, а программиста

Сергей Иванов
24.08.2020
лучший ответ Если есть наработки на PHP, то лучше на нем и оставить сайт, только перевести его нужно на какой-нибудь PHP-фреймворк или написать свой фреймворк.

Metotron
24.08.2020
Если считаешь, что можешь переписать лучше, то переписывай. Фейсбук на PHP написан, хоть у них и используется какой-то там компилятор в си-код, но ты тоже можешь его взять, он у них в открытом доступе был, насколько я помню. Скорее всего, и без этого можно всё нормально сделать, если с умом кэшировать данные.

По пунктам: что нужно знать о бэкенде новичку в веб-разработке

Рассказывает Эмит Ирэндол, full-stack разработчик

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

1. Аутентификация

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

Можно выделить два основных типа аутентификации:

  1. Запоминающая предыдущее состояние — реализуется с помощью сессий. Пользователь авторизуется один раз, а затем получает возможность свободно передвигаться по приложению и доступ к защищенным ресурсам (таким, как банковские транзакции или селфи в Snapchat), не отправляя данные, которые подтверждают его вход повторно.
  2. Не запоминающая предыдущее состояние — реализуется с помощью токенов. Пользователи делают все то же самое, но при выполнении каждого HTTP-запроса пользователю нужно отправлять идентификационные данные. Так обычно поступают с REST API. Сейчас золотой стандарт, не запоминающей состояние аутентификации с токенами, — JWT.

Есть и более продвинутый сценарий — многофакторная аутентификация. Она повышает безопасность приложения, добавляя дополнительные уровни защиты к логину и паролю. Хорошие примеры реализации есть у Google и Amazon.

Прим. перев. А у нас есть разъясняющая статья про двухфакторную аутентификацию и протокол FIDO U2F.

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

2. Роли, разрешения и контроль доступа

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

Запутались? Объясню подробнее. Смысл слоя, отвечающего за авторизацию, — это выдача разрешений, поддержание безопасности личной информации, отказ в доступе к конкретным действиям и, где требуется, аннулирование привилегий, чтобы одни пользователи не пробирались в аккаунты других и не смотрели их личные фотографии. Логика разрешений проста:

Пользователь x может сделать действие y с объектом z.

Применим это в конкретной ситуации: Шэрон — редактор и может редактировать посты. Тогда надо определить:

  • роль Шэрон — редактор;
  • ее действие — редактирование;
  • объекты, с которыми она может это делать, — посты.

Как это работает? Просто: булевы переменные. Вы возвращаете True/False в зависимости от того, что и кому разрешено делать с конкретным объектом . Итак, может ли Шэрон редактировать какой-то конкретный пост? Вернуть True, если она редактор, вернуть False и закрыть доступ к посту, если нет.

3. CRUD — Create, Read, Update, Delete

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

14 ноября в 18:30, Витебск, беcплатно

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

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

  • как создавать новые данные;
  • как их редактировать;
  • как их обновлять и удалять.

Так выглядит CRUD при работе с фреймворком Ruby on Rail, который предоставляет слой объектно-реляционного сопоставления (Object Relational Mapping — ORM ) :

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

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

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

4. REST

Чтобы обеспечить управление ресурсами в вашем приложении (такими, как книги или аккаунты), нужно реализовать программный слой, принимающий запросы и формирующий ответы. Здесь вам доведется поработать с маршрутами (routes) и контроллерами (controllers). Они обеспечивают соблюдение ограничений, накладываемых REST — стилем архитектуры программного обеспечения для распределенных систем.

В типичном приложении на Ruby маршрут выглядит так:

Что в это время происходит в системе:

  1. Приходит запрос на фото с этим маршрутом и передается контроллеру с помощью метода show .
  2. Этот метод, обращаясь к ресурсу из базы данных или к другому API, формирует и передает ответ в формате HTML или JSON.
  3. Клиент (в данном случае браузер компьютера) получает ответ и выводит фото на экран.

Запросы могут приходить из многих источников (их называют клиентами). Чаще всего запросы для веб-приложения формируются в форме ввода браузера. Но, если вы пишете бэкенд для мобильного приложения, то клиент — это API приложения, и он посылает запросы GET, POST, PUT, DELETE из приложения.

Вы можете разработать отвечающую на запросы систему, создав API с учетом REST. Такой API называется RESTful, читайте подробнее о нем в подробной статье.

Прим. перев. Также предлагаем ознакомиться с нашим материалом по этой теме.

5. Формы и состояния

Формы — это самый распространенный способ общения пользователей с приложением. В основном через них пользователи и вводят все данные.

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

Когда пользователь начинает взаимодействовать с формой, вам надо сделать следующее:

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

6. API

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

Цукерберг рекомендует:  Введение в мобильную разработку под Windows. Знакомство с одним из популярных языков

Термин API — аббревиатура от Application Programming Interface (интерфейс программирования приложений) — применяется к инфраструктуре, которая позволяет другим приложениям взаимодействовать с вашим. На картинке выше вы видите пример применения API для обслуживания сети из многих мобильных и настольных клиентов.

Основные этапы написания API:

  1. Создать API-сервер. Этап подразумевает обеспечение защищенного доступа к ресурсам, которые вы хотите передавать клиентам. Если у вас книжный магазин, то ваш API будет предоставлять названия книг, цены и информацию об издателе другим сайтам и перекупщикам.
  2. Защитить сервер, используя идентификаторы приложений и секретные ключи.
  3. Сделать понятную интерактивную документацию, которая позволит другим разработчикам просматривать ее и взаимодействовать между собой и с вами.

7. Уведомления по Email, SMS и Webhooks

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

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

Для разных случаев вы можете использовать разные уведомления:

  • оповещения на экране приложения;
  • электронные письма (верификация почты или подтверждение покупки);
  • SMS (авторизация или завершение транзакции);
  • webhook-уведомления в реальном времени для обратившихся к вашему приложению чат-ботов на разных платформах, например, Facebook, Telegram или Slack;
  • регулярные письма со счетами за покупки и информацией об оплате подписки.

8. Подписка и тарифные планы

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

Полезные советы по проектированию тарифных планов:

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

9. Взаимодействие с платежным шлюзом

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

Во время транзакции нужно:

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


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

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

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

Как работает платежный шлюз:

  1. Ваши кассовые формы отправляют детали покупки на платежный шлюз для обработки.
  2. Платежный шлюз передает данные транзакции банку продавца.
  3. Банк продавца передает эту информацию о транзакции банку, который выпустил карту покупателя, для авторизации транзакции.
  4. Банк, который выпустил карту покупателя, либо одобряет, либо отклоняет транзакцию и отправляет информацию банку продавца.
  5. Если транзакция одобрена, то банк переводит средства на ваш счет.
  6. После одобрения сторонний платежный шлюз отправляет детали транзакции и ответ вашему приложению.
  7. И, наконец, вы отправляете уведомление покупателю, сообщая, одобрена ли транзакция.

Если остались вопросы, посмотрите это видео:

10. Загрузка файлов

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

  1. Разрешить загружать только файлы определенных форматов.
  2. Проверять файлы на превышение разрешенного размера и отклонять загрузку слишком больших.
  3. Показывать пользователю процесс загрузки.
  4. Убедиться, что загрузка происходит асинхронно и не нарушает работу фронтенда.
  5. Разрешить пользователю помечать файлы как личные/общедоступные.
  6. Разрешить пользователю экспортировать загруженные данные.
  7. Создать медиа-библиотеку, чтобы фильтровать файлы и управлять ими (опционально).

11. Сторонние API, фреймворки и пакеты

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

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

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

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

12. Работа с Open Source

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

  • читайте документацию и ищите ответы в ней, прежде чем задавать вопросы;
  • посетите официальную страницу пакета на GitHub или Bitbucket, просмотрите открытые и решенные проблемы, и, возможно, вы найдете пулл реквест, в котором будет необходимая функциональность;
  • также вы можете сами реализовать необходимую функциональность и отправить ее авторам, внеся свой вклад в развитие Open Source. Если ваш код не приняли, просто используйте свою версию вместо исходного пакета;
  • если вы все-таки вынуждены писать свои функции с нуля, то убедитесь, что вы создаете их для универсального применения, чтобы другие тоже могли их использовать.

13. Интерфейс для управления

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

Хорошая панель управления должна обладать следующими свойствами:

  • защищенность от внешних атак;
  • корректное отображение для пользователей с разными уровнями доступа;
  • приятный дизайн и простота в использовании;
  • фокус на самых частых задачах;
  • возможность добавления внешних компонентов;
  • возможность заменить неиспользуемые функции новыми.

14. Кэширование

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

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

Как работает кэширование в веб-приложениях? Можно выделить следующие типы механизмов:

  • кэширование контента. Если контент веб-страницы не изменяется постоянно, то нет нужды каждый раз заново его генерировать. Целая HTML-страница может быть сохранена в кэше;
  • кэширование фрагментов. Иногда целая страница не может быть закэширована, потому что на ней есть контент, который постоянно изменяется, но есть и части, которые изменяются медленно. HTML для этих статичных частей генерируется только при первом запросе, а при повторных извлекается из кэша;
  • кэширование данных. Часто в основе веб-приложения лежит база данных, но каждый раз извлекать из нее информацию достаточно накладно, поэтому часто используемые данные кэшируются в памяти приложения или в других хранилищах, например, Redis, Varnish и Memcached.

15. Компоненты

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

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

16. Системы управления версиями

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

  1. Если вы собираетесь работать с другими разработчиками над одним и тем же проектом, то вы будете пользоваться общим набором файлов. Как именно вы планируете избежать противоречий при изменениях в коде?
  2. Что, если вы захотите вернуть старую версию и посмотреть, как вы реализовали ту или иную задачу перед тем, как продолжите разработку?
  3. Что, если вы захотите откатить проект к последней версии, в которой еще не было сбоя?
  4. Что, если вы захотите поделиться своим исходным кодом? Вы будете его архивировать и рассылать по e-mail при добавлении каждой новой фичи?
  5. Как вы будете следить за тем, какие файлы были изменены, а какие — нет?

Научиться пользоваться GitHub поможет эта статья.

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

17. Командная строка

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

Для освоения командной строки советую эту книгу.

Прим. перев. Знакомство с командной строкой также можно начать с нашей шпаргалки по Bash.

18. Вопросы на Stack Overflow

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

IT Leaks. Как стать back-end программистом на PHP с нуля, план самостоятельного обучения

Автор: Павел Волынцев · Published 13.04.2020 · Updated 27.01.2020

Публикую план удалённого разработчика back-end на PHP, которым пользовался сам и проверял со студентами при работе наставником. Дополнительный раздел касается удалённой работы.

Цель «удаленная работа backend PHP»

«Walk This Way» [Bobby Chiu]

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

Внимание! В конце статьи — интересное предложение: помощь в составлении твоего резюме или веб-портфолио.

Итак, смотрим на абстрактную вакансию, которая найдена по фразе «удаленная работа backend PHP». В ней есть такие требования:

  • знание PHP 7 и выше
  • понимание принципов ООП
  • понимание принципов MVC
  • умение верстать (HTML, CSS, jQuery, Bootstrap)
  • знание фреймворков
  • знание MySQL
  • умение разбираться в чужом коде
  • чистый и аккуратный код
  • опыт администрирования linux серверов достаточный для поддержания работы веб-проекта

Это довольно интересный список. Под спойлером я его кратко расшифрую.

Знание PHP 7 и выше

Седьмая версия PHP — это одна из самых свежих. И это хорошо, потому что если бы в вакансии было PHP5+, то это очень большое разнообразие версий. Начиная с PHP 5.0 введено объектно-ориентированное программирование и в седьмой версии оно достигло такого уровня, что не использовать объекты — моветон для PHP. Даже серверные скрипты используют сторонние модули, написанные в объктном стиле.

Но независимо от версии

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

Понимание принципов ООП

  • парадигмы объектно-ориентированного программирования (наследование, инкапсуляция, полиморфизм)
  • умение выделить сущности и связи между ними
  • умение не разбивать сущности больше чем требуется для задачи
  • моделирование (умение описывать объектную модель без написания кода и читать такое описание)
  • Шпаргалка по ООП
  • Подборка Курс ‘Объектно-ориентированное программирование’

Понимание принципов MVC

  • что такое «модель», что такое «представление», что такое «контролер»
  • зачем нужен этот принцип, какую проблему он решает
  • какие ещё бывают принципы
  • и другие шаблоны проектирования программного обеспечения
  • cтатья Умные книги по программированию и проектированию информационных систем, в частности книга «Приемы объектно-ориентированного проектирования. Паттерны проектирования» Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес (так называемая «Банда Четырёх» / «Gang of Four»)

Умение верстать (HTML, CSS, jQuery, Bootstrap)

  • семантика веб-страниц, HTML + HTML5
  • визуальное оформление веб-страниц, CSS + CSS3
  • интерактивность веб-страницы, JavaScript + jQuery или другая библиотека для работы с объектной моделью документа (DOM)
  • фреймворки для ускоренного построения каркасов веб-страниц (Twitter Bootstrap, Semantic UI, Foundation)
  • статья Базовые принципы вёрстки
  • статья Backend vs Frontend
  • статья Верстальщик vs Разработчик Front-end
  • книга Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5

Знание фреймворков

  • принципы организации кода популярных фреймворков (Yii, Laravel, Phalcon, Zend Framework)
  • умение создать скелет нового приложения на базе фреймворка
  • конфигурация, отладка приложения на базе фреймворка
  • умение дополнять приложение новыми компонентами, модулями, плагинами
  • смотри выше про MVC и ООП

  • смотри ниже про умение разбираться в чужом коде
  • статья Какие задачи возникают в результате отказа от использования веб-фреймворков?

Знание MySQL

  • реляционная алгебра, нормальные формы
  • системы управления базами данных
  • установка, настройка MySQL
  • операции с базами, архивирование и восстановление баз данных
  • управление пользователями и правами (UDL), управление таблицами (DDL), операции с данными (SQL)
  • работа с иерархическими данными в SQL (деревья)
  • статья Построение реляционной модели
  • подборка про реляционные базы данных: статьи, видео, книги, лекции, онлайн-курсы
  • несколько статей про SQL: вопросы с собеседований, обзоры

Умение разбираться в чужом коде

  • опыт применения чужого программного кода в своих проектах (работа с менеджерами зависимостей composer, npm, bower)
  • опыт поиска и устранения ошибок в своём и чужом коде
  • опыт совместной разработки программного обеспечения
  • опыт работы в команде программистов
  • опыт работы с OpenSource проектами, вклад в чужие проекты с несколькими участниками (контрибуторами). Например, наличие принятых изменений в код популярных фреймворков PHP или библиотек JavaScript.
  • опыт сопровождения проектов с открытым кодом, то есть доработка проекта и устранение проблем по просьбе других пользователей
  • статья Где взять идею для веб-проекта

Чистый и аккуратный код

  • умение найти сбойный, неаккуратный, непонятный фрагмент кода и переписать его без потери работоспособности
  • выделение кода в дополнительные сущности, объекты, фунции
  • обратная задача — объединение кода
  • тестирование кода
  • оптимизация алгоритмов
  • именование классов, переменных, функций
  • статья Умные книги по программированию и проектированию информационных систем

Опыт администрирования linux серверов достаточный для поддержания работы веб-проекта

  • установка операционных систем Ubuntu/Debian или CentOS/RedHat
  • менеджеры пакетов
  • установка и настройка веб-сервера Apache, nginx
  • установка и настройка MySQL
  • установка и настройка PHP и его модулей
  • управление пользователями, правами доступа
  • управление файлами, директориями, симлинки
  • монтирование устройств, монтирование удалённых файловых систем
Цукерберг рекомендует:  25 бесплатных HTML5 шаблонов

Это была цель. Теперь про путь, то есть про план достижения цели.

Личный план обучения

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

Начальный этап — базовый сведения о web, HTML, CSS и JS (около 3-6 месяцев на изучение)

Для серверной разработки не обязательно знать всё-всё-всё про HTML, CSS и JavaScript. Но надо понимать, что веб-проекты состоят из страниц HTML, данные передаются через HTTP туда и обратно, клиентская часть может обмениваться с серверной через AJAX или веб-сокеты.

Базовая практика серверной разработки на PHP с использованием MySQL (1 год на изучение)

PHP. Уровень 1. Основы создания сайтов

PHP. Уровень 2. Разработка web — сайтов и взаимодействие с MySQL

PHP. Уровень 3. Профессиональная разработка на PHP

РНР. Уровень 4. Проектирование и разработка сложных веб — проектов на РНР

MySQL. Проектирование и создание баз данных для web

Система управления версиями Git

Отличным пособием будет книга Pro Git

Насыщенный практикум по дискретной математики, логике и алгоритмам

Из книг порекомендую:

  • Новиков «Дискретная математика для программистов»
  • Красиков «Алгоритмы. Просто как 2×2»
  • Елена Андреева и другие. «Математические основы информатики. Элективный курс»

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

Следующий этап — продвинутая практика по серверной разработке.

Продвинутая практика по серверной разработке на PHP (ещё 1 год на изучение)

  • Системы контроля версий git (см. выше), mercurial, subversion
    • думаю, к этому времени ты уже завёл учетную запись на github.com или bitbucket.org
    • прочитал Pro Git
    • прошёл курс по Git
    • надо научиться создавать и оформлять репозитории
    • настраивать доступ по ключам, изучить принципы работы хуков
    • поработать с ветками, желательно с кем-нибудь на пару с одним и тем же репозиторием
    • оформлять изменения
    • делать pull-request в чужой репозиторий, принимать pull-request в свой репозиторий
    • делать code review чужого кода
    • делать слияние кода через merge или rebase, и решать конфликты в коде
  • Пакетный менеджер Composer и сервис packagist.org
  • Протоколы SSH, FTP, SFTP и утилиты для обмена данными по этим протоколам
  • Установка и настройка сервера на базе операционной системы Ubuntu/Debian CentOS/RedHat
    • ищи информацию на тему виртуальных машин VirtiaBox / VMWare
    • ищи информацию на тему управления виртуальной средой Vagrant / Docker
    • ищи информацию о Virtual Private Server (VPS) / Virtual Dedicated Server (VDS) / Dedicated Server, возможно понадобится хостинг — вот купон на $10 от Digital Ocean — этого хватит на два месяца аренды VDS сервера
    • менеджеры пакетов
    • права доступа к файлам и папкам
    • сервисы (демоны)
  • Установка и настройка веб-сервера (apache, nginx, .htaccess, rewrite)
  • Работа с кэшем (файловый, memcached, RedisIO и другие)
  • Работа с базами SQL (MySQL, PostrgeSQL)
  • Работа с базами NoSQL (RedisIO, MongoDB)
  • Работа с файлами (windows / linux)
  • Работа с HTTP запросами (обмен данными между серверами по HTTP серверными методами — это не про AJAX, а про php-curl и SOAP)
  • Моделирование данных в SQL базах, на примере MySQL и PostgreSQL на практических задачах, цель — способность спроектировать базу из 10-15 сущностей
  • Полнотекстовый поиск через Sphinx и Elastic Search
  • Очереди событий Beanstalk, RabbitMQ, ApacheMQ
  • Работа с crontab
  • Работа с электронной почтой по протоколам SMTP, POP3, IMAP
  • Навые поиска и устранения SQL injection
  • Навые поиска и устранения XSS injection
  • Практическая работа с файлами в форматах JSON, XML, CSV
  • Реализация сервиса с API на базе JSON и XML
  • Работа с GEOIP
  • Практическая работа с изображениями

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

Примеры учебных задач:

Пример учебного приложения: блог

  1. создание статьи блога
  2. изменение статьи блога
  3. вывод списка статей в хронологическом порядке
  4. комментарии к записям блога

Пример учебного приложения: блокнот для обмена кусками текста между пользователями

  1. добавление куска кода, создание короткой ссылки и секретной ссылки
  2. вывод куска кода по заданной ссылке
  3. изменение куска кода по заданной секретной ссылке

Пример учебного приложения: каталог файлов

  1. создание создание директорий
  2. заливка файлов на сервер в директорию
  3. вывод файлов в директории
  4. переименование файлов
  5. перенос файлов в другую папку
  6. удаление файлов


Усложнение перечисленных задач для реализации технологий

  1. Авторизация и привязка сущностей к авторам/владельцам, проверка прав доступа на изменение чужих записей — пример приложения проект diglot.ru — статьи и книги на двух языках
  2. Полнотекстовый поиск записей блога, блокнота, файлов
  3. Работа с базами данных через универсальный порт PDO
  4. Хранение данных в нескольких базах SQL (первая запись тут, вторая там) — шардинг, горизонтальное и вертикальное масштабирование
  5. Хранение данных в нескольких базах SQL и NoSQL (записи блога в MySQL, а комментариев — в NoSQL)
  6. Хранение и передача данных в файлах формата XML
  7. Хранение и передача данных в файлах формата JSON
  8. Реализация JSON API + AJAX + JSON/XML для того, чтобы учебные приложения работали без перегрузки страницы (+ исправление интерфейса, чтобы данные запрашивались через AJAX) — пример приложения опросник по стеку веб-технологий
  9. Передача данных между серверами (например, импорт ленты новостей RSS или курс валюты; передача файлов на удалённый сервер)
  10. Отправка сообщений по электронной почте (уведомлений автору о новых комментариях)
  11. Реализация обработки данных через очереди событий (например, отправка почты по заданию в очереди)
  12. Создание картинок-превью для загруженных больших картинок

Современная практика бакенд-разработки (1 год)

Также порекомендую рассылки про backend-разработку на PHP

И тематические группы в соц сетях

Следи на новинками, изучай как они работают, проверяй, применяй на деле — НО СИЛЬНО НЕ УВЛЕКАЙСЯ, потому что технологий слишком много, но на практике достаточно иметь одну-две в портфолио, а потом уже на работе разберёшься с неизвестными тебе технологиями, если потребуется. Изучить всё сразу не получится. Оптимальнее всего создать учебные приложения на основе некоторой частной комбинации технологий, про которые узнал.

Работка под CMS и фреймворки (1 год)

  • CMS: WordPress, Joomla, Magento, osCommerce, Drupal, Typo3
  • Фреймворки: Yii, Laravel, Phalcon, Zend Framework, Cohana
  • статья Какие задачи возникают в результате отказа от использования веб-фреймворков?

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

Мои первые работы были «самописами», без фреймфорков. Когда я познакомился с Zend Framework, я понял, что потратил кучу времени зря — из решение лучше моего. Когда я познакомился с Yii, я понял, что Zend — просто монстр. А затем были Laravel и Phalcon. Знание устройства этих фреймворков позволяет мне легко ориентироваться в чужом коде и быстро решать тестовые задачи при трудоустройстве.

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

Технология разработки программного обеспечения (frontend и backend)

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

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

Обрати внимание из каких подзадач может состоять разработка и эксплуатация веб-проекта: Как строится современное веб-приложение

Основные навыки, которые надо выработать (каждый из них не сложный, но их большое разнообразие):

  • спецификация задач: составления исходных требований (requirements), составление шагов последовательности действий (use-case), критерии завершённости задачи (acceptance criteria), тестовые наборы данных, декомпозиция задач, определение зависимостей, а также системы ведения задач (task manager)
  • описание задач в условных понятиях, абстрациях, блок-схемы алгоритмов, диаграммы последовательностей, временные диаграммы, модели данных
  • прототипирование интерфейса
  • интернационализация — поддержка нескольких языков и языковых стандартов
  • тестирование программного обеспечения — модульное, функциональное, интеграционное и прочие
  • конфигурирование приложений
  • сопровождение — работа с ошибками, системы учёта учёта ошибок (bug tracker)
  • стратегии разработки (водопад, Agile, Scrum, Kanban, XP)
  • жизненные циклы задач (постановка, уточнение, оценка трудоёмкости, реализация, тестирование, релиз)
  • управление процессом разработки ПО, жизненные циклы разработки ПО
  • оптимизация под поисковые системы, интернет-аналитика, интернет-маркетинг

Пригодятся книги и статьи про

  • UML
  • SCRUM
  • Kanban
  • Agile
  • средства визуального прототипирования RationalRose, Enterprise Architect

Курсы на coursera.org:

Часто в группах вКонтакте анонсируются видео-лекции по проектированию, по построению приложений, по разработке программного обеспечения

Удалённая работа и Soft Skills

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

Рекомендую прочитать книги Rework и Remote (есть переводы на русский), чтобы понимать, что именно ценится в удалённой работе. Это не знание языков и технологий (!), а навыки общения.

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

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

Для этого следует

  • правильно излагать задачу к встрече, чтобы все участники могли подготовиться — рекомендую DropBox для файлов, которые нужно просто скачать, и Google Docs для документов, которые нужно совместно изменить
  • согласовать время и регламент встречи, повестку — рекомендую Google Calendar
  • выбирать подходящее ПО для встречи (возможно потребуется совместно видеть один экран, комментировать, ставить пометки к коду, или даже удалённо управлять компьютером)
  • вести протокол, чтобы не переспрашивать по несколько раз о том, что обсуждали и что решили (я все конференции пишу в видео, пересматриваю при необходимости — рекомендую программу HyperCam)
  • не отвлекаться от повестки и регламента
  • статья Записывай всё

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

Мне помогли книги:

  • “Программист-прагматик”
  • “Программист-фанатик”
  • “Не откладывай на завтра”
  • ”Начни”
  • “Легкий способ начать новую жизнь”
  • “12 недель в году”
  • “Тайм-драйв”
  • “Путь программиста: Человек в эпоху ИТ”
  • статья Умные книги про карьеру в ИТ и навыки профессионального программиста

Статистика: 60% кандидатов на вакансии не проходят по причине того, что они не умеют общаться — опаздывают, уклоняются от контакта, врут (ведь это так просто через Интернет). Ещё 60% не проходят испытательный срок, потому что за 2-4 месяца не осваивают навыки управления личным временем, планированием работы и взаимодействием с коллегами.

Отнесись к этому серьёзно.

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

Как разорвать этот круг? Простой практический способ описан в статье Веб-портфолио.

Наставничество или как учась учиться

  • Рост навыка быстро разбираться в чужом коде
  • Рост навыка начального проектирования, проектирования «с чистого листа», «с нуля»
  • Рост навыка принимать архитектурные решения для роста модели
  • Практика эффективно обсуждать задачи

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

Про CMS. Сам я до недавних пор игнорировал CMS. Ну то есть я ими пользовался (эта статья опубликована на сайте, работающим под управлением CMS WordPress), но исходный код не изучал, не менял и не делал каких-либо надстроек. Однако недавно появилась необходимость сделать плагин под WordPress. Пришлось познакомиться с WordPress Codex, разобраться в системе плагинов, системе администрирования, системе редактировании и хранения статей, а также с процедурой публикации плагина в каталоге плагинов. История об этом на SmartProgress

Путь Back-end разработчика [закрыт]

Хотел бы пойти в сторону back-end программирования. Посмотрел, какой лучше язык выбрать, и остановился на php. Хотелось бы попросить помощи по junior позиции: что для начала нужно знать и учить в последовательности.

На данный момент знаю HTML/CSS/Основы JS, boostrap, flexbox, sass. Буду очень благодарен за помощь.

Закрыт по причине того, что вопрос слишком общий участниками andreymal, nick_n_a, Darth, Эдуард, MSDN.’Reinstate Monica’ Knight 4 июн ’18 в 9:20 .

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

1 ответ 1

Как back-end в первую очередь вы должны хорошо владеть языком запросов SQL, уметь проектировать базы данных.

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

Помимо этого вы должны хорошо понимать ООП и знать основные паттерны проектирования.

Так же не помешает изучить систему контроля версий, например git.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками php backend или задайте свой вопрос.

Похожие

дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.11.13.35425

Выбираем профессию frontend- и backend-разработчика: принципы и отличия

Статья о том, что такое frontend- и backend-разработка, чем отличаются и как взаимодействуют между собой. Разбираемся и выбираем себе направление.

Традиционно эти две сферы разработки разделяют на сцену и закулисье. Во frontend вы работаете на глаза пользователя, в backend же — на его опыт и ощущения. В Skillbox мы учим и frontend, и backend. Остается только выбрать направление своей будущей профессии. А теперь подробнее.

Что такое
frontend-разработка?

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

Пишет про дизайн и маркетинг в Skillbox. С 2011 по 2020 год писала про бизнес в деловые СМИ, соучредитель агентства копирайтинга «Абзац».

Frontend-разработчик сотрудничает с дизайнерами, программистами
и UX-аналитиками, чтобы создавать удобный и востребованный продукт.

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

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

Компоненты frontend-разработки

  • HTML (HyperText Markup Language) — язык разметки документов для создания структуры страницы: заголовки, абзацы, списки и так далее.
  • CSS (Cascading Style Sheets) — язык для описания и стилизации внешнего вида документа. Благодаря CSS-коду браузер понимает, как именно отображать элементы. CSS задаёт цвета и параметры шрифтов, определяет, как будут располагаться разные блоки сайта, и так далее. Ещё он позволяет выводить один и тот же документ в разных стилях, например, для печати (обычной или шрифтом Брайля), вывода передачи на экран или чтения голосом.
  • JavaScript — это язык, который создавался, чтобы оживить веб-страницы. Его задача — реагировать на действия пользователя, обрабатывать клики мышкой, перемещения курсора, нажатия клавиш. Ещё он посылает запросы на сервер и загружает данные без перезагрузки страницы, позволяет вводить сообщения и многое другое.
Цукерберг рекомендует:  Вакансии Coffer

Что такое
backend-разработка?

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

Например, когда вы вводите запрос на странице поисковика и жмёте клавишу Enter, frontend заканчивается и начинается backend. Ваш запрос отправляется на сервер Google или «Яндекса», где расположены алгоритмы поиска. Именно там случается всё «волшебство». Как только на мониторе появилась информация, которую вы искали, — вновь происходит возвращение в зону frontend.

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

Backend — это процесс объединения сервера с пользователем.

Компоненты backend-разработки

Backend-разработчик применяет те инструменты, что доступны на его сервере. Он вправе выбрать любой из универсальных языков программирования, например, Ruby, PHP, Python, Java. Всё зависит от конкретного проекта и задачи заказчика.

Также для backend-разработки используются системы управления базами данных:

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

Как взаимодействуют frontend и backend?

Взаимодействие frontend и backend происходит по кругу:

  • frontend отправляет пользовательскую информацию в backend;
  • информация обрабатывается;
  • и возвращается обратно, приняв понятную форму.

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

Существует несколько вариантов взаимодействия frontend и backend:

  • HTTP-запрос напрямую отправляется на сервер, сервер ищет информацию, встраивает ее в шаблон и возвращает в виде HTML-страницы.
  • Вариант с использованием инструментария AJAX (Asynchronous JavaScript and XML). В этом случае запрос отправляет JavaScript, загруженный в браузер, а ответ приходит в формате XML или JSON.
  • Одностраничные приложения, которые загружают данные без обновления страницы. Это делается также при помощи AJAX или фреймворков Angular и Ember.
  • Ember или библиотека React помогают использовать приложение и на сервере, и в клиенте. Frontend и backend взаимодействуют через AJAX и HTML-код, который обрабатывается на сервере.

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

Заключение

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

back-end сайта

Тема в разделе «Программирование», создана пользователем edgeofsevenwonders, 06 Oct 2020 в 15:18 .

Оценить пост #

edgeofsevenwonders

думал бэкенд-сайта легко сделать. Но литературы очень мало почему-то посоветуйте новичку литературу и материалы. И ответьте на пару вопросов.

какое серверное по юзать? apache или другое?

какой ЯК использовать? JS,java,python,C#? и какие их библиотеки?

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

что еще нужно для бэкенда-сайта?

zorar4ik

Делай на том ЯП, на котором умеешь. Разницы особо никакой нет. Самые популярные языки для бэка это фреймворки PHP ( Laravel, Symfony), Python (Django, Flask), Ruby (Ruby on Rails), NodeJS. По поводу БД это MySQL/PostgreSQL из реляционных ну или же нереляционные типа MongoDB. Сам использую RoR ввиду скорости разработки. Удачи

edgeofsevenwonders

Делай на том ЯП, на котором умеешь. Разницы особо никакой нет. Самые популярные языки для бэка это фреймворки PHP ( Laravel, Symfony), Python (Django, Flask), Ruby (Ruby on Rails), NodeJS. По поводу БД это MySQL/PostgreSQL из реляционных ну или же нереляционные типа MongoDB. Сам использую RoR ввиду скорости разработки. Удачи

какую IDE посоветуешь? как сервер запустить на своем компьютере?

k4rj2

Ide: Intellij Idea || Eclipse

Java->Spring+Hibernate->MySQL || Postgres || H2->Tomcat || WildFly || JBoss

любой фреймворк(React|Vue), или хардкодь на js + html/css, если это не так важно, можно и на bootstrap запилить и не париться.

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

Хотя можно и с нуля его запускать, но зачем?

Сначала сделай приложение, после чего думай над деплоем.

Разбираешься в nginx, желательно тут конечно linux иметь при себе.

бесплатный и простой вариант — heroku, github например.

Так же если Java плохо знаешь, можешь попробовать на Kotlin, он легче, но вполне вероятно, что всеравно без Java не разберешься

PHP или Python для Back-End ?

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

Дубликаты не найдены

Пиши на Лиспе с вставками на Брайнфаке.

Дай угадаю, вы в универе ещё учитесь, раз так шутите? Шутеечки 2-3 курса.

А вот не угадал. Универ был почти 20 лет назад.

Судя по количеству комментариев, учится он так себе

Для бэка подходят оба. Следующий

Какой язык выбрать для фронта? Java или CSS?

C++, это расширенная версия CSS. Следующий

А CMS — это какая версия CSS?

CMS — 3 версия. Порядок такой: CSS, SMS, CMS, C++

Век живи — век учис++!

HTTPS же. Следующий.

MySQL или MongoDB попробуйте

Спасибо, но я спортом не увлекаюсь

Вопрос больше религиозный, чем функциональный. Имха)

А после выбора языка будет еще более сложный выбор фреймворка.

Да там выбирать-то особо нечего, это ж не js, если php, то laravel/symfony, если python то django.

так а как без жс. да и выбор не такой мелкий, если рассматривать микрофреймворки

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

Я сам работаю на PHP, но в свободное время изучаю Python. Как по мне с PHP легче стартовать, больше сообщество (на мой взгляд), если столкнешься с проблемой, будет проще найти решение.

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

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

Создавать ядро сайта, проектировать архитектуру, безопасность.

Какое именно ядро? Какую именно архитектуру? Ты хочешь научиться делать сайты? Если да, то начни с популярных CMS на PHP. Проскочить этап знакомства с паттернами не получится. Если тебе нужно прямо сейчас написать рабочий сайт, то вообще похеру на чём ты это будешь делать: твоего опыта не хватит ни на ядро, ни на архитектуру, ни на безопасность. Нужен готовый сайт — делай на конструкторе типа Викса.

Я б взял питон, ибо php зло во плоти.

А вообще, зависит от задачи бэкэнда.

ох, еще один хейтер.

платформа монструозна слишком для большей части сайтов. имхо — на ней удобно делать то, что используется в связке с другими продуктами m$ для корпоративного сектора

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

у меня сча на работе стоит софтина, снимающая показания со счетчика и заносящая их в базу. плюс система построения отчетов.

все это крутится на asp.net +oracle xe

база в несколько сотен метров.

потребляет все это порядка 4 гб памяти постоянно и половину процессорного времени в момент работы

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

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

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

скайп после перехода с классик версии на электрон умудряется с тормозами гуя прорисовывать переписку и выпадающее окошко со смайлами на 7700k@4.8 + 16 гб памяти и 960 evo в качестве системного диска

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

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

веб морда у терминала крутилась на лампе.

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

вся эта смесь работала с аптаймом в полтора года на машине, состоящей из гиперпня, 2 гб оперативы и обычном wd blue на 320 гигов вроде и кушала до 10% процессорного времени и пару сотен мег памяти.

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

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

TL;DR: Да, по сравнению с крестами дотнет можно назвать «монструозным». Но это оправданная цена за быструю разработку. По сравнению с указанными топикстартером пхп и питоном — хз о какой монструозности может идти речь.

Технологии для front-end и back-end

Варианты, что лучше

Рекомендуем хостинг TIMEWEB

Подписчики

  • 2642
  • 0
  • john_smith
  • #
  • 19 марта 2020 г. 1:19

Какой минимальный стек технологий для front-end и back-end необходимо иметь новичку для современной веб-разработки, чтобы иметь возможность устроиться на работу в веб-студию или IT-компанию? С front-end ясно, что JavaScript, но интересуют библиотеки, инструменты и т. д. С back-end всё сложнее, что лучше и проще изучать с нуля? PHP, Python, Ruby, Perl, node.js, . ?

  • Евгений Легоцкой → john_smith
  • #
  • 19 марта 2020 г. 14:51
  • Ответ был помечен как решение.

Front-end : jQuery, шаблонизаторы, например, AngularJs, думаю, что имеет смысл поизучать Bootstrap3. Современный HTML5. Если отталкиваться от данного сайта, то кроме jQuery и некоторых библиотек, например, PrettyPrint я не использую. Хотя возможно имеет смысл применять AngularJs, но на данный момент нет необходимости. С jQuery обязательно нужно познакомиться, например, я использую Ajax запросы из JQuery. Он используется повсеместно, а что-то более специфичное всегда можно будет успеть подучить.

Back-end : Многие советуют PHP, поскольку порог вхождения низкий. На самом деле Python тоже довольно лёгок в освоении, а если учесть, что его можно применять для разработки Desktop -приложений, то можно убить сразу двух зайцев. Конечно, сейчас и PHP умудряются в тот же Android запихать, но это больше похоже на извращение. Считаю, что необходимо использовать инструменты в соответствии с той областью задач, которые эти инструменты решают. Для PHP наиболее известный фреймворк — это Yii.

Ruby такой же скриптовый язык программирования, что и Python. Разве что фреймворков для WEB у него поменьше, чем у Python. В принципе есть один, который стоит использовать — это Ruby on Rails . Для Python — то Django , Pyramid и ещё кое-какие (здесь выбор больше). В Ruby достаточно синтаксического сахара, но и Python тоже хорош.

Про Perl вообще ничего сказать не могу.

На Node.js можно и бэкенд и фронтенд пилить. Также на нём разворачивают многонодовые высоконагруженные сайты.

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

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

  1. PHP — самый низкий порог вхождения, много документации (в том числе и на русском языке)
  2. Python — Тоже легко изучается, есть несколько очень хороших сайтов
  3. Ruby — С этим языком будет сложнее, чем с другими, да и русскоязычной документации мало
  4. JavaScript — В любом случае нужно изучать, можно будет и бэкенде использовать (если Node.js будете использовать)

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

Собираю советы ОПЫТНЫХ back-end PHP-программистов

Добрый день коллеги!

Я начинающий back-end PHP-программист.

Интересуют ВАЖНЫЕ для меня 5 вопросов.

Хотел спросить ОПЫТНЫХ back-end PHP-программистов:

1) Как Вы ЧАЩЕ ВСЕГО делаете Landing Page’s? На чистом коде? На каком-то фреймворке, типа Bootstrap или Adobe MUSE? Где-то берете заготовки, шаблоны для экономии времени? Можно ссылки, если их используете.

2) Как Вы ЧАЩЕ ВСЕГО делаете Сайты-визитки? На чистом коде? На каком-то фреймворке, типа WP или Laravel? Где-то берете заготовки, шаблоны для экономии времени? Можно ссылки, если их используете.

3) Как Вы ЧАЩЕ ВСЕГО делаете Интернет-магазины? На чистом коде? На каком-то фреймворке, типа WP или Shop-Script? Где-то берете заготовки, шаблоны для экономии времени? Можно ссылки, если их используете.

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

4) На каком сайте посоветуете зарегится для получения первых заказов? А то зарегился на fl.ru, а там без оплаты денег (в районе 1500 рублей в месяц), даже нельзя ни одного заказа попробовать получить. Даже твой первый ответ, не увидит Заказчик, если ты не оплатишь! Есть лучше сайты для начинающих? Посоветуете?

5) для меня — JS самое тяжелая часть PHP. Какой именно учебник или видео-курс из YouTube посоветуете, чтобы успешно его использовать во всех проектах. Какие-то может есть сайты с готовыми скриптами JS?

Спасибо за внимание, понимание и 5 ответов!

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих