Русский
Русский
English
Статистика
Реклама

Проблемы

50200 вопросов по JavaScript

06.07.2020 10:05:56 | Автор: admin


Доброго времени суток, друзья!

Предлагаю Вашему вниманию небольшой интерактив своего рода викторину по JavaScript, на данный момент состоящую из 50 вопросов.

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

Предисловие


Данная часть основана на этом репозитории. Его автор, Lydia Hallie, позиционирует свой проект как список продвинутых вопросов и, действительно, среди них есть такие, которые, как мне кажется, даже опытному JavaScript-разработчику покажутся непростыми. Однако среди этих вопросов есть и такие, для ответа на которые достаточно владеть базовыми знаниями. В репозитории имеется русский перевод, но, мягко говоря, он оставляет желать лучшего, поэтому большую часть ответов (объяснений) пришлось переводить заново.

Следует отметить, что приводимые пояснения (ответы) не всегда в полной мере раскрывают суть проблемы. Это объясняется формой проекта он представляет собой чеклист, а не учебник. Ответы, скорее, являются подсказкой для дальнейших поисков на MDN или Javascript.ru. Впрочем, многие из объяснений содержат исчерпывающие ответы.

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

Собственно, это все, что я хотел сказать в качестве предисловия.

Правила


Правила простые: 50 вопросов, 3-4 варианта ответа, рейтинг: количество правильных и неправильных ответов, прогресс: номер и количество вопросов.

По результатам определяется процент правильных ответов и делается вывод об уровне владения JavaScript: больше 80% отлично, больше 50% неплохо, меньше 50% ну, Вы понимаете.

К каждому вопросу прилагается пояснение. При неправильном ответе данное пояснение раскрывается.

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

Но довольно слов, пора переходить к делу.

Викторина



Код проекта находится здесь.

Механика


Несколько слов о том, как реализована викторина для тех, кому интересно.

Разметка выглядит так:

<head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>200+ вопросов по JavaScript</title>    <!-- шрифт -->    <link href="http://personeltest.ru/aways/fonts.googleapis.com/css2?family=Ubuntu&display=swap" rel="stylesheet">    <!-- стили -->    <link rel="stylesheet" href="style.css">    <!-- основной скрипт с типом "модуль" -->    <script type="module" src="script.js"></script></head><body></body>

Добавляем минимальные стили.
CSS:
* {    margin: 0;    padding: 0;    box-sizing: border-box;    font-family: Ubuntu, sans-serif;    font-size: 1em;    text-align: center;    letter-spacing: 1.05px;    line-height: 1.5em;    color: #111;    user-select: none;}@media (max-width: 512px) {    * {        font-size: .95em;    }}html {    position: relative;}body {    padding: 1em;    min-height: 100vh;    background: radial-gradient(circle, skyblue, steelblue);    display: flex;    flex-direction: column;    justify-content: start;    align-items: center;}h1 {    margin: .5em;    font-size: 1.05em;}output {    margin: .5em;    display: block;}.score {    font-size: 1.25em;}form {    text-align: left;}form p {    text-align: left;    white-space: pre;}form button {    position: relative;    left: 50%;    transform: translateX(-50%);}button {    margin: 2em 0;    padding: .4em .8em;    outline: none;    border: none;    background: linear-gradient(lightgreen, darkgreen);    border-radius: 6px;    box-shadow: 0 1px 2px rgba(0, 0, 0, .4);    font-size: .95em;    cursor: pointer;    transition: .2s;}button:hover {    color: #eee;}label {    cursor: pointer;}input {    margin: 0 10px 0 2em;    cursor: pointer;}details {    font-size: .95em;    position: absolute;    bottom: 0;    left: 50%;    transform: translateX(-50%);    width: 90%;    background: #eee;    border-radius: 4px;    cursor: pointer;}details h3 {    margin: .5em;}details p {    margin: .5em 1.5em;    text-align: justify;    text-indent: 1.5em;}.right {    color: green;}.wrong {    color: red;}


Исходники (assets) представляют собой массив объектов, где каждый объект имеет свойства question (вопрос), answers (ответы), rightAnswer (правильный ответ) и explanation (объяснение):

[{    question: `        function sayHi() {            console.log(name);            console.log(age);            var name = "Lydia";            let age = 21;        }        sayHi();    `,    answers: `        A: Lydia и undefined        B: Lydia и ReferenceError        C: ReferenceError и 21        D: undefined и ReferenceError    `,    rightAnswer: `D`,    explanation: `        Внутри функции мы сначала определяем переменную name с помощью ключевого слова var. Это означает, что name поднимется в начало функции. Name будет иметь значение undefined до тех пор, пока выполнение кода не дойдет до строки, где ей присваивается значение Lydia. Мы не определили значение name, когда пытаемся вывести ее в консоль, поэтому будет выведено undefined. Переменные, определенные с помощью let (и const), также поднимаются, но в отличие от var, не инициализируются. Доступ к ним до инициализации невозможен. Это называется "временной мертвой зоной". Когда мы пытаемся обратиться к переменным до их определения, JavaScript выбрасывает исключение ReferenceError.    `},...]

Основной скрипт.
JavaScript
// импортируем массив объектов - исходникиimport assets from './assets.js'// IIFE;((D, B) => {    // заголовок - вопрос    const title = D.createElement('h1')    B.append(title)    // рейтинг: количество правильных и неправильных ответов    const score = D.createElement('output')    score.className = 'score'    B.append(score)    // прогресс: порядковый номер вопроса    const progress = D.createElement('output')    progress.className = 'progress'    B.append(progress)    // контейнер для вопроса, вариантов ответа и кнопки для отправки формы    const div = D.createElement('div')    B.append(div)    // получаем значения правильных и неправильных ответов из локального хранилища    // или присваиваем переменным 0    let rightAnswers = +localStorage.getItem('rightAnswers') || 0    let wrongAnswers = +localStorage.getItem('wrongAnswers') || 0    // получаем значение счетчика из локального хранилища    // или присваиваем ему 0    let i = +localStorage.getItem('i') || 0    // рендерим вопрос    showQuestion()    // обновляем рейтинг и прогресс    updateScoreAndProgress()    function showQuestion() {        // если значение счетчика равняется количеству вопросов        // значит, игра окончена,        // показываем результат        if (i === assets.length) {            return showResult()        }        // заголовок-вопрос зависит от значения счетчика - номера вопроса        switch (i) {            case 4:                title.textContent = `Что не является валидным?`                break;            case 9:                title.textContent = `Что произойдет?`                break;            case 12:                title.textContent = `Назовите три фазы распространения событий`                break;            case 13:                title.textContent = `Все ли объекты имеют прототипы?`                break;            case 14:                title.textContent = `Каким будет результат?`                break;            case 20:                title.textContent = `Чему равно sum?`                break;            case 21:                title.textContent = `Как долго будет доступен cool_secret?`                break;            case 23:                title.textContent = `Каким будет результат?`                break;            case 25:                title.textContent = `Глобальный контекст исполнения создает две вещи: глобальный объект и this`                break;            case 27:                title.textContent = `Каким будет результат?`                break;            case 29:                title.textContent = `Каким будет результат?`                break;            case 30:                title.textContent = `Что будет в event.target после нажатия на кнопку?`                break;            case 33:                title.textContent = `Каким будет результат?`                break;            case 34:                title.textContent = `Какие из значений являются "ложными"?`                break;            case 38:                title.textContent = `Все в JavaScript это`                break;            case 39:                title.textContent = `Каким будет результат?`                break;            case 40:                title.textContent = `Каким будет результат?`                break;            case 41:                title.textContent = `Что возвращает setInterval?`                break;            case 42:                title.textContent = `Каким будет результат?`                break;            case 42:                title.textContent = `Каково значение num?`                break;            case 49:                title.textContent = `Каким будет результат?`                break;            default:                title.textContent = `Что будет выведено в консоль?`                break;        }        // поскольку каждый элемент массива - это объект,        // мы можем его деструктурировать, получив вопрос, правильный ответ и объяснение        const {            question,            rightAnswer,            explanation        } = assets[i]        // поскольку варианты ответа - это input type="radio",        // строку необходимо преобразовать в массив (критерием является перенос строки - \n)        // первый и последний элементы - пустые строки,        // избавляемся от них с помощью slice(1, -1),        // также удаляем пробелы        const answers = assets[i].answers            .split('\n')            .slice(1, -1)            .map(i => i.trim())        // HTML-шаблон        const template = `        <form action="#">            <p><em>Вопрос:</em><br> ${question}</p>            <p><em>Варианты ответов:</em></p><br>            ${answers.reduce((html, item) => html += `<label><input type="radio" name="answer" value="${item}">${item}</label><br>`, '')}            <button type="submit">Ответить</button>        </form>        <details>            <summary>Показать правильный ответ</summary>            <section>                <h3>Правильный ответ: ${rightAnswer}</h3>                <p>${explanation}</p>            </section>        </details>`        // помещаем шаблон в контейнер        div.innerHTML = template        // находим форму        const form = div.querySelector('form')        // выбираем первый инпут        form.querySelector('input').setAttribute('checked', '')        // обрабатываем отправку формы        form.addEventListener('submit', ev => {            // предотвращаем перезагрузку страницы            ev.preventDefault()            // определяем выбранный вариант ответа            const chosenAnswer = form.querySelector('input:checked').value.substr(0, 1)            // проверяем ответ            checkAnswer(chosenAnswer, rightAnswer)        })    }    function checkAnswer(chosenAnswer, rightAnswer) {        // индикатор правильного ответа        let isRight = true        // если выбранный ответ совпадает с правильным,        // увеличиваем количество правильных ответов,        // записываем количество правильных ответов в локальное хранилище,        // иначе увеличиваем количество неправильных ответов,        // записываем количество неправильных ответов в локальное хранилище        // и присваиваем индикатору false        if (chosenAnswer === rightAnswer) {            rightAnswers++            localStorage.setItem('rightAnswers', rightAnswers)        } else {            wrongAnswers++            localStorage.setItem('wrongAnswers', wrongAnswers)            isRight = false        }        // находим кнопку        const button = div.querySelector('button')        // если ответ был правильным        if (isRight) {            // сообщаем об этом            title.innerHTML = `<h1 class="right">Верно!</h1>`            // выключаем кнопку            button.disabled = true            // через секунду вызываем функции            // обновления рейтинга и прогресса и рендеринга следующего вопроса            // отключаем таймер            const timer = setTimeout(() => {                updateScoreAndProgress()                showQuestion()                clearTimeout(timer)            }, 1000)            // если ответ был неправильным        } else {            // сообщаем об этом            title.innerHTML = `<h1 class="wrong">Неверно!</h1>`            // выключаем инпуты            div.querySelectorAll('input').forEach(input => input.disabled = true)            // раскрываем объяснение            div.querySelector('details').setAttribute('open', '')            // меняем текст кнопки            button.textContent = 'Понятно'            // по клику на кнопке вызываем функции            // обновления рейтинга и прогресса и рендеринга следующего вопроса            // удаляем обработчик            button.addEventListener('click', () => {                updateScoreAndProgress()                showQuestion()            }, {                once: true            })        }        // увеличиваем значение счетчика        i++        // записываем значение счетчика в локальное хранилище        localStorage.setItem('i', i)    }    function updateScoreAndProgress() {        // обновляем рейтинг        score.innerHTML = `<span class="right">${rightAnswers}</span> - <span class="wrong">${wrongAnswers}</span>`        // обновляем прогресс        progress.innerHTML = `${i + 1} / ${assets.length}`    }    function showResult() {        // определяем процент правильных ответов        const percent = (rightAnswers / assets.length * 100).toFixed()        // объявляем переменную для результата        let result        // в зависимости от процента правильных ответов        // присваиваем result соответствующее значение        if (percent >= 80) {            result = `Отличный результат! Вы прекрасно знаете JavaScript.`        } else if (percent > 50) {            result = `Неплохой результат, но есть к чему стремиться.`        } else {            result = `Вероятно, вы только начали изучать JavaScript.`        }        // рендерим результаты        B.innerHTML = `        <h1>Ваш результат</h1>        <div>            <p>Правильных ответов: <span class="right">${rightAnswers}</span></p>            <p>Неправильных ответов: <span class="wrong">${wrongAnswers}</span></p>            <p>Процент правильных ответов: ${percent}</p>            <p>${result}</p>            <button>Заново</button>        </div>        `        // при нажатии на кнопку        // очищаем хранилище        // и перезагружаем страницу,        // удаляем обработчик        B.querySelector('button').addEventListener('click', () => {            localStorage.clear()            location.reload()        }, {            once: true        })    }})(document, document.body)


Благодарю за внимание, друзья.

Продолжение следует
Подробнее..

Юридические грабли инди-разработчиков и методы их обхода

06.11.2020 16:10:59 | Автор: admin

Никита Проскурин, СЕО Rummy Games Studio, компании которая занимается разработкой пошаговой стратегической игры Saturated Outer Space поделился личными ссадинами, шишками и любовно собранной коллекцией грабелек на пути к релизу. На этот раз мы с ним вместе зашли в выставочный зал юридического садового инструмента.




Расскажи на какие юридические грабли инди-команда гарантированно наступит по первости?


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


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


Не могу ответить, на какие наступят гарантированно, но думаю, что на этот вопрос лучше всего ответят ребята из GMT Legal, с которыми Rummy Games сотрудничает благодаря нашему продюсеру.


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


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


Расскажи, на какие грабли ты успел уже наступить сам. Best practices, как говорится.


Если мы касаемся только юридической стороны вопроса, то я наступил на грабли с возвратом затрат на открытие ООО. Дело в том, что при открытии ООО, я имел официальный статус безработного. Такой вариант позволяет воспользоваться поддержкой правительства Москвы по возмещению затрат на открытие ООО или ИП. Они возвращают до 10 200 рублей.


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


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


Ах да, еще не советую указывать собственный мобильный при подаче на регистрацию юридического лица. В первые 3 дня после подачи мне позвонили из 40 разных банков и из нескольких подобных структур с предложением открытия счета для будущей организации именно у них. Это отвлекает и напрягает.


Какие необходимы документы и юридические процедуры?


На этот вопрос мне как раз и помогли ответить юристы GMT Legal. Это довольно простой момент, необходимый пакет документов ничем не отличается от открытия любой другой ООО, но все же мне было проще, чтобы за меня это сделали профессионалы. Я даже не особо запомнил, что там было. Мне просто передали Устав, решение об открытии ООО, решение о назначении генерального директора и что-то еще. Я все подписал и мы передали все нотариусу, оплатили. Потом ждешь несколько дней и все, у тебя на руках полный комплект. Никакого головняка.


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


Далее мне помогли с договором на выкуп доменного имени и с подачей заявления на регистрацию интеллектуальной собственности.


В планах составление шаблонов договоров с сотрудниками и прочие нюансы.


Но больше всего мне нравится в сотрудничестве с GMT Legal то, что ребята делают все с оглядкой на индустрию геймдева. Это было мое самое главное требование: подстелить соломки в специфической области.


Ах да, кстати со счетом для организации: все предельно просто. Можно через юристов, а можно просто позвонить в выбранный вами банк, к вам приедет человек с пакетом документов, все вам объяснит и откроете счет. Я открывал в Райффайзене. Во-первых, я к нему привык, во вторых это хороший европейский банк, который все знают. В-третьих, у них есть неплохой тариф для начинающего бизнеса, а так как у меня еще и личная карта в этом банке, то все переводы между моим счетом и счетом организации идут без комиссии. Это очень полезно для учредителя, особенно если соберетесь давать займ собственному ООО.


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


К кому на инди-сцене можно обратиться за советом и помощью?


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


Кто самый опытный на отечественной инди-сцене?


Сомневаюсь, что могу корректно ответить на этот вопрос. Не встречал юристов специально для инди. Если такие есть, то я их не знаю. Может быть это бесплатная бизнес-идея для юридической компании. Открывайте подразделение для инди, помогайте им на старте бесплатно за будущую долю в проекте. Я бы даже бизнес-план мог расписать для такой услуги, но времени нет, я игру делаю.


Я выбрал тех, с кем мне было удобно связаться и контактировать. Для разнообразия могу рекомендовать Андрея Кривошеева, он очень опытный и не одну собаку съел в этом деле.


О каких громких граблях в юридическом плане ты слышал на инди-сцене?


Думаю, что самые громкие грабли на которые наступали инди это, конечно, история нашего соотечественника, Пажитнова Алексея. Человек, создавший уникальную самобытную игру, никак в начале не оформил права на нее. Его конечно можно понять, в то время и в тех условиях в которых был создан Тетрис, никто и не думал о фиксации прав на интеллектуальную собственность. В итоге он все же справился с этой проблемой, но случай показательный. Знакомясь с его историей мне было обидно почти также, как если бы я сам вляпался в нее. Разработческая солидарность наверное.


Чем различаются юридические грабли у нас и на Западе?


Не знаю, не сравнивал. Среди моих знакомых есть те, кто сразу пытается зарегистрировать компанию в Англии для того, чтобы у них не отжали права на ИС в России. Не знаю, насколько этот риск и меры его страхования оправданы. При консультации с юристом, мне было сказано, что у нас неплохое право в части охраны ИС, оно вполне коррелирует с международным и в основном не хотят регистрироваться в РФ только те, кто параноит. Наверное нельзя за это осуждать людей. Каждый сам решает, где и как подстелить соломки. Но это что касается инди. У крупных проектов другая реальность.


В какой стране лучше регистрировать компанию?


В той, где вы работаете и чье законодательство вам понятно. Оно ведь должно защищать ваши права. Для инди нет большого смысла вдаваться в сложные сборы информации и искать подходящую юрисдикцию на старте, не стоит тратить на это драгоценное время. Сделайте сначала прототип, который у вас с руками будут отрывать издатели. Если это удастся, тогда уже стоит задуматься над экономией, налоговой оптимизацией и диверсификацией рисков.


*Какие ограничения стоят перед инди-компаниями из России при выходе на западный рынок?


Проще получать инвестирование, если вы не в России. Проще не в плане процедуры, а в плане того, что за пределами РФ денег гораздо больше. И если вы имеете счет в иностранном международном банке, то все процедуры пройдут быстрее. В остальном не знаю.


Какая юридическая ошибка гарантированно вызовет Fatal error и прихлопнет инди-компанию?


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


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


Спасибо, что были с нами! Хороших выходных!

Подробнее..

Я не понимаю, почему у программистов всё хорошо

07.10.2020 18:18:13 | Автор: admin

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

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

Программисты зарабатывают нормально денег, почти стали прилично одеваться, могут легко сменить работу, если заколебало. Из минусов в голову приходит только выгорание, но как-то, знаете ли, это маловато минусов для очень ответственной работы, от которой в компании зависят CTR, BTL, KPI, SVG и HTML.

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

Программисты выгорают

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

Новые технологии появляются слишком быстро

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

Все коллеги не очень

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

А это только 11 утра, тестировщики и девопс ещё спят.

На собеседования приходят неотёсанные юнцы

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

А без настроения-то вообще не работается. Хорошо, что у программистов есть печеньки.

До мидла карабкаться и карабкаться

Начинающим вообще тяжко, особенно если учились самостоятельно непонятно, где взять опыт, как делать типовые задачи, а тут ещё тимлид приходит и просит план развития и быстренько поменять стили у заголовков. Конечно, в интернете иногда встречаются понятные и развёрнутые инструкции для развития, но даже их не всегда хватает (надо же в закладки добавить, а потом не забыть), чтобы быстро разобраться.

Вроде мало кто остаётся джуном навсегда, но перспектива так себе, согласитесь.

Что там ещё

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

Поэтому хочу спросить у Хабра. Программисты всех сортов, что вам не нравится в вашей работе? Какие минусы? Расскажите то, о чём никто никогда не рассказывает.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru