5 заметок с тегом

junior программист

Почему массив начинается с нуля?

UPD: читаем комментарии — мое объяснение не совсем верное, но будет понятно каждому.

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

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

Точка отсчета

Чтобы обозначить проблему при использовании отсчета массива не с нуля, а с единицы, приведу пример:

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

Когда вы будете выводить на графике или в таблице данные, вы сразу столкнетесь с тем, что 1 — будет результат за январь, а 12 — результат за декабрь. А где же будет исходно значение? Относительно чего будет прирост в январе?

Правильно! К моменту подсчета у вас должно быть какое-то значение, оно может быть равно нулю или иметь какое-то численное значение. И в массиве значений оно будет первым:

{
0 => 2 тыс // столько было например в прошлом месяце, если кафе открылось, то оно будет равно 0
1 => 1.7 тыс // посещения в январе
2 => 2.1 тыс // посещения в феврале
3 => 1.9 тыс // посещения в марте
...
12 => n тыс  // посещения в декабре
}

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

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

Когда нужно вывести первый элемент массива уже на автомате пишешь

$array[0]

где 0 — индекс первого элемента :)




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

2017   junior программист   Советы

Тестовые задания для junior программиста на PHP

Делюсь некоторыми тестовыми заданиям, с которыми столкнулся при поиске работы на джуниора.
Если вам недостаточно заданий — просто разошлите компаниям на ХедХантере письма с просьбой выслать тестовое задание.

Тестовые задания Yii2

Создание REST API
Реализовать CRUD с регистрацией для авторов и книг. Подробнее

Парсер видео
Создать парсер видео с Youtube, Rutube, Vimeo — парсинг данных по ссылке или iframe и занесение их в БД. Подробнее

Агрегатор логов Apache
Собрать логи сервера и записать их в БД, также вывести с возможностью фильтрации. Подробнее




Тестовые задания на Symfony

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

Игра «Электрик»
Усложненная версия игры — переключение лампочек по клику с эффектом неожиданного погасания лампочки. Подробнее

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




Тестовые задания на фреймворках

Форма обратной связи (Laravel)
Форма обратной связи с фиксацией заявок и возможностью их обработки менеджером. Подробнее

Парсер новостей из RSS изданий (CodeIgniter)
Нужно брать статьи из 5 источников RSS и сохранять их в БД. Подробнее

Минисправочник (задание в 2ГИС)
Реализовать справочник с адресами, компаниями и зданиями. Нужно реализовать REST и возможность выборки по радиусу/квадрату от заданного положения. Подробнее




Тестовые задания строго без фреймворка

Тестовое задание для web-разработчика (дискретка)
Реализовать структуру БД и класс(-ы) для работы с ориентированным нецикличным графом. Подробнее

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

Создание REST без фреймворков под высокие нагрузки
Новостной каталог с рубриками, авторами и новостями для 100 тыс записей. Реализация REST. Подробнее

Менеджер задач
Обычный менеджер задач. Подробнее

Сократитель ссылок без фреймворка
Генерация короткого url с записью в БД и проверкой уникальности. Должна работать переадресация. Подробнее

Напишите REST API для генерации рандомного числа
Каждой генерации присваивать уникальный id по которому можно получить результат генерации. Должны быть доступны 2 публичных API метода generate() и retrieve(id)




Куда без блокчейна в 2017 году? :)

Список дел на Solidity
Реализовать, используя язык Solidity смарт-контракт для добавления записей... Подробнее



Также читайте статью на vc.ru Как джуниор-разработчику найти работу

На Хекслете опубликовали список тестовых заданий, но для разных языков.

2017   junior программист   php   Тестовое задание

Верные друзья джуниора

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

Уметь в контроль версий (GIT)

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

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

И еще:

Следуйте GIT WORKFLOW

Ссылки:
https://habrahabr.ru/post/60030/
https://habrahabr.ru/post/106912/

Любить следующего парня

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

В итоге на одном проекте не было нужных для php модулей языка. На двух сыпались миграции — пришлось качать с тестового сервера копию базы (что тоже нужно догадаться — где и как взять доступы к ним?), на этих же проектах нужно было узнать — какой доступ к админ-панелям. На третьем все было хорошо, но чтобы создать администратора — нужно было пользоваться консольным приложением, команды которого (как и сам факт его наличия) знает только его разработчик — так себе зависимость ¯\_(ツ)_/¯

По итогу дня я вхреначил в README у каждого проекта инструкцию с установкой, а также вставил описание проблем и прямо захреначил коммиты в prod-ветку — с ветками в гите на тот момент я еще не разобрался ¯\_(ツ)_/¯

Делай инструкции для следующего парня!

Это сбережет новичку нервы, а опытному сотруднику время.

Уметь в  Linux

Очень важно знать консоль и работу с Линуксом. Хорошее знание SSH, настройки хостов в nginx, да и много чего — пригодилось практически с первого дня. Даже чуток помог другому новичку. Кстати почти вся команда разработчиков работает либо под Убунтой, либо под Мак-ОС.

Уметь в автоматические тесты

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

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

Тесты нужны, тесты важны, тесты сложны!

2017   junior программист   Забавные случаи   Навыки   Опыт   Работа

Первый опыт работы с учеником

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

Бывалый верстальщик показывает как верстать с помощью БЭМ, Богданов И., 1893 год

Зачем взял помощника

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

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

Как нанимал

Было 5 кандидатов — неплохо для зарплаты в 10 тысяч рублей:

  • была девушка, которая как раз собиралась найти работу для практики на лето, но ее по понятным причинам смутила работа на квартире у какого-то лысого мужика :) думаю — это нормально
  • был супер-парень, который учился на автоматизации оборудования, знал bash, Java и  C#, и вообще был матерый, в итоге он ушел в крупную компанию на стажировку, подтвердив этим свое умение думать :)
  • был матерый верстальщик, умеющий верстать пиксель в пиксель — мне показалось, что с его навыками зарабатывать 10 тысяч не совсем уместно...
  • и было два молодых не опытных парня, один закончил колледж по сварке (24 года) , другой студент-юрист (20 лет), оба примерно полгода изучали верстку — именно им и предложил встречу.

На встрече дал обоим тестовое простое задание на верстку — нужно было сделать 2 задания из 3. Оба выполнили задание еле-как, но жалею, что не дал никакого задания по математике — дело в том, что сначала позвал парнишку-сварщика, но он был слабоват в простейших математических операциях и не говорил о своих трудностях, говорил «сделаю» и не делал. Студент-юрист же наоборот — делал все с опережением, проявлял инициативу, но у него началась летняя практика, потому его не позвал на первый день работы.

В итоге взял парнишку постарше — за 3 дня до выхода дал задание как-нибудь сверстать для интернет-магазина страницы товара и категории, но первый день показал, что тяжело идет даже обычная математика — грубо говоря 100 разделить на 4 вызывали минутные задержки. Долго объяснял, как строится ХТМЛ-дерево, что такое классы и стили , когда и как нужно их применять, но я немного разочаровался и в итоге отказал после первого дня.

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

Обучение и работа

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

Джедай Mace Windu, фильм «Звездные войны»

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

  • сверстать адаптивную страницу товара и категории
  • сверстать мобильную страницу товара
  • сверстать слайдер

Причем само задание объясняю подробно, но некоторые вопросы опускаю на самостоятельное решение — вообще не лезу, например освоить OpenServer и Filezilla давал на дом.

Круто, что получается обучаться нам обоим. Например стажер спрашивает про флексы и гриды, а я говорю — делай все без них, в итоге понял, какого хера я торможу — дал ему волю и сам пытаюсь больше усвоить уже за ним. Он сразу же освоил инструменты автоматизации, например Emmet и хоткеи в Sublime — я в самом начале пути о них и не думал, помог ему только, как делать инклуды в  php, чтобы по сто раз не переделывать шапку например. Также раньше редко обращался к документации БЭМ — со стажером дело пошло шустрее, нужно было не просто понять, а еще и объяснить — в итоге материал быстро усвоился.

Помимо всего — основная работа пошла живее, запрограммировал расширенный личный кабинет в магазине, запустил оптовый сайт, изучил несколько крупных разделов по Yii 2. Постоянно идут вызовы — например решился конкретно взяться за LESS и SASS, самому мотивации не хватало — на следующей недели запланировал разобраться и сделать урок по ним.

Что не получается

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


Если не можешь объяснить что-то простым языком — значит ты сам не понимаешь этого в полной мере. Альберт Эйнштейн

2017   junior программист   Работа   Ученик