• Насколько легко трудоустроиться программисту в 40+, 50+ итд лет?

    Arris
    @Arris
    Сапиенсы учатся, играя.
    Трудно - и с каждым годом будет все сложнее и хуже. С каждым годом растет объем пула "минимально-необходимых для программиста компетенций" . Каждый год появляются какие-то новые фреймворки, инструменты, фишки - которые по идее должны облегчать и упрощать разработку - но на деле вырастают непреодолимой стеной между тобой и "реальным миром веб-разработки". Потому что ты стареешь, а технологии молодеют.

    Я бы картинку нарисовал, но там очень уж нецензурный вид получается ;-)

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

    Уже сейчас чтобы тебя считали верстальщиком/программистом/фронтэндером/бэкэндером - надо знать в 2 раза больше технологий, чем 2 года назад. Этакий Закон Мура наоборот. Да вы сами просто посмотрите эти списки "компетенций"!

    Читаешь список требований к "Web-программистам" и видишь, что месяц за месяцем, год за годом HR-ы и те, кто там им задачи ставит, вписывают в требования все больше умных словечек, которые они сами услышали и не понимают, зачем оно им нужно и нужно ли? Все ближе и ближе ситуация подходит к "Если бы водителей принимали на работу как програм.... В 2010 году это была "шутка юмора". Сейчас это уже почти реальность.

    Пример хотите?

    Одна государственная организация выставила список требований к "веб-программисту". При зарплате в 35000 рублей он должен уметь чуть ли не МКС программировать и чуть ли не кластера из сотен серверов настраивать. А на деле основной задачей человека будет - таскать проекторы из аудитории в аудиторию, чистить мышки студентам, переставлять winxp и изредка, раз в полгода - добавлять статью на сайт гос.организации. Откуда информация? Связался с человеком, которому 45, который в этой организации работает уже 18 лет. Ему стаж капает, а деньги он зарабатывает совсем в другом месте.


    Что уж говорить об организациях коммерческих? Особенно тех, для которых веб-программист - и чтец, и жнец, и на дуде игрец?

    Но это все лирика и крик души. Извините.

    И да, к 35-40-45 годам по мнению "молодых и амбициозных IT-специалистов" ты должен обладать строго определенным списком компетенций как в профессии, так и по жизни (к примеру, я столнулся с отказом в приеме на позицию программиста потому что у меня нет... автомобиля. Зачем программисту автомобиль? Ну там сложная и длинная логическая цепочка, сводящася к "раз у тебя нет автомобиля - ты лох, а лохи нам не нужны").
    Мне кажется, проблема в том числе и в том, что подавляющее большинство этих самых "молодых и амбициозных" специалистов совершенно не думают о своем будущем. Нет, я не про то будущее, которое "куда я пойду, когда закончу вот этот крутой проект". Я о реальности. В их понимании 35 лет - это недостижимо далёкое будущее, а до 50 они не доживут (а если и доживут - то в мечтах тимлидами в гугле).

    Соответственно "молодые и амбициозные специалисты" с презрением смотрят на людей, которые отдали 15 лет разработке определенной платформы, платформы, которую сейчас тщится заменить какой-то пул новых технологий. По их мнению - все что старше 5 лет - ненужное устаревшее говно мамонта. А те, кто не знают появившуюся полгода назад технологию - отставшие от жизни ламеры.
    Also, Эффект Даннинга—Крюгера тут работает в полную силу.

    Резюмирую: трудно, если у тебя нет в резюме стапятисот сделанных проектов. И чем дальше - тем сложнее и труднее будет. Но тебе может повезти - если ты компетентный специалист в узкой области (даже если она 'legacy'). Или ты можешь найти синекуру - гос.организацию, в которой ты присоединишься к когорте таких же скинутых с паровоза прогресса "молодыми и амбициозными". Не переживай, через 20 лет скинут их. А ты останешься.

    Вот только кушать хочется сейчас. Хотя бы просто хлебушка.
    Ответ написан
    23 комментария
  • В чем преимущества сайтов на node.js?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    • Изоморфные приложения и SSR. Мы хотим очень динамический вебсайт, который почти весь рисуется на клиенте, но пауки до сих пор не умеют в JS, да и людям долговато ждать, пока сайт отрисуется. Выход -- рендерим HTML на сервере тем же самым кодом, что и на клиенте. Альтернативы есть, конечно, но на nodejs это выглядит проще всего.
    • Многозадачность без ручного управления параллельностью. Пока у нас лог в Redis пишется, данные из Postgre достаются, картинка с диска читается, мы уже принимаем следующий запрос от другого клиента. Все это безо всяких усилий с нашей стороны (разве что понять, наконец, что такое callback). Опять же, есть альтернативы (go с горутинами, акторы в Scala).


    Ну и да, вопрос вкуса и знаний:) Я могу сделать сайт на PHP, Python и C#, но не буду. Ибо зачем, если nodejs справляется ровно так же, а код я напишу на порядки быстрее.
    Ответ написан
    6 комментариев
  • Как делается подобный эффект в меню?

    @ccakoxo
    В девтулзе все. к nav добавляется класс navtop, а там параметры top, фиксирующие к верху страницы.
    Сайт омерзительный. Я как только вижу метку Awwwards, значит все, это знак высшей мерзости.
    Ответ написан
    6 комментариев
  • Можно ли как-то перезапустить полностью React js SPA?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    location.reload() ?
    Ответ написан
    3 комментария
  • Как понять БЭМ, и что мотивирует верстальщик в использовании его?

    class="custom__button black__button login__forgot reg__button right__part mob-full__width"

    На вопрос верстальщику что это такое: "Это бэм"


    Вам нагло соврали. Это говнокод.

    Понять BEM
    Ответ написан
    5 комментариев
  • Где брать прогноз погоды в .json формате?

    @dimansar
    Простой паренек, который кодит часами под собствен
    Я не профи в программировании, но тут
    api.openweathermap.org/data/2.5/weather?q=London,uk
    Где погода в цельциях?))

    В этом API есть переменная units - она отвечает за метрику.
    При значении metric почти все перейдет в привычные нам виды измерений - градусы в Цельсиях, скорость ветра в м/с и т.д. Единственное что не изменится - атмосферное давление. оно так и останется в гектопаскалях. Так что переводить в мм рт.ст. придется самому.
    Пример:
    http://api.openweathermap.org/data/2.5/weather?q=S...
    Ответ написан
    Комментировать
  • Логика работы с MongoDB в сервере на Node.JS?

    Я использую mongoosejs, пример хорошей архитектуры для него — github.com/madhums/node-express-mongoose-demo
    В монгусе автоматом создается пул соединений (по умолчанию из 5 штук), есть опция — автореконнект.

    Схматично работает так: при запуске приложения делаешь коннект с нужными тебе опциями — и все, во всех остальных модулях, просто require('mongoose') и делаешь с базой все, что угодно (так как модуль подтягивается закешированный с установленным соединением)
    Ответ написан
    Комментировать
  • Логика работы с MongoDB в сервере на Node.JS?

    Stdit
    @Stdit
    При использовании одного соединения с БД есть серьёзный риск перегрузить сокет базы настолько, что именно он станет узким тормозящим местом всего проекта. Это довольно подлый нюанс, который не заметен на этапе тестирования и ввода в эксплуатацию (как и проблема гонок в mongo, но это отдельный разговор). У меня такое было, правда не на mongo, а на pg, но суть от этого не меняется: пока сокет базы занят перекачиванием больших объемов данных на специфических страницах, сайт будет заблокирован. Но и открывать соединение с базой на каждый запрос тоже не самая лучшая идея, так как на открытие, настройку и содержание соединения нужно несоразмерно много ресурсов (в том числе и на сервере БД). Поэтому должен быть пул соединений с БД. Драйверы mysql и pg такой пул имеют, насчет mongodb не уверен, так как не копал устройство драйверов mongo для nodejs.
    Ответ написан
    Комментировать
  • Как быстро освоить angular?

    @FireGM
    Никак
    Ответ написан
    Комментировать
  • На сколько VueJS сегодня востребован на рынке труда?

    Тоже задался этим вопросом, и сделал анализ вакансий front-end разработчиков в Московских компаниях, где в требованиях упоминали Angular, React и Vue. Вот что получилось:
    Angular - 33;
    React - 25;
    Vue - 2.
    Востребованность очевидна, но многие писали так: "Опыт работы с Angular, либо другим фреймворком". Такие ответы я тоже включал в вышеприведенную статистику, и плюсик отдавал именно Angular, т.к. он конкретно был написан, хотя думаю это не совсем правильно.
    Многие пишут, что смотреть нужно именно на задачи выполняемые фреймворком, а не на его популярность. Может оно, конечно, и правильно, но для новичка это важно, т.к. если фреймворк популярен, то куда не плюнь, везде и всюду есть уже ответы по реализации той или иной задачи, что не скажешь о новой технологии. Хотя, может, оно и к лучшему, т.к. придется думать больше своей головой, чем заниматься копипастом и при этом ничего не понимать. Как, например, куча недоспециалистов, которых породил WordPress своей легкостью и кучей готовых решений (ничего не имею против этого движка, но вот к "специалистам", коим считает себя каждый второй школьник научившийся устанавливать плагины, есть огромная прямо таки ненависть - учитесь думать своей головой!!!).
    Так, если брать в расчет Angular и React, то по ним куча туториалов: видео, статьи, книги и т.д. Vue таким количеством пока что похвастаться не может (это будет и не правильно, если сравнивать по такому критерию, т.к. Vue появился сравнительно недавно), но зато у него просто замечательная документация, которая на русский язык переводится даже быстрее, чем на английский (Vue просто китайский проект), для многих, не знающих английский (а нужно бы знать), это будет большим плюсом.

    Что касается Vue, то его комьюнити очень быстро растет с каждым днем. Также существующие статьи, сравнивающие его с другими фреймворками, отдают предпочтение именно ему. Причем там пишут не только люди, для которых Vue стал первым фреймворком (звучит пошловато, ну да ладно), но те, кто уже работал с другими, вроде Angular и React.
    Отдают предпочтение из-за того, что он довольно легок в использовании (это для новичков), а также быстрее и т.д. (для более продвинутых). Отсюда, возможно, опасность перехода всех JQuery приверженцев, а в следствии полный интернет говно-решений, которые начнут копировать люди не хотящие думать своей головой, а затем и ненависть к самому фреймворку из-за испорченной репутации. Это, конечно, не должно стать проблемой при выборе, но посчитал нужным, что все таки указать нужно. Хотя, опять таки, это просто моё мнение, и не факт, что оно правильное.
    По использованию - встречается в вакансиях он хоть и не так часто, но все же появляется, а это уже о чем-то говорит. Тем более если учесть факт, что появился он сравнительно недавно.
    Также Vue включили в Laravel, а это уже серьезная заявка. Также встречал ответы, что gitlab также использует Vue.

    Вот такой большой ответ, почти как статья, который выражает мое мнение. Надеюсь, что хоть чем-то помог, если не запутал еще больше))
    Ответ написан
    1 комментарий
  • В чем смысл использовать Jquery для ajax при использовании React?

    @stasov1
    Это скорее всего очень легаси код, не самых лучших разработчиков, вобще связка jquery+react... Используйте fetch или axios.
    Ответ написан
    Комментировать
  • Почему работа for и forEach отличается?

    dom1n1k
    @dom1n1k
    Использовать надо for.
    Метод querySelectorAll возвращает не массив, а объект типа NodeList, в который метод forEach был добавлен совсем недавно.
    https://developer.mozilla.org/en-US/docs/Web/API/N...
    То есть работать это будет только в самых свежих браузерах (наверняка тестируете в последнем Хроме).
    Ну либо надо полифил добавлять.
    Ответ написан
    5 комментариев
  • Как подружить owl-carousel и Angular 2?

    @beta-it Автор вопроса
    В общем решение такое:
    Создаем служебную директиву:
    import {Directive, Input} from '@angular/core';
    
    @Directive({
        selector: '[scroll]'
    })
    export class ScrollDirective {
    
        constructor() {
        }
    
        @Input('scroll')
        set appScroll(isReady: boolean) {
            if (isReady)
                this.ngForCallback();
        }
    
        ngForCallback() {
            $('.owl-carousel').owlCarousel({
                loop: true,
                margin: 10,
                responsiveClass: true,
                autoWidth: false,
                navText: ["Предыдущий", "Следующий"],
                responsive: {
                    0: {
                        items: 1,
                        nav: true
                    },
                    600: {
                        items: 3,
                        nav: false
                    },
                    1000: {
                        items: 5,
                        nav: true,
                        loop: false,
                        margin: 20
                    }
                }
            });
    
            console.log('run');
        }
    }


    И в шаблоне:
    .....
    <div class="owl-carousel owl-theme">
        <div class="item" *ngFor="let t of test; let l=last" [scroll]="l ? true : false">
            <h4>{{t?.name}}</h4>
        </div>
    </div>
    .....


    Судя по консоли ( console.log('run') ) срабатывает всего один раз...
    Ответ написан
    Комментировать
  • Плавная анимация?

    fnnzzz
    @fnnzzz
    front-end dev
    "position: absolute" при ре-рендере триггерит одновременно 3 слоя (лейаут, paint, composite), что для браузера очень трудозатратно (https://csstriggers.com/)

    в таким случаях для позиционирования лучше юзать transform: translate, он триггерит только "paint".
    + можно навесить will-change, чтобы подготовить браузер к перерисовке.
    + можно заставить браузер производить рендеринг на GPU - transform: translateZ(0);
    Ответ написан
    4 комментария
  • Какие есть курсы С# дистанционно?

    ImmortalCAT
    @ImmortalCAT
    C# loving
    Ответ написан
    Комментировать
  • Почему не работает ReactCSSTransitionGroup?

    @zzzevaka
    Вам не нужно каждый элемент оборачивать в ReactCSSTransitionGroup.

    Попробуйте так:

    return (
      <ReactCSSTransitionGroup
        component="section"
        className="cart"
        transitionName="example"
        transitionEnterTimeout={5000}
        transitionLeaveTimeout={3000}
      >
        {items.map(item => <CartItem key={item.id} item={item} />)}
      </ReactCSSTransitionGroup>
    );


    ну и, конечно, у вас должен быть описан css example-enter и example-leave, как в документации
    Ответ написан
    6 комментариев
  • Как в react-redux реализовать вызов метода в ответ на изменение стейта?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Добрый день.

    Представим ваш action creator (функцию), которая на success возвращает успешную авторизацию, например:
    $.ajax(url...
      success(data) { dispatch({type: AUTH_SUCCESS, data }) })


    Кто мешает сделать так?
    $.ajax(url...
      success(data) { 
        dispatch({type: AUTH_SUCCESS, data }) 
        loadUserCart(data.user_id) // <- еще один action creator
    })

    Суть уже понятна? Мы после успешной авторизации юзера, вызываем сразу же следующий экшен-крейтор:
    function loadUserCart(id) {
      return (dispatch) => {
        
        dispatch({ type: CART_REQUEST }) // получается, это событие вызовется сразу после успешной авторизации, практически мгновенно
    
        
        $.ajax(urlForCartUpdate...
          success(data) { 
            dispatch({type: CART_SUCCESS, data })
        })  
      }
    }


    Далее вы в компоненте с корзиной, настраиваете показ прелоадера, и вуаля! Получается, для юзера, без задержек, как только он авторизовался - у корзины будет крутиться прелоадер. Юзеру все понятно, он занимается своими делами. Как только "данные подъехали" - вы скрыли прелоадер и показали ему необходимые данные по корзине.

    нужно сначала сделать AJAX-запрос, а по его результатам уже рендерить корзину

    Именно это мы и сделали.

    P.S. не знаю, требуется ли это, но на всякий случай укажу, что чтобы сделать прелоадер в шаблоне, вам нужно в редьюсере корзины создать какое-нибудь поле (флаг), например isLoading и устанавливать его в true когда получите action с типом CART_REQUEST, и false для CART_SUCCESS. Таким образом, вы сможете сделать банальный if в шаблоне рендера и показывать либо разметку прелоадера, либо разметук с данными корзины.

    === вторая часть ===
    В компонентах-контроллерах есть только функция connect() со своими функциями-аргументами, которые передают данные в представление. Как-то реагировать на изменения состояния такие компоненты не умеют (я ведь не ошибаюсь в этом?).

    Еще как умеют, в этом и суть. Вы в mapStateToProps передаете в общем случае:
    {
      ваше_название_поля: reduxStore.название_редьюсера
    }

    В частном случае, может выглядеть так:
    function mapStateToProps(state) {
      return {
        rate: state.rate,
      }
    }


    После того, как вы "подписались" на изменения в state.rate, (а это, если говорить об частном случае, скорее всего reducer с названием rate), ваш "приконекченный" компонент всегда будет получать новые props при изменении в редьюсере. Следовательно, будет вызываться функция render. Само собой - можно хоть сколько "редьюсеров подключить" к одному компоненту.

    Имейте ввиду, что все здесь написано для понимания простым русским языком, на самом деле, так как вы используете компонент Provider на самом верхнем уровне вашего приложения, он прокидывает необходимые props вниз. Ваши connect(Компоненты) умеют реагировать на изменение необходимых props => реакт вызывает рендер, так как "пришли новые props".
    Ответ написан
    2 комментария
  • Переход из 1С в web-разработчики (PHP ) в 35 лет. С чего начать и реально ли?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    Больше 10 лет работаю под Битриксом. Мне очень нравится то, что в этой работе нужен целый стек знаний. Начиная от настройки апача и нжинкса (у меня свой сервер на Хетцнере) и до вёрстки. Прям прёт от кайфа.

    Этот год начал вникать в новое ядро (а там уже ORM), начал восполнять недостаток знаний. Ниточка за ниточкой... — просмотрев видео-курс по Ларавел понял, что моё мировоззрение дало трещину. Насколько там всё строго и по полочкам, в противовес анархии внутри Битрикса. Но у битрикса шикарное лицо. CMS прокачана так, что удобно как заказчику, так и обслуживающей команде. Вряд ли какая CMS сможет угнаться. Но внутренности... Мама дорогая. Хочется скрестить Ларавел и Битрикс (CMS).

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

    Ища выход стремлению "хочу большего" завёл профиль на апворке и логично задумался: а что я могу предложить? То есть сначала была шальная мысль выходить на full-stack заказы c Битриксом, но, блин, после Ларавелл я уже не уверен. Если переходить (менять тех заказчиков, которые уже есть), то на солидный уровень (по задачам, в первую очередь). А для этого нужно понимание: к чему душа лежит (выбор технологии) и что востребовано (однозначно могу сказать, что буду копать Ларавел — уже и мини-проекты придумал; из фронт-энда буду пробовать пилить Вью, но пока что нет жёсткой мотивации: чистый css/js никто не отменял). А значит метод проб и ошибок. Пока не определился — держать ушки на макушке и анализировать входящий поток, не особо отвлекаясь от текущих дел, потому что так можно и загнуться (а на плечах семья, дети).

    Пытаясь понять, «как оно», — запустил и небольшой оффлайн бизнес с продажей через Интернет. Есть опыт запуска своих проектов и этот путь мне кажется наиболее перспективным для удовлетворения жизнью: сразу делаешь то, что легко согласовывать (с самим собой =), за ошибки платишь сам, можно делать неспеша (некоторые решения должны вызреть внутри), а можно упасть и прям не вставать пока не закончил — делаешь-то для себя, а это совсем другой настрой.

    Но чем хорошо (полезно) по-фрилансивать: остаёшься в курсе новинок, не оседаешь в своей тине и не разучиваешься шевелиться. По сабджу — держать нос по ветру, пробовать разные задачки, пока не придёт чёткое понимание.
    Ответ написан
    Комментировать
  • Как правильно передать один компонент react в другой?

    @frozen_coder
    Java-developer
    Сильно не вникал, но кратко, чтобы передать один компонент в дргой и там его отрисовать, следует передавать компонент через функцию и вызывать её там, где надо отобразить.
    Там где отрисовывается Parent
    let component = () => ( <ComponentChild /> );
    ...
    <Parent child={ component } />

    Внутри Parent в методе
    render(){
       return( 
          { this.props.child && this.props.child() }
       )
    }

    Как-то так. Таким образом определять какой компонент будет отрисовываться можно где-то вверху дерева в умном компоненте, а вниз глупым компонентам-отобразителям передавать его как props через параметр-переменную-функцию.
    Ответ написан
    1 комментарий
  • Как сильно востребовательны технологии microsoft наподобие Xamarin, ASP.NET на рынке труда?

    Вакансий в разы меньше. Но нужно понимать, что компании, кто пишет на java/.net cтабильней в силу объема, плюс задачи достаточно последовательные. Так что 5-10 вакансий на .net могут перекрывать, 40-50 вакансий на php/python/ruby.

    Так что если возьмешь место, можно там 3-5 лет стабильно работать.
    Ответ написан
    3 комментария