Обязательно ли использовать какой-либо фреймворк?
===================================================

 Здравствуйте.  

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

 Если проект будет активно развиваться, то без фреймворка не обойтись. Но давайте попробуем рассмотреть поближе разные варианты.  
  
**1. Использование готового фрейморка, с которым вы уже работали**  

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

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

Готовьтесь потратить массу времени на его изучение. Порой даже на решение тривиальных задач в некоторых фреймворках придется потратить несколько дней, если вы с этим никогда не работали. По собственному опыту могу сказать, что если сравнивать варианты (2) и (4), то готовьтесь потратить в 3 — 4 раза больше времени. Однако у этого варианта есть и плюсы: вы освоите ещё один фреймворк и в следующих проекта сможете выбирать вариант (1), другим разработчикам знакомым с данным фреймворком будет гораздо проще разобраться в коде, последующая разработка и развитие проекта существенно ускорятся.  
  
**3. Использование собственного фреймворка**  

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

Такой проект сильно рискует превратиться в [спагетти-код](https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B0%D0%B3%D0%B5%D1%82%D1%82%D0%B8-%D0%BA%D0%BE%D0%B4). Но абсолютное большинство новичков начинает именно с этого. В этом нет ничего страшного, если это ваш первый проект, вы освоитесь с языком и его возможностями, набьете кучу шишек, и неизбежно рано или поздно перейдете к вариантами (1), (2) или (3). 

 В вашем случае, если вы вообще не знакомы с фрейморками, то лучше не использовать. Хотя бы потому, что на их изучение вам потребуется время и при этом не факт, что оно окупится. + в таком проекте можно обойтись и без mvc 

 MVC достаточно тяжелая в плане производительности структура. Вам лучше использовать процедурные вызовы ф-ий, без классов/объектов, в общем избегать всего "тяжелого" что засирает память, как собственно и сделали команда vk - вообще урезав ф-л пхп до минимума. Можно найти их примеры в их сообществе разработчиков <https://vk.com/kitphp>  
  

UPD.  

Еще можно попробовать <https://zephir-lang.com/> (зефир) это штука компилирующая пхп-код в C-расширения (.so, .dll) что еще добавит производительности, а еще там есть синтаксический сахар. Для высокопроизводительных приложений - самое то (из пхп). 

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

P.S  

> в качестве языка выбрал php(просто потому что инфы и примеров много в сети

  

Мощный аргумент :lol 

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

 Тиражные решения легче в поддержке. 

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

Но такие люди не спрашивают - они сразу пишут  
  

В итоге получаются у них получаются специализированные недофреймворки 

>   
> 
> выбрал php(просто потому что инфы и примеров много в сети)  
> 

  
  

Как я понимаю PHP в чистом виде вы не знаете.  

Также тяжело оценивать ваш уровень знания программирования без привязки к языку.  

Порог входа в PHP, конечно низкий, но все равно годик у Вас на это уйдет.  

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

p.s. Выбор первого фреймворка сильно повлияет на Вас как специалиста.  

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