Ответы пользователя по тегу Программирование
  • Что такое автотесты кода и какие они бывают?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    логика простая. Вы же как-то проверяете что все работает? А теперь представьте что вы написали программу которая делает это за вас и она дает два результата - работает (зеленое) или не работает (красное).

    Тесты можно писать на разных уровнях. От отдельных модулей вашего приложения (масые маленькие кусочки) до всей системы (вся многопользовательская игра). Далее подключаем здравый смысл. Мы сначала должны убедиться что каждый отдельный компонент системы работает, а затем проверять как работают компоненты в сборе.

    Далее гуглите.
    Ответ написан
  • CMS для музыкальной социальной сети?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Вы собираетесь сделать клон вконтакта, только кривой. А так как речь идет о поиске CMS - то денег на разработку у вас нет. А стало быть нет денег на маркетинг. А стало быть.... ну короче зачем продолжать?

    Сделать MVP на CMS можно только из расчета найти инвесторов что бы заплатить за разработку реального продукта. Реальность такова что такие проекты намного дешевле в последствии писать сразу на фреймворках, вроде laravel или symfony, и потом уже дальше подкручивать расширяя команду разработки.

    Словом... удачи с вашей задумкой, но это проигранная битва.
    Ответ написан
  • Что почитать по философии программирования?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    про дзен программирования


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

    Вообще то что вы привели - тут нет никакой философии, тут скорее метафорическое описание. Философия - это поиск смысла.
    Ответ написан
  • Как эффективно изучать angular js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) продолжаем учить "ванильный JS", паралельно почитывая про babel, es2015 и т.д.
    2) когда мы ищем информацию в интернетах - учитываем что сейчас актуальная версия ангуляра - 1.5, второй ангуляр в бете, так что 90% информации устарело. Я даже больше скажу - даже официальная документация устарела, обновленный вариант сможете найти на github проекта в пул реквестах.
    3) https://github.com/gdi2290/ngExam - рекомендую этот список тем того, что вам надо знать про ангуляр (ну и не только).
    4) https://github.com/AngularClass/NG6-todomvc-starter - тут я попытался собрать полезные статьи на тему что надо учить и как + пример маленького современного приложения. Так же в ишусах к NG6-starter обсуждается как лучше его готовить.
    5) https://habrahabr.ru/post/277087/ - про angular 1.5 и то как я готовлю ангуляр.

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

    Ну и да - обязательно прочитать документацию к ангуляру. Возможно не всю сразу но базовые понятия что бы раскрыть. И разобраться с тем что значит "декларативное представление".
    Ответ написан
  • Лучший способ обучения?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Лучший способ обучения, прочитать вот эту книгу: Структура и интерпритация компьютерных программ. И все что не понятно - гуглить и читать на википедии. И далее и далее. И задавать вопросы.

    более легкий и эффективный способ обучения

    Смотря что считать легким. Можно легко научиться не тому. Скажем пока вы не понимаете как информация внутри комьютера представлена, даже если вы на JS будете писать вы рискуете быстро проиграть. Это фундаментальные основы которые должен знать каждый.

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

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    То есть varName : TypeName вместо TypeName varName ?


    Читабельность. "идентификатор varName содержащий TypeName" намного логичнее записывать именно в таком порядке. Ну и да, этот синтаксис не новый, далеко не новый.
    Ответ написан
  • Что делать, если в проекте много плохого кода?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Как справиться с легаси-депрессией?


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

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

    Контроллеры на 2к строк


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

    А далее, начинаем со структурных изменений (выносим дублирование в приватные методы, потом в сервисы), не меняя код, потом начинаем аккуратненько добавлять тестов и делать код чище. Причем все это можно разнести по времени, закладывая 30% времени разработки на устранение технического долга. типа по 2 часа в день на то что бы сделать код лучше. Конечно же вы должны еще владельцам проекта эту мысль донести, что мол инвестировав сейчас n% времени мы получим в долгосрочной перспективе профит в виде сокращения количества багов и как следствие улучшении процессов, предсказуемости и т.д.

    написанный школьником js


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

    хранимки с селектом и адские джойны

    А вот базу рефакторить будет чуть сложнее. Я бы для начала избавился бы от прямой работы с базой и спрятал бы весь sql и вызовы всех хранимок в коде нашего приложения (table gateway, row gateway или даже лучше data mapper, зависит от текущей ситуации). А затем уже можно опять же постепенно улучшать структуру базы данных, избавляться от хранимок и т.д.
    Ответ написан
  • Для программирования и верстки 13" хватает?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    для работы только прошка. Эйра не хватит.

    В целом же мне 13" ретины хватает, но большую часть времени я подключаю еще 24" монитор сверху (что бы головой не вертеть), хотя 80% времени всеравно пялюсь в 13-ку.
    Ответ написан
  • Что отличает freelance программиста от корпоративного?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Проблема как раз таки в том, что нужен опыт командной разработки. То есть если вы фрилансер и вы работаете еще с десятком человек - то это не сильно отличается от "корпоративного" разработчика.

    А по поводу стэка... ну как правило фрилансеры одиночки плохо знают git/hg (commit, push что еще надо), не знакомы с такими вещами как CI, CD, не пишут тесты. А что уж говорить о методологиях разработки, их и "корпоративные разработчики" частенько не понимают.
    Ответ написан
  • Одинаковые куски кода в разных классах допустимо или нубство?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    нубство. Выносите общее в методы, в общие зависимости. Почитайте про DRY.

    Дублирование позволительно если это... ну тупой код и от дублирования никуда не деться. Но у вас тут какие-то выражения, логика, поведение дублируется. А это уже нубство.
    Ответ написан
  • Какой стиль комментирования кода правильнее?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    с последовательным объяснением всех действий


    Пишите код так, что бы не нужно было комменты делать для действий, только для отдельных методов. Если вот совсем никак и надо объяснить что делает блок кода - выносим его в приватный метод с адекватным названием. Вот и все.
    Ответ написан
  • Совмещение angular, yii2?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Laravel бери и не мудри. Если нет нормального опыта работы с javascript (jquery не считается) - лучше не брать angular. Лучше погоди чутка пока не релизнится ng2, по ng1 слишком много булшита написано, достаточно вопросы на тостере глянуть.

    Но по вопросу "совмещение" - учить надо по отдельности, да и работать это все независимо друг от друга. Ангуляры отдельно, бэкэнды отдельно, между ними rest api. Ну то есть бэкэнды ничего не знают о том на чем написан клиент и наоборот.
    Ответ написан
  • PHP. Умножение 6-ти float, переместительный закон умножения не работает?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    https://en.wikipedia.org/wiki/IEEE_754-1985

    в PHP оператор умножения имеет левую ассоциативность, то есть выражение выполняется слева на право. В вашем случае - по порядку.

    $d4 = ((((6031 * 8109) * 980) * 1909) * 429) * 1714;
    Ответ написан
  • На что это больше похоже: паттерн или говнокод?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Никакого отношения сингелтону этот код не имеет.

    с какой целью его автор создает экземпляр объекта в статичном методе


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

    class User {
        private function __construct($email, $password) { /* ... */}
        public static function create($email, $password) { 
             return new static($email, $password); 
        }
        public static function createWithProfile($email, $password, UserProfile $profile) {
             $user = static::create($email, $password);
             $user->profile = $profile;
             return $user;
        }
    }
    
    $user1 = User::create('example@example.com', 'example');
    $user2 = User::createWithProfile('example@example.com', 'example', new UserProfile(
        $firstName, $lastName, $avatar /* ... */
    ));


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

    Отличие тут в том что мы не возвращаем экземпляр класса, он однаразовый. Только для этой последовательности.

    Почему бы не сделать так, спросите вы:
    (new Reboot())->reboot();

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

    По сути можно было бы спокойно сделать это обычной функцией, но автор посчитал что так будет читабельнее. Говнокод часть тут только имя класса - Reboot. Имена классов, интерфейсов и т.д. должны быть существительными. Мы описываем тип объектов. Но это единственное место к которому я могу придраться.
    Ответ написан
  • Откуда функция берёт переменные?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    но откуда вложенная функция в функцию byField берёт переменные


    вы вызываете функцию sort и в качестве аргумента даете ей эту "вложенную" функцию. Функции в JS это такие же объекты как числа, строки и т.д.
    Ответ написан
  • Правда ли что при использовании шаблонизаторов в php существенно падает скорость?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Современные шаблонизаторы компилируют все это дело в достаточно эффективный PHP. Так что нет, не правда, либо все зависит от шаблонизатора.
    Ответ написан
  • В чём отличие pair от map?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    pair - одна пара ключ -> значений, map - коллекция пар ключ -> значений или хэш-мэпа в общем смысле.

    Иногда эффективнее хранить маленький массив pair-ов нежели мелекькую коллекцию map-ов. Ну и для одного элемента map использовать уж явно не очень эффективно.
    Ответ написан
  • Что такое распределенная система?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    A distributed system is a software system in which components located on networked computers communicate and coordinate their actions by passing messages. The components interact with each other in order to achieve a common goal.


    Мне кажется более чем понятное определение.

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

    Это один из основных подходов при построении реально больших проектов. Можеет так же почитать про микросервисы и другие схожие подходы.
    Ответ написан
  • Какие существуют нотации(правила именования) в программировании?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    с переменными вида obj_jlabName вы код ревью не пройдете у подавляющего большинства разработчиков. Именуйте переменные адекватно, что бы можно было определить что в них. Завязывать имена переменных на модификаторы доступа (вообще все стоит делать приватным), или тип. Вы и так явно задаете тип, просто не пишите код так, что это бы вызывало двусмысленность. Ну и определение переменных должно быть рядом с их использованием, никаких методов на 100+ строк, если хотите добавить комментарий перед блоком кода - лучше вынести это добро в отдельный метод...

    Словом, называйте все своими именами, и будет вам счастье.
    Ответ написан