Задать вопрос
Контакты

Достижения

Все достижения (2)

Наибольший вклад в теги

Все теги (16)

Лучшие ответы пользователя

Все ответы (17)
  • Каков план личностного развития PHP программиста с нуля?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Буду исходить из "дано" задачи "PHP программист" и из того что автор вопроса стремится заниматься сугубо back-end программированием. Заранее прошу прощения, я несколько увлекся
    Итак:
    1. Установка сервера (Open Server, Xampp, Denver), на начальном уровне. (просто из exe)
    2. Общие принципы.
    2.1. Типы данных.
    2.2. Переменные.
    2.2.1. Работа с переменными по ссылке.
    2.2.2. Методы объявления и уничтожения переменных.
    2.3. Управляющие конструкции (если знаком, то особенности синтаксиса в рамках языка).
    2.3.1. Условия.
    2.3.2. Циклы.
    2.4. Конструкции вывода(print, print_r, echo).
    2.5. Конструкции отладки и управления выполнением(var_dump,die,exit,break в циклах, пустой return;).
    2.6. Пред определенные глобальные переменные($_GET,$_POST,$_REQUEST,$_SERVER), константы зарезервированные под модификаторы (static, function, const, $this)
    2.7. Особенности версий 5.3, 5.4.
    2.7.1. Анонимные функции.
    2.7.2. Замыкания.
    2.7.3. Особенности объявления массивов.
    2.7.4. Пространства имен.
    3. HTTP протокол.
    3.1. Заголовки входящие.
    3.2. Заголовки исходящие.
    3.3. Процесс общения.
    3.4. Метод php “header(…)” в контексте темы.
    3.5. Глобальная переменная $_SERVER[] в контексте темы.
    4. Установка сервера на среднем уровне (основы файла .htaccess и RewriteRule)
    5. Процедурное программирование.
    5.1. Математические методы.
    5.2. Оперирование типами.
    5.2.1. Методы оперирования массивами (array_values,array_keys,array_map и т.д.)
    5.2.2. Методы оперирования строками (strlen,substr и т.д.).
    6. ООП.
    6.1. Классы.
    6.1.1. Инкапсуляция(public,protected,private). Понимать разницу.
    6.1.2. Наследование.
    6.2. Интерфейсы.
    6.2.1. Имплементация интерфейсов.
    6.3. Абстрактные классы.
    6.4. Полиморфизм.
    6.5. Магические методы.
    6.5.1. Базовые (__construct,__get,__set,__destruct)
    6.5.2. Расширенные (__invoke,__serialize,__isset)
    6.5.3. Разобраться когда стоит применять магические методы а когда это плохая практика.
    7. Библиотека SPL, и расширение поведенческих возможностей классов за ее счет.
    8. Базы данных.
    8.1. SQL
    8.2. Примитивный уровень общения с БД. (mysql_connect,mysql_close,mysql_query).
    8.3. Средний уровень общения с БД(PDO и другие кастомные библиотеки).
    8.4. Высокий уровень (ActiveRecord,DataAccessObject,ObjectRelationMapping).
    8.5. NoSql БД на примере MongoBD (настоятельно рекомендуется, но не обязательно).
    9. Фреймворки. На мой вигляд можно начать с Kohana. Сужу по уровню вхождения стажеров которых видел и отсутствию пространств имен с которыми по первах могут возникать проблемы.

    И главное, Внимание! Личностные качества.
    - Усидчивость.
    - Владение Google при оттачивании темы или сложной задаче на уровне, когда поисковик видит в пользователе не то что DDOS а полноценный физический краш. тест.
    - Не брезгливость. Умение заставить себя разбираться в гов… хм. Нелицеприятных дебрях.
    - Збагойствие. Отсутствие паники при различных ошибках и не состыковках. Всегда остыть и попробовать снова, но по другому.
    Ответ написан
    5 комментариев
  • Действительно ли использование селектора по ID - признак абсолютно плохого стиля?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Пробежал статью глазами. Мое мнение - весьма бредовая статья. Клинический перфекционизм в разработке + собственные вкусовые пристрастия выставлять как канон... В ID нет ничего ничего, ну абсолютно ничего плохого, особенно учитывая описанный вами подход.

    Хотя если очень захотеть то можно извращаться сколько угодно. В свое время пробовал построить веб страницу используя haml scss и модификатор строгости в CSS. Удалось полностью избавится и от классов и от ID. Вот только код был как Китайская стена длинной. Оно вам надо?

    Более того при разработке фронта (javascript) от ID полностью уйти невозможно. А в общем вы правильно описали принципы применения и того и другого, так что не смешивайте конвенции сжатого и читабельного кода с идеей божественного сечения. Главное пишите, пишите и еще раз пишите, стиль как свой так и "правильный" вырабатывается только с практикой. И не всегда "как надо" необходимо больше нежели "как хочется" ;)
    Ответ написан
    Комментировать
  • Почему столько front-end вакансий?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Я полагаю виной всему социальные явления.
    Достаточно часто программисты компилируемых языков проявляют фантастическое высокомерие и дискриминацию по отношению к Javascript, CSS (ну и к PHP). Сам не раз видел подобные шуточки. Почему? Потому что им приходится думать о гораздо большем количестве вещей, часто за те же деньги, потому что порог вхождения в их языки тяжелее, соответственно большие затраты по времени/деньгам на обучение. Вот и насадили мнение что выше описанное "не программирование вовсе".

    Но времена изменились. Борьба за количество пользователей перетекает в качество. Маркетологи с ужасом обнаружили что австралопитек на IE6, вопреки всем надеждам и ожиданиям не является хорошим покупателем. Просто потому что не разберется с интерфейсом магазина. А значит его можно смело отсеивать. Теперь маркетологи нацелились на "сознательных" пользователей, и знают как им прокусывать артерию. Почему я это описываю?

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

    А вот тут давайте умножим на дефицит специалистов которых вовремя "отговорили" избыток "Специалистов которые что-то, где-то видели". Что получим?

    Скажу больше. Видел Back-end программистов которые поджав хвост по требованию работодателя(который не хочет понимать/видеть/размениваться на разницу), скрипя зубами, учат fron-end, и не мало. Потому что Back-end на самом деле переполнен и чтобы занять достойное место надо быть действительно шикарным спецом.
    UPD: Увидел что @dedik даже лучше расписал то о чем я говорил ;)
    Ответ написан
    Комментировать
  • Системный скролл не работает в IE в компе, но работает в демо на GitHub. В чем причина?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Предположу. Если открываете страницу не через локальный HTTP сервер, а просто как файл (ссылка начинается file:///C:/...) то в этом случае IE блокирует javascript сценарии страницы из соображений безопасности. Ранее это регулировалось подтверждением запроса при открытии страницы, как сейчас не знаю.
    Ответ написан
    1 комментарий
  • Как запретить отправку формы, если цикл вернул false?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Я лично не совсем понял как у вас отрабатывает представленный пример. Есть два способа повесить хендлер на событие.
    Первый, проприетарный :
    jQuery('form').on('submit',function(e){
         e.preventDefault(); //Отменили нативное действие
         (e.cancelBubble) ? e.cancelBubble : e.stopPropagation; //Погасили всплытие
    }

    И второй, через алиас:
    jQuery('form').submit(function(){
    return false; //Отменили нативное действие
    });

    А у вас что-то среднее получилось.
    Кроме того почему не сделать так:
    jQuery('form').on('submit',function(e){
        var flag = true, 
            inputs = jQuery('input:not([type="submit"])',this); // Вторым аргументом указываем где искать
        inputs.each(function(){
            if(jQuery(this).val() == ''){
                flag = false;
            }
        });
        if(flag){
              /* Ajax запрос */
            alert('Запрос!');
         } else {
            alert('Заполни меня!!!');
         }
         e.preventDefault(); //Отменили нативное действие
         (e.cancelBubble) ? e.cancelBubble : e.stopPropagation; //Погасили всплытие
    });

    Рабочий пример
    Ответ написан
    5 комментариев