• Как относитесь к курсам на Stepik?

    @JihadTV
    Отличный сервис, очень много курсов от крутых отечественных преподавателей.
    Ответ написан
    Комментировать
  • Оценка своего уровня. Как улучшить код?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    1. Используйте const вместо let для определения переменных которые не переопределяются в коде. Это помогает снизить когнитивную нагрузку с человека читающего код и негласный стандарт в React разработке.

    2. Такие вещи как globalStyles и конфигурацию store лучше вынести в отдельные файлы. Они могут со временем хорошо разрастись.
    По поводу globalStyles, вы вообще можете вынести их в отдельный css файл.

    3. Вместо:
    {
      isModal
      ? <Route path="/auth" component={AuthPopup} />
      : null
    }

    лучше:
    {isModal && <Route path="/auth" component={AuthPopup} />}


    4. Вместо:
    function mapDispatchToProps(dispatch) {
        return {
            autoLogin: () => dispatch(autoLogin()),
            getBrowser: () => dispatch(getBrowser()),
            getMedia: () => dispatch(getMedia())
        }
    }


    лучше:
    const mapDispatchToProps = {
      autoLogin,
      getBrowser,
      getMedia,
    };


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

    6.
    & label {}
    & input {}
    & span {}

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

    7. Почему папка со страницами называется Containers? Дань бойлерплейтам?

    8. Использование trailing comma является хорошей практикой.

    9.
    import {combineReducers} from 'redux';
    import photoReducer from './photoReducer';
    import authReducer from './authReducer';
    import globalReducer from './globalReducer';
    
    export default combineReducers({
        photoReducer, authReducer, globalReducer
    })


    Все таки приятней работать с хранилищем в котором ключи не имеют в названии слова reducer:
    import {combineReducers} from 'redux';
    import photo from './photoReducer';
    import auth from './authReducer';
    import global from './globalReducer';
    
    export default combineReducers({
      photo, 
      auth,
      global,
    });


    10. Забудьте вообще, что в языке есть возможность использовать вложенный тернарный оператор:
    return e === 'invalid-email' ? 'Неверно указан e-mail'
        : e === 'user-not-found' ? 'Указанный e-mail на найден'
        : e === 'wrong-password' ? 'Неверный пароль'
        : e === 'email-already-in-use' ? 'Указанный e-mail уже используется'
        : e === 'network-request-failed' ? 'Нет подключения к интернету'
        : e === 'operation-not-allowed' ? 'Произошла ошибка, попробуйте снова'
        : e === 'popup-closed-by-user' ? 'Окно авторизации закрыто пользователем'
        : e === 'account-exists-with-different-credential' ? 'Аккаунт уже существует с другими данными, используйте другой способ авторизации'
        : e

    Это одна из самых худших практик в JavaScript разработке. Тут лучше подойдет конструкция switch case

    11. Константы actionTypes лучше вынести в папку constants и разложить по разным файлам, иначе со временем у вас там будет свалка.

    12. Вместо:
    import {SET_ACTIVE, CHANGE_VALUE, SET_DEFAULT, UPLOAD, UPDATE_IMAGE, SET_IMAGE_ERROR, SET_LIKE, SET_COMMENT, ADD_ARTICLE_SUCCESS, FETCH_ARTICLES_START, FETCH_ARTICLES_SUCCESS, FETCH_ARTICLES_ERROR} from '../actions/actionTypes';

    Лучше:
    import {
      SET_ACTIVE,
      CHANGE_VALUE,
      SET_DEFAULT, UPLOAD,  
      UPDATE_IMAGE,
      SET_IMAGE_ERROR,
      SET_LIKE,
      SET_COMMENT,
      ADD_ARTICLE_SUCCESS,
      FETCH_ARTICLES_START,
      FETCH_ARTICLES_SUCCESS,
      FETCH_ARTICLES_ERROR,
    } from '../actions/actionTypes';


    13. Попробуйте внедрить библиотеку reselect. И для получения значения из store вместо записи вида:
    function mapStateToProps(state) {
        return {
            browser: state.globalReducer.browser
        }
    }


    использовать селектор:
    const mapStateToProps = state => ({
      browser: browserSelector(state),
    });
    Ответ написан
    12 комментариев
  • Как правильно настроить IDE чтобы снизить нагрузку на глаза?

    Evgenym
    @Evgenym
    Лет пять назад открыл для себя утилитку F.lux. С тех пор забыл о чувстве песка и рези в глазах после долгого сидения за монитором. Очень рекомендую.
    Ответ написан
    2 комментария
  • Дают ли онлайн- курсы по программированию реальное преимущество перед самообразованием?

    AleksandrB
    @AleksandrB
    Совсем недавно вывел "Hello world"
    Деньги есть - покупай уже записанные курсы, как правило, там и наставник предусмотрен.
    Минусы онлайн курсов:
    1) Постоянные перерывы лекций на отдых
    2) Временные рамки, в которые нужно приходить. Смотреть записи - уныло и долго, в 2-х часовой записи будет изложено то что ты получишь за 20 минут из обычного видео
    3) Учат там не самые квалифицированные личности, как правило 3-7 лет в разработке и это мало. Я имею опыт чуть больше 3-х лет и понимаю, что знаю самую малость, и это не я тупой, а так всегда.
    4) Там учат не преподаватели, что значит уши будут бесконечно вять от "ЭЭЭЭЭЭ", "БЭЭЭЭ", "МЭЭЭЭ". Они считают это плюсом, но когда тебе объясняют алгоритмы 8 часов и 2 из них уходит на бэканье и мэканье - это плохо. Мало того, из-за отсутствия педагогического опыта они часто не смогут тебе объяснить каких-то вещей, ведь для них это будет очевидно, а для тебя непостижимо. Учителя могут, или по крайней мере, должны уметь войти в положение ученика и посмотреть на вопрос с его точки зрения. Простым смертным это зачастую недоступно.
    5) Группы набираются не лучше, чем в школе. Обычно по 50-70 человек, как вы думаете с вами будет работать преподаватель?
    6) Задания проверяются ОООООООООООЧЕНЬ долго, мне не верите, прочтите отзывы о любых подобных курсах. Это происходит как-раз из-за 50-70 человек на проверку, а уж что говорить о вопросах...
    7) Материал дается ооочень долго, то что, снова же, можно уложить в 10 минутное видео рассказывается 2 часа.

    Для работодателя это вообще плюсом являться не будет. Я работал в 3-х разных фирмах и бывал на 4 собеседования, о том как я учился спросили 1 раз, я ответил - самоучка, меня взяли. То что будет работа в портфолио, оно будет, но будет очень простое, с ним далеко не уехать.

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

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

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

    PS все это - мое мнение. Можешь его проигнорировать, оспорить или прислушаться.
    Ответ написан
    2 комментария
  • Как стать интернет-маркетологом?

    @majstar_Zubr
    C++, C#, gamedev
    Это хорошо, что вас это у не учили, потому что все это - просто инструменты и сервисы для маркетологов. Про книги из 2000 опять же, прекрасно, потому что главное слово в "интернет-маркетолог" - это как раз второе. Просто берете wordpress и делаете коммерческий блог, пробуете все инструменты, смотрите как они работают. Вы столкнетесь с терминологией, которую легко можно сверять переключением языка в Википедии.
    1) вам подойдёт любой курс, особенно если это первый ваш курс. Когда вопрос заключается в обучении вширь, то подойдут даже youtube каналы mail.ru, yandex. Вглубь - только книги.
    2) это не новость. Главное, что требуется - быть в курсе все рисков, с которыми вы как специалист будете сталкиваться во время работы интернет-маркетологом. А тут уже от двух десятков книг на английском никуда не деться. Так что советую свыкнуться с мыслью, что универ - это просто интерлюдия и прямо сейчас уже начать выяснять терминологию маркетинга на английском языке.
    Ответ написан
    Комментировать
  • Front-end developer работа?

    Mesuti
    @Mesuti
    На фл только сегодня видел вакансию front end dev с испытательной зп 1к долларов.

    Главное помните, под лежачий камень вода не течет.
    Откройте карту города, найдите Веб студия. И во все подряд звоните, в крайнем случае пишите.
    Найдете работу 100%
    Ответ написан
    Комментировать
  • Почему не добавляется ещё один LEFT JOIN?

    JOIN идут друг за другом

    Структура SQL запроса такая:
    SELECT * FROM table
    LEFT JOIN table1 ON...
    LEFT JOIN table2 ON ....
    INNER JOIN table3 ON ...
    WHERE ....
    Ответ написан
    Комментировать
  • Правда ли, что с более сложными языками, типа Python, С++ и тд. гораздо сложнее найти работу джуниору?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    1) Найти работу в самом начале пути сложно всегда. Это не сильно зависит от выбранной технологии (разумеется, всякие экзотические варианты вроде Junior Haskell Developer мы не рассматриваем). К тому же, считается, что начинающий разработчик уже что-то умеет. Попробуйте рассмотреть вариант со стажировками и курсами от компаний, с последующими стажировками. Такие предложения обычно есть.
    2) Я не уверен, что после курсов вы (и все те 3млн, людей, которые якобы прошли курсы) станете хотя бы начинающим разработчиком. Это конечно возможно, но придётся очень много работать самостоятельно. Ещё раз, очень и очень много. Скорее всего, на срок около года вообще придётся забыть обо всём остальном, кроме учёбы и практики.
    3) Разумеется, если город не СПб/Мск, то всё сильно хуже, банально потому, что меньше людей, меньше компаний и меньше вакансий.
    Ответ написан
    3 комментария
  • Насколько подробно в резюме стоит указывать навыки?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    Сокеты, воркеры, стримы это же часть работы с языком программирования, то есть это действительно второстепенное
    Уровень полезности - конкретные общеизвестные языки и технологии и уровень (basic, advanced или junior/mid/senior), можете свою шкалу
    Нужно указывать родительскую технологию, то есть языки, фреймворки, операционные системы и крупные продукты, которые значительно отличаются.

    Например указывать базовое владение SQL для oracle/mysql/postgres нет смысла, ибо на базовом уровне они схожи. А вот например advanced mysql и advanced oracle sql/pl - это уже разные вещи.
    Также как и oracle sql и администрирование баз данных Oracle - тоже разные вещи.
    Ответ написан
    Комментировать
  • Как устроена сеть биткоин и подобные?

    un1t
    @un1t
    Начни с прочтения Mastering Bitcoin.
    Ответ написан
    Комментировать
  • Дополнительный заработок программисту?

    При всем моем уважении, но такой подход крайне деструктивен для жизни.

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

    2) Поэтому рационально будет идти по двум путям:

    - увеличивать доход на своей текущей работе (либо при смене работы)
    - идти в полукоммерческую схему со своим продуктом.

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

    p.s. у меня в свое время была работа, поддержка ряда клиентов в it-инфрастуктуре, пару клиентов на поддержке сайтов, плюс контракты на продвижение сайтов. Просто вся жизнь превратилась в работу, как смог накопить на квартиру, сразу же от этого всего отказался в пользу жирной работы, и своих проектов.
    Ответ написан
    2 комментария
  • Нормально ли получать 15к fullstack разработчику с стажем 3 года?

    opium
    @opium
    Просто люблю качественно работать
    15 тысяч баксов нормальная зарплата вы зажрались
    Ответ написан
    Комментировать
  • Нормально ли получать 15к fullstack разработчику с стажем 3 года?

    @Kostik_1993
    Web Developer
    В регионе нормальная зарплата разработчика (при условии что он тянет) это 60 и выше, в Москве от 100. Хотя я даже в регионе ниже 100 не двигаюсь, эти деньги на фрилансе можно зарабатывать, а не неделю на стуле просиживать
    15 получают ребята на мойке, поэтому думаю ответ очевиден. Раньше вы были рабом, и сейчас вам предлагают тоже самое. Ищите, найти работу с достойной зарплатой при опыте в 3 года вполне реально, причем в 5-6 раз выше чем вам предлагают.
    Просто примите тот факт что вы были рабом, делали работу которая стоила 100, а получали 10, откройте https://moikrug.ru/vacancies и посмотрите вакансии там, найдите по своему стеку и оцените чего вы стоите для тех кто готов платить и кому нужен результат и не раб, лично я благодаря такому анализу без колебаний уволился с предыдущего места работы
    Ответ написан
    8 комментариев
  • Реально в 36-40 лет стать тестировщиком или программистом если есть свободное время?

    Nikolino
    @Nikolino
    Реально, но есть нюансы.

    Если на собеседовании и на тестовом задании вы (40 летний, так называемый, switcher) и 20-ти летний соискатель показали плюс минус одинаковые результаты, то возьмут, скорее всего, его, чем вас.

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

    Если коротко, то молодой возраст и высшее профильное это конкурентные преимущества. Реальный "вес" этих преимуществ оценить сложно, на фоне кучи других факторов.

    А понятия "40 летний джун", "30 летний мидл" это всё относительно. Сеньор какой-нибудь региональной веб-студии будет джуном в какой-нибудь крупной столичной IT компании, хоть и в годах опыт есть, но если доводилось работать лишь с лендингами или простыми сайтами на CMS, то джун с опытом работы в 1 год, но в крупной конторе, вероятно уже знает больше.
    Ответ написан
    Комментировать
  • Реально в 36-40 лет стать тестировщиком или программистом если есть свободное время?

    sslesarev
    @sslesarev
    QA Manager
    Тестировщиком - реально и быстро. Программистом сложней. Если серьёзно настроен развиваться, напиши - в одной компании, где я раньше работал, могут рассмотреть новичка на стажировку тестировщиком удалённо. За очень небольшие, но реальные деньги.
    Ответ написан
    Комментировать
  • Прокомментируете тестовое на react?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    1. Хотелось бы видеть в проекте использование redux. react+redux - это самый распространенный и востребованный стек в React разработке.

    2. Почему все хандлеры и состояния находятся в App, а не в Main? Как вы потом эту кашу собираетесь масштабировать? Переносите все, что связанно только с Main в Main. По-хорошему смотрите пункт 1.

    3. Слишком много функциональных компонентов. Подумайте их где можно заменить на классы с реализованным shouldComponentUpdate или на PureComponent, чтобы убрать лишние вызовы render этих компонентов.

    4. import Logo from 'images/Logo.png';
    называть пути к ресурсам с заглавной буквы неправильно.

    5. Вместо:
    const StyledLogo = styled.img.attrs({
      src: Logo,
      alt: 'Aviasales'
    })`
      width: 60px;
      height: 61px;
    `;

    Удобней в использовании:
    const StyledLogo = styled.img`
      width: 60px;
      height: 61px;
    `;

    и:
    <StyledLogo src={logo} alt="Aviasales" />

    6.
    const Error = ({ text }) => (
      <StyledError dangerouslySetInnerHTML={{__html: text}} />
    );

    зачем тут html?
    Для сохранения переносов строки есть css правило:
    white-space: pre-line;

    7. Вместо:
    let element;
    
    if (error && !isLoading) {
      element = <Error text={error} />;
    }
    if (!error && isLoading) {
      element = <Loader />;
    }
    if (!error && !isLoading) {
      element = (
        <>
        <Heading />
        <Main
        isCurrencyExchanging={isCurrencyExchanging}
        activeCurrency={activeCurrency}
        handleCurrencyChange={this.handleCurrencyChange}
        ticketsFilteredByStops={ticketsFilteredByStops}
        stops={stops}
        handleStopsChange={this.handleStopsChange}
        handleUncheckOther={this.handleUncheckOther}
        />
        </>
      );
    }
    return element;

    Лучше:
    if (isLoading) return <Loader />;
    
    if (error) return <Error text={error} />;
    
    return (
      <>
        <Heading />
        <Main
          isCurrencyExchanging={isCurrencyExchanging}
          activeCurrency={activeCurrency}
          handleCurrencyChange={this.handleCurrencyChange}
          ticketsFilteredByStops={ticketsFilteredByStops}
          stops={stops}
          handleStopsChange={this.handleStopsChange}
          handleUncheckOther={this.handleUncheckOther}
        />
      </>
    );


    8. Вместо:
    filterTickets = (tickets, stops) => {
      return tickets.filter((ticket) => {
        return values(stops).indexOf(ticket.stops) !== -1;
      });
    };

    Лучше:
    filterTickets = (tickets, stops) => tickets.filter(
      ticket => values(stops).includes(ticket.stops),
    );


    9. Не пропускайте отступы между методами и между вложенными свойствами css.

    10. Вместо:
    componentsDidMount() {
      // много кода
    }


    Лучше:
    componentsDidMount() {
      this.fetchSomeData();
    }


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

    12. Loader и Error самое место в директории components/core или что-то вроде того. Там же, по-хорошему, должны находиться базовые компоненты: кнопки, инпуты, табы, чекбоксы.

    13. Styled компоненты, имхо, лучше писать в файле с компонентом, где они применяются. Так анализ кода происходит гораздо быстрей и легче поддерживать. Исключение - переиспользуемые компоненты.
    Даже если вам больше нравится выносить, называть файл style неправильно, вы там описываете компоненты, а не просто стили.
    Ответ написан
    3 комментария
  • Работал в вузе после диплома, преподавал программирование и сети, но решил уходить в ИТ, что делать?

    vvpoloskin
    @vvpoloskin
    Инженер связи
    В отличии от остальных тут отметившихся у вас есть отличный математический бэкграунд и навык преподавания. Легко устроитесь на 100+, только работу подольше поискать надо, ее меньше чем в веб и мобилках, программировать будете в матлабе)) А все отметившиеся так и будут дальше формошлепить на фрилансах, не подозревая, что карьера на этом закончилась.

    P.S. Вот недавно знакомый устроился на работу в западную коммерческую контору, занимается моделированием сигналов LTE и 5G для последующего внедрения в 3gpp. Прогает в ML, а на основе его кода даётся ТЗ C-шным программерам для непосредственной имплементации в сетевом оборудовании.
    Ответ написан
    9 комментариев
  • Почему не работает JS-код?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Разница в том, когда выполняется код.

    Первые две строки выполняются сразу при загрузке документа. Переменной num назначается значение пустого на тот момент input'а.

    На btn вешается слушатель события. Он не выполняется сразу, а сидит и ждёт события. При каждом возникновении события, выполняется внутренний код функции getSquareNum()

    Код внутри функции – вот этот alert() – выполняется позже, при нажатии кнопки. Выводит определённое в самом начале значение num в квадрате. Или же берет свежее, «на сейчас», значение из input'а во втором варианте кода с «если вместо num подставить document.get...».
    Ответ написан
    1 комментарий
  • О чем нужно рассказать, когда спрашивают про архитектуру проекта/приложения?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Вопрос сам по себе слишком общий. В ответ обычно надо задавать уточняющие вопросы. Про технологический стек, тип приложения, уровень детализации, слои и т.п. спросить. А уж на том, что действительно интересно собеседнику и делать акцент. Можно ещё рассказать обо всём поверхностно и по реакции понять, что действительно интересно, но спросить всё-таки лучше.
    Самая серьезная ошибка на технических собеседованиях: начать отвечать на вопрос без полного понимания того, о чём вас спросили. Задавайте уточняющие вопросы, вовлекайте собеседника, рассуждайте вслух и т.д. Нормальное техническое собеседование проверяет вашу способность думать.
    Вообще, универсальный рецепт при любой дискуссии, и не только на собеседовании: определить о чем и зачем вообще дискуссия. Т.е. определиться в терминах, уточнить граничные условия, уровни детализации, к чему хотим прийти и т.п. Но, предупреждаю сразу, люди вас за это любить не будут :)
    Ответ написан
    Комментировать
  • Как сделать веб-сервис и не утонуть в процессе?

    gobananas
    @gobananas
    finishhim.ru
    1. Выделить одну главную функцию сервиса
    2. Сделать её, сверстать и выкатить, это будет MVP
    3. Не заморачиваться с вёрсткой
    4. Не заморачиваться с методами авторизации
    5. Не думать про нагрузку, не заниматься оптимизацией кода и БД
    6. Если поймали себя на мысли что вы думаете какой паттерн тут применить вы в Ж, просто пишите код, который работает!!
    7. Не совмещать написание сервиса, который вы РЕАЛЬНО хотите запустить с изучением чего-то нового (языка, БД). Утоните в учёбе и никогда не запустите.

    Это всё на своём опыте написания проекта говорю вам а не голословно ))
    Ответ написан
    10 комментариев