Всем привет. Я хотел бы рассказать свое мнение по поводу современного обучения программированию. В статье речь пойдет про PHP, немного про фреймворки и немного про велосипеды. Но я думаю, что к любому языку программирования это применимо. Начнем.
Помните свой первый код на PHP?
Нет, не этот:
<?
echo "Hello world"; // и в браузере у нас скачивается index.php :)
?>
А вот этот:
<?
include "db.php";
if ($_GET['id'] > 0){
mysql_query("SELECT * FROM `posts` WHERE id = {$_GET['id']}");
}else{
mysql_query("SELECT * FROM `posts` ORDER BY `id` DESC");
}
?>
Со временем мы росли, у нас закладывалось понимание ООП (ха-ха) и мы начали выдавать что-то похожее на это:
<?php
require "db.php";
if ($_GET['id'] > 0){
$db->query("SELECT * FROM `posts` WHERE id = {$_GET['id']}");
}else{
$db->query("SELECT * FROM `posts` ORDER BY `id` DESC");
}
?>
Затем мы где-то услышали, что mysql_* использовать нельзя и все используют mysqli_*, так как это более круто. Мы переписали свой код на использование mysqli. Еще через какое-то время мы узнали про PDO.
Параллельно мы работали с глобальными переменными и классами на сотню строк в каждом методе. Вам знаком класс User, который умел регистрировать пользователя, аутентифицировать (ага, авторизировать конечно же, мы еще не знаем разницу!), восстанавливать пароль? Мне знаком. Наш класс User мог отредактировать любого пользователя, ведь у нас был супер метод для этого:
// PSR? Не, не слышали.
class User {
public function changeUserProfile($userId, array $userData){
global $db; // ну вы поняли
$db->query("UPDATE `user` SET ....");
}
public function login($userId){
}
public function logout(){
// и на сайте писали <a href="/logout.php">Выйти</a> :)
}
}
А еще у меня были классы Db, Post и Comment.
Мы на собственной шкуре познакомились с SQL-инъекциями, XSS атаками и:
DROP TABLE `posts`
SOLID, PSR, MVC и паттерны это не просто слова
Мы прошли сами этот путь, узнали про SOLID, PSR, MVC. Для нас это не просто слова, а выстраданная необходимость, особенно после страшных легаси и кучи кода, каждый из классов которого написан в своем стиле. Мы наступили на тысячи грабель, написали столько же велосипедов и в итоге начали писать более/менее адекватный код.
Мы больше не используем глобальные и суперглобальные переменные в своих классах, для SQL используем подготовленные запросы и не помещаем SQL в контроллеры (UserModel::login() у нас тоже больше нет). Нужные объекты внедряем с помощью DI, а не создаем их внутри класса. Мы гоняем Request/Response, а не echo "hello world" и знаем зачем это делаем. Мы тестируем свой код не только с помощью браузера, но и пишем синтетические тесты. Какая цена этому? У меня детство с компьютером, десятки бессонных ночей, столько же факапов и сломанная база данных.
А еще я рано понял, почему $_POST в моделях это плохо.
Вы не были таким человеком? Я был.
Так было раньше. Но не сейчас
До сих пор я не могу понять, новая мода на курсы по разработке на PHP зло или нет. С одной строны людям предлагают за короткий срок сразу научиться правильно писать свой код, но с другой стороны люди не понимают, почему именно так писать правильно. Теряется целый пласт знаний, база, которую потом придется очень быстро наверстывать.
Сейчас предлагают десятки курсов. Всего за несколько часов вы научитесь писать на Laravel, Yii2 или на любом другом фреймворке. Не знаете основ PHP и ООП? PSR для вас Prosto Sdelay Raboty? Не беда, мы научим вас, всего за 19 990 рублей. Человек платит и думает, что его научат писать сразу правильно. Вы писали сразу правильно?
Я стал замечать, что по какой-то причине люди перестали разбираться в базе (работа с бд, функции, ООП, автозагрузка, рефлексия, работа с файлами, сетью и так далее), а переходят сразу к фреймворкам. Они не знают, как он работает изнутри, они просто пишут на фреймворке, а не с помощью. Их не беспокоит, что делает File::save(), в этом же сила инкапсуляции. Да и не интересно это. А если чего-то в этом фреймворке нет, то эту функцию сделать невозможно.
Но я не согласен с таким подходом к обучению. Велосипедостроение — лучший способ понять любую технологию (ну сейчас начнется). Как-то общаясь за чашкой кофе, я сказал глупую мысль: хочешь разобраться в PHP, напиши свою CMS с плагинами, правами, доп. полями и админкой. А потом подумал. А может быть мысль вовсе не глупая?
Как происходит обучение через фреймворки?
Так, используем composer create-project ...., затем заходим в .env, правим доступы для бд, далее классы контроллеров кладем сюда, классы моделей сюда, классы шаблонов сюда. Мы вроде бы и обучились, а как оно работает изнутри так и не поняли. Немного утрированно, но так оно и есть.
Я встречал нескольких людей, которые говорили, что они пишут на фреймворках. Но при этом они не знают основ. Один человек на полном серьезе мне говорил, что не знает функцию array_map.
Окей, а что нам даст свой велосипед?
Как минимум мы познакомимся с автозагрузкой файлов и классов. Узнаем, что сделать это можно с помощью composer, а не писать свой spl_autoload_… Мы научимся создавать соединения с базой данных, с помощью рефлексии научимся строить свою систему плагинов и поймем, почему \$_GET и \$_POST в бизнес логике это плохо. Мы пройдем весь путь от Request до Response. Фреймворки этот путь проходят за нас.
Да, почти все фреймворки написаны отлично. В процессе обучения обязательно нужно смотреть, как те или иные вещи у них сделаны. Если вы будете писать свой "мега фреймворк", вам придется проводить реверс-инжиниринг и разбираться, как устроен тот же Yii2 или Laravel. И возможно вы придете в ступор, когда узнаете, что Laravel это просто куча компонентов. Побочный эффект от этого — глубокое понимание фреймворка и его внутренней архитектуры. И в таком режиме, как мне кажется, понимание приходит гораздо быстрее. По крайней мере, лично у меня.
Наступив на все грабли, мы на глубоком уровне поймем, почему используются те или иные подходы и паттерны проектирования, особенно когда потребуется свой код расширять, поддерживать и тестировать.
На форумах и в социальных сетях, только и обсуждают, что велосипеды это плохо. Когда я вижу статью на каком-то сайте, где человек рассказывает, про свой домашний проект, будь то социальная сеть, блог или сайт с каталогом кошек, который он написал с нуля или на отдельных компонентах, я немного радуюсь. Человек учится с базы и это хорошо!
Ведь как еще учиться? Вы сразу начали писать работающий и аккуратный код без ошибок? Я нет, я написал тысячи строк кода, прежде чем понял, что к чему. Хотя может быть так и не понял, а все это мне кажется?
Но лучше написать свой велосипед дома, разобраться в технологии, понять что к чему, может быть даже найти готовое решение на packagist, чем писать свой велосипед на продакшине.
Мне близка по духу статья от mail.ru: Современный PHP без фреймворков, в которой автор хотел показать устройство всех фреймворков и что они представляют из себя на самом деле.
В последнее время, в моей жизни стало очень много легаси кода из 2000-х. Проект старый, но интересный. Который к тому же нужно перевести на новые рельсы (если будет интересно, я обязательно расскажу). Выглядит он примерно также, как и код в начале статьи: верстка, sql и логика в одном файле. Но у меня есть прививка от легаси. Я знаю как с ним работать и как его рефакторить. Но что будет делать человек, который умеет писать только на фреймворках?
Он просто не столкнется с таким проектом :)
Комментарии (71)
MetaDone
04.10.2019 12:23Поведаю вам темную сторону вашей статьи
Куча людей при прохождении пути из статьи застревает на стадии
class User { public function changeUserProfile($userId, array $userData){ global $db; // ну вы поняли
или даже раньше
и так случится если человека не критиковал и не направлял более опытный и он не сталкивался с задачами которые потребовали бы решения средствами чуток сложнее.
Написание велосипедов полезно в комбинации с использованием грамотного проверенного кода, т.е. на простой работе человек пишет используя Laravel к примеру, а домашний проект — без использования библиотек и фреймворков. В итоге получится что то что написал неопытный будет обернуто в грамотную оболочку, но при этом человек будет постепенно все глубже понимать как это работает изнутри. И в идеале нужно давать на ревью свой велосипед более опытному человеку чтоб он указал на ошибки и почему что-то сделано неправильно.
Если оставить велосипедостроителя одного — в итоге родятся шедевры подобные этим:
habr.com/ru/post/311304
habr.com/ru/post/438762
habr.com/ru/post/283166dimsog Автор
04.10.2019 12:30Полностью согласен. Я как раз пытался донести мысль, что важно постепенное усложнение материала, разбирая лучшие практики, в том числе и из фреймворков. Но не нужно сразу бросаться на них, лучше понять, как все устроено внутри. Зачем вообще фреймворк нужен и какие проблемы он решает.
Просто подход — а начну ка я сразу с Laravel тоже так себе. Другой пример: я когда изучал Android разработку, несколько месяцев потратил на Java Core, чтобы понять, как оно работает. Но есть много книг: Android разработка с нуля. И вот этого мне не понять.khim
04.10.2019 12:43Но есть много книг: Android разработка с нуля.
Такие книги, в общем-то были всегда. Чем Delphi Programming for Dummies отличается от вашего гипотетического «Android разработка с нуля»? Да ничем.
Но как-то мне как-то всегда казалось, что люди, читающие эти книги, понимают — что это всё способ «быстро впрыгнуть в разработку»… а фундаментальные вещи они, потом, всё равно как-нибудь изучат.
Но в последнее время я, действительно, всё чаще встречаю людей, которые изучают подобную литературу, устраиваются на работу… и всё — больше им, типа, ничего не интересно и не нужно…
И вот этого мне не понять.
А мне как раз понять. У меня есть знакомый, который как раз сейчас пытается освоить премудрости программирования. При этом у него есть жёсткий срок: 3-6 месяцев. Если он не найдёт никакой программистской работы за этот строк — то ему придётся снова идти работать продавцом, чтобы его семья с голоду не подохла. А ушёл от оттуда потому, что если ты работаешь по 12 часов в день семь дней в неделю на двух работах — то ни о каком изучении программирования ни в каком режиме и речи идти не может.
То есть он либо читает книгу «Android разработка с нуля», начинает что-то такое программировать — и потом изучает всё остальное… либо он остаётся продавцом на всю жизнь.
Так что существование таких книг меня не удивляет. Они всегда были и будут. Удивляют люди, которые читают такие книги, куда-то там устраиваются… и всё. А потом жалуются, что и через 5 и через 10 лет получают меньше, чем «выскочки-олимпиадники».
Они что — реально думаю, что вот кроме того, что написано в этих книгах — им больше ничего не нужно? И что люди, серьёзно изучавшие программирование 4-6 «по большому счёту» от них ничем не отличаются?sgjurano
05.10.2019 10:15Программировать вообще-то довольно сложно, можно с работы монтажником/эникейщиком начинать, если уж очень хочется вкатиться.
khim
05.10.2019 16:59Монтажником/эникейщиком очень сложно работать удалённо… да и нет оттуда роста до нормального разработчика.
А вот от человека, знающего немного, как мастерить поделки для Андроида до полноценного разработчика — некоторое количество опыта и чтение курса про алгоритмы…sgjurano
05.10.2019 21:41Ну почему же, вполне существует дорога через администрирование, где программировать таки надо, а требования к навыкам программирования на порядок ниже, заодно можно многое узнать про сети, ОС и всякий разный софт, а потом уже перейти в разработку.
У меня был как раз такой путь, он года 3 занял. Многие коллеги тоже пришли в разработку именно так.
vdshat
06.10.2019 00:05Друг уезжал в Германию и захотел там работать в ИТ, а был электронщиком и бизнесменом. Полгода потратил на книги для чайников, а результата не было, потом, все же, пригласил меня и мы начали с Дейтла и дело пошло. Недавно приходил юрист после таких же книг, но если нет базы и понимания что там внутри и почему, то мне, как работодателю, дороже нанимать таких «специалистов».
Raspy
05.10.2019 00:42Зато в этом проекте: habr.com/ru/post/283166 нет ни одного ишьюса! И уже 8 лет в продакшенах крутится!
khim
05.10.2019 17:02Может прокрутиться и дольше. А может и меньше. Но конец-то немного предсказуем. Ну или так.
Кривая архитектура — кончается всегда одинаково. Вопрос только в сроках.
vdshat
06.10.2019 00:52В телекоме СТО каждый год на общих собраниях вспоминал, что лучшее — враг хорошему и у нас есть автомат на чистом С, который 14 лет колбасит. Ушли они одновременно, т.к. с приходом эры Интернета в смартфонах автомат перестал справляться с трафиком, а маштабировать его нельзя и заменить не чем. Поэтому заменили и СТО, т.к. не смотрел в будущее.
neoline777
07.10.2019 16:51Вот на днях написал свой велосипед — функцию для замены стандартного print_r
потратил несколько часов, вышло 40 строк кода, зато теперь она умеет выводить в красивой форме не только массивы, но имя переданной переменной или со своим текстом, принимать на вход функции, да хоть вложенный массив без знака $.
Я даже удивлен почему никто нигде это раньше не делал, но мне надоело постоянно мучаться с нормальным выводом на экран.
Более того, заменил эту функцию в плагине console wrap для редактора sublime (который тоже не идеален), зато теперь достаточно нажать пару кнопок, чтобы выделенную переменную обернуть этой функцией и не надо каждый раз писать одно и тоже.
Конечно, можно было ее не писать, но в плагине не было учтено перенос символа $ переменной, надо было ее дописывать, но для этого надо было прицелиться после скобки ( и перед началом переменной и вставить символ.
Вот в этом случае велосипед лучше всего помогает оптимизировать.
Впрочем, наверное в фреймворках есть свои… но мне чужого барахла не надо.MetaDone
07.10.2019 16:58а можно было бы воспользоваться xdebug или symfony.com/doc/current/components/var_dumper.html и не мучаться. ну и использовать какой-нибудь phpstorm чтоб уж совсем красиво все было — ставите брейкпойнт и все нужное узнаете
oco
04.10.2019 13:24+1Я стал замечать, что по какой-то причине люди перестали разбираться в базе, а переходят сразу к PHP. Они не знают, как он работает изнутри, они просто пишут на PHP, а не с помощью. Их не беспокоит, как работает PHP внутри, в этом же сила инкапсуляции. Да и не интересно это. А если чего-то в этом PHP нет, то эту функцию сделать невозможно.
(Сарказм)
Эта вечная проблема наслаивания абстракций…
medvoodoo
04.10.2019 16:04Полностью согласен. Здесь вопрос. вам машину ремонтировать( фреймворк/язык разрабатывать/расширять) или сайты делать? Если мне необходимо доехать из А в Б (сделать стандартный сайт) — зачем мне лезть под капот и разбирать движок по винтикам.
onlinehead
05.10.2019 11:21Проводя вашу аналогию с водителями дальше можно кстати неплохо объяснить ситуацию.
Водитель-любитель, которому надо пару раз из точки А в точку Б сгонять в движок действительно вряд ли полезет, незачем.
А вот водитель профессионал, который ездит по плохого состояния дорогам (плохой код вокруг него), без доступа к оборудованию и сервисам для починки (слабая команда) как раз должен разбираться в движке и прочих компонентах на отлично, потому что кроме него у него никого в дороге нет и случись чего — сервис будет двое суток ехать.
Профессиональный водитель текущим ремонтом заниматься не будет без крайней необходимости или неуемного интереса (Фреймворк, то есть, разрабатывать и починять), но когда надо быстро привести систему в работоспособное состояние или что то в ней изменить под себя (думаю понятно о чем речь) — он готов и знает как.
muxa_ru
04.10.2019 13:27<?
echo "Hello world"; // и в браузере у нас скачивается index.php :)
?>Так надо было сделать index.phtml и всё бы заработало
HerrDirektor
04.10.2019 13:46Хех, автор ловко задел мои подернутые паутиной струны где-то в глубине души. А ведь таки да, было очень похоже!
Ahen
04.10.2019 14:07+1Ну таки Вы начинали обучение не сейчас и даже не год назад.
PHP 4.2 был выпущен в 2002, 5.2 в 2006. Были в те годы модные фреймворки? Да нет, композер то в 2011-2012 вышел.
Сейчас же на условного школьника выливается огромное количество противоречивой информации и в первую очередь человеку нужно научиться отличать устаревшую информацию от актуальной.
Как раньше — открываешь блокнот, пишешь (копируешь) код, заливаешь на бесплатный хостинг без бд, видишь ошибку с кодировками, ищешь решение, находишь нотпад++, попутно узнаешь что такое денвер и вот уже ты локально имеешь свою дырявую форму авторизации, в которой логин и пароль видны в гет параметрах.
Сейчас же ты узнаешь не об условном нотпад++, а о куче различных IDE. И да, ты можешь написать тот-же код в блокноте, но везде ведь кричат о самом лучшем IDE (и везде о разных). Уже появляется желание пойти на курс или прочитать книгу «Выбери свое IDE за 24 часа». И вот этих наворотов — композеров, фреймворков, апи, лучших практик, ORM, аджакс и прочее прочее прочее, их стало слишком много. И все это нужно, чтобы написать СОВРЕМЕННЫЙ проект состоящий из формы авторизации. А кто хочет начинать не с современного?
И вроде все стало проще, берем фреймворк, подтягиваем зависимости, херак — херак и готово. А на деле порог вхождения увеличился, из-за возросшего объема информации и порой неактуальной выдачи в поисковиках. И вот тут то школьник и забивает болт на эту идею, а ему всего-то нужен проводник, план обучения современным технологиям, которые выросли вокруг PHP.A114n
04.10.2019 14:17И да, ты можешь написать тот-же код в блокноте, но везде ведь кричат о самом лучшем IDE (и везде о разных)
Да ладно бы кричали, так ведь ещё и прямо в вакансиях пишут «Требуется знание Eclipse».
khim
04.10.2019 14:44Осталось понять чем всё это отличается от ситуации в 2002м году, когда и IDE разных было полно (хошь — Visual Basic, хошь — Delphi, хошь — Visual Studio) и фреймворков — тоже на любой вкус.
Тем, что тогда эти технологии считались «устаревшими», а вокруг PHP был хайп? Так и сейчас есть всякие Arduino и прочий rust/golang!
Мне кажется что всё банальнее: в 2002м ещё о 1998м/2000м люди не забывали и понимали, что наличие какого-то опыта использования фреймворка — не есть гарантия трудоустройства.
Так всё будет хорошо: один кризис (а следующий будет покрупнее и 2000го и 2008го) — и горе-разработчки всё поймут.
Жизнь штука такая… жестокая. Не хотите учиться «по хорошему» — заставит «по плохому»…Ti_Fix
07.10.2019 12:09когда и IDE разных было полно (хошь — Visual Basic, хошь — Delphi, хошь — Visual Studio)
С каких пор Visual Basic и Delphi стали IDE?khim
07.10.2019 12:49+2А с каких пор это не IDE? Даже самый первый BASIC комплектовался IDE.
Или вы в настоящих шотландцев играть собираетесь или давайте сюда что-нибудь признаваемое хоть кем-нибудь, кроме вас, определение IDE как «интегрированные редактор кода и компилятор плюс возможность запуска программ».
Мне вообще смешно наблюдать споры (в которые я никогда не вмешиваюсь, так как не вижу смысла спорить с людьми, путающимися в терминах): IDE vs Vi/Emacs. Ребята, вы о чём вообще? GNU Emacs, an extensible editor that is commonly used as an IDE on Unix-like systems красуется прям посреди статьи об IDE в Википедии!
А Delphi и Visual Basic предоставляли куда больше, чем «редактор с возможностью запуска кода»… и, с точки зрения прикладного программиста, больше, чем многие современные IDE! Возможность рефакторинга кода — это прокрасно, но зачем она, если вы всё равно не можете кнопочки мышкой подвигать?Ti_Fix
07.10.2019 14:16-1Поясню свою мысль: Visual Basic и Delphi это языки программирования, а не интерактивные среды разработки (программы, в которых вы пишите код). IDE, как вы сами написали, это «интегрированные редакторы кода». Например, на языке Delphi можно писать в IDE Embarcadero Delphi, или в Lazarus. Ни разу не имел ввиду противопоставление IDE vs Vi/Emacs. То же самое относительно Visual_Basic: язык программирования Visual_Basic, а IDE — Visual Studio, notepad++ или любой другой на ваш выбор.
khim
07.10.2019 14:54-1IDE — Visual Studio, notepad++ или любой другой на ваш выбор.
С удовольствием почитаю статью про то, как вы будете «Visual Studio, notepad++ или любой другой на ваш выбор» среде будете писатьь программы на Visual Basic (не путать с Visual Basic .Net).
Напомню, что в Visual Basic программа не в текстовом файле хранится, так что будет интересно как вы её собрались перегонять в Notepad++ или Visual Studio.Ti_Fix
07.10.2019 16:01-1Почитал про историю развития языка Visual Basic. Получается, что «Visual Basic .Net» это следующая версия языка Visual Basic, сразу после версии 6.0. До версии .NET была одна IDE, после выхода Visual Basic .Net более одной (из того, что нашел: Visual Studio, Visual Basic Express). Идет время и появляются новые версии языка, как и большее количество IDE для написания программ на данном языке. До выхода NET версии, действительно, писать программы кроме как в IDE (одной единственной) было нельзя, с текущей версией языка это возможно. Возможно вы скажете, что Visual Basic 6.0 и Visual Basic NET абсолютно разные языки программирования, но я так не считаю.
khim
07.10.2019 18:01Получается, что «Visual Basic .Net» это следующая версия языка Visual Basic, сразу после версии 6.0.
С точки зрения маркетологов — да. С точки зрения программистов — нет.
Отличие между Visual Basic и Visual Basic .NET — больше, чем отличия между ранними версиями C# и Java! И в обоих случаях Microsoft предлагал очень корявые конверторы из одного языка в другой, кстати.
Возможно вы скажете, что Visual Basic 6.0 и Visual Basic NET абсолютно разные языки программирования, но я так не считаю.
Что считаете вы — не так важно. Важно что считают разработчики… а считают они вот что: за последнее время Visual Basic перешёл в популярности с 20го места на 16е! Уже кстати, то, что TIOBE считает отдельно программистов на Visual Basic и Visual Basic .NET (и да, он тоже достаточно популярен) и в вакансиях они описываются отдельно… и что разработчики за 20 лет (sic!) так и не перешли с одного на другой (статьи на эту тему всё ещё появляются)… могли бы натолкнуть на мысли некоторые.
Приведите мне ещё один пример другого языка, где бы переходу с одной версии на другую так же яростно бы сопротивлялись? При том что даже фирма, выпустившая VB6 уже прекратила его поддержку давным-давно?
P.S. И да, про Perl6 я знаю, спасибо. Там даже разработчики уже согласились с тем, что это нифига не разные версии одного языка, речь даже о переименовании одного из них зашла. Так что Perl6 — это тоже скорее повод считать Visual Basic и Visual Basic .NET двумя разными языками, чем одним…
LeMaX
04.10.2019 20:41Ох, заставили же Вы понастальгировать :)
Начинал разработку еще с php 3.5, помню хайп вокруг register_globals on и множества любителей и только зарождение ООП в php, веселое время было и замечательное, мы с пачкой энтузиастов начинали изучать php как один из простых языков. Было желание узнать все, официальная дока irc каналы, php-nuke как лучшая система и почти уникальная на тот момент…
По теме…
К сожалению в данный момент есть все то, чего не было у нас тогда. «Бестпрактикс», коммерция в сообществах, почти мертвый опенсоурс который так же стал коммерческим, абстракция на множество «чихов» и в основы уже почти ни кто не вдается, зачем основы если есть абстракция и документация по популярному yii, laravel, а множество пакетов позволяет собрать свою «цмс» просто настроив зависимости композера.Compolomus
05.10.2019 01:35Вы бы посмотрели сколько вопросов на тосторе от новичков про тот же ларавель.
sumanai
05.10.2019 21:54Это ещё что. Вкатиться в JS разработку с современными инструментами даже я, программист, быстро не могу. Точнее могу взять готовые конфиги и пакеты, тогда всё работает, но если начинаю собирать всё с нуля, оценивать и изучать, что для чего и как, то просто закапываюсь с головой и в итоге ничего работающего получить не могу.
Kanut
04.10.2019 14:50По моему это всё очень сильно от человека зависит. Если человек хочет просто "нажимать кнопочки и получaть деньги", то вы можете сколько угодно обучать его основам, но он всё равно всё забудет и будет лепить свои "велоспеды". А если человеку интересно учиться и понимать как оно всё устроено, то дайте ему "велосипед" и он сам найдёт где выучить основы чтобы понять как его сделать правильно.
И проблема скорее в том что раньше в ИТ шли в основном те, кому ИТ было интересно само по себе. А теперь в ИТ идёт очень много людей, которым зарабатывать деньги гораздо интереснее чем сам процесс.
A114n
05.10.2019 10:37Если человек хочет просто «нажимать кнопочки и получaть деньги»
Вы так говорите, будто это что-то плохое.
Никто не осуждает электрика, токаря, пекаряили депутатакоторый нажимает кнопочки и получает деньги. И только программист в представлении некоторых других программистов должен быть высшим одухотворённым существом, прозревающим глубины познания.
Пора уже привыкнуть к тому, что программист это сантехник XXI века, что любой человек может за полгода научиться нажимать кнопочки и получать за это денег на хлебушек.Kanut
05.10.2019 10:43Вы так говорите, будто это что-то плохое.
Так а я нигде и не говорил что это само по себе обязательно что-то плохое. Просто надо понимать что это тоже имеет свои последствия. Например в виде тестов и проверок на "профпригодность" на собеседованиях. И кучи разных других вещей.
khim
05.10.2019 17:06Пора уже привыкнуть к тому, что программист это сантехник XXI века, что любой человек может за полгода научиться нажимать кнопочки и получать за это денег на хлебушек.
Да ради бога! Если бы ещё эти «сантехники» не пытались устраиваться на нормальные вакансии, где требуются нормальные знания — совсем хорошо бы было…
nitso
04.10.2019 15:37Кажется, что раньше "учили PHP" так же, как и сейчас "учат фреймворками" — дают набор шаблонов для запоминания, из которых можно слепить некий каркас. Однако, сегодня обучение — это бизнес, который готовы попробовать многие, да и технологии обучения (онлайн, вебинары) дают волю любому попробовать это.
Можно сделать отличный курс, который подведет к фреймворкам через основы:
- от простых запросов в БД через осознание проблем, с которыми можно столкнуться, к DBAL;
- от
if ($_POST['user_id'] == 1)
до PSR-7 и примеров реализации в фреймворках; - от
include 'function.php'
черезspl_autoload
к PSR-4 - от
index.php?page=contacts
до роутера на конкретных примерах.
Но, такой курс получится дольше, сложнее, дороже. Какой спрос, такое и предложение.
На той же курсере вполне есть выбор из разных по сложности вариантов
Кажется, что все желающие идут сегодня примерно по такому же пути.
megahertz
04.10.2019 17:36Как будто про меня написано. Спасибо добрым людям, рассказали про mysql_escape_string еще до первого деплоя.
Такой старт получился главным образом из-за того, что лучшие практики только зарождались. Сейчас, когда нужно разово вникнуть в новый стек активно прибегаю к руководствам по быстрому старту и стараюсь не отходить от рекомендаций. Желание копнуть глубже приходится на время подавлять, чтобы сроки не затянулись.
lizergil
04.10.2019 18:07+2Очевидно, что изучение программирования (алгоритмы и структуры данных), парадигмы и синтаксиса языка (core api), его библиотек (library/framework api) — это разные последовательные этапы. Только недобросовестная контора предлагает начинать изучать программирование с фреймворков. То же самое, что изучать, скажем, алгебру не зная арифметики.
naneri
05.10.2019 08:04Тут скорее наоборот, фреймворки это наподобие ньютоновской физики, а алгоритмы и структуры данных это уже полгубже под капот.
khim
05.10.2019 17:13Нет, это именно так, как сказали. Просто… в современном мире же алгебру как раз и изучают не зная, на самом деле, арифметики. Когда среди пятидесяти моих учеников-первокурсников (у меня две группы) восемь человек считают, что три шестых (3/6) равно одной трети (1/3).
c0t0d0
04.10.2019 18:07+1Хренак-хренак и в прод. В общем, поэтому вовсю фреймворки и внутрь не лазят.
denisromanenko
04.10.2019 18:12+1Да и слава богу.
Пусть лучше неопытный человек пишет на хорошем поддерживаемом фреймворке, не допуская кучи нелепых ошибок и уязвимостей. Вообще немного освоится во всём этом, научится работать от постановки и продумывания задачи до деплоя.
А вот когда он поймёт, что его знаний просто не хватает для реализации чего-то с помощью фреймворка — спросит совета на форуме, и ему более опытные люди подскажут куда копать.
И ссылку на PHP Right Way дадут.
Но он уже в коммьюнити, он более-менее «вдупляет» и может сформировать правильные вопросы, потому что фреймворк провёл его уже через все буреломы — и уже не страшно, и можно уже самому залезть в терновый куст и немного там покопаться.
А то в былые годы ты прямо годами мог продираться к тому, чтобы понять, как сделать рабочий онлайн-магазин, а потом — боже святый — пароли то в плэйн-текст. А как «солить»? «А хз, солить что ли надо?» «А я никогда не солил, и всё работает, уже пять лет мой сайт пчеловодов-любителей нормально живёт.» «А я и строки не эскейплю и ничего».
Всего этого брожения умов, которые проторили себе путь с самого низа и ушли в разных направлениях — спасибо, уже наелись.
Лучше новичок, который готовыми блоками может построить дом через 3 месяца, чем доморощенный профи, который сам обжигает корявый кирпич и складывает кособоко. Первый научится правильно и сможет потом ухватить детали — второму придется переломать себя.
S-e-n
04.10.2019 19:55+3Практика показывает, что новички, воспитанные делать Сразу Правильно при встрече с нестандартной задачей испытывают агонию и ступор, в отличие от вторых.
khim
04.10.2019 20:15+2Пусть лучше неопытный человек пишет на хорошем поддерживаемом фреймворке, не допуская кучи нелепых ошибок и уязвимостей.
Ваша вторая часть ну никак не следует из первой. Какие бы ни были великолепные у вас фреймворки — при незнании «матчасти» уязвимости у вас будут всё равно.
А вот когда он поймёт, что его знаний просто не хватает для реализации чего-то с помощью фреймворка — спросит совета на форуме, и ему более опытные люди подскажут куда копать.
Так он не поймёт. Он пароль прямо в URL засунет — и у него всё заработает.
Лучше новичок, который готовыми блоками может построить дом через 3 месяца, чем доморощенный профи, который сам обжигает корявый кирпич и складывает кособоко.
Вот только новичёк, не знающий как работать мастерком состряпает такой дом, что там во время дождя нужно будет с зонтиком сидеть. А если, не дай бог, чуток тряхнёт — то и не будет у вас дома.
Готовые блоки, увы, не отменяют головы.
GreedyIvan
04.10.2019 18:13-1Когда проектом занимается человек, который знает фреймфорк, на котором пишет, то, смотря на результат его трудов, видишь, что о том, что сделано, знания шерить ненужно.
А когда читаешь говно-код мастера «вам шашечки или ехать», то сразу возникают вопросы: а что это за валидация такая интересная, что это за бест-практики тестирования такие, почему нельзя было использовать стандартный логер? И самая главная головная боль: теперь надо будет учить (тратить время) других, чтобы они разбирались в этих выдающихся инженерных решениях, не имеющих ни документации, ни известных за многолетный опыт использования сообществом знаний о преимуществах и недостатках данных конкретных решений.
Намного выгоднее, используя в проекте конкретный фреймфорк, дать время новичку освоить его практики, а не позволять тащить бекграунд его предыдущих проектов сюда.
Опытный и так себе не позволит, работая в рамках фрейморка, изобретать велосипед для того, что итак уже в нём реализовано. Даже если он раньше с этим не сталкивался. В этом его ключевое отличие от новичка — не тащить за собой свои «достижения» из компании в компанию: я на прошлом месте работы так делал!
EgDude
04.10.2019 20:03+1Не совсем согласен с, насколько я понял, одним из основных посылов статьи, что обучение через фреймворки это
Мы вроде бы и обучились, а как оно работает изнутри так и не поняли.
Сам я всего пару лет назад практически случайно с околонулевыми знаниями попал в разработку, сразу в продуктовую команду с yii1/yii2.
На мой взгляд писать на фреймворке и не разбираться как он работает изнутри возможно только в одном случае — если верх сложности для ваших задач это вывести данные из БД на страничку.
Иначе варианта два:
1) Ты пишешь с большим количеством ошибок (ни одни фреймворк не компенсирует отсутствие опыта и профессиональных навыков), наступаешь на одни и те же грабли, начинаешь копаться почему ты на них наступаешь и неизбежно постепенно погружаешься в документацию и понимаешь как же это все там работает под капотом.
2) Ты пишешь с большим количеством ошибок, но процессы в твоя команда достаточно профессиональна и процессы в ней налажены достаточно хорошо и твой код не проходит ревью, а фидбеком ты получаешь ссылки на документацию/статьи/объяснение почему так делать не стоит. В итоге постепенно ты также становишься лучше даже невольно начинаешь понимать как оно там все работает.
Все же я надеюсь и почти уверен, что нельзя писать что-то хоть немного серьезное в нормальной команде и не иметь представления о том как работает то на чем ты пишешь.
feakuru
04.10.2019 21:24Проблема тут в том, что любой другой язык изучают сначала отдельно, а потом прикладывают к фреймворку. Тот же Python — никак не получится (ну ладно, получится, но будет малоэффективно) сразу изучать Django, нужно понимать, как язык работает. А курсы по PHP, видимо, пытаются пропустить эту стадию — и преуспевают, потому что язык и фреймворк это поощряют.
Писал это и подумал, что тут ещё роль играет фактор поверхностности подхода. Не хочет клиент писать бэкенд и фронтенд, клиент хочет, чтобы был сайт, и чтобы сайт работал — поэтому ему вполне хватит человека, который не знает, как фреймворк под капотом работает. Сложных задач всё равно не будет, а когда будут, можно нанять более сложного разработчика прикручивать их к тому, что уже есть. Грустно, согласен, но закономерно.
mSnus
04.10.2019 23:01По-хорошему, надо обучение начинать с Ассемблера, чтобы привыкнуть байты экономить… потом C, чтобы пострелять себе в ноги хорошенько с выделением памяти и её утечками…
потом Delphi, чтобы проникнуться ООП в полной мере…
а дальше переходить на PHP3 и дальше, дальше… эх, ностальгия!
tmin10
04.10.2019 23:58Хм, а вот и обратная сторона:
Я начинал PHP ещё в школе, писал что-то похожее из статьи по книжке. В книге было и как написать простые счётчики и небольшой форум с необходимым функционалом. Также было написано про разные возможные уязвимости (XSS, SQL-inj) и как их избежать. После этого я написал свой сайт полностью с нуля (с файликами sys.php, logout.php и прочим), который до сих пор в таком состоянии и находится вот уже более 10 лет (смотреть в тот код довольно неприятно, но немного его поддерживаю, недавно перевёл на PHP 7 и фиксил основные ошибки).
Так вот, имея такой бэкграунд, я узнал о фреймворках и… они показались мне очень сложными. Я смотрел Yii, его основные концепции MVC, шаблонизации, ORM. Выглядело чересчур усложнённым и вместо того, чтобы взять и просто использовать, я написал свой MVC каркас (ну как же, я же знаю PHP, напишу лучше и проще, думал я тогда). Там были основные модули, подобие шаблонов, но в основном оно не ушло далеко от примеров из той самой книжки, с которой я начинал.
Понимание того, что надо использовать фреймворки для упрощения себе жизни, а не строить каждый раз свои велосипеды, пришло позднее. Да, тот каркас был очень прост и понятен, к нему можно написать расширения и мне повезло, что его архитектура позволяла реализовывать много нужных вещей. Но его сложно поддерживать, расширять и весь базовый функционал логина, работы с базой нужно писать самостоятельно каждый раз.
Но понимание этого пришло не сразу, а когда я уже сменил место работы. А мой MVC каркас так и продолжает жить в старых проектах и мне немного за это стыдно.khim
05.10.2019 17:16А мой MVC каркас так и продолжает жить в старых проектах и мне немного за это стыдно.
Это нормально. Если вам не стыдно за то, что вы творили в коде 10 лет назад — то это значит, что за эти 10 лет вы ничего не узнали и ничему не научились.
Вот это — ужасно. А что вы когда-то писали плохой код… ну так лучше писать сначала плохой код, а потом научиться писать хороший, чем всю жизнь порождать дерьмо…
Nookie-Grey
05.10.2019 00:02Очень спорно! Хотя мой коммент будет не менее спорным
TL;DR Надо доверять абстракциям.
Дальше пойдёт в основном про front, но думаю справедливо и для PHP
Чем дальше углубляешься, тем больше радуешься, что за тебя уже всё продумали и реализовали, осталось только это соединить и решать бизнес задачи.
Конечно углубляешься, натыкаешься, иногда вдохновляешься что-то запилить, но представив себе весь объём, который вот так самому наклипав изучить, понимаешь что и десятка жизней не хватит. Сброщик, фреймворк, ui kit, и каждый состоит из модулей и к нему еще идут плагины, так еще же есть IDE, сам язык, его движок, погоди а браузеры, их особенности, погоди а REST, GraphQL, а WebSockets, Events и т.п. и т.д.
Хорошо — это ваша специализация, а ось, а микросхемы? Ну вы поняли.
Мой первый скрипт — это jQuery без js. Цепочка вызовов, перемещение по дум, навешивание событий и ни каких переменных и функций. Но по живой книге, дальше конечно изучил сам язык, подтянулись фреймворки.
Писать что-то своё — здорово, но нельзя быть оторванным от мира, пишите то, чего нет, а найти это на самом деле не сложно.
Да, надо углубляться и изучать, но фреймворки сейчас — это как ЯП тогда, вы же не строчите двоичный код?
Да и я не думаю что новичку надо прям разъяснять с самого начала всю разницу прототипных классов от классического их понимания.
Сейчас огромная потребность в руках и фреймворки позволяют заполнить некоторую брешь. А как глубоко вы погрузитесь уже зависит от человека.khim
05.10.2019 17:28TL;DR Надо доверять абстракциям.
Абстракции текут. Ваш КО.
Чем дальше углубляешься, тем больше радуешься, что за тебя уже всё продумали и реализовали, осталось только это соединить и решать бизнес задачи.
А не могли бы вы привести пример этой бизнес-задачи, которую нельзя было бы легко решить на Delphi 2 лет так 20 назад? И рассказать — как часто вы с этой бизнес задачей сталькиваетесь?
Только не «хотелки от заказчика», которые ничем не ограничены, а что-то вот… «бизнесовое».
OtshelnikFm
05.10.2019 01:53+1Бросил я радиоэлектронику в 2005м. Прошел путь от ламп, транзисторов, логических микросхем. До микроконтроллеров, увы не дошел.
И в 2006м я удивился — как парень, который нифига не знает радиоэлектронику (к слову — никак) — чинит принтеры и компы. Как происходило: включает комп — не грузится. Начинает с малого — память вытащит — другой заменит и пошел по компонентам. Потом повзрослел и по сигналам биоса определял в чем дело. Напомню — радиоэлектронику он и не начал учить. Потом вижу пошел дальше — феном материнки восстанавливал, видеокарты грел — и блин — работал метод.
Второй пример — вместе в радиокружок ходили с челом. Потом он начал чинить телефоны, потом смартфоны. Но я видел что он застрял еще тогда на лампах и чуть позже на выдергивании конденсаторов «КМ» и прочего драгмета. И он чинит смартфоны. Свой небольшой бизнес у него. Как? Я без понятия.
Они пропустили все основы, все азы. И тупо ремонт блочным методом. Так вот и программирование для многих — черный ящик с «подай сюда, то — получишь на выходе это».
А как больно смотреть сейчас как люди сайты на вордпрессе с помощью Elementor «программируют». И это у них на потоке.
p.s. я тоже сейчас учусь на своих костылях и грабли на моем пути — их много. Если кто зайдет и из последних моих работ на гитхабе раскритикует в issue — буду признателен.tmin10
05.10.2019 11:25К слову, Elementor неплохая штука. У нас на проекте оно сэкономило время на вёрстку, в которую никто не хотел особо лезть. Да, там есть ограничения и некоторые особенности, но если нужно собрать страничку из более-менее типовых блоков — elementor отличная штука.
Botu
05.10.2019 02:09svoysredychuzih.livejournal.com/119943.html — вспомнил из прошлого анекдот, я первый раз его в 2004 году увидел. Очень похож подход дельфиста, кстати с тех пор к дельфистам остался стериотип из анекдота…
Ну не суть.
Для меня большая разница между тем, что тогда и тем, что сейчас — интернет, а именно легкость к получению большого кол-ва разностороннего материала.
Уже на старте, и сейчас и тогда, наверное, каждый понимал, что есть проблемы с защитой, с ресурсами, с универсальностью, с производительностью.
И если не брать случаи, когда хотят просто по быстрому срубить и свалить и больше не начинать, то каждый уже сам осознано принимает решение.
«Да, я понимаю, что в моём проекте много дырок, но кому он нужен», «Да, оптимизацией с точки зрения производительности не занимался, но он и так пойдёт, а дальше расти не будет», «Да, проект запуститься только у меня и на таких же кранах, как у меня, ну и больше никому не надо ...» и так далее.
Если же не так, то как минимум будет поиск —
Ddos атаки, как избежать
уязвимости сайтов
java/php/c#/…. best practice
UI/UX/адаптивный дизайн
zurapa
05.10.2019 07:08Хорошо написал. Поддерживаю.
Я больше администратор, чем программист. Несколько недель назад в телеграм-чате зацепился с человеком. По его сообщениям до, человек производил впечатление опытного системного администратора, программиста. Даже, как то стыдно рядом с таким умничать, но я как-то сумничал понеслось, поехало, стал ему писать в личку, а потом в разговоре о Cygwin, он и раскрылся. Этот пацан по верхам нахватался всех этих популярных терминов, покатал чуть docker, может посмотрел обучалки по нему, не знаю, как, но человек реально в базе, в истории развития сред, в операционных системах мало что шарит, но увидишь это не сразу, а по оговоркам. Нет, конечно, может очень крутой админ его сразу бы разобрал, но мне потребовалось время. И в индустрии сейчас очень много петухов такого плана, которые своими яркими перьями и дичайше скоростным результатом, хоть и плохим, вызывают большие симпатии у окружающих и работодателей. Сейчас настало время модных хипстеров. Как всю там работает на низах, все эти протоколы, работа с памятью, ввод-вывод — не нужно, когда есть верхняя надстройка всё это делающее, пусть и не эффективно, пусть и дырявая, пусть даже падучая. У нас есть утилиты, которые будут отслеживать её падение и будет запускать. Да, да и это в прод. Директор всё равно не разбирается. Мы же ему не машину постоянно глохнущую на нейтрали даём, тут он точно не поймёт, где его «набманули»(этот термин придумал мой брат ещё, когда мы были совсем малышами).
Грустно это всё.
А вред от великов именно в корпорациях плохо. Глупо писать свою систему задач, при наличие уже безчисленного множества. Как минимум, можно взять за основу готовую. Но, всречаются и такие велосипедостроители, которые берутся в организации разработывать свой велосипед, собирая для этих целей целый отдел. Да и в целом открытое ПО развивается как-то на месте. Появляются всё более новые изощрённые методы, программы выполняющие известны функции, однако существуют целые прослойки, которые стоят на месте, потому что велосипедить там, где просто — легко, а в сложные дебри лезть не охота, может вообще не получиться.
adev_one
05.10.2019 07:20+1На мой взгляд, странно, что основами программирования, с которых нужно начинать свой путь новичкам, называются устаревшие подходы к проектированию кода на PHP. При том, что автор сам называет их неправильными. Если я начинаю программировать в 2019, зачем мне допускать такие же ошибки, как те, кто начинал в 2009?
stitakov
05.10.2019 09:32Хорошая статья, мне понравилось. Я преподаю в колледже и думаю, как лучше выстроить курс преподавания JS и PHP. Как не пропустить ничего основного и в то же время научить работать с фреймворком (например Yii2). Статья натолкнула на определенные мысли
A114n
Вам шашечки или ехать?
Заказчику нужно чтобы работник сделал работающую вещь. Что там под капотом его мало волнует.
Работнику нужно чтобы сделал и получил за это деньги. Что там под капотом его мало волнует.
Те, кого волнует — разберутся сами. Потом они поднимаются наверх и там парят в облаках чистой архитектуры, обсуждая преимущества хаскеля перед го. Это хорошо. Но кто в это время будет интернет-магазины для доставки пиццы писать?
khim
В принципе-то всё происходящее даже не так плохо для меня и топикстартера: люди, которым пофиг, что там «под капотом» — потеряют работу первыми, а те, кому нужно, чтобы их сайт, всё-таки, продолжал работать — заплатят за всю предшествующую экономию людям, которые таки понимают откуда что берётся… но да, ощущение странности всего происходящего — не покидает, да.
A114n
Найдут, кому починить. Вот вас наймут, вы будете чинить. Потом напишете статью на хабр о том, как тупой работодатель потерял кучу денег на двойной переделке одного и того же.
А дальше в дело вступают кривые прибылей-убытков. Быстрый ввод в строй с помощью индусского кода работодателю — прибыль. Шанс того что всё рассыпется и расходы на вашу работу — убыток. Пока прибыль выше убытков — ну вы понимаете?
Ошибка у вас в «заплатят за всю предшествующую экономию». Может заплатят, а может останутся в прибыли, вы-то откуда знаете? Судя по тому, что они процветают и могут ещё и вам платить — у них как раз всё в порядке.
В «Бойцовском клубе» тоже эта схема хорошо отражена. Ничего странного, просто бизнес.
khim
На практике я видел, в основном, совсем не ту схему, которую вы описываете: начинается всё так, как вы сказали, но в какой-то момент, когда всё готово развалиться — компанию «впаривают» какому-нибудь монстру. Инжинеры которого, увидев код, говорят «это лучше выбросить, чем переписать». И очередной «многообещающий стартап»… просто исчезает.
Но да, владельцы стартапа в прибыли… но это пока у крупных компаний есть «шальные деньги» на покупку этого… добра.
Но когда (не если!) «шальные деньги» кончатся — что будет? А всё просто будет: «перспективные стартапы» будут неожиданно закрываться без всяких продаж… И всё. Вся разница. Вот только она сделает и все эти стартапы и людей, на них работающих попросту ненужными.
tcapb1
При этом, шансов на то, что рассыплется код, написанный на фреймворке, сильно меньше, чем в случае кода из поста с голыми запросами к SQL. Фреймворк уже задаёт скелет, структуру проекту, и вы будете использовать практики проектирования даже не зная как называется тот или иной шаблон проектирования, просто потому что фреймворк говорит вам писать так.
И почему вы считаете, что встретив задачу, которая не решается базовыми средствами фреймворка, разработчик обязательно сдастся? Это как раз и будет поводом разобраться как всё устроено внутри и в конце концов выдать решение.
Т.е. неопытный разработчик, неважно с чего он начинает, с фреймворка или с (извините) Vanilla PHP всё равно будет делать ошибки, оставлять дыры в безопасности и т.д. А с набором опыта и первый и второй тип разработчика придут примерно к тому же самому. Просто первый начнёт обучение с азов, а второй — по мере того, как будет разбираться в устройстве фреймворка.
И уж как-то больше доверия к неопытному Laravel-разработчику, чем к неопытному велосипедисту.
namikiri
Вот после такого подхода мы и получаем тупые «уязвимости» типа торчащего наружу MongoDB без авторизации, кривых сайтов, жрущих память как пара виртуальных машин с Linux и греющих процессор стартовой страницей, сливы данных и вот это всё.
Ну оно же работает!
androidovshchik
© Работает — не трогай!
neoline777
А потом эти новые знатоки учат новичков программированию, деградация.