День защиты детей от плохого кода


    Пост посвящен дню защиты детей. Любые совпадения – не совпадения.


    В 10 лет у меня появились первый компьютер и диск с Visual Studio 6. С тех пор я придумываю себе задачки — автоматизировать дела, собрать какой-нибудь веб-сервис для трёх человек или написать игру, которую потом удалят из плеймаркета от старости. Конечно, я терял исходники и писал код, который стыдно показывать людям. И в 10 лет я бы точно не отказался получить из будущего архив со всеми косяками — чтобы никогда их не допускать.


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




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


    Сергей, младший программист




    Детство


    Какое самое веселое занятие в программистском детстве, когда ещё нет интернета?


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



    Ты берёшь, пробуешь, переставляешь блоки местами, экспериментируешь и дотягиваешься до всего, до чего можно дотянуться. Сносишь Windows, 10 часов ставишь Windows обратно. Пытаешься вернуть драйверы. Разбираешься, как устроен DOS. Разбираешься, как должны стоять перемычки, чтобы твой хард завелся в компьютере у друга (там 200 мегабайт новых игр!). Крутишь софт, крутишь железо, разбираешь и собираешь компьютер. Пишешь футбольный симулятор 13 лет, в конце концов.


    Когда нет ничего, становишься счастливым и от такого.




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


    Это, конечно, несколько абстрактный совет, но если бы я сразу знала.


    И не рекомендую зацикливаться на одном направлении в IT. Тут тоже кругозор имеет значение.


    Анна, старший системный аналитик




    Средняя школа


    В какой-то момент на форуме уездного города П обсуждали программирование — и там появился тред с заголовком «В крупную компанию ищутся программисты PHP». Текст объявления был таким:


    В крупную компанию ищутся программисты PHP:
    
    Для того, чтобы понять, стоит ли вам приходить на собеседование, выполните несложное задание: напишите программу на php, которая находит такие целые положительные числа x, y и z, чтобы x^5+y^5=z^5. (^ - степень).
    
    Отвечать можете здесь.

    В этом треде отписались всего несколько человек — там был и я. Со всей своей шестнадцатилетней наивностью я ответил:


    Реально чет странное. Да и комп нужен неслабый, штоб ето найти...
    Ибо от x,y,z <=1000 таких чисел нет-эт во первых (сел набросал в vb, большего ПОКА не дано), во вторых комп подсаживается намертво.
    
    Не все равно чето нето, ИМХО.

    Да, розыгрыш, ловушка для новичков, да, падонкафский, ну и што. Очевидно, что я потратил сколько-то времени на простой скрипт, но совсем забыл о существовании теоремы Ферма — о чем автор треда, достопочтенный The_Kid, уточнил в самом конце.


    Итог печален - в П. практически нет людей, знающих математику, но каждый второй мнит себя мего программистом. За три часа, на все форумах на которых я разместил сообщение, было суммарно около двух сотен просмотров... и всего два правильных ответа. А теорема Ферма - это ведь школьная программа, и условия ее настолько просты, что должны бросаться в глаза. Кстати, параллельно при опросе в аське 6 из 6 знакомых новосибирских студентов ответили «Это же теорема Ферма».
    И кого после этого брать на работу?

    Тогда это вызвало у меня бурю возмущения в духе: «Если я не написал про теорему Ферма, это не значит, что я о ней не знаю», — классическая отмазка. Грустно ли мне сейчас? Нет, это тоже урок на всю жизнь. Как тогда, когда мою игру зафичерили в индонезийском Windows Phone Store, а через две недели удалили, потому что я не обновил какие-то там условия EULA.


    И совершенно ведь непонятно: если в одной там крупной компании некого брать на работу — кем же тогда быть? Чем заниматься? Куда расти?




    Не стоит думать, что, получив образование, ты будешь программистом/таксировщиком/математиком или ещё кем-то.


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


    Это что касается университета. На прикладные навыки у человека ещё будет вся остальная жизнь.


    Олег, ведущий системный аналитик




    Университет


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


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


    Я вот не решал, не ходил на допы, а просто доучился в своём математическом классе, попутно делая интересные штуки. Спойлер — на собеседованиях они будут никому не нужны.




    Сначала лучше определиться, что нравится из IT. Если нравятся все направления, то будет сложно. Учить какой-то язык — ни к чему не приведет, будет только путаница в дальнейшем.


    Ян, специалист по фин. мониторингу




    Реальная история — за симулятор Windows, сделанный с товарищем на коленке в 10 классе, в универе можно получить пару экзаменов и зачетов автоматом. Можно даже потом рассказывать всем, как это было классно. Проблема в том, что это не было классно — это были запутанная архитектура, отвратительный код и полное отсутствие каких-либо стандартов хоть чего-нибудь.


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





    Поддержу, важнее помогать советами, что можно делать и где брать инфу, а не наоборот. И совершенно не страшно, если он вначале будет на ощупь что-то делать, осознание позже придёт. Важно, чтобы нравилось.


    Эрик, инженер по тестированию




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


    1. Потрать время, найди книжку и поставь-таки тот дистрибутив Убунты, который тебе бесплатно прислали из Canonical. Там явно какая-то простая проблема, Убунта заводится везде. А Линукс тебе очень пригодится.
    2. Не бойся консоли. Volkov Commander, конечно, помещается на одну дискету, но попробуй разобраться, зачем тебе все эти команды, подружись с командной строкой. А дискеты умрут. Диски умрут. Флешки тоже умрут. Не сильно переживай.
    3. Почитай про алгоритмы, разберись в сортировках, деревьях и кучах. Читай книжки.
    4. Чтобы разобраться в основах, платные курсы не нужны. Скоро появится Ютуб – вот ты удивишься.
    5. Не зацикливайся на Бейсике. В мире есть сотня технологий, которые стоят твоего внимания, и миллион вещей, которые интереснее, чем в очередной раз рисовать юзерформы в Экселе. Возьми хотя бы Python — а дальше разберешься.
    6. Научись пользоваться Гитом, забэкапь все исходники. Напиши хотя бы одно клиент-серверное приложение, чтобы понимать, как они работают. Разберись в сетях, свитчах и маршрутизаторах.
    7. И если ты сейчас это читаешь, значит всё не зря.



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


    Яндекс.Деньги
    102,50
    Как мы делаем Деньги
    Поделиться публикацией

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

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

      +4
      что бы вы написали себе из прошлого

      «Покупай доллар по 33 руб.» — как пример «История не терпит сослагательного наклонения». Хотя в общем-то, если сразу подсказать правильно направление, то в струю было попасть легче и быстрее.
        +1
        Это как в одной из свежих серий Масяни главгерой оказался в прошлом — «Сначала забью себе Фейсбук, а потом гуляяять!»
          0
          Тогда уж биткоин) Займись майнингом.
            +2
            Тот момент когда вариант с лотереями и ставками уже не так выгоден?
          +2
          Пришли времена, когда в дипломе становятся намного более важными базовые предметы (математика, физика, информатика, философия), а не прикладные

          Аминь. Согласен полностью. В начале очень горело знать все модные слова, инструменты, языки, и отсиживать пары высшей математики с мыслью: «Зачееем мне это надо?»

          написать письмо себе из прошлого — вот моё

          Может вы и сейчас напишите такое же письмо? Что-то типа: «Научись пользоваться..»
          Мне было бы интересно на ваши советы.
            +1
            Не рекомендую тратить много сил на муки выбора, лучше всё пробовать и всем заниматься. Когда поймешь, что есть что в общих чертах, сможешь сам решить, в каком направлении надо двигаться, а от какого лучше отказаться.

            Сергей, младший программист


            Золотые слова!

            А ещё я бы посоветовал ставить себе достижимые цели и верить в себя. А всё остальное придёт.
              0

              Всё замечательно, но… теорема Ферма в школьной программе? У автора сообщения явно была очень продвинутая школа...

                0
                Так автор упомянул же об этом
                доучился в своём математическом классе
                0
                ИМХО, любой хороший специалист — это человек с крепким общим развитием, которое прививает целеустремленность, креативность, жажду познания и многое другое.
                Я бы посоветовал всем школьникам (не только будущим ИТшникам) читать книги, заниматься творчеством, общаться со сверстниками.
                Какую бы специальность вы не выбрали потом — с хорошей общей базой вам будет легче и интереснее.
                  +2
                  Расскажите в комментариях, что бы вы написали себе из прошлого?
                  К сожалению, школьник не поймёт и половину. Когда-то давно я читал про F# и Haskell, но это было похоже на ряд непонятных формул: очевидно, что что-то есть, но вот что с этим делать и почему это выглядит именно так — непонятно. Основная причина этому — авторы статей, которые рассматривают предмет с академической точки зрения. Некоторое время осилил Elm за пару дней, так как понял некоторые вещи, о которых авторы академических книг будут говорить уже ближе к концу. Хорошие объяснения надо ещё найти, и то, если они закончены. Пропасть между «переустановлю убунту» и «починю поломанный арч» лучше всего перешагивать с наставником, чем запасаться терпением на долгие годы.
                  Очевидно, что я потратил сколько-то времени на простой скрипт, но совсем забыл о существовании теоремы Ферма — о чем автор треда, достопочтенный The_Kid, уточнил в самом конце.
                  А как нагуглить это описание по задаче? Качество преподавания, интерес к учёбе, упрощённая школьная программа — всё это привести к серьёзным пробелам в знаниях. Даже в виде «a^d+b^d=c^d» теорему не найти, а если я знаю как она записыватеся, то высока вероятность того что мне и искать её не надо.

                  Конечно можно найти курсы алгебры с машинночитаемыми записями формул, нормализовать их, написать функцию сравнения, соеденить это со ссылками на статьи, но имхо это уже будет тянуть как минимум на курсовую.
                  напишите программу на php, которая находит такие целые положительные числа x, y и z, чтобы x^5+y^5=z^5
                  Всегда интересовал вопрос, а зачем нужна вся эта теория, если в итоге: используются языки со слабой динамической типизацией в которых ошибки проявляются только во время выполнения, когда на каждую строку нужна куча тестов, обработка данных осуществляется в том же месте, где и отображение, форматирование кода скорее мешает чем помогает, работать с данными нужно через костыли, а не как полагается, ведь данные невалидны, а этого никто до сих пор не заметил, и вообще, как разработчиков нового gmail не уволили, а результат их труда не предали забвению?

                  Лично я даю такой совет: не пытайся найти идеальную технологию для зарабатывания денег, лучше учи костыли к популярным. Разница в strlen и mb_strlen гораздо важнее гигиенических макросов, знание того что отломали в python 3 гораздо важнее понимания красоты системы типов haskell, зазубривание очередного ключа/бага systemd гораздо важнее понимания оболочки.
                    +5
                    Итог печален — в П. практически нет людей, знающих математику, но каждый второй мнит себя мего программистом.

                    image
                      0

                      Задам глупый вопрос — где нужна математика кроме:
                      1) Сортировки и работы с данными в научной сфере. Там чем лучше, быстрее, точнее — тем больше шанс что-то найти, важна кажда мелочь.
                      2) Машинном обучении. Использовать что-то своё для специфического набора данных или применить алгоритм для отсеивания шума и т.д. Опять же, это больше про "создание своего".


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

                        +1
                        Себе в прошлом (не таком далеком, как школа, скорее в универе и далее в начале карьеры программиста) я бы посоветовал больше учить технологий, читать статей о различных решениях и новых подходах в решении задач (особенно с архитектурной точки зрения). Тогда я, возможно, избежал бы многих «велосипедов» и «граблей». Например, не пытался бы создать свою реализацию общения между клиентом и сервером на TCP-сокетах с шифрованием и плюшками, если бы в то время узнал про WCF. Аналогично с Entity Framework и другими широко используемыми библиотеками.
                        С другой стороны автор правильно сказал:
                        Такие вещи нужно делать с одной целью — чтобы был собственный каталог граблей.

                        Такой малоприятный опыт помогает взглянуть на многие вещи более осознанно. Да и бросаться в другую крайность — знание технологий без знания, как он устроены — тоже плохой подход. Во всем нужен баланс.
                          0
                          напишите программу на php, которая находит такие целые положительные числа x, y и z, чтобы x^5+y^5=z^5. (^ — степень).

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

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

                          Самое читаемое