Как НЕ быть посредственным разработчиком

    Привет, Хабр! Представляю вашему вниманию перевод статьи «How not to be a mediocre developer!»
    Dushyant Sabharwal. В статье приведены некоторые советы для начинающих и, возможно, некоторых опытных программистов, которые могут помочь значительно повысить свой профессионализм и изменить отношение к работе. Некоторые из них могут показаться банальными, но новички, возможно, смогут найти что-то полезное для себя.

    Пишите больше кода


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



    Пишите тесты


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

    Давайте рассмотрим пример:

    function postData(data) {
     boolean valid = true;
     // проверяем наличие данных
     if (data === undefined) {
       valid = false;
     }
    // проверяем формат электронной почты
     if (!regex(data['email']) {
       valid = false;
     }
    // проверяем длину пароля
     if (data['password'].length < 8) {
       valid = false;
     }
    if (valid) {
      http
       .post(`example.com/user/create`, data)
       .then((response) => {
        //добавляем информацию в список
        this.users.append(response.userid);
       })
       .catch((error) => {
        // выводим информацию об ошибке
       });
     } else {
       showValidationError();
     }
    }
    

    Метод postData выполняет несколько функций сразу: проверка корректности данных, добавление информации в список пользователей в случае прохождения данными проверки, обработка ошибок. Написать модульный тест для postData может быть довольно сложной и неприятной задачей. Лучше будет разбить этот код на несколько методов и протестировать каждый по отдельности, например:

    function postData(data) {
     return http
       .post(`example.com/user/create`, data);
    }
    
    function validate(data) {
     // проверяем наличие данных
     if (data === undefined) {
       return false;
     }
    // проверяем формат электронной почты
     if (!regex(data['email']) {
       return false;
     }
    // проверяем длину пароля
     if (data['password'].length >= 8) {
       return false;
     }
      return true;
    }
    
    function appendUsers(userId) {
      this.users.append(response.userid);
    }
    
    function main() {
     if (validate(data)) {
      postData(data)
       .then(data => appendToList(data.userId))
       .catch(error => handleError(error))
     } else {
      showValidationError();
     }
    }
    

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

    Будьте честны


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

    Участвуйте в open-source проектах


    Участвуя в open-source проектах, вы можете столкнуться с ситуациями, которые никогда бы не произошли на вашей обычной работе. Таким образом вы можете расширить свои горизонты. Вы можете больше узнать о работе в распределённых командах. непрерывной интеграции и других средствах разработки, активно используемых в крупных open-source проектах. Как известно, open-source значительно влияет на мир информационных технологий в целом и на разработчиков в частности.

    Помогайте людям


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

    Начните собственный проект


    Собственные проекты являются отличным способом изучения новых фреймворков и технологий, с которыми вы не сталкиваетесь на работе. При работе над собственным проектом Вы являетесь product manager-ом, разработчиком и проектироващиком — представьте только, какое количество важных решений вам придётся принимать самостоятельно! Возможно, однажды на своей работе вы успешно предложите внедрить новую технологию или фреймворк, изученные вами во время работы над собственным проектом!

    Умерьте своё эго


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



    Думайте о причинах существования программных средств


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

    var app = new Vue({
      el: '#app',
      data: {
        message: 'Hello Vue!'
      }
    })
    

    Выше приведён пример кода, который вы можете встретить на сайте с документацией vue.js. Даже глядя на этот простой пример, я думаю о следующих вещах:

    1. Почему для создания компонента используется ключевое слово new? Почему они не используют паттерн «фабрика» для создания объектов?
    2. Похоже, что свойство el принимает значение id элемента, но почему оно использует #? Означает ли это, что я могу добавить другие селекторы элементов, такие как аттрибуты и классы?
    3. data выглядит как обобщённое имя свойства для объекта vue. Что именно она представляет собой?

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

    Не ленитесь


    Лень может помешать вам продемонстрировать свои навыки или сделать вещи, которые кажутся вам важными. Например, если вы считаете, что рефакторинг может повысить производительность кода, — сделайте это! Добавьте комментарии, чтобы сохранить время других разработчиков. Задокументируйте написанный вами API. Время, вложенное вами в свой код, является сохранённым временем других разработчиков, которые будут работать с вашим кодом.

    Решайте алгоритмические задачи


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

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

    К сайтам, содержащим такие задачи, относятся: hackerrank, leetcode, codingame и другие.

    Хвалите людей


    Если вам понравился коммит, сделанный вашим коллегой, напишите ему об этом. Поставьте плюсик ответу на stackoverflow, оказавшемуся полезным для вас. Проголосуйте на medium за статью, которая дала вам полезные знания. Поставьте звёздочку заинтересовавшему вас проекту на github. Поощрение других людей помогает им, а затем и вам, развивать в себе лучшие качества.

    Не отказывайтесь от задач какого-либо типа


    Если вы видите проблему в API и представляете, с чем она связана, не стоит говорить: «Я — фронтендер. Это не моя проблема». На мой взгляд, такое отношение к проблемам является неправильным. Основные принципы программирования, такие как DRY, использование абстракций в случаях, когда классы реализуют смешанную функциональность, обработка исключений по всем возможным ветвям исполнения кода и т.д. применимы практически на любом уровне (фронтэнд, бэкэнд), где возникают задачи для программистов. Держа в голове эти принципы, вы, возможно, будете справляться с задачами, которые на первый взгляд кажутся «не вашей головной болью», так как вы работаете с другим кодом.

    Заключение


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

    Похожие публикации

    Комментарии 295

      +5
      Вроде бы очевидные вещи, жалко только не все их понимают.
        +1

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

        +15
        Все это замечательно, когда оторвано от бизнес-задач.

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

        1) Изучите сферу, в которой работаете. Работаете в телекоме, изучите телеком. Работаете в банке, изучайте банковское дело. Так вы сможете быстрее и правильнее решать задачи.
        2) Изучайте бизнес-процессы компании.
        3) Рационализируйте. Предлагайте идеи руководству по улучшению, не ждите, когда вам принесут ТЗ на блюдечке с золотой каемочкой.
        4) Берите задачи чуть выше вашего уровня (знаний). Так вы сможете развиваться.

        Так вы станете полезным, а значит востребованным и хорошо оплачиваемым. Программирование это всего лишь инструмент. Если вы не знаете как заработать с помощью него деньги для компании, то вы бесполезный балласт.
        • НЛО прилетело и опубликовало эту надпись здесь
            +5
            Очень круто, между прочим. Его междисциплинарный опыт может позволить ему увидеть места для инноваций там, где их никто раньше не видел.
              +4
              Такие сказки только в России возможны. В нормальной стране его бы к пациенту только лет через 10 подпустили бы после получения соответствующего образования, сдачи экзаменов и получения необходимой практики. В общем годам к 50 стал бы хирургом.
                +4
                Мне кажется это был сарказм. По аналогии с многочисленными «историями» в обратную сторону, когда хирург, пройдя пару онлайн-курсов по веб-разработке, сразу же становится востребованным фронтенд-разработчиком.
                  0
                  Ну я прошел путь «повар -> java dev»… всякое бывает.
                  Ах да, в повара я пришел «с улицы», без кулинарного образования (но шальной коллектив и необходимость в деньгах сделали свое дело).
                • НЛО прилетело и опубликовало эту надпись здесь
                +4
                Изучите сферу, в которой работаете. Работаете в телекоме, изучите телеком. Работаете в банке, изучайте банковское дело. Так вы сможете быстрее и правильнее решать задачи.

                А потом смените работу и выясните, что эти знания никому не нужны. Например, если в вашем городе только один хороший банк со своим отделом разработки, только одна компания, делающая софт для телекома, и т.д.
                  +6
                  Или не изучайте, и будете как в том анекдоте — «могу копать, могу не копать»
                    +1

                    Лишних знаний не бывает. И работать не зная предметную область и бизнес процессы компании это просто бред.

                      +2
                      Имхо, конечно какое то понимание нужно, но по моему мнению не то что на конкретную предметную область, на конкретные технологии завязываться не очень.
                        +3
                        Как не бывает и лишнего времени.
                      +3
                      1) Изучите сферу, в которой работаете. Работаете в телекоме, изучите телеком. Работаете в банке, изучайте банковское дело. Так вы сможете быстрее и правильнее решать задачи.
                      А если, к примеру, мне неинтересен телеком, всякие сети и передачи данных кажутся скучными? И финансы с бухгалтерией терпеть не могу.
                        0
                        Так и речь не шла про увлечения и интересы. Если в комплекте идет плохая усидчивость и мотивация, то есть риск стать там малополезным парнем. Такое случается и, наверное, стоило бы подумать о другом рабочем месте с более интересной прикладной областью.
                        Ведь ощущение пользы от своего труда (облегчение работы других людей, сэкономленные ресурсы компании или удовлетворение клиентов) — это само по себе неплохая мотивация, как мне кажется. Но как понять боль людей, о которой ты не имеешь даже поверхностного представления?
                          0
                          Хехе. Никогда не понимал этой мотивации. Решить интересную сложную задачу — это да. Даже если у неё нулевая практическая применимость.
                            0
                            Взаимно) В чем радость решения абстрактной в вакууме задачи? Для меня это звучит как рекорды гиннеса про толкание апельсинов носом.
                              0
                              А в чём радость самой по себе пользы от своего труда? :)
                      +4
                      Старайтесь быть добрее

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

                      __________
                      Вот как-то так читаются подобные статьи. Лучше потратить время на какую-нибудь классическую утопию
                        +3

                        Нет, не значит. Помочь человеку не значит дать ему денег или квартиру. Иногда даже ударить человека — значит помочь ему (например, когда дают пощечину, человеку, находящемуся в шоке).


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

                        • НЛО прилетело и опубликовало эту надпись здесь
                            +2

                            Я в скобках написал пример того, когда ударить человека — помочь ему. Нет однозначного способа помочь каждому, такого как: дать каждому денег, или ударить каждого.


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


                            Здесь нет одного решения, которое годится для всех. Одному человеку нужно дать совет, другому дать денег, третьего утешить, четвертому дать книгу, пятому что-то другое.


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

                        +34
                        Главное забыли:
                        Не женитесь
                        Не заводите детей
                        Не имейте других хобби

                        А то не будет времени на тесты, опенсурс и прочее.
                          0
                          Насчет других хобби могу поспорить. Например я совмещаю велосипед со слушанием подкастов. Иностранные можно учить с расчетом на переезд, ну и в конце концов иногда нужен отдых, так что можно завести что нибудь расслабляющее для этих целей.
                          • НЛО прилетело и опубликовало эту надпись здесь
                              +1
                              Я предпочитаю чтение какой нибудь легкой литературы и просмотр аниме. Все таки трудно массажистку «хобби» назвать)
                              0
                              То есть насчёт «Не женитесь, Не заводите детей» вы согласны ?)
                                +1
                                Лично я вижу это логичным, поскольку и без этого на разное самообразование часов 20 в неделю хорошо если удается выкроить, а уж если заводить семью, или общаться с друзьями чаще чем раз в месяц-два — вообще представить не могу как как то развиваться.
                                  0
                                  Ну я на счёт «не женитесь» не соглашусь, многим женившимся готовить приходится примерно в 2 раза реже, и заниматься всякими подобными вещами по дому… А уж если учитывать особенности менталитета и воспитания, то есть шансы вообще найти вариант, при котором готовить\стирать\работать по дому больше не придётся)
                                  Может, конечно, всё наоборот получиться, но это опять же вопрос выбора и может быть немножко везения..)
                                  UPD: увидел уже подобную ветку обсуждения от другого комментария…
                                    0
                                    Это при условии, что жена не программист)) С тех пор, как я занялась программированием, хозяйство стало прихрамывать. Уповаю только на то, что когда я, наконец, перестану быть личинкой программиста, то можно будет делегировать домашние заботы)
                                +2
                                «Не женитесь» я бы вычеркнул.
                                Иначе кто будет содержать программиста в то время когда он «тесты, опенсурс и прочее», а при этом на всех доступных работах хотят чтобы всё заработало вчера.
                                  +2
                                  … иначе кто будет выносить программисту мозги «опять сидишь в комп уткнулся», когда он «тесты, опенсурс и прочее»…
                                    0
                                    Холодильник поближе поставить и всего делов.
                                      +1
                                      Приготовить простую и вкусную еду занимает не так много времени, ну либо можно в кафе работать :)
                                        0
                                        Confirmed… на борщ с нуля уходит 30 минут. Процесс отлажен до почти машинального поведения. На мясо-гречку-легкий-салат минут 40.
                                        Причем это сразу еда на 2-4 дня. Разбавлять можно той же шаурмой/яичницей/фруктами (т.е. никто не призывает каждый день потом есть одно и то же по три раза на дню).
                                          0
                                          Причём вы пишете абсолютное время, а не время у плиты.
                                          Тушить и варить здорово как раз тем, что в отличии от жарки не нужно следить ни за чем, а можно параллельно заниматься интересными вещами.
                                            0
                                            Ну время да, целиком от «открыл холодильник» до «выключил плиту».
                                            Как правило, знакомые блюда, уже знаешь досконально и примерно на автомате заложен оптимальный порядок действий. При этом на тот же борщ зажарку я таки «жарю» (на самом деле нет). И мясо тоже «немного надо постоять у плиты».
                                            Explanations: я от жарки отошел много лет в сторону «пассеровки» (в начале максимальная обработка высокой температурой, затем резкое снижение температуры путем добавки минимального объема воды и снижение мощности плиты… близко к классическому тушению, но «немного иное»… как бы комбинирование и нечто среднее между обоими вариантами).
                                      +1
                                      Подтверждаю, очень важные пункты, без них к успеху не придёшь.

                                      Я вот завёл хобби в виде всякой математики, теперь меньше времени на опенсорс и программирование :(
                                      0
                                      Это не для России, честное пионерское :)
                                      Ну какой опен- сорс? У нас тестов не делают, а архитектурные вопросы решаюся добавлением глобальных флагов (я уже не говорю об изучении чего-то нового). Компании всеми силами стараются минимизировать расходы на программистов, потому что считается что они и так получают неприлично много. Последнее происходит из- за знания программистами английского языка и как следствие- возможности продавать себя на западном рынке (а значит рынок IT в России должен конкурировать с глобальным).
                                        0
                                        Фух, а то я читая хабр уже начал дикий комплекс неполноценности зарабатывать, так как уже возникает ощущение что наша компания одна такая на всю страну осталась. Теперь знаю что их по крайней мере две (если мы конечно не из одной)))
                                          +4
                                          Честно скажу, меня всегда интересовало, что же держит людей в таких компаниях. Особенно учитывая, что альтернатив на рынке труда просто море.
                                            0
                                            В моем случае то что я программирование изучать начал примерно за год до окончания вуза, на момент окончания почти не знал английский, да и программирование тоже + возможность выбирать только в небольшом городе, где компаний раз — два и обчелся. Собственно в последнее время раздумываю что вариант только один, переезд, но потребуется еще и сильно фундамент подтянуть, плюс стек сменить (текущий выбирал из того что было доступно на момент начала карьеры).
                                            А, ну еще общая тупость мешает конечно же.
                                              0
                                              в небольшом городе, где компаний раз — два и обчелся. Собственно в последнее время раздумываю что вариант только один, переезд,

                                              Почему не удалёнка или фриланс? Вакансий хватает, так что вариант далеко не «только один» -_-
                                                0
                                                Думал, но как я и говорил, хочу стек сменить, а на удаленку, как правило, нанимают уже состоявшихся специалистов на конкретном стеке, ну либо нанимают на небольшие проекты или задачи на несколько месяцев, не больше.
                                                Да и про общую тупость упоминал уже которая не позволит с сотнями других удаленщиков конкурировать. Вон, только в марте прочитал «Грокаем алгоритмы», а уже не только не могу вспомнить решение задач методом динамического программирования, даже не помню список всех рассматриваемых в книге тем. А ведь книга то простая и совсем базовые вещи описывает.
                                                0
                                                Можно сначала сменить город, а там уже действовать по ситуации)
                                                Сам вот переехал, не жалею, климат только бесит. Всем остальным, кто сомневается переезжать или нет, советую переезжать.
                                          +13
                                          Статья — просто куча шаблонов, часть из которых придуманы как раз теми, кто указан в заголовке. Часть из этих советов просто спорны (например «пишите больше кода» ибо без уточнения что код должен реализовывать полезный функционал — совет становится вредным), часть — хорошие, но не имеют отношения к теме статьи (например «будьте честны»), часть — вообще не в тему и потенциально вредные (например «умерьте своё эго», более того у этого совета заголовок не соответствует содержанию).
                                            0
                                            например «пишите больше кода» ибо без уточнения что код должен реализовывать полезный функционал — совет становится вредным

                                            С этим пунктом не согласен. Код может писаться в целях обучения или развлечения. Тогда ему совершенно нет необходимости реализовывать полезный функционал.
                                              –2
                                              Да типичные советы индусов. Выключите мозг и зазубривайте шаблоны до автоматизма, а затем пишите тонны спагетти.
                                              А результат один — текстовый редактор в браузере, который умирает на файле в 100 кб.
                                              +2
                                              Даже если все функции валидации сегодня у вас синхронные, стоит предусмотреть в интерфейсе возможность добавить асинхронную валидацию в будущем:
                                              validate(data)
                                              .then(postdata)
                                              .then(append..)

                                              .
                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                  +8
                                                  Восхищаюсь вашим умом, способным сохранять ментальную картину кода на многие месяцы, и вашими коммуникативными навыками, способными эту ментальную картину передать следующему владельцу написанного вами кода.

                                                  А как вы к строгой типизации относитесь, кстати? Или лучше всё в строку, а тайпчекер не нужон?
                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                      +2
                                                      Очень долго работал фрилансером, контакта с другими разработчиками не имел и думал что то что вы описали и есть обычный программист. А потом я встретил людей.
                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                    +3

                                                    "Слишком хорош, чтобы писать тесты"

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

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

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

                                                      Поэтому нет смысла писать людям про необходимость тестов и создавать из этого культ карго, когда тесты нужно писать «потому, что в Интеле пишут» или «потому, что best practices». В тех проектах, где тесты нужны, их необходимость становится очевидна всем участникам.
                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                            0
                                                            Если задача достаточно сложная, последствия могут быть непредсказуемыми. У нас виртуальная машина, сломать там что-то совсем не сложно. Тем более что весь объем спецификации загрузить в голову невозможно даже теоретически.
                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                              0
                                                              «тут починил, а там в 3 местах отвалилось»
                                                              Я с трудом себе могу представить такую ситуацию.

                                                              Да легко. Например, перевод системы на новую кодировку или имперскую систему счисления (ну, там, дюймы, фунты, фаренгейты, MM-DD-YY). Пока в Вилларибо натужно вспоминают все те места, где это может что-то поменять, в Виллабаджо уже по тестам сразу видят, где что не так.
                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                  0
                                                                  Так это надо, значится, типы любить, а не пихать всё в int, string и void*.
                                                              +2
                                                              Поэтому нет смысла писать людям про необходимость тестов и создавать из этого культ карго, когда тесты нужно писать «потому, что в Интеле пишут» или «потому, что best practices». В тех проектах, где тесты нужны, их необходимость становится очевидна всем участникам.

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

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

                                                                Экономия сил и времени. Так-то по-хорошему, любой код можно оборачивать тестами, писать к нему документацию на двух языках и оптимизировать мелочи типа «что быстрее в микросекундах — for или while». Но если из-за этого задание на вечер превращается в работу на неделю (особенно если код временный, одноразовый или для собственных нужд) — это, чаще всего, лишнее.

                                                                Если работаете за фиксированную оплату по результату или пишете для себя — ради бога. А если повремёнка — то вы уже просто прожигаете чужие деньги и тратите время (которого обычно и на быстрый-то код не хватает).

                                                                Но с позиции непосредственно разработчика переносить ответственность за работоспособность своих модулей на кого-то ещё — неправильный подход.

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

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

                                                                  То есть деньги и время, затраченные на ручной поиск и разгребание регрессий в будущем вы не учитываете?
                                                                    0
                                                                    Это я отвечал про проекты, где тестов не нужно, но очень хочется. Например для тренировки.
                                                                    Там где нужно, я выше упоминал, вопроса не возникает, нужно ли.
                                                                      0
                                                                      Интересно, что это за проекты, где не были бы полезны тесты
                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                          0
                                                                          Для бэкенда они просто обязательны.
                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                              +1
                                                                              >Ещё раз: простейшие глюки вылезают сами или легко тестируются прямо в браузере вручную набранным URL-ом.

                                                                              Хорошо, когда ваш бэкенд тестируется «прямо в браузере вручную набранным URL-ом.». А вот мой не тестируется так, он у меня, например, торчит http концом наружу и ждет запросов в свой api. Мне придется дергать кучу запросов руками и проверять толстенные json ответы?
                                                                              А бывает, когда бекенд сервис вообще не имеет http конца, а только ESB слушает и отвечает.
                                                                              А бывает, когда бекенд сервис интегрирован с другим сервисом через хитрый протокол и руками ничего вызвать из «браузера» нельзя
                                                                              Бывает, что нужно проверить нагрузку, а я не могу открыть в своем браузере 10к вкладок с «вручную набранным URL-ом»
                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                  0
                                                                                  о скриптиках, которые подёргают API и найдут тупые ошибки

                                                                                  Вы такие скрипты пишете?
                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                      +1
                                                                                      (пошел посмотреть)
                                                                                      У меня есть сервис… раскладывания кошек по коробкам в зависимости от породы кошки, цвета шерсти и 5-и других параметров.
                                                                                      Тест для 300 case'ов работы сервиса распределения занимает 3 минуты. 1 case — это уникальный набор параметров кошки отправленный http запросов в сервис.
                                                                                      Руками это проверять оооооочень долго
                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                          +1
                                                                                          Фаза луны не при чем. Но разные комбинации параметров дают разный результат. И таких комбинаций/результатов много, как я описал.
                                                                                          Руками проверить нужно каждый случай, потому что все работать должно на бою правильно иначе потеря тысяч денег
                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                              0
                                                                                              Если анализ каждого параметра сделан верно — результат будет правильным

                                                                                              Если. А как вы этом убедиться? Нужно проверять
                                                                                              если у вас есть «тысячи денег» и время, чтобы такую проверку реализовать

                                                                                              Я выше привел пример, 300 случаев, каждый нужно проверить. Тестом — 3 минуты, руками — часы
                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                  0
                                                                                                  Параметров 8 (порода кошки, цвета шерсти и 5-и других параметров), а для каждого свои варианты значений.
                                                                                                  И распределение нельзя как-то высчитать, оно соответствует описанной бизнесом логики.

                                                                                                  И да, схемы распределения конечно же хитрые — сегодня черных метровых кошек с зелеными глазами в коробку #21, а завтра в #22

                                                                                                  При этом нужно учитывать, что написал я распределение, тесты, все ок и далее идут задачи на изменение схемы и, благодаря наличию тестов, я могу править только нужные кейсы и не переживать за другие части сервиса — там тесты тоже есть. Поэтому оценка задача на правку схемы такой мизерная.
                                                                                                  А при отсутствии тестов все эти 300 случаев руками перепроверять
                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                            0
                                                                            Мне очень нравится писать компиляторы через тесты. Продираешься через спеку языка, реализуешь ещё один кусок — добавляешь тест.

                                                                            Меняешь логику, преобразования AST, кодогенератор, всё такое — чинишь тесты и потом радуешься, что они снова зелёные.

                                                                            Просто рефакторишь код, чинишь всю ругань ghc — а тесты уже зелёные. Приятно сразу!
                                                                            0
                                                                            Интересно, что это за проекты, где не были бы полезны тесты


                                                                            Я в предыдущих комментах перечислял.

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

                                                                            Примеры таких проектов:
                                                                            — прототипы;
                                                                            — игры (почти все, за исключением AAA-класса и игр с реальными деньгами);
                                                                            — интерфейсы, основная функция которых — отображать данные с уже существующих API;
                                                                            — прикладные программы, которые нужны временно или одноразово;
                                                                            — практически все проекты от бизнеса, в которых ТЗ пишется умными словами, но на нормальный язык его можно перевести как «Сделайте такое же, как вон там, но другое. Насколько другое — пока не придумали. Увидим — скажем, что поправить.»;

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

                                                                            А иначе можно дойти и до того, чтобы команды в консоли с тестами писать.
                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                0
                                                                                Перефразирую — команды в linux-консоли с тестами к ним же.
                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                    0
                                                                                    То есть если вам нужно, например, пару раз переименовать все файлы в папке из
                                                                                    *_rus_*.csv
                                                                                    в
                                                                                    *_eng_*.csv
                                                                                    , вы пишете консольную команду, и затем после этого (или перед этим) в той же команде создаёте n тестовых файлов с разными названиями и расширениями и проверяете, всё ли правильно переименовывается? Сомневаюсь.
                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                        0
                                                                                        Если это действительно важно, я такой скрипт пишу на хаскеле. Логику переименования пишу в отдельной чистой функции, в repl её вызываю с тестовыми данными, а потом к ней пишу IO-обвязку из трёх строк, в котоой ошибиться невозможно.
                                                                    +4

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

                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                        +2
                                                                        Может быть, стоило попробоваться поучаствовать в проектах хоть немного сложнее хеллоу-ворлда?
                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                            +2
                                                                            написанная практически в одну харю

                                                                            Вот в этом разница, если была бы команда без тестов было бы совсем грустно.
                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                +1
                                                                                Мы обычно наоборот, а потом все еще тестами покроем
                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                    0
                                                                                    вызубрившей «паттерны», «TDD», всякие там новомодные способы трахать мозги себе

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

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

                                                                                        Как ни полезна вещь, — цены не зная ей,
                                                                                        Невежда про нее свой толк все к худу клонит;
                                                                                        А ежели невежда познатней,
                                                                                        Так он ее еще и гонит.
                                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                                        +1

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


                                                                                        Лично у меня был пример. Несколько лет назад прочитал про паттерн "Команда". Спустя пару лет, когда он мне понадобился, я ничего о нем не помнил. К счастью название не забыл. Зашел на вики, пошуршал, ничего не понял. Может написано плохо, может я тупой. Взял маркер, доску, придумал свою реализацию, закодил, протестил, все работает. Вернулся к статье и тогда внезапно все стало понятно.


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


                                                                                        Вот фабрика. Вроде всем понятно зачем она нужна, но в отрыве от задачи ничего не понятно. Зачем городить огород, если можно просто создать объект?

                                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                                            +1

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

                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                +1
                                                                                                «Эта процедура должна найти на изображении красную точку с ограничением по яркости и размеру. Она будет запускаться в многопоточном окружении.»
                                                                                                «Требуется передать ряд изображений на многопоточную обработку вон той процедуре, после чего собрать результаты обработки обратно в правильной последовательности».
                                                                                                «Нужно проанализировать ряд результатов и найти внезапно появившуюся красную точку, определить принадлежность её координат зоне, определяемой битовой картой, при нахождении вызвать событие.»
                                                                                                «При таком-то событии следует передать сообщение по сети, протокол такой-то, параметры должны включать координаты, время и изображение.»

                                                                                                Это все задачи, тут ни слова об исполнении.


                                                                                                вызвать событие

                                                                                                События, кстати, паттерн.

                                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                              +1
                                                                                              «Зачем думать, если можно взять паттерн?»

                                                                                              Вам выше автор комментария написал, что бессмысленно бездумно брать паттерны (да и никто так не делает), а вы приводите реплику ровно с обратным смыслом.
                                                                                              А если паттерн не очень подходит к задаче?

                                                                                              То ничего не мешает подумать и модифицировать его, чтобы подходил.
                                                                                              Если я скажу: «нужно исключить возможность создания копии объекта», вы поймёте, что я говорю?

                                                                                              То это будет так:
                                                                                              Obj(const Obj&) = delete;

                                                                                              Это вообще не похоже на синглтон и не реализует его функционал. Так что вы привели отличный контр-пример к своей же теории.
                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                          0
                                                                                          способных держать задачу (или свою часть оной) в уме, гораздо продуктивнее

                                                                                          Не понятно, что тут продуктивного
                                                                                          А если он в отпуск ушел? Был уволен? Ни документации, ни тестов, ни фига… все унес в своей большой и умной голове.
                                                                                          Потом компания тратит деньги — время нового программиста, который вычитывает тонны кода и пытается уместить у себя в голове. А потом еще тратит на регрессионное тестирование сервиса.

                                                                                          При наличии тестов все проще, если что-то сломал, то это видно сразу — упали тесты
                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                              0
                                                                                              И как вы ее облегчаете?
                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                  +1
                                                                                                  Скажем иначе. Если код не покрыт тестами, то оценка временных затрат на доработку этого кода и тестирование будет значительно выше, т.е. будет стоить дороже.
                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                      0
                                                                                                      А как вы поймете, что ваша правка ничего не сломала?
                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                          0
                                                                                                          ручками не протыкать за нормальное время

                                                                                                          А это какое время? Час, два?
                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                              0
                                                                                                              А если нет интерфейса? Тоже что-то не так?
                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                  0
                                                                                                                  Я наверное не так понял, вы же имели ввиду графический интерфейс?
                                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                      0
                                                                                                                      Значит я не так понял.
                                                                                                                      А 5 минут это вместе с подготовкой данных для запроса? Ну например мне нужно разными json запросами сервис вызывать
                                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                          +1
                                                                                                                          Это только в совсем простых случаях работает. Вот вы делаете браузер например: надо отрендерить html, css, js. Вам кто то даёт ссылку на сайт где разметку подозрительно перекосило — в других браузерах всё нормально. Допустим вы догадались в чём дело и пофискили баг. Как вы узнаете, что ничего другого не сломалось?
                                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                              +1
                                                                                                                              Всё верно, ломается оно допустим в 5% случаев на некоторых сайтах с корпоративной формой авторизации где кривой html нахаченный индусами за еду. У вас даже не будет доступа к этим сайтам. Вы зафигачили багфикс в продакшн, а через неделю 4 компании которые платят вам за браузер говорят, что у них на работе стала часто глючить авторизация — раньше такого не было, поэтому либо платим неустойку либо фиским это в течении 3х дней как сказано в договоре. Были бы тесты, мы бы сразу заметили, что вот такая комбинация css пропертей вызывает глюки, но тестов нет. Что делать будем?
                                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                  +1
                                                                                                                                  Ну а что если баг возникает только когда вице президент компании вводит свой пароль на внутреннем сайте авторизации? Он должен вам дать свой пароль, чтобы вы подебажили html разметку? На деле у вас не будет даже такой роскоши как 100% воспроизводимый баг — вам просто скажут, что примерно в таких ситуациях глючит примерно так. Это вы должны будете разбираться что именно не работает.
                                                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                      +1
                                                                                                                                      Баг не плавающий. Он возникает в конкретных условиях: конкретный html, css, js. Но получить именно эти html и т.п. вы не можете по описанной выше причине.
                                                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                          0
                                                                                                                                          Ого, это браузер один из немногих случаев? Да и как вам тест поможет если вы их не пишете?
                                                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                              +2
                                                                                                                                              Работает оно по двум причинам: либо ваш код прост как доска, либо его никто толком не проверял (мало юзеров и т.д.). Помню, что в такой уверенности я пребывал когда будучи студентом подрабатывал программёром: когда мой говнокод столкнулся с кучей реальных юзеров и они начали репортить какие то хитрые баги, я просветлился и понял зачем нужны юнит тесты.

                                                                                                                                              Возможно я вас удивлю, но количество кода в тестах часто превышает в несколько раз количество основного кода. Часто одна строчка изменений в основной либе сопровождается 5 тысячами строчек новых тестов. Нафига это нужно? Чтобы надежность была не 74%, а 99.99974%. Если вы фигачите формочки для десятка юзеров, то это конечно не нужно, но как только юзеров становится этак миллиард, ваш подход уже не прокатит.

                                                                                                                                              Для микроконтроллёров и тем более процессоров тесты вообще параноидальные: там тестируется даже очевидное по 100 раз. Потому что исправить софт можно обновлением по сети, а вот исправить баг в процессорах (как это было недавно у Интела) так не получится. Собственно поэтому вы работаете не в Интеле, а стучите гаечным ключом.
                                                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                  +1
                                                                                                                                                  Выше мы обсуждали примитивную функцию с урезанной регуляркой. Делить там дальше уже некуда вроде. Но как видите даже с ней возникли непреодолимые сложности.
                                                                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                0
                                                                                                                                                Для МК тесты пишутся почти так же, как и для «больших» систем. Вы стреляете, стучите и светите не в сам микроконтроллер, а в соответствующий сенсор. В МК оно приходит в виде дискретного сигнала, частоты, битов АЦП, массива данных из I2P/SPI, и т.д.
                                                                                                                                                И вот уже то, как контроллер работает и ведет себя этими данными, и тестируются. А сами тестовые данные или «пишутся» заранее, или генерируются синтетически (по-хорошему и то и то, в зависимости от данных, конечно).
                                                                                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                    0
                                                                                                                                                    А с чего это у вас тесты программного кода должны диагностировать аппаратные неисправности внешней обвязки?
                                                                                                                                                    Их задача в данном случае — сказать, что ошибка появилась не в коде обработки сигнала после очередного мержа, а нужно брать в руки мильтиметр и осциллограф и проверять источник этого самого сигнала.
                                                                                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                        0
                                                                                                                                                        Так в случае с «простым» тестированием для чистоты эксперимента еще нужно стараться, чтобы уровень был точно такой же, как и в прошлый раз, и импульсы снова появились в точности «не там». А когда у вас имитируется не реальный сигнал, а его цифровой двойник — у вас неограниченный простор для комбинации самых разных вариантов, которые вы даже не сможете или не подумаете специально воспроизвести «в живую» в лаборатории, но которые могут случиться в реальной жизни.
                                                                                                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                            0
                                                                                                                                                            Проще. Но гарантировать постоянную стопроцентную правильность кода, пайки и монтажа, когда это делает даже квалифицированный и сосредоточенный человек, невозможно, увы. Как вы сами сказали, от ошибок не застрахован никто, важно вовремя их найти и свести к минимуму.
                                                                                                                                                              0
                                                                                                                                                              Хотя нет, не проще. Если было бы проще, то все бы так делали.
                                                                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                                  0
                                                                                                                                                                  Есть очень хорошая старая песня «Битва с дураками» от Машины Времени, которая полностью актуальна до сих пор. Послушайте, возможно натолкнет на размышления.
                                                                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                          0
                                                                                                                                                          Подозреваю, что «проимитировать» проблемы с внешними источниками помогут заранее «записанные» или сгенеренные паттерны проблем с внешними источниками.
                                                                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                              +1
                                                                                                                                                              Не вижу разницы, честно говоря, разницу в затратах между «выстрелить»/«отклеить»/«подергать» во время ручного теста, или для того чтобы записать сигнал с АЦП/сделать дамп обмена по шине, использовать это потом для тестов.
                                                                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                                  +1
                                                                                                                                                                  Вы же сами говорили, что программы надо разделять на простые блоки. Блок, тупо получающий данные с АЦП или с порта (по сути дела копирующий массив из одного адреса памяти в другой) — это одна часть, блок, обрабатывающий эти данные — вторая. Если мы тестируем обработку сигнала и какие-то алгоритмы, работу которых этот сигнал должен вызвать, то вместо первого блока мы подсовываем фейковый блок с таким же интерфейсом, который и выдает нужные нам данные.
                                                                                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                                      0
                                                                                                                                                                      Не знаю, что у вас за специфические задачи, но когда я решал похожую проблему (контроллер, обрабатывающий информацию с десятка вторичных преобразователей и других контроллеров по разным протоколам плюс ADC и DI модули ввода), то написание кода, позволяющего захватить обмен за какое-то время и использовать его потом, плюс модификация полученных дампов для некоторых случаев, которые на стенде «наиграть» не так-то просто (учитывая, что одна из железок стоила несколько лямов и физически стояла за пару сотен километров), заняло гораздо меньше времени, чем разработка того функционала, что надо было протестировать — по сути дела, оно собралось из того, что уже было сделано плюс некая обвязка. И больше не было нужды щелкать релешками на стенде, крутить подстроечники и гонять наладчика с ноутбуком в поле за тридевять земель.
                                                                                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                                          0
                                                                                                                                                                          Зачем звуковуху-то? У вас уже есть сенсор, который этот самый сигнал преобразует в код АЦП. Захватывать ровно тем же, чем и при обычной работе. Как-то же этот сигнал после цепочки преобразований в контроллер попадает в процессе эксплуатации — следовательно, не будет трудностей.
                                                                                                                                                                          Воспроизводится все «виртуально» записью значения из массива по смещению на вход функции или в заранее определенное место в памяти.
                                                                                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                                              0
                                                                                                                                                                              Сигнал поступает сразу на ногу контроллера, на которую смультиплексирован АЦП.

                                                                                                                                                                              Зачем? Объясните, почему вы все время для чисто программных вещей хотите добавить еще горсть контроллеров и внешней обвязки? Вы тестируете программный код, который работает с цифровым сигналом. Следовательно, все это отлично делается в софте, а не в железе.
                                                                                                                                                                              Берем и вотт с этого самого АЦП с этой самой ноги и пишем паттерны для всего того что нужно.
                                                                                                                                                                              Да, если у вас 64 байта ОЗУ — это печаль.
                                                                                                                                                                              На атмегах, STM8, STM32 и разных там ПЛК проблемы такой нет (это из того, что я работал). Опять же, можно не писать в свою память, а сразу стримить по USART на подключенный ПК — там чтобы это записать хватит программки из десяти строчек. Куски прошивки, которые отвечают за логику, а не за работу с железом, если код действительно разбит на модули и написан не через задницу, без усилий обособленно билдятся для нативного запуска на ПК, где все тесты гоняются даже не задействуя контроллер. Сделать все описанное можно меньше чем за день (если, как я уже сказал, изначально все сделано по уму), а времени в будущем сэкономит вагон.
                                                                                                                                                                        0
                                                                                                                                                                        Прототипы — это другая история. Там быстрый старт иногда вообще важнее всего.
                                                                                                                                                                        А часто бывают противоположные ситуации — когда проект долгосрочный, и его развитие и поддержка тянется и будет тянуться не один десяток лет. Там проблема не «сделать конфетку из ничего», проблема не «сделать тратя минимум ресурсов», и даже не «сделать быстрее». Там проблема «сделать так, чтобы оно стабильно работало, поддерживалось и расширялось еще и еще, и не приносило при этом жопную боль тем, кому с этим придется работать». Вот там ваш write-only код уже ну никак не приемлем.

                                                                                                                                                                        Ну и с костылями аналогия не очень уместна. Вам предлагают автомобиль, а вы отвечаете «да не, мне и пешком норм». Да, когда надо дойти до соседнего ларька, пешком может оказаться даже быстрее, и учиться водить не надо, а вот если нужно в соседний город, то все уже становится не так просто.
                                                                                                                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                    +1

                                                                                                                                    То есть вы все-же делаете юнит тестирование, просто руками.

                                                                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                      +1
                                                                                      Основное назначение тестов — возможность рефакторинга и расширения кода. Плюс они документируют API и дают примеры его использования. Как говорил классик: «код, не покрытый тестами не существует». Тесты — это инвестиции в будущее проекта и возможность спать спокойно по ночам.
                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                          +2
                                                                                          Вы можете у себя в голове удержать хотя бы миллион строк кода со всеми их нюансами и точностью до мелочей, и каждый раз при внесении изменений тестировать их все в своем сознании?
                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                              +2
                                                                                              Проект Chromium. В связи со спецификой и сложности задач и требований к производительности, есть свой сборщик мусора и свои библиотеки коллекций, а также многое другое. 8 миллионов строк кода. Около 50 компаний участвует в разработке плюс около тысячи индивидуальных контрибьюторов.
                                                                                              Вы предлагает разработчикам при внесении изменений, например, в подсистему управления памяти, каждый раз «в голове» или «прямыми наблюдениями» кода вручную проверять, как изменения отразились на _всех_ десятках тысяч классов, в том числе с крайне разнообразными и далеко не самыми очевидными сценариями использования этого функционала?
                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                  +4
                                                                                                  А мне вот теперь всё понятно. Вы слабо представляете, о чем вообще говорите.
                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                      +3
                                                                                                      но покажите мне баг в моём коде «в диком виде» — и я его исправлю

                                                                                                      Так любой дурак сможет.
                                                                                                      Когда разработчика заботит качество его софта и экспириенс пользователя, баги должны исправляться без показывания на них со стороны людьми.
                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                          0
                                                                                                          А зачем я должен при каждом изменении тратить ресурсы тестировщиков на выполнение одних и тех же проверок, если я могу вместо этого использовать автоматический скрипт?
                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                              0
                                                                                                              Да очень много чего. От низкоуровневых (атомарные методы и обособленные классы) до высокоуровневых (интеграционных, в каком-то случае это может быть CRUD, как вы хотите) проверок, вплоть до пользовательского интерфейса.
                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                  0
                                                                                                                  В большинстве случаев в этой автоматике как раз-таки никакой магии и сложности нет.
                                                                                                                  Тут вопрос в другом. Для проектов из разряда «кустарщина», либо распильно-откатных вещей, либо команд, состоящих из студентов и индусов смысла в этом может и не быть.
                                                                                                                  Если же цена рабочего времени разработчиков/тестировщиков, которое тратится при каждом обновлении или релизе выше, чем цена однократной автоматизации — это уже выгодно. Если цена ошибки на продакшене, которую пропустят программисты/тестировщики, схалявив на предыдущем пункте, выше, чем цена однократной автоматизации — это снова выгодно. Про сумму этих цен мы даже говорить не будем.
                                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                      0
                                                                                                                      Ваша цитата:
                                                                                                                      Да никто и не говорит, что ошибок не бывает.

                                                                                                                      Иными словами, вы расписываетесь в том, что вы некомпетентный разработчик? Забавно.
                                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                          0
                                                                                                                          ействую так, чтобы минимизировать их вероятность.

                                                                                                                          Одно другому не мешает.
                                                                                                                          Плюс оптимизирую код.

                                                                                                                          аналогично
                                                                                                                          Некомпетентный этого не делает.

                                                                                                                          Эти подоходы не исключают, а дополняют друг друга.
                                                                                                                          «Тест прокатил — ну и ладно».

                                                                                                                          Тут примерно как с демократией — плохая система, но все остальные еще хуже. Так и здесь. Если вариант с ручным перетестированием всего что только можно занимает время в десятки и сотни раз больше, чем сама разработка, и проводить его надо регулярно — то лучше «Тест прокатил — ну и ладно» еще ничего не придумали.
                                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                              0
                                                                                                                              Тогда предложите рабочее и экономически эффективное решение описанной ситации:
                                                                                                                              Если вариант с ручным перетестированием всего что только можно занимает время в десятки и сотни раз больше, чем сама разработка, и проводить его надо регулярно
                                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                  0
                                                                                                                                  Это экономически неэффективный вариант. Переписывание системы требует в несколько раз больших ресурсов (учитывая уже вложенные в нее человеко-года), чем автоматизация тестирования.
                                                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                    +2
                                                                                                    Модель это общие принципы того как система реализована, мозг действительно хорошо приспособлен для хранения и анализа моделей поскольку сохраняет их «нативно», в виде голограмм.

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

                                                                                                    Вообще суть тестов в автоматизации. Статический анализ нужен для тех же целей — это автоматизация процесса разработки и поиска ошибок или криво написанного.
                                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                        0
                                                                                                        Но простых ошибок избежать легко, а сложные автоматика не найдёт.

                                                                                                        Что вы понимаете под простыми и сложными ошибками?
                                                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                            0
                                                                                                            А к чему вы относите ошибки в бизнес логике?
                                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                +1
                                                                                                                Как правило такие ошибки максимально сложны, поскольку их часто не то что программисты не видят с ходу, но и бизнес аналитики, знающие предметную область очень хорошо. Например какая нибудь «проблема копеек» при расчете себестоимости по партиям товаров по средней, в результате которой оказывается что в определенных, нечастых, случаях на остатках может быть 0 товаров, а себестоимость списана не полностью. Хотя это на самом деле как раз простая и многим известная проблема, а бывают такие дебри…
                                                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                  0
                                                                                                                  Феноменальная наивность.
                                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                      +1
                                                                                                                      А, то есть вы почти не сталкивались со сложными логическими ошибками, но при этом постоянно упоминаете свой многолетний опыт. Ясно, понятно.
                                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                0
                                                                                                                Ну, технически, их искать можно.

                                                                                                                Раз (можно ещё там в ридмишке внизу пройтись по библиографии), два.
                                                                                                              +1
                                                                                                              «Костыли для API» — ужас, кошмар, недопустимо!

                                                                                                              В реальном мире это есть и чем больше проект тем вот такого больше и это, обычно, таки можно исправить, но за время приближающееся к бесконечности. Ещё существует Legacy и обратная совместимость и там без костылей иногда вообще никак. К сожалению, под определение «хороший программист» в этом контексте попадает только ИИ, мозг по принципу своего устройства не может не совершать ошибок вообще никогда, а ещё не может иметь безгранично расширяемые вычислительные ресурсы и память, такое может только ИИ.
                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                            +1
                                                                                                            Внешний API здесь непричем. Я вношу изменения в реализацию того, что стоит за этим API.
                                                                                                            Я могу иметь в голове четкую модель того, как работает мой код, но при этом не иметь подобной модели в отношении миллионов других строк кода, которые прямо или косвенно используют ту часть, в которую я вношу изменения.
                                                                                                            Одного только первого пункта явно недостаточно для тщательной проверки получившегося результата, как минимум потому, что не получится сгенерировать в голове абсолютно все граничные случаи для всех кейсов использования в оставшихся миллионов строк кода. В случае с тестами же, их сгенерируют как раз авторы этих самых сторонних модулей, потому что они, в свою очередь, имеют в голове четкую модель своего кода, и знают, как он должен и не должен работать. Поэтому любая косвенная регрессия будет выявлена вообще без каких-либо временных и трудовых затрат.
                                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                0
                                                                                                                В том-то и разница. Я что-то сломал, API перестало работать в каких-то случаях как надо, вы должны это заметить, собрать данные и завести на меня Issue.
                                                                                                                Это 1) ваши трудозатраты по моей вине 2) время между появлением бага и его обнаружением.
                                                                                                                И это в том случае, если вы вообще заметите, что после какого-то обновления API в каких-то очень специфичных перестало работать правильно. А можете вообще и не заметить, если случай очень редкий и очень специфичный, и потом эта ошибка сыграет гораздо хуже и больнее.
                                                                                                                Тесты все эти проблемы полностью решают.
                                                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                    0
                                                                                                                    А если я не заметил поломки — тут два варианта.

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

                                                                                                                    Работы мы не боимся.

                                                                                                                    Видимо, у вас мало работы и много свободного времени.
                                                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                        +1
                                                                                                                        «этот функционал используется редко и не критичен» — угу, не критичен. А у компании соглашение о service availability 99.995% с штрафом $1M в день за нарушение этого пункта. И вот вы пофиксили какой то мелкий баг, зафигачили в продакшн, конечно потестировав важные сценарии, а тут вдруг выясняется через 6 часов, что uptime упал до 99.2% и совершенно не понятно из за чего — тестов то нет, а разных сценариев миллиона полтора и все их не проверить. И что вы будете делать в таком случае?
                                                                                                                          0
                                                                                                                          Мне кажется, что у m0Ray другие бизнес задачи, когда код можно так протестировать
                                                                                                                          Как правило, данные готовятся один раз. Накидал пару-тройку запросов, сунул их в браузер или командную строку — и погнал. Оттестил — закрыл окно. На крайняк есть история, что в командной строке, что в браузере.
                                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                              +1
                                                                                                                              А кто написал говнокод который уронил uptime?
                                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                  +1
                                                                                                                                  Цитирую вас же: «Если у меня что-то сломалось — это заметно сразу. Если не сразу — этот функционал используется редко и не критичен.» — протестировали в бете, ничего подозрительного не нашли — вроде работает как раньше (никаких тестов нет, так? поэтому только вручную). Раз работает как раньше, то фигачим в продакшн. А там uptime упал на 0.01%. И что теперь?
                                                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                      +1
                                                                                                                                      Эмм… как например? У вас 100 тысяч серверов и в среднем на 10 из них обычно возникают подозрительные лаги. Вы даже видите это в логах но не можете предсказать какой из них начнёт глючить и потому не можете заранее прицепить отладчик, а если глюк произошёл (скажем дропнулось соединение), то цеплять отладчик смысла уже нет. Обновление нужной dll-ки на этих серверах занимает месяц, поэтому добавлять логи в реальном режиме не получится — да и вообще это продакшн. Допустим, что если бы были тесты, мы бы узнали, что всё дело в хитром integer overflow в одной редкой функции которая конвертирует время из UTC в какой то другой формат — но мы это не знаем. Что делаем?
                                                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                          0
                                                                                                                                          Так работает оно потому что это уровень песочницы. Как вы будете перезапускать 100к серверов с «ключиком»? Они все будут писать логи? А если логов, как это обычно бывает, недостаточно, чтобы понять в чём проблема — будете добавлять логи с итерацией в 1 месяц (обновление серверов в проде)?
                                                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                          +3
                                                                                                          Бросьте, с такими людьми спорить бесполезно, проверено. Они свято уверены в собственной непогрешимости, а также непогрешимости всех остальных кто пишет код того же проекта, и тех чьими библиотеками и фреймворками пользуются. А также видимо имеют много времени.
                                                                                                            +2
                                                                                                            Больше похоже просто на троллинг, увы.
                                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                0
                                                                                                                закомментированных средств диагностики

                                                                                                                а как же compile-time defines? dependency injection? mixins?
                                                                                                                Хотя да, извините, о чем это я.

                                                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                    +1
                                                                                                                    «А мужики-то не знали!» ©
                                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                +1
                                                                                                                И место, где «не работает», легко находится.

                                                                                                                Феноменальная наивность.
                                                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                  +3
                                                                                                                  Только код можно писать так, что он либо работает, либо нет. И место, где «не работает», легко находится.

                                                                                                                  В общем как я и сказал — спорить бесполезно.
                                                                                                              +1
                                                                                                              Когда-то я легко писал на ассемблере с листа, держа в уме все регистры процессора и распределение памяти, помня команды управления контроллерами. Но потом деревья выросли, были прочитаны книжки Кента Бека, появились проекты и команды больше двух человек.
                                                                                                              Если вы один, тесты вам могут быть и не нужны, но когда проект состоит из десятков модулей, сервисов и серверов с набором разнообразных протоколов, когда приходится взаимодействовать с внешними сервисами и иметь пользовательский интерфейс, когда это всё делается десятками людей — то без многослойного покрытия тестами не обойтись.
                                                                                                              Мне наоборот странно видеть, что программист работает без тестов, для их написания создано множество разных фреймворков на разных уровнях тестирования, сильно облегчающих жизнь. «мне не нужны тесты» — лишь отмазка, показывающая отношение к своей работе и коллегам.

                                                                                                              PS. Почитал ответы ниже, дальше можно не продолжать, удачи вам в поддержке ментальных моделей.
                                                                                                              PPS. Строительная каска в офисе для того, кто сломал тесты — очень хороший мотивирующий фактор для запуска модульных тестов перед коммитом ;)
                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                  +2
                                                                                                                  Костыли в виде тестов

                                                                                                                  Вы же сами тут неоднократно писали, что тестируете, но руками
                                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                      0
                                                                                                                      Не понятно только почему это нужно делать руками, когда написать автотест — дело несложное и проверка им быстрее ручной
                                                                                                                      Заголовок спойлера
                                                                                                                      Ну вот пример теста
                                                                                                                          @Unroll
                                                                                                                          def "For command #command task type will be #type"() {
                                                                                                                              expect:
                                                                                                                              TaskFactory.createInstance(null, command).type.toString() == type
                                                                                                                              where:
                                                                                                                              command                                | type
                                                                                                                              "info"                                 | "INFO"
                                                                                                                              "Info"                                 | "INFO"
                                                                                                                              "list"                                 | "LIST"
                                                                                                                              "List"                                 | "LIST"
                                                                                                                              "last"                                 | "LAST"
                                                                                                                              "again"                                | "AGAIN"
                                                                                                                              "clear"                                | "CLEAR"
                                                                                                                              "cancel"                               | "CUSTOM"
                                                                                                                              "Cancel"                               | "CUSTOM"
                                                                                                                              "Cancel <context offer=\"12312312\"/>" | "CANCEL"
                                                                                                                              "deploy"                               | "CUSTOM"
                                                                                                                              "foo"                                  | "CUSTOM"
                                                                                                                          }
                                                                                                                      

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

                                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                          0
                                                                                                                          Ну мы же тут в целом рассуждаем или только применительно к стеку ваших технологий? Этот тест написан на spock framework. Привел я его как пример тестов, которые просто писать и просто понимать.
                                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                              +1
                                                                                                                              При чем тут сломано? Вы же тестируете? Да, как выяснилось. Но руками. Я тестирую тестами — это быстрее
                                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                  0
                                                                                                                                  А перед тестирование руками вы приложение поднимаете же? Ну а я тест запускаю. Это в любом случае дольше компиляции.
                                                                                                                                  Я привел выше пример теста который проверяет 12 случаев и отрабатывает за меньше секунды. Вы за такое 12 случаев проверите руками? Вряд ли.

                                                                                                                                  при правильном подходе к написанию кода околонулевая

                                                                                                                                  А вы проверяете зачем тогда? У вас подход не достаточно правильный?
                                                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                      +1
                                                                                                                                      Вы изменили код метода или у вас отдельные методы под каждый случай?
                                                                                                                                      Программы я стараюсь писать так, чтобы не было такого: «здесь изменил, там упало».Проверяю — потому что от ошибок я не застрахован.

                                                                                                                                      Ну проверяете-то каждый раз? Значит стараний описанных выше недостаточно или они на что направлены?
                                                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                          +1
                                                                                                                                          Как же нет смысла? Как можно быть уверенным, что правка метода что-то не сломает левой?
                                                                                                                                          но дорого

                                                                                                                                          совсем нет, очень дешево, «никак не могу донести до вас эту простую мысль»
                                                                                                                                    +1
                                                                                                                                    Не всегда долго и уж точно не всегда дольше. В одном из моих проектов тесты длятся меньше секунды из repl'а, тогда как релизная компиляция проекта — пару минут. А их там под тысячу было.
                                                                                                                            0
                                                                                                                            Не, я всё понимаю, но тест вместо статического тайпчекера — это даже как-то смешно.

                                                                                                                            И вызывает вопросы, ну да ладно.
                                                                                                                +1
                                                                                                                Мне кажется, что вам нужно перечитать пункт «Умерьте своё эго». Возможно тесты помогут вам писать более чистый код, так почему бы не попробовать?
                                                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                  +1
                                                                                                                  Попробуйте решить 10 задач на leetcode из группы hard. Там к каждой задаче есть сотня тестов и вы можете их запустить и проверить ошиблись вы где то или нет. Как решать можете посмотреть в секции discuss. Если вы сможете сделать хоть одно решение сразу без ошибок — я буду впечатлён, если три подряд — придётся признать, что вы гений. Для сравнения, мне требуется обычно десяток попыток пока все тесты не пройдут — мне трудно удержать в голове всю картину и не наделать ошибок. При этом за мой говнокод платят где то $30K в месяц.
                                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                      +1
                                                                                                                      Чтобы проверить свою способность решать задачи и сравнить себя с другими. P.S. Не понял про пенсию.
                                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                          0
                                                                                                                          А, вы про это. Верно, здесь пенсий нет.
                                                                                                                            0
                                                                                                                            Идея в том, чтобы доказать себе, что писать код без ошибок вы не можете. Вот например простая задачка на регулярки: leetcode.com/problems/regular-expression-matching/description Там нужно применить регулярку вида «ab.cd*» — то есть из спец символов только точка и *. Вполне практичная вещь: можно представить себе сервис который хранит логи (терабайты логов) и юзеры могут зайти на его веб интерфейс, набрать вот такую простую регулярку и получить логи которые подходят. Конечно же вы не хотите, чтобы ваш сервис наглухо завис из за неудачной регулярки — поэтому код должен быть быстрым. На вид задачка решается за 10 минут, а вам наверно и вовсе пары минут хватит. Вряд ли у вас нету пары минут, правда?
                                                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                +1
                                                                                                                                Могу вам перечислить 0.1 BTC (это чуть больше $600). Довольно неплохо за 10 минут работы?
                                                                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                    +1
                                                                                                                                    600 баксов даже за два дня вроде весьма некисло? И ниже вы писали, что за вечер переделывали сложные системы которые криворукие кодеры писали годами. А тут жалкая регулярка которая сгодится разве что для вопроса на собеседовании с 20 минутами на ответ.
                                                                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                        +2
                                                                                                                                        Не надо ляля. У нас есть простая регулярка и строка — надо выдать 1 или 0. Это стандартный вопрос на интервью, 20 минут на ответ. Вам я даже готов компенсировать ваши усилия в размере 0.1 BTC, что весьма дофига. Можете прям тут функцию написать. Сигнатура пусть будет bool test(char* pattern, char* text); Ограничения: пусть обе строки не больше 100 ASCII символов.
                                                                                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                            0
                                                                                                                                            Потому что мы пишем код на C — сервис такой. Плюс регулярка у нас урезанная и мы хотим этим воспользоваться, чтобы получить максимальную производительность. Всякие preg_match они для общего случая.
                                                                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                +2
                                                                                                                                                Я сомневаюсь, что вы можете решить эту простую задачу без тестов. Вы очень упорно сопротивляетесь. Тут два варианта: либо у вас нет на это 30 минут (зато есть время чатиться на хабре), либо вам не нужны 600 баксов за эти 30 минут (и тогда вы наверно нам пишите из личного самолёта). Фигня в том, что практически никто не сможет решить эту задачу сходу без тестирования — обязательно будет несколько багов. По этой причине когда на собеседовании в крупную компанию задают такие вопросы, ожидают, что вы не только напишите код на доске, но и приведёте список тестов, протестируете (в уме) и исправите все баги. Именно для этого и нужны тесты в реальном мире. Утверждать, что «я могу кодить без тестов» всего лишь невежество, а не опыт. Следующий уровень невежества это «мне не нужна телеметрия — мой код и так хорошо и надёжен ведь у меня столько тестов.»
                                                                                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                    +2
                                                                                                                                                    Подвоха нет. Это стандартная задача для собеседования на 20-30 минут для студентов которые ищут первую работу: проверяется умение написать простой алгоритм и проверить его тестами. Если работа не первая и кандидат претендует на сеньора, ему нужно не только написать этот код, но и рассказать как он будет работать на практике — вся эта многопоточность и т.д. Но если вы не можете написать даже таую функцию, то про многопоточность можно не рассказывать.
                                                                                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                        0
                                                                                                                                                        Ну могите :)
                                                                                                                                                      0
                                                                                                                                                      Если наш проект таки взлетит (а для этого явно придётся покинуть Мордор), то… у меня его не будет. Я, как бывший студент аэрокосмического ВУЗа, посещавший аэродром, на километр не подойду к коммерческой авиации.

                                                                                                                                                      А можете подробнее рассказать, почему?
                                                                                                                                                      Я вот, как бывший студент авиационного вуза, студент военной кафедры с ВУС авиатехника (занятия на аэродроме тоже были, и не раз), и разработчик, несколько лет работавший в фирме, которая пишет софт для авиации (в т.ч. который идет на борт и участвует в воздушном движении) и производивший ПНР в аэропорту, наоборот, после всего изученного и увиденного стал бояться летать гораздо меньше, потому что знаю, как оно работает, и что сделано (как технически, так и административно) для того, чтобы оно работало как надо.
                                                                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                            0
                                                                                                                                            Это всё не нужно, если вы делаете NFA simulation. Если регулярки делать через DFA, да, там легко получить экспоненту, а вот через NFA сильно сложнее, оно полиномиально по длине входа и регулярки (лень выводить точную асимптотику сейчас, сорян).

                                                                                                                                            Ну и это всё вдвойне не нужно, если вы сами пишете реализацию.
                                                                                                                                      0
                                                                                                                                      Сколько вам заплатили за этот комментарий?
                                                                                                                              0
                                                                                                                              $30K в месяц?
                                                                                                                              Можно озвучить историю успеха?
                                                                                                                              Ну пожааааалуйста.
                                                                                                                                +3
                                                                                                                                $360K/год — довольно стандартная зарплата для сеньора в Фейсбуках, Гуглах, Нетфликсах и некоторых других компаниях. История проста: регулярно менять место работы.
                                                                                                                              0
                                                                                                                              Ага, видел я код и продукты этого гения. Понятия не имею, что он там у себя в сознании моделирует, но программировать не умеет совсем.
                                                                                                                                0
                                                                                                                                А не, с другим наркоманом перепутал, tac, сорян :)
                                                                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                    0
                                                                                                                                    Ну в данном случае «наркоман» — метафора, намекающая на альтернативное видение жизни, непризнанными гениями.
                                                                                                                              0
                                                                                                                              «Пишите больше кода» © Dushyant Sabharwal
                                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                  0
                                                                                                                                  +1
                                                                                                                                  Вот кого хвалишь, того и сделают начальником, а ты вечно будешь в дураках. У нас 2/3 программистов работает в офисе заказчика (на постоянке), и у такого заказчика уровень IT- развития равен 0. Они ровно ничего не понимают в этих вопросах и ориентируются на сплетни в курилках и подобные похвальбы от коллег по цеху. А в продуктовых фирмах начальники тоже часто плохо понимают глубины программирования и в таком случае пустить пыль в глаза также проще паренной репы (например, во франчайзи 1с руководителями нанимают не программистов, а людей с улицы).
                                                                                                                                  +1
                                                                                                                                  «Кем бы вы ни были, помните мудрый совет: „Ни одного дня без написанной строчки“. Трудитесь! Что такое талант? Трижды и четырежды труд. Любите труд, и пусть вам всегда будет жаль с ним расставаться. Счастливой дороги!»


                                                                                                                                  Из автобиографической повести Константина Паустовского (где-то в районе 1908-го, что-ли, года) — напутствие диркетора лицея выпускникам.
                                                                                                                                    +5
                                                                                                                                    7 советов, как сделать жизнь лучше

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

                                                                                                                                    /* фото девушки в наушниках на пробежке */

                                                                                                                                    Этот пост изменит вашу жизнь!

                                                                                                                                    //////////////

                                                                                                                                    и откуда вы, б…ь, такие лезете…
                                                                                                                                      0
                                                                                                                                      А где эта чёткая, ровная, словно меч самурая остарая грань, которая делит программистов на постредственных и… непосредственных? По-мойму, автор неправильно применил свой же совет «умерить эго».
                                                                                                                                        0
                                                                                                                                        Вот тут дружно критикуют m0Ray, а между прочим, TDD не работает. Или работает. Смотря кто как исследует).
                                                                                                                                          0
                                                                                                                                          Статья про то, что TDD не особо эффективнее в сравнении с TLD.
                                                                                                                                          Однако, буква T там присутствует в любом случае. Про то, что тесты писать вообще не нужно, там ни слова.
                                                                                                                                            0
                                                                                                                                            То есть исследование не показало, что TDD не работает, правда?

                                                                                                                                            Нет, пожалуй, не показало.

                                                                                                                                            Что же оно показало?

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


                                                                                                                                            Тонко
                                                                                                                                            0
                                                                                                                                            // проверяем формат электронной почты
                                                                                                                                            if (!regex(data['email']) {
                                                                                                                                            return false;
                                                                                                                                            }


                                                                                                                                            Бац — и вы плохой программист