Как не вылететь из IT через 5 лет. Часть 2 – Язык программирования.

Мы продолжаем обзор темы “Как не вылететь из IT через 5 лет“. Я уже осветил свой взгляд на то, что необходимо знать в части алгоритмов, далее мы переходим, непосредственно, к языку программирования (далее – ЯП).

proraming-languages

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

Знать, как написать “Hello, world!!!” и 10 раз вывести надпись в консоль с помощью цикла, конечно замечательно, но для того, чтобы называться профессионалом (а Вы, надеюсь, стремитесь именно к этому) необходимо нечто большее.

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

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

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

  • Синтаксис языка программирования.
    Главным источником информации в этом плане для языка Java является Java Language Specification.
  • Реализация базовых структур данных и алгоритмов на вашем языке программирования
    Collections API. В реальной работе вы почти всегда будете работать именно с коллекциями. Вы просто обязаны знать все плюсы и минусы каждой базовой коллекции.
  • “Чистый код”
    Крайне “заезженное” понятие, но смысл всегда остаётся следующим – пишите код так, чтобы его мог понять другой программист и, чтобы данный код можно было легко изменять. Принципы SOLID, KISS и т.д. придут вам на помощь.
    Меньше кода, меньше ошибок – это именно тот случай, когда количество (строк кода) должно перейти в качество.

Решение следующих задач крайне поможет вам в освоении своего ЯП:

  • Написание кода, который работает, практически, с любыми вводными данными (null, символы вместо чисел и наоборот и т.д.)
  • Реализация базовых алгоритмов (обход графа в ширину и в глубину, бинарный поиск, удаление элемента  и коллекции и т.д.)
  • Написание CRUD приложения, которое использует текстовые файлы вместо БД (вспоминаем Java I/O)
  • Написание тестов к своему коду. Тесты должны покрывать 100% кода. Код, которые не протестирован – не надёжный код.

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

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

Список материалов, которые помогут вам углубить свои знания в вашем языке программирования:

  • “Clean Code” Robert C. Martin
  • “The Clean Coder” Robert C. Martin
  • “Java Language Specification 8” (актуальна на момент написания статьи)
  • “Effective Java” (2nd Edition) Joshua Bloch

На этом мы заканчиваем обзор данной темы.

Ссылки на статьи цикла:

17 Comments

  1. Николай Прядкин

    Спасибо за статью! Мог бы посоветовать книги которые в тех. вузах преподают, которые будут полезны для программиста. Смотрел недавно Головача про мультитрейдинг, там он несколько понятий использует(монада например) которых в обычных книгах по программированию нет.

    • proselytear

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

      • Николай Прядкин

        )))) Надо было во втором предложении знак вопроса поставить ))) Я у тебя/Вас хотел узнать )))

        • proselytear

          Принято 🙂
          Да, сейчас раздел “Книги” в работе – как только закончу – будет ссылка.

    • Монада это базовое понятие из функционального программирования и есть в любом учебнике по Хаскелю. Это для продвинутых, кто хочет развиваться дальше Java+Spring / C#+ASP.NET / Python+Django / JS+Node 🙂

      База, которую нужно знать всем: SICP, Кормен “Алгоритмы. Построение и анализ”, Ахо/Сети/Ульман “Компиляторы”, Дейт “Введение в системы баз данных”, Design Patterns от GoF, Мартин “Принципы и паттерны гибкой разработки”, Макконнелл “Совершенный код”, Таненбаум “Современные операционные системы” и “Компьютерные сети”

      Можно попробовать и Кнута “Искусство программирования”, но это фундаментальный научный труд, требующий серьезной математической подготовки (“Конкретная математика” того же Кнута рекомендуется).

      Функциональное программирование (из которого сейчас берет идеи мейнстрим) изучать следует вовсе не с Хаскеля/Окамла/Скалы, а со Scheme. Это такой функциональный Бейсик, самый простой диалект Лиспа, и SICP использует именно его.

      • В дополнение к перечисленным книгам.
        Что должен знать программист, чтобы его после 40 лет не выбросили на Помойку, Где Бомжи: sharpc.livejournal.com/67583.html
        Там, конечно, шуточно-тролльский вброс, и некоторые пункты (вроде стандарта умирающего C++ и доисторических виндовых технологий типа MFC и ActiveX) можно смело опустить. Но в целом список полезный, особенно следует обратить внимание на математику.

    • Что должен знать программист, чтобы его после 40 лет не выбросили на Помойку, Где Бомжи: sharpc.livejournal.com/67583.html
      Там, конечно, шуточно-тролльский вброс, и некоторые пункты (вроде стандарта умирающего C++ и доисторических виндовых технологий типа MFC и ActiveX) можно смело опустить. Но в целом список полезный, особенно следует обратить внимание на математику.

  2. Victor T

    Евгений, приходилось ли тебе брать на работу претендента со слабой теоретической базой? Если приходилось, не пожалел ли впоследствии?

    • proselytear

      Да, пару раз были такие случаи.
      Один раз точно не пожалел – по итогу человек показал себя классным спецом.

  3. Bolat Ashirbek

    Спасибо, за хороший материал. Теперь нужно изучить и использовать на практике.

  4. Игорь Смол

    Не совсем ясно как можно 5 лет проработать в айти программистом и иметь совсем мало практики. Работа в айти программистом подразумевает кодинг на постоянной основе)

    • proselytear

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

      • Игорь Смол

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

        • proselytear

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

          • Игорь Смол

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

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

    • Можно 5 лет поддерживать legacy код на Delphi на каком-нибудь заводе. Обычная ситуация, когда выпускник вуза устраивается в первое попавшееся место (ибо крупным компаниям с серьезными проектами он не нужен, нехватки программистов уровня ниже Middle давно нет) и задерживается там.

Leave a Reply

Your email address will not be published. Required fields are marked *