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

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

«Я не классный, я просто сижу за этим занятием чуть дольше… вы можете делать так же.»


Забавно что те, кто говорят мне, что я хорош, обычно не разработчики. Это напоминает мне историю Джули Чжо «Синдром самозванца», которая, в действительности, перекликается со мной. Она пишет о времени, когда она изучала программирование, и все в ее классе обсуждали, сколько времени у них заняло домашнее задание. Большинство говорили несколько часов максимум, а затем Джули написала, сколько времени это заняло у нее:

«Двадцать часов. Вот сколько времени это заняло у меня. Я не сильна в этом. Неужели я и правда одна из вас?»

Это было в точности, как это было у меня. Я на удивление плох в математике, и программирование никогда не давалось мне с легкостью, в сравнении с однокурсниками — я весь год постоянно занимался без намека на личную жизнь и мучился даже с написанием «Привет мир» и system.out.println() (очень базовыми вещами на Java), не говоря уже о дополнительных заданиях. Я думал, что я покончил с математикой в старших классах и что программирование представляет собой рисование фигур на экране (а не набор текста в черно-белом терминале!)

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

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

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

Кроме того, с течением времени ты все-таки замечаешь, как нужно структурировать код, но, честно, это не такая необходимость, о которой я бы беспокоился. То же самое касается и фреймворков, не важно что это react, angular, backbone, polymer или что-то еще. Вам не нужно учить их все, просто знайте о них, и выбирайте тот, который подходит для ваших нужд.

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

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

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

От переводчика
Это мой первый перевод,- не судите строго, и, пожалуйста, пишите об ошибках в личку!

Комментарии (34)


  1. lukyoung
    01.02.2016 13:32
    +73

    … я не умный, я просто перечитал 2 раза этот пост и не понял зачем это здесь…


    1. ServPonomarev
      01.02.2016 13:40
      +4

      Есть такая поговорка — «если долго мучиться, что-нибудь получится». Если долго кодить, неизбежно будешь кодить удовлетворительно, на своём опыте наделав все возможные ошибки в архитектуре, паттернах и т.д.

      Вот об этом пост


      1. monah_tuk
        01.02.2016 13:45
        +5

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


      1. lukyoung
        01.02.2016 13:48
        +6

        в том-то и дело, что весь смысл данного поста умещается в вашем комментарии )

        автор, без обид ;)


        1. nikitasius
          01.02.2016 13:56
          +5

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

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

          Тем более перевод (что там написано) — отличный стимул подстегнуть новичков.

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


      1. nikitasius
        01.02.2016 13:49
        +1

        Если долго-долго-долго кодить что-нибудь до позднего-позднего-позднего вечера/утра, то в итоге на следующий день придется долго-долго-долго разбираться «зачем и пму?!».
        Ежели в смысле времени и практики, то проще и эффективнее подсмотреть чье-то решение и вдуплить отчего и почему они так сдедали.
        Это экономит время, повышает скилл анализа чужого кода и сразу направляет на верный путь + учит пользоваться поисковиком.


      1. sim-dev
        01.02.2016 14:14
        +4

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

        Что неимоверно удручает, это темпы изменения технологий программирования. Если освоив (сами понимаете, как) в институте паскаль я методом научного тыка за неделю освоил Borland Pascal for Windows, причем до уровня полезных приложений, а не хелловордов; если после этого за 2 недели я освоил так же без чтения книжек Delphi исключительно чтением хелпа к ней; если «с лету» у меня получалось править скрипты CMS Joomla под собственные нужды (до этого php в глаза не видел) — то все это давало мне право надеяться, что я умный на самом деле. И вот теперь я понимаю, что с андроидом я не просто тупой — я безмозглый даун! И пока я смогу отречься от всего, что накопилось в моей голове и разберусь с ныне существующим API 23 (или уже 24?!), окажется, что все это уже никому не надо — уже и андроид будет 125-й версии, и API изменится до неузнаваемости, а может и Java умрет… Причем будет это через год, а не через 20…

        Поэтому я бы резюмировал статью так: вы умны, пока не знаете, что и как делают другие. Я сидел над этим больше вас, но я гораздо «тупее» любого, кто занялся этим только-что…


      1. poxu
        01.02.2016 16:05
        +4

        Если долго кодить, неизбежно будешь кодить удовлетворительно, на своём опыте наделав все возможные ошибки в архитектуре, паттернах и т.д.
        Вот об этом пост

        Нет, это название об этом. А сам пост не об этом.
        Пост о том, что нужно делать продукт, а не писать код. О том, что код это средство для создания продукта, а не самоцель. поэтому не надо слишком сильно переживать о коде — всё это придёт само. Надо делать продукты, вот что важно.


        1. tyomitch
          01.02.2016 16:50
          +1

          И даже не об этом, а о том, что одним доставляет удовольствие написание кода, другим — создание продукта.
          На вкус и цвет друга нет.


          1. poxu
            01.02.2016 17:08
            +2

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


            1. tyomitch
              01.02.2016 18:12
              +3

              I had no qualms with coding the way I was being told, because I literally did not care. That’s when I realised the back end stuff was not for me, and I quit that job to freelance and try my hand at designing and building my own products, where my passion was.


      1. babylon
        01.02.2016 17:12

        Если долго кодить, со временем приходишь к мысли как этот процесс автоматизировать.


  1. kstep
    01.02.2016 14:48
    +5

    Мне эта статья напомнила эффект Даннига-Крюгера.


    1. lukyoung
      01.02.2016 15:51

      в точку!


  1. Gorthauer87
    01.02.2016 14:51
    +4

    Чтобы стать по настоящему хорошим программистом мало «бороться» с программированием. Нужно уметь абстрагироваться, толку постоянно долбится в новую технологию, тратя по 20 часов в сутки на это, если это не приводит к появлению в мозгу новых абстракций, понимания того общего, что есть во всем программировании.
    Лучше уж тогда потратить эти 20 часов на изучение и понимание computer science, хотя бы его основ. Если охота заниматься графикой и анимацией, то явно не лишним было бы знать аналитическую геометрию. А уж вычислительная сложность это вообще must have.
    Если же даже это всё не заставляет мозг видеть за всеми этими фреймворками, языками, парадигмами какой-то сути, то надежды нет.


  1. AllexIn
    01.02.2016 15:12
    -1

    То же самое касается и фреймворков, не важно что это react, angular, backbone, polymer или что-то еще. Вам не нужно учить их все, просто знайте о них, и выбирайте тот, который подходит для ваших нужд.

    WAT??
    Простите, написано что-то весьма непонятное.
    Как можно выбирать инструмент не зная его?
    Есть такая штука, ударная дрель. И это не тоже самое что перфоратор. Вот я как не профессиональный строитель знаю, что оба эти инстрменты сверлят и долбят. Но как мне понять, какой из них мне нужен для конкретной задачи?
    Тоже самое с фреймворками. Чтобы правильно выбрать фреймворк — нужно знать его слабые и сильные стороны, его особенности.
    В противном случае можно брать любой — они все позволяют решать широкий спектр задач.


    1. NiPh
      01.02.2016 15:43

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


  1. random1st
    01.02.2016 16:28
    +17

    «Я пишу говнокод. Я художник, я так вижу.»


    1. enakenenaken
      01.02.2016 17:06
      +1

      Программирование — это искусство.


      1. dovg
        01.02.2016 17:42
        +1

        Нет, ремесло.


        1. babylon
          01.02.2016 18:50

          Это маркер недоразвитости технологии. Человек должен проектировать, а не программировать. Причём искусно.


          1. dovg
            01.02.2016 19:05

            Проектирование — это тоже ремесло.


            1. kstep
              01.02.2016 19:10
              +1

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

              По мне так «ремесло» — это и искусство, которым зарабатывают на жизнь. Художник, рисующий картины за деньги, тоже ремесленник. А значит одно другому не противоречит.


              1. spmbt
                01.02.2016 22:11
                +1


              1. miktim
                02.02.2016 10:30
                +1

                Превратить ремесло в искусство — это талант. Не каждому дано.


            1. babylon
              01.02.2016 23:35

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


  1. cyber_roach
    01.02.2016 17:25
    +3

    Лучше исходить из принципа:
    Я классный! именно потому, что сижу за этим занятием чуть дольше… а вы лентяи не смогли сделать так же
    Знайте себе цену.


  1. spmbt
    01.02.2016 22:24
    +1

    "… я не умный, просто мои мозги работают немного лучше ваших": )


  1. Scf
    02.02.2016 11:50
    +4

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

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

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

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

    Но все равно мешает проклятый перфекционизм :-)


    1. spendlively
      02.02.2016 12:12

      У перевода сильно страдает литературный стиль — не говорят так по-русски. В дальнейшем имеет смысл после такого перевода «начерно» бить его на абзацы и излагать своими словами, сохраняя смысл.

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


      1. kstep
        02.02.2016 12:22

        Да нормальный перевод, гораздо лучше, чем многие.


  1. Dromok
    02.02.2016 14:10
    +3

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


    1. spendlively
      02.02.2016 14:23
      +2

      Спасибо, я просто перевел)


    1. ZakharS
      05.02.2016 15:35

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