Такой вопрос мне достаточно часто задают, и я таки решился на него ответить.
Хотел было написать очередную статью о собеседованиях, но мне кажется формат себя изжил, так что читаем и мотаем на ус.
Фундамент
Соображать и использовать Google. Первое оценить сложно, для этого придумано много «дурацких» вопросов для собеседований. Второй пункт либо прививается в первые дни испытательного срока, либо разработчик владеет им изначально, иной вариант никто не рассматривает…
Общепознавательное
У меня есть вопрос для собеседования на общее развитие, что происходит после ввода http://domain.com/index.php и нажатия enter, вы должны рассказать следующее:
- откуда и как браузер узнаёт IP адрес сервера
- почему наш запрос будет обрабатывать apache
- почему apache запустит PHP для обработки index.php
- каким образом PHP обрабатывает скрипт index.php
Я таки опять возвращаюсь к собеседованиям, и манит меня прям
Из чего состоит HTTP запрос/ответ (да откройте же firebug или что у вас там установлено и посмотрите)
Установка связки Apache+PHP+MySQL — потренируйтесь, это ой как надо.
Таки немного о linux — о различиях файловых систем в сравнении с windows, о раздаче прав (chmod) и как выйти из vi без сохранения.
Отдельно стоит упомянуть о гигиене кода — необходимо соблюдать стандарты кодирования, из множества существующих рекомендую стандарты кодирования Zend Framework’а, ну а лучше еще ознакомиться с соответствующими PSR
Пару-тройку дней неделя потребуется на усвоение базовых знаний.
PHP
Основы основ — получение и обработка входящих параметров.
Отправляем форму:
<form action="index.php?a=12"> <input type="hidden" name="b" value="6"/> <input type="submit" value="Calc!"> </form>
Листинг index.php
:
// в результате работы скрипта мы увидим ...
function some_logic($a, $b = 24) {
return ($a+$b)/$_REQUEST['b'];
}
$var1 = $_GET['a'];
echo some_logic($var1);
[/php]
Работа с циклами, массивами и строками.
[php]
// переставьте буквы в словах в обратном порядке
$str = "Hello world!";
[/php]
Работа с базой данных и с файлами. Для усвоения материала — вот вам задание: написать анонимную доску объявлений (с бл… аплоадом картинок)
Должны знать как работает механизм сессий – т.е. что происходит от момента вызова session_start, и каким боком это всё связано с cookies (помните я говорил о HTTP?).
Знать для чего служит include, require и какая между ними разница.
Разницу между echo и print не только знать, но и понимать.
Таки научиться работать с объектами, понимать разницу между абстрактным классом и интерфейсом.
Чем больше опыта, тем лучше, но основы вы подтяните за неделю, ОПП потребует еще недельку-другую.
SQL
Основы синтаксиса SQL. Немного вникнуть в MySQL и понимать различия между MyISAM и InnoDB.
Знать как работают LEFT/RIGHT/INNER JOIN’ы — наглядно в статье Visual Representation of SQL Joins (ссылка на картинку для ленивых — Visual_SQL_JOINS_orig.jpg O_o)
Уметь спроектировать базу данных для небольшого проекта. Вот вам требования к БД библиотеки:
В базе данных должна храниться следующуя информация:
- Что за книги у нас есть в наличии
- Авторы книг
- Посетители библиотеки
- Библиотекари
Позволяет выполнить следующие запросы:
- Который вытащит всех авторов, которых читает посетитель “Иванов”
- Который позволит узнать кто на данный момент читает книги более 3-х суток
Переделать БД, т.к. в библиотеке зачастую больше, чем один экземпляр книги, а надо знать какой именно экземпляр брал посетитель.
Сосредоточенного изучения в течении недели вам хватит для выполнения данного задания, для реальной работы этого будет маловато.
HTML и CSS
Сверстайте пару страниц, от и до (HTML должен быть валидным). Не слушайте, что это работа дизайнера/верстальщика/кого-то еще. Поверьте моему опыту — вам отдадут свёрстанную страницу, никто за вас не будет интегрировать HTML шаблон в вашу систему, так что знание HTML и CSS в обязательном порядке.
Забудьте о том, что Smarty создан для верстальщиков, и они вам будут готовые шаблоны отдавать — это сказки. О Smarty тоже забудьте, хотя нет — иметь представление что это такое конечно надо, а вот использовать — нет.
Должны понимать CSS следующего содержания:
#my p.sel:first-line, .main li li a:hover + span { color:#f00; /* Что это за цвет? Включи логику! */ }
Узнать что есть блочная модель, да как работает float. Что есть margin и padding.
Дней пять недельки полторы вам хватит для освоения базовых навыков верстальщика.
JavaScript
Знать: синтаксис, о том как работают события, понимать что такое замыкание, и как работает AJAX. Это немного, изучение данных вопросов у вас не займет более недели. Рекомендую прочитать учебник Ильи Кантора.
Далее прочитайте первые шесть частей из моей серии «jQuery для начинающих» — это еще неделька на усвоение материала.
Еще чуть-чуть напрягов
Понимание шаблона MVC. Знакомство с каким-нить фреймворком (Zend Framework, Symfony, Yii, и т.д.). Можно пройти Quick Start от Zend Framework’а.
Научиться работать с БД посредством PDO. Знать что есть SQL-инъекция.
Познакомиться с какой-нить современной системой версий (да хоть с SVN)
И на что я могу расчитывать?
Два месяца изучения, и вы уже сможете претендовать на должность Junior PHP разработчик. Ответ на меркантильный вопрос смотрите на DOU.
P.S. Этот топик на хабре был конечно же заминусован, но я остался при своём мнении, и лишь слегка скорректировал сроки обучения, и да — описанный процесс обучение подразумевает, что вы уже знакомы хоть чуточку с программированием, хотя бы на уровне университетской программы.
Спасибо за ясное руководство! :)
А насколько нужно владеть математикой/матаном для того, чтобы быть “взрослым” программером и работать в серьезных продакшн-проектах?
в корне не согласен, пока будешь кухонным комбайном знаний будет мало, опыта мало, серьезных проектов мало и как следствие зарплаты мало
Пост называется “Что должен знать начинающий PHP разработчик”. Сложно представить УЗКОПРОФИЛЬНОГО НАЧИНАЮЩЕГО пхп-разработчика :)
это конечно да, но ждать от НАЧИНАЮЩЕГО пхп кодера вот этого всего точно не надо)
Надо добавить пункт про “сообщества”/форумы, и про человка который будет преподавать/разъяснять и это станет полностью нормальной статьей.
На хабре зря так отреагировали. Главное чтобы эта статья в 10ке встала в гугле на запрос как начать программировать на php
А можно такую же статью о Старшем PHP разработчике? Понимаю, это трудно, но было бы интересно
Спасибо, но поверь заминусовали потому что просо абстрактная инфо, это так же как например у когот мало опыта и нет времени на изучения чего то, а его шлют на гугл, а ему надо пару строк примера рабочего откуда он стартанет дельше.
было бы неплохо сделать ссылки на ответы на вопросы, цены бы не было этому посту, и на хабре б не заминусовали.
Вам бы многие были бы благодарны на ссылки на дельные статьи:
ТУТ ССЫЛКИ НА ПОСТЫ С ОТВЕТАМИ НА ЭТИ ВОПРОСЫ И ТАКЖЕ ДАЛЕЕ ПО ТЕКСТУ.
откуда и как браузер узнаёт IP адрес сервера
почему наш запрос будет обрабатывать apache
почему apache запустит PHP для обработки index.php
каким образом PHP обрабатывает скрипт index.php
ТУТ ССЫЛКИ НА ПОСТЫ С ОТВЕТАМИ НА ЭТИ ВОПРОСЫ И ТАКЖЕ ДАЛЕЕ ПО ТЕКСТУ.
Антон, большое Вам спасибо за статью – это как раз то, что меня интересовало, но у меня остался еще один вопрос: на какие книги(сайты) стоит обратить внимание, а что лучше не читать и не посещать?
С англоязычных хороший – http://www.phpmaster.com
http://vk.com/wall6591481_1142
Если следовать аналогии – то у меня есть еще и опыт водителя межгалактического транспорта, т.е. другими словами – тупняк, хочешь нормально зарабатывать, и чтобы за тобой бегали рекрутеры – вперёд учиться, учиться и еще раз учиться…
Статья хорошая.
Куда двигаться дальше, если я все это знаю? Напишите что должен знать профессиональный php разработчик.
Отлично, а где про это все можно почитать? Кто-нибудь посоветует источники?
Хорошая статья. Коротко, Ёмко, Доступно. Спасибо!
Всем доброе время.
Статья полезная- есть на что обратить внимание.
Нечего замысловатого или сверх истесанного в вопросах нет.(говорю как пока не работающий junior PHP ).
Скажу честно – ходил на подобное собеседование. Гугл рулит – все вопросы похожие…) Хотелось бы спросить, для junior так важно эти и подобные вопросы заучить?
может я не прав – но такое чувство, что не кто не смотрит на понимание… а главное знать ответ на 100 стандартных вопросов)
В стандартах кодирования Zend Framework’а написано использовать для отступов 4 пробела!!! Что мешает задать клик табуляции на 4 пробела? Это что же, так “тыкать сидеть”?
Очень полезная статья! Спасибо
http://habrahabr.ru/post/143392/
?
Объясните пожалуйста, почему в этой задачке
получается 4, по идее должно быть 6? (насколько я понял не доходит и get’а переменная а, но почему она не доходит)
Тот же вопрос! Ответьте, кто знает.
Спасибо большое)))
Ув. Антон, ответье пожалуйста правильно ли :
откуда и как браузер узнаёт IP адрес сервера
http://s57.radikal.ru/i157/1411/8a/daeab46ce80d.png
Правильно ли я считаю как это работает, если нет то где ошибка и как правильно?
И какую вы рекомендуете еще литературу ?
За ссылку на визуальные представления JOIN-ов мегареспект. Теперь при словах LEFT/RIGHT JOIN в височных долях не нарастают пульсации :) Это ж так очевидно и просто, но пока не увидишь – каша.