Продолжаем разговор
Инженер-системотехник Сергей Томский (sibdom@post.tomica.ru)
Здравствуйте, уважаемая редакция!
Письмо Ильи Шилова “Так что же надо знать программисту сегодня” (PC Week/RE, № 50/98, с. 28), не могло оставить меня равнодушным - подобная позиция довольно распространена среди молодых людей, начинающих свою карьеру. На мой взгляд, она несколько ошибочна и “...советик по зарабатыванию денег... на Западе” лучше давать, заработав их “на этом самом Западе”. Я же хочу поделиться с этим поколением собственным, российским опытом работы и знанием, как не остаться не у дел во все времена. Возможно, кому-то что-то из нижеизложенного окажется полезным.
Что же надо знать программисту? Отвечая на этот вопрос, необходимо сначала выяснить, какому программисту. Советы уважаемого Ильи я бы адресовал студентам, заканчивающим второй курс специализированного института или (как стало модным называть их в последнее время) университета.
Уважаемый Илья, скорее всего Вам не приходилось трудиться над большими проектами. Не могу с Вами не согласиться в том, что студенту, который желает стать прекрасным специалистом в области информационных технологий, необходимо знать ассемблер и уметь писать на нем. Если же он “попробует” машинный код на стадии изучения архитектуры и принципов функционирования вычислительных устройств - это просто замечательно. В лучшие времена высшая школа именно это и практиковала при подготовке системотехников.
Ваше “...тьфу ты!” в отношении объектно-ориентированного подхода (ООП) совершенно мне непонятно. Есть замечательная народная мудрость - “о полезности инструмента не судят по опыту его неудачного применения”. Я прошел все стадии “кодирования”: ассемблер, Си, Си++ , C++ Builder, затронул и машинный код в свое время. Чтобы уяснить разницу между объектными и не объектными языками, следует применять объектный подход в соответствии с его трактовкой. Для этого действительно придется изменить свое мышление (о чем и говорят классики, Б. Страуструп к примеру). Необходимо видеть разницу между классом и объектом (хотя нередко, подразумевая одно, говорят о другом). Я различаю их следующим образом: при помощи классов создаются объекты, а при помощи объектов описывается предметная область. В данном случае подразумеваю под термином “класс” совокупность данных и методов для их обработки, а под “объектом” - систему классов, описывающую поведение некоторого субъекта предметной области под воздействием внешних факторов. Именно это позволяет получать реальную отдачу от объектно-ориентированного подхода. Если же при создании систем взять за правило еще и вариантную технологию (надеюсь, Вам она знакома), вносить изменения в программы и БД можно практически безболезненно, не нарушая их работоспособности даже в период модификации.
За использование высокоуровневых языков и приходится платить некоторым уменьшением производительности, но зато о модификации ранее созданных и отлаженных объектов со временем просто забываешь. Если же Вам приходится на всем протяжении жизненного цикла системы заботиться об их работоспособности, Вам, простите, до ООП еще расти и расти. Эволюция требует жертв не только в программировании, оглянитесь вокруг. Ведь никому не приходит в голову бороться за экологию путем возвращения к первобытному строю. Да и Ваше беспокойство по поводу “дебилизации”, на мой взгляд, совершенно напрасно. Любой мало-мальски серьезный проект рано или поздно потребует перехода от перетаскивания компонентов на форму к более детальному рассмотрению хотя бы пресловутого API, OLE и т. п. даже от “кодера”. А в конечном счете быть “дебилом” от программирования или специалистом - это дело сугубо личное, все зависит от преследуемых целей и способностей.
...По поводу популярности Windows и Unix. Не буду оригинальным, если скажу, что компьютер без операционки - груда железа. Аналогично можно сказать и относительно операционки и прикладного софта. Большинство ратует за Windows именно из-за большого числа наработок под эту систему, мирясь со всеми ее недостатками. Я думаю, мы с вами не увидим всемирной миграции от Windows к Unix или Linux.
...Так что же надо знать программисту сегодня? Свое мнение я хотел бы адресовать тем, кто учится, готовясь вскоре “выйти в свет”. Советовать оставшимся без работы и неспособным найти ее - что мертвому припарка. Если уж оказался никому не нужен, бери в руки руководство под названием “Легких путей не бывает” (хочется перефразировать - “Если долго мучиться - что-нибудь получится”) из PC Week/RE, № 44/98, с. 15 и - вперед!
Я же обращаюсь к тем, кто учится и в дальнейшем планирует воплощать чужие идеи. Уважаемые кодеры, напирайте на язык и операционку.
Я надеюсь, что основная масса желает творить, и не “за бугром” (если “за бугром”, то и учиться лучше там же), а в нашей родной России (поле-то непаханое!). Я исхожу из предпосылки - все течет, все изменяется, а в сфере информационных технологий - крайне быстро. Поэтому за базис я бы взял фундаментальные вещи:
- системный подход и системный анализ;
- методы проектирования программных систем (не те, которые преподаются в вузе, а те, которые необходимы руководителю проекта и системному аналитику);
- объектно-ориентированное проектирование и программирование;
- теорию баз данных (желательно и по Инмону тоже);
- технологию OLE и CORBA (как рекомендовал уважаемый С. Бобровский), для любителей Inprise - VisiBroker (ее реализация стандарта CORBA);
- MAPI и прочие API, если вы планируете работать с Windows;
- само собой, язык программирования и операционную систему.
Присоединяясь к С. Бобровскому, хочу поделиться собственным опытом. На мой взгляд, лучше знать не все, но обо всем. Кому известны случаи Абсолютного Знания? Буду рад узнать! Когда потребуется изменить направление работ, можно на каких-то конкретных вещах акцентировать внимание, необходимо только уметь работать и самосовершенствоваться.
И последнее наблюдение: чтобы не бояться остаться без работы, уважаемые программисты, не работайте там, где к вам относятся как к “интеллектуальным рабам”. Лично я ценю свои знания и умения, и продаю их, а не “нанимаюсь на работу”. Был бы стоящий товар, а покупатель всегда найдется. Ища работу, представьте, что вы располагаете высококлассным продуктом, и действуйте соответственно. Чтобы эффективно продавать, опять же нужны знания, причем из области маркетинга. В качестве пособия я бы рекомендовал “Учитесь эффективно продавать и управлять сбытом” Джинни Грэхем Скотт. В этой книге можно найти то, что пригодится при поиске хороших возможностей реализации вашего потенциала.
Наилучшие пожелания и творческих успехов.