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

О шаблонах проектирования и принципах проектирования
Некоторые думают, что как только вы освоите шаблоны проектирования и принципы проектирования, вы уже изучили проектирование. На самом деле шаблоны проектирования и принципы проектирования — это лишь обобщения и выжимки, сделанные предшественниками на основе практики проектирования. Проектирование, в конечном счёте, состоит в решении проблем - преобразовании решений конкретных проблем посредством определённой степени абстракции в язык программиста.
Я видел некоторых людей, которые знают много и начитанны, и даже могут объяснить теории высокопарными словами, но когда дело доходит до практического решения проблем, они не могут предложить умных, элегантных решений. Это типичные люди из башни из слоновой кости.
С другой стороны, есть и некоторые люди, которые свысока смотрят на тех, кто изучает шаблоны проектирования. Они считают, что уже постигли секреты проектирования программного обеспечения, а для них это бессмысленные слова. Можно просто посмеяться над этим.
Иногда мы, наоборот, оказываемся связаны по рукам и ногам из-за поверхностного владения шаблонами проектирования или принципами проектирования. Например, я столкнулся с чем-то таким: код, спроектированный прилежным программистом, повсюду использовал композицию (например, помещал объект User внутрь Administrator). Я с любопытством спросил: некоторые отношения классов и объектов явно соответствуют характеристикам наследования, так почему же не хотели его использовать? Он сказал: принципы проектирования говорят нам предпочитать композицию наследованию. Я думаю, если эти превосходные шаблоны, принципы и методологии нельзя освоить досконально и нельзя подходяще применять в соответствии с реальными сценариями, не лучше ли вообще их не понимать?
Об изучении нескольких компьютерных языков
Некоторые люди считают, что достаточно выучить один язык и что учить так много языков не нужно. На самом деле освоение ещё одного подходящего компьютерного языка — это не просто получение ещё одного инструмента для заработка. Если новый язык может значительно изменить ваши взгляды на программирование и проектирование, то, возможно, его стоит выучить.
Например, язык C может воспитывать строгость мышления; динамические языки, например, могут помочь программистам лучше писать объектно-ориентированный код; функциональные языки, например, играют незаменимую роль в промышленном производстве и вычислительных областях.
Конечно, при этом, как говорится, «мастерство приходит от сосредоточенной специализации». Глубокое освоение конкретного компьютерного языка (включая среду выполнения, необходимую для этого языка, и принципы его компиляции или интерпретации) крайне необходимо.
Кроме того, мы часто видим споры о том, какой компьютерный язык лучше или хуже. В конечном счёте компьютерные языки — это инструменты, а инструменты обновляются и меняются по мере развития времени. Простой спор о том, какой из них лучше или хуже, имеет мало смысла.
Об английском
Почему китайцам нужно учить английский? Почему программистам нужно учить английский? Когда я называю все эти имена методов и имена переменных пиньинем, это работает точно так же. Кто придумал это чёртово правило?
К сожалению, многие учебные материалы, статьи и технические ресурсы (особенно некоторые недавно выпущенные технологии) написаны на английском. С другой стороны, международные стандарты и обычный способ общения программистов — всё на английском. Думаю, наверняка было бы трудно представить, как выглядел бы исходный код тех известных фреймворков и библиотек, если бы имена переменных были написаны пиньинем.
Итак, если ваш английский не очень хорош (по крайней мере чтение и письмо), не ищите себе оправданий. Английский — это инструмент для освоения других инструментов, если только вы твёрдо не верите, что китайский скоро станет самым универсальным языком в компьютерной индустрии в мире.
Об алгоритмах
Насколько важны алгоритмы — этот вопрос всегда был очень спорным.
Программное обеспечение, в конечном счёте, используется для решения задач. Говоря об алгоритмах, нельзя не упомянуть математику (именно поэтому многие мастера в области программного обеспечения имеют значительную математическую подготовку). Решение задач можно просто свести к двум шагам:
- (1) Абстрагировать реальную задачу в упрощённую математическую модель
- (2) Использовать алгоритмы для решения этой математической задачи
Алгоритм здесь следует понимать широко (здесь алгоритм не сводится только к узким конкретным алгоритмам, изучаемым в университете). Алгоритм — это метод решения вышеупомянутых математических задач. Если вы не осознаёте его присутствия в своей работе, это означает лишь, что математическая модель, которую вы абстрагировали, относительно проста, метод решения этой модели также прост, или существуют готовые подходы для подражания, или готовый фреймворк сделал это за вас, так что вы не обращаете на это внимания и не заботитесь об этом.
Если то, чем вы занимаетесь, полно инновационного значения и является тем, чего другие никогда не делали, то алгоритмы могут стать фактором, определяющим ваш успех или неудачу.
В текущих условиях в Китае людей с широким кругозором и богатым опытом легко найти, но на самом деле компаниям очень трудно нанять людей, обладающих двумя вышеупомянутыми способностями для решения проблем.
Об опыте
Есть много людей, которые являются теоретиками, опирающимися только на опыт. Они считают, что в софтверных компаниях должность, зарплата и даже способность принимать решения зависят от опыта. Инженер с 5-летним опытом, безусловно, может найти работу лучше, чем инженер с 3-летним опытом:
"Я старший сотрудник, я работаю 5 лет. Почему он, проработавший всего 3 года, получает такую более высокую зарплату, чем я?!"
На самом деле многие факторы, включая накопление в предметной области (это связано с бизнесом, например, интернет-сфера или сфера традиционного ПО, что не имеет прямого отношения к так называемым чистым технологиям), видение, способность выдерживать давление и так далее, часто в значительной степени зависят от накопления «опыта». Однако это не абсолютно. Есть поговорка: «Карьера наполовину строится делами, а наполовину — обобщением». Действительно, есть выдающиеся программисты, которые хорошо умеют обобщать, хорошо наблюдать и накапливать, хорошо постоянно размышлять. Именно такие программисты обладают более ценным опытом.
С другой стороны, программисты существуют для того, чтобы решать проблемы. Опыт не может заменить решение проблем. Если у некоторых людей способность решать проблемы лучше, почему они не могут получать более щедрую зарплату?
Источник: http://www.raychase.net/359