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

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

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

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

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

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

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

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

Хороший программист должен уметь обнаруживать и распознавать все виды проблем. Они должны (при необходимости) уметь изобретать свои собственные системы, такие как фреймворки, операционные системы и даже языки программирования. Я не говорю, что вы плохой программист, если не «изобретаете» эти вещи, но я говорю, что вы должны быть достаточно хорошими, чтобы знать и различать то, что подходит для использования, и точно знать, почему. Вы никогда не должны останавливаться на одном решении; всегда должна быть возможность создавать новые решения. Это то, что отличает обычного программиста от хорошего программиста; их способность решать проблемы, а не только их технические навыки.

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

Креативность - важная составляющая в решении проблем. Инновации - это творческое решение проблем, и они пользуются большим спросом, поскольку напрямую влияют на успех бизнеса. Возьмем, к примеру, Tesla (электромобили), Amazon (электронная торговля в Интернете), Google (поисковая система), Netflix (потоковая передача фильмов), YouTube (онлайн-видео), Intuit Turbo Tax (налоговое программное обеспечение) и FaceBook (социальные сети). . В конце концов, все дело в добавлении стоимости, и эти компании создали инновации, которые добавляют огромную ценность их пользователям. С учетом сказанного - неудивительно, что эти инновационные компании ценят сильных людей, решающих проблемы.

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

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

  • Скомпилированные языки
  • Языки сценариев (Shell / Web / Cross Platform)
  • Интернет (архитектура RESTful, полный стек, HTML5)
  • Алгоритмы в масштабе
  • Ограничения в реальном времени
  • Объектно-ориентированное программирование
  • Функциональное программирование
  • Платформы для настольных ПК
  • Параллелизм и параллелизм (потоки, сопрограммы, асинхронность / ожидание, обещания)
  • Потоки и Реактивное программирование
  • Межплатформенные ограничения (Java / .Net Core / Qt / Web / Scripting)
  • Мобильные платформы
  • SQL
  • NoSQL
  • Сборка (ограничения низкого уровня)
  • Данные (машинное обучение и глубокое обучение)

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

Почему стоит выбрать стагнацию? Причин могло быть много. Большую часть времени им движет удовлетворенность и комфорт. Обучение - это бесконечный процесс, который требует от нас «начать заново», и люди не привыкли к такому чувству. Чтобы выйти из зоны комфорта, попробовать что-то новое и взглянуть на новые перспективы, нужно приложить немало усилий. У более молодых людей это получается очень хорошо, но каждый в любом возрасте может выбрать глубже и узнать больше. Обучение требует от нас смирения и избавления от вещей, которые, как нам казалось, мы знали или понимали. В процессе этого мы получаем более реалистичное представление о том, как обстоят дела на самом деле. Во многих случаях эта новая перспектива может сильно отличаться (и лучше) от того, чем мы ее себе представляли. Инновации и творчество рождаются из этих новых мощных перспектив. Как говорится, «чем больше узнаешь, тем меньше знаешь».

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

Если вы хотите узнать больше, посетите наше сообщество…