Ответы пользователя по тегу Веб-разработка
  • Как развиваться начинающему web-разработчику?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Я в начале 2000-х писал приложение для учета некоммунальных услуг ЖКХ для местного МУПа. Начинался этот проект как тестовое задание для приема на работу.

    Писать можно было на чем угодно, но на тот момент для меня лучшим инструментом казался Clipper 5.x, которым я, как мне тогда казалось, более-менее владел.

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

    Забегая вперед скажу, что автоматизация, в конце концов, удалась, из режима работы 3 человека по 8 часов в день 6 дней в неделю, за 6 месяцев после начала внедрения, вышли в режим 1 человек 2 часа в день 5 дней в неделю... Т.е. 3*8*6*4 = 576 человеко-часов превратилось в 2*5*4 = 40 ч/ч, КПД был увеличен в 14.4 раза.

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

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

    Далее я реализовывал эти пути как разумел и предоставлял тётушкам.

    И о чудо, обычно на этом этапе прорезался дар речи (тётушки, как все нормальные люди, обожают критиковать то, что по их мнению "не так"), и на меня начинал сыпаться поток весьма конкретных и ёмких ЦУ (ценных указаний), которые я подробно документировал и впоследствии претворял в жизнь.

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

    Первые месяцы они вели двойной учет, по старинке в своей огромной бухгалтерской книге, и в программе, и программу проверяли по книге. Через 2-3 месяца они убедились, что в программе "цифры" точнее, ошибки отлавливаются быстрее, меньшими усилиями, и стали уже свою книгу проверять по программе. Через 5-6 месяцев я написал им модуль расчета и распечатки месячного отчета, и они перестали вести свою книгу, просто печатали ее каждый месяц на огромном матричном принтере.

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

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

    Ввод/редактирование данных осуществляется посредством форм, которые, в общем случае, повторяют структуру таблицы БД, за исключением случаев, когда присоединяются поля из справочников.

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

    Первейшая проблема программ на Clipper 5.x это банальное отсутствие таблиц БД, либо слетевшие индексы. Это первое, чем я озаботился. программа при запуске проверяет наличие или отсутствие таблиц и индексов, и чего не хватает - достраивает на лету. Таким образом можно потерять данные, но программа, все равно, работать будет. Чтобы это стало возможным, потребовалось в программе прописать структуры таблиц БД и индексов.

    Вторым этапом, дико устав копипастить на 95% совпадающий код для построения форм, а, потом, когда надо что-то поменять, добавить или исправить, шариться по тоннам на 95% идентичного кода в сотне мест, я решил прибиться к стану метапрограммирования.

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

    В метаописание формы я добавлял и ссылки на другие таблицы, и генератор автоматически понимал их как ссылки на справочники, в результате чего в форме появлялось в этом месте не поле ввода, а кнопка вызова справочника.

    Причем генератор грамотно отрабатывал множественную вложенность, и каждый вызываемый справочник имел полный функционал CRU (Create, Read, Update), включая фильтрацию по столбцам и сортировку.

    Таким образом я создал мощный и гибкий генератор интерфейсов, а разработка CRU-части приложения сводилась к разработке описания структур таблиц, индексов и метаописания форм.

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

    Для реализации этого функционала пришлось пропатчить стандартный грид TBrowse (он применяется для просмотра таблиц).

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

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

    P.S.: когда я мигрировал в веб, через некоторое время я снова вынужден был пройти аналогичный путь, в результате которого родился простенький AJAX-фреймворк на стеке PHP+Smarty+DBSimple+jQuery. Сегодня я всеми силами стараюсь от него уйти, хотя для своих задач он достаточно хорош. Был опыт, когда на шареном хостинге за 5 баксов проект на этом фреймворке со скрипом но держал 30-40 тысяч уников в сутки (после ряда оптимизаций) и достаточно хорошо был защищен от топорного взлома через SQL-инъекции благодаря DBSimple...
    Ответ написан
    1 комментарий
  • Экспресс обучение frontend разработке. Как подступиться?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Я бы зашел с другого края, CSS и HTML это все прекрасно, но это все не более чем способ описать интерфейс.

    PHP однозначно отстатвить в сторону, как и MySQL.

    Коли уж вознамерился стать фронтендером, то должен до глубины души осознать, что никакого фронтенда во второй половине 10-х годов 21-го века от Р.Х. без JavaScript, вернее даже Ecma Script 2015+ не будет.

    Таким образом, я настоятельно рекомендую прям вот вгрызаться в хитрости и нюансы JS, начиная с ES5, и походу пьесы добавляя нововведения, которые обязательно появятся. И практиковаться до умопомрачения в кодинге, например на том же codewars.com

    Обязательно для вдумчивого просмотра https://www.youtube.com/watch?v=Bv_5Zv5c-Ts

    Из фронтенд фреймворков для себя я выбор сделал в сторону React+Redux т.к. философия, имплементированная в этих библиотеках и их подходе к вопросу разработки интерфейсов целиком и полностью совпадает с той парадигмой, к которой я пришел собирая много лет грабли на своем собственном тернистом пути разработчика, в том числе и фронтенда.

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

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

    Если английским не владеешь в достаточной мере, чтобы свободно читать и слушать материалы, рекомендую задуматься и осознать, что актуальных материалов в русском переводе раньше чем через 6+ месяцев редко можно отыскать. Если хочешь быть на гребне волны, базовое владение инглишем must have. Вот тут обсуждение этого вопроса Английский язык от профессионалов?
    Ответ написан
    Комментировать
  • Печать фото на предмете: заливка фото на сайт и редактирование прям на модели, каким образом реализуется? что почитать?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    На объекты сложной формы изображения наносятся водно-пленочным способом

    www.youtube.com/watch?v=_CA0DR4GSQg

    Чтобы рассчитать все искривления надо неслабо разбираться в геометрии, тригонометрии и еще Бог весть в чем. Это задача совсем не для начинающих...
    Ответ написан
    Комментировать
  • Учить или придет с практикой?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    1) Нужно понимать основы, принципы и знать или уметь быстро найти, где почитать про детали, благо нынче с этим проблем вообще никаких.

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

    3) Задания лучше получать от платежеспособных заказчиков. Поначалу, если обстоятельства позволяют, можно работать за отзывы, или поискать команду/профи, кто возьмет на обучение в качестве стажера/джуниора.

    Главное - иметь светлую голову и прямые руки.

    ЗЫ: Я исключительно на практике осваиваю конкретные навыки в необходимом и достаточном объёме для решения конкретных задач. И делаю так уже 20 лет. При этом постоянно для общего развития отслеживаю тенденции, читаю статьи, слушаю выступления на конференциях, благо, опять же, нынче этого добра навалом.
    Ответ написан
    Комментировать
  • Какую базу данных выбрать для кроссплатформенного проекта?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Полагаю мобильный клиент, будучи он-лайн приложением, будет таки обмениваться данными с бэкендом, посредством API. Логично было бы для мобильного клиента подыскать готовую библиотеку, которая уже умеет обмениваться данными с API и на бэкенде API реализовать именно таким образом как надо библиотеке. Тогда головняков минимум. Полагаю это будет что-то вроде RESTful API, как и было написано в первом каменте.

    В целом же вопрос выбора БД сводится к вопросу о целях, требованиях, масштабах, квалификации и пр.

    Что касается SQLite, то насколько мне известно, его используют как локальное хранилище.
    Ответ написан
    Комментировать
  • Динамичный сайт без PHP?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    SPA ныне рулит. За выяснением значения аббревиатуры направляю в гугл... :)
    Ответ написан
    Комментировать
  • Как получить последние N записей без использования ORDER BY & OFFSET?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    ORDER BY на обычных autoincrement ID замечательно работают при наличии индексов даже на миллионах записей... Не вижу причин отказываться от ORDER BY id DESC LIMIT 20
    Ответ написан
    5 комментариев
  • Где бы почитать про такую "архитектуру"?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Ember.JS
    Ответ написан
    Комментировать
  • PHP vs. all. Имеет ли смысл учить (параллельно) что-то еще?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Первым делом нужно отделить собственно код на PHP (обработка данных, форм например, формирование данных для построения страницы), от кода построения страницы. Последнее лучше доверить шаблонизатору. Я пользуюсь Smarty, но вариантов масса, тут на вкус и цвет все фломастеры разные. А мешать код PHP с кодом HTML, и, упаси Боже, с кодом JS - Это Богохульство я считаю... :D

    Хотя PHP это позволяет, но это равносильно выстрелу себе в ногу...

    В целом я люблю PHP, особенно после Clipper 5.2 и Borland Pascal. Назад я уже точно не вернусь.

    Однако, тенденции современности таковы, что логика все больше мигрирует в сторону клиентского кода. Это то, чем занимаются всевозможные Angular.JS, Ember.JS, Backbone.JS, React.JS и прочие jQuery, и же с ними...

    Что еще более замечательно, это то, что JS стал активно мигрировать в сторону бэкенда (Node.JS, Io.JS и т.п.)

    Так вот, по моему личному опыту последних лет, а это очень много AJAX+jQuery, бэкенд все больше превращается в эдакий прокси модели до БД и сервис аутентификации/авторзации... И в этом плане, каким бы прекрасным ни был PHP7, но работы для него все меньше (потому что совершенно до фонаря, скрипты на каком ЯП отдают JSON)... По крайней мере в том ключе, в каком он изначально задумывался и существовал до начала бурной эпохи AJAX.

    Поэтому моё мнение такое, раз уж начал проект на PHP - надо прочитать начало моего поста, облегчить себе жизнь, завершить и сдать проект, а потом переключиться на фронтенд, и с ходу бросить все силы на освоение сначала JavaScript, а потом сразу Ember.JS, в крайнем случае Angular.JS, ибо именно там сейчас полным ходом развивается будущее. Разумеется какой может быть фронтенд разработчик без серьезных скиллов в HTML5/CSS3... Поэтому и это тоже надо обязательно изучать.

    Делать это надо хотя бы потому, что освоить Ember.JS равносильно получению второго высшего образования, и вакансий по этой тематике все больше, а минимальный доход пряморукого разработчика на таких вакансиях от 60 тысяч у.е. в год. Разумеется необходимо владеть английским, как без этого...

    Безусловно, и на бэкенде еще полно работы, и есть такая, которую на фронтенд нет смысла тащить, тем не менее, бэкенд уже не тот что был 10 лет назад, и уже не будет прежним.

    P.S.: все вышесказанное - это сугубо плод моего воображения и личного опыта (20 лет в разработке), думать придется, в любом случае, собственной головой и нести ответственность за принятые решения, и разбираться с последствиями оных.
    Ответ написан
    Комментировать
  • Аутентификация/авторизация в админке сайта через пользователей Unix?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Если пользователей будет десяток-другой, то можно хоть как извращаться, хоть в массив писать.

    Если же тысячи будет их, то не думаю что ОС понравятся такие извраты...
    Ответ написан
    Комментировать
  • С чего начать программирование?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Сегодня актуален JavaScript
    Ответ написан
    1 комментарий
  • Какой ЯП выбрать для фронтэнда?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Нынче на голом JS, как, в прочем, и на любом другом голом ЯП мало кто кодит, ибо долго, муторно и непродуктивно. Нынче фреймворки правят бал в разработке чего угодно на чем угодно.

    По части JS рекомендую обратить внимание на Ember.JS

    Очень высокий порог вхождения, но лучше пока ничего не придумали, ИМХО.
    Ответ написан
    Комментировать
  • Каким должен быть CTO в веб-стартапе?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Часто СТО в стартапе оказывается крайним. Знаю не по наслышке.

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

    Средний программист — натура творческая и норовистая. Чуть недоглядел — его унесло в неведомые дали.

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

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

    Вам нужен человек, профи, которому еще интересно всем этим заморачиваться, и которого разработчики не смогут водить вокруг пальца.
    Ответ написан
    Комментировать