Программирование - искусство. Программисты - творцы
серьезное дело, требует всей жизни.
И.А. Гончаров
Hallo, я рад, что вы решили прочитать эту статейку, значит вы не равнодушны к программированию! А что на ваш взгляд значит программирование?! По-моему - это творчество, а творчество это своего рода искусство. Значит программист это "творец", человек искусства. Но все ли программисты такие, конечно же, нет. Большинство программистов используют уже готовые наработки его предшественников. Но это всё легко объяснимо, для этого давайте окунёмся в экскурс прошлого.
Компьютеры, изначально созданные для узкоспециализированных военных задач, были восприняты как платформы с поистине безграничными возможностями. В то далёкое время математики занимались исключительно гипотетическими машинами, которые имели очень отдалённое отношение к действительности. Воплощенные в металле, инженерные идеи обогнали на десятилетия вперёд даже знаменитых математиков. Предложенная дискретная архитектура была совершенна и существует до сих пор, приведя к развитию соответствующей дискретной математики, большей частью описывающей то, что инженеры давно воплотили в жизнь. Так изначально практические компьютерные технологии оставили позади математические модели.
Сегодня трудно представить, что было время, когда компьютеры обслуживались технической элитой, решавшей рутинные, ''спущенные сверху" задачи. Впрочем, для начальства не было секретом, что свободное (и не только свободное) машинное время использовалось для личных нужд и исследований персонала. Так и зарождалась субкультура людей, которые открыли в грохочущем монстре вторую Вселенную, свое второе Я.
Чудовищное отставание нашей страны, в то время мы входили в СССР, в области вычислительной техники, жёсткая дисциплина, постоянные репрессии привели к тому, что субкультура программистов, возникла в стенах лабораторий США и уже оттуда распространилась на весь мир. Как следствие, эта сфера большей частью американизирована, особенно у нас, на фоне массового использования американской, а не "родной" программно-аппаратной базы.
Ну вот, мы и подобрались к цели этой статьи - научить читателя самостоятельно добывать необходимые ему знания и навыки, порой, не имея соответствующей литературы и информации, а также рассказать о программистах и программировании.
Современное информационное изобилие приводит к атрофированию навыка самостоятельного получения необходимых знаний. Парадоксально на первый взгляд, но недостаток литературы развивает и тренирует мозги куда лучше, чем её избыток.
Теперь давайте разберёмся с существующими типами программистов и объясним поставленное утверждение в начале этой статьи. На мой взгляд, существует два типа программистов, кардинально отличающихся друг от друга. Первый тип это как раз "творцы", которые создают новое, им интересно решать сложнейшие задачи, порой тратя на это огромное количество времени. Второй тип - коммерческие программисты. Коммерческий программист, какими бы не были его наклонности, имеет очень мало шансов стать гением своего дела, даже являясь профессионалом. Работая по заказу, ограниченному жесткими временными рамками, он просто не в состоянии углубляться в дебри кода или ценой трех бессонных ночей сокращать уже до предела оптимизированную программу на один байт.
В 60-х годах темпы развития вычислительной техники существенно отличались от сегодняшних и на разработку ПО отводилось достаточно много времени, так что познавательные эксперименты не были недостижимой роскошью. Особо хотелось бы отметить, что оптимизация тогда была не только показателем "крутости" программиста, но и необходимостью. При существовавших ограничениях памяти, скорости и возможностей периферии на той технике могли программировать лишь гении.
Язык определяет стиль мышления, поэтому мышление программиста постепенно преображается под воздействием используемой архитектуры в образ мышления её создателя. Чем мне нравится программирование в далёком прошлом, ещё, когда программирование только начало зарождаться, - критически низкие ресурсы служили мощным толчком к глубокому изучению команд процессора и заставляли программистов проводить бессонные ночи в поиске нужных комбинаций расположения сотен байт в скудной оперативной памяти. На больших машинах это было попросту ненужно: ресурсов хватало даже для выполнения достаточно "кривого" и необдуманного кода.
До конца шестидесятых годов программистов можно было сопоставить с античными мастерами. Программирование ассоциировалось с высшим профессионализмом и вытекающей из него культурой поведения. Картина до конца шестидесятых годов была следующая - в условиях полной замкнутости и отсутствия какой-либо связи между компьютерными центрами страны каждый программист должен был получить необходимые ему знания САМ. Это был долгий и тернистый путь. Информатика тогда лишь зарождалась, и даже эффективные алгоритмы и приемы ещё не были канонизированы и широко известны. Как бы ни был очевиден древовидный поиск или линейная сортировка, но до них нужно было додуматься самому и, - увы, - далеко не один раз. Как следствие, все алгоритмы десятки раз открывались заново, прежде чем информация о них успевала дойти до адресатов "естественным" путём - через книги и университеты.
Конец 60-х - начало 70-х годов - годы непрерывного совершенствования технологий программирования и аппаратного обеспечения. Росла вычислительная мощь ЭВМ, ёмкость периферийных накопителей и быстродействие центрального процессора. Собственно говоря, в то время всё упиралось скорее в деньги, чем в технологии. Если клиент хотел решать с помощью компьютера серьезные задачи, то получение необходимой машинной мощности зависело только от его кошелька. Производители компьютеров заметно обгоняли в те годы потребности клиентов. И необходимость в высокопрофессиональных программистах и тщательно оптимизированном коде мало-помалу начала отпадать. Могли ли программисты представить такое расточительство хотя бы пару лет назад? Си (язык программирования) стал первым кирпичом в фундаменте быстрых средств проектирования, на котором сегодня построены такие чисто визуальные системы как Visual Basic и Delphi.
Время обучения программистов резко сократилось, и былые профессионалы становились во многих местах просто не нужны. Было бессмысленно оплачивать их квалификацию, когда множество людей соглашалось работать на куда более худших условиях.
И тут началось самое интересное. Если прежде, в отсутствие конкуренции, время, отведённое на разработки, было, как правило, практически не ограничено, а конечная стоимость не критична, то теперь каждый стремился обогнать другого. Это соревнование не проходило безболезненно. И в первую очередь страдал код, вернее его качество. Если бы этим всё и ограничилось, то было бы полбеды, и конце концов настоящий художник проявил бы себя и в таких условиях. И код, написанный даже в условиях этой сумбурной спешки настоящим программистом, все равно бы нес в себе долю оригинальности и собственного "я".
Однако, стремясь максимально эффективно использовать труд людей, руководство разделяло коллектив на небольшие группы из трех-пяти человек, каждый из который решал свою локальную задачу, тесно зажатый её рамками.
Творить и показывать свою индивидуальность в этих условиях стало попросту невозможно. И профессионалы начали потихоньку разбегаться. Красивые решения уже никому не были нужны и никого не интересовали. Возможности компьютеров того времени были уже достаточны, чтобы "небрежно" написанный код удовлетворял заказчика по всем параметрам (скорости, объёму). "Железо" дешевело куда быстрее программного обеспечения. Легче было купить вчетверо более мощный компьютер для небрежно написанной дешёвой программы, чем приобретать для дешёвой машины оптимизированный до последнего байта код. Очень жаль, что никогда не вернуть того времени, тех машин, тот исследовательский дух, когда компьютеры были ещё чисто научной, но никак не коммерческой игрушкой. А как жаль, что не удалось пожить в то время!
Вот так, постепенно мы переходим в нынешнее время. На данный момент за окном век информационных технологий, революций в вычислительной технике и программном обеспечении. Обратите внимание как быстро компьютер вошёл в жизнь практически каждого человека. Сейчас компьютер это не роскошь, а необходимая вещь почти в каждом учреждении и доме, для некоторых это даже средство существования. Сегодня можно творить и создавать новое, хотя это и кажется очень сложным, ведь всё уже изобретено, но вы только попробуйте и тогда вы поймёте, что вся суть в процессе творчества, создания новых программ.
Я думаю, что теперь понятно, что профессионалами не рождаются, ими становятся. И если вы занимаетесь программированием, то я надеюсь, что вы будете не просто коммерческим программистом, а творцом!
Оставить комментарий
Комментарии
Что имеем сегодня? Задачи – которые решаются на «коленках» уже почти не востребованы, да и сама суть их – решение экспертом в проблемной области а не программистом. Сегодня есть проекты, самый маленький из них - большой ком – огромный монолит, где разработчик, только винтик. И одному просто не реально что либо закончить. Это факт.
Продолжать писать «на коленках» - не даёт время, скоротечность (да не согласятся физики) времени пропорциональна росту оного же. Отсюда и всякие IDE & RID & CASE среды. Чтобы идти дальше – надо продолжать а не начинать с начала. Сегодня уже не готовят программистов в ВУЗАх (могу ошибаться), готовит инженеров - схемотехников, электронщиков, аналитиков и т.д. А программистов готовя в техникумах – следовательно, увеличение энтропии на лицо, что выражается в геометрическом росте сложности и объема проектов. Но, в каждом отделе, всегда есть тот – кто думает.. Тот, кто думает на языке проекта, языке реализации, языке алгоритма, и не важно, коммерческий это проект или нет, бессонные ночи, отладка дома, неудобства родным и т.д.
Другое дело, что эти самые деньги породили формализм в обучении, и отток (90-е годы) преподавательского состава из ВУЗов. Что взять с «программиста», имеющего диплом, и с трудом (в лучшем случае) который может вспомнить что Delphi – это не язык, это среда, что есть Assembler, и т.д. И преподавателя, который за «мудреный» код ставит «2» - ибо не может объяснить суть написанного, следовательно написано «не верно» (не так как в методичке…) Суть сказанного – надо принимать во внимание сегодняшний день – а Программисту всегда найдется место, просто теперь ему надо быть более грамотным, причем, с каждым годом, учится – учится – учится, увы.
PS: Один мой знакомый, работник банка, зарабатывает деньги поделками на Delphi – из разряда «коммерческих» программистов, вот только в обеденные перерывы, для души, он изучал 3DMAx и такой шедевр (для себя) написал на VC++, получается, не только «тяп-ляп»? Я бы другую проблему поднял – психологическое истощение. Это сегодня уже проблема. Основные её предпосылки – работа в «стол», отсутствие востребованности результата, отсутствие мотивации и т.д – результат, интеллектуальное истощение, а это уже страшно – возможна профессиональная деградация (по моемому, это перекликается с вопросом снижения количества талантов в IT и перехода в ширпотребщину).
2.Не согласен с утверждением, что сейчас не нужна оптимизация, кодирование и т.п. премудрости. Ребята, не нужно рассматривать компьютер только в разрезе Майкрософта или Юникса. Есть огромное число задача, для которых требуется нормальное творчество. Малюсенький пример - системы реального времени, искусственный интелект, обработка гидро, метео, астро информации и т.п. Надеюсь помните, что американская школа программирования так и не смогла повторить создание алгоритма автоматического полёта корабля многоразового использования. Ошибка в точке приземления нашего "Бурана" составила 2 (!!!) метра. Это торжество программистов!
3. Хотелоcm бы поправить автора или высказать свою точку зрения. "Си (язык программирования) стал первым кирпичом в фундаменте быстрых средств проектирования, на котором сегодня построены такие чисто визуальные системы как Visual Basic и Delphi". Евгений, это не так. Первый структурный язык всё-таки Паскаль, а первый язык, который более-менее подходил для проектирования систем был Алгол - язык с очень прозрачной для того времени логикой. Си казался очень тяжёлым языком, позволяющим проложить мост между высоким и низким программированием. Ни VB, ни Delphi не базируются на Си.
А по поводу оптимизации, она всегда нужна но главное чтобы она не стала "маниакальная". Согласитесь всех раздражает когда какая либо прога (Windows к примеру :)) поттормаживает и порой дело не в железе!
Сами писали аналог РеГет'а, абсолютно ничего не зная о том как устроен net.
- в любой сфере деятельности есть тяпляповцы и мастера. Первый работает по принципу "и так сойдет", второй никогда не сделает плохо.
- с появлением различных вижулов, облегчающих процесс написания кода, расплодилась туча "программистов". Помните как пинали дельфистов, именно из-за того, что написав парочку "hello world!", растопырив пальцы такие "прогеры" брались за проекты, к-рые рушились/умирали/... не выдержав своего веса(объема). А может, такое размножение - к лучшему (естественный отбор и т.п.)
ПС: мастер он и в Африке мастер. При написании кода, думайте о потомках (что они по нему скажут о вас).
В статье затронуты вечные вопросы что такое хорошо что такое плохо.
Мир меняется в IT очень быстро.
Скажи кому небудь лет 5 назад ,что HARD-диск
200 Гигабайт будет стоить 3000руб.и RAM-оперативная память 512мегабайт стоить 800руб.
То коллеги ПО крутили бы указательным пальцем
у веска.
1.Оптимизация
1.1Правило программиста
Первое
Сначала программируй потоп оптемезируй
Второе
1.2.Работает не трогай
1.3 Правило Microsoft
Если надо быстро купите новый компьютер
Например Xeon2
Если нет денег то заработайте.
2.Гении и творцы.
Все люди живут на земле
Гении и творцы в том числе.
Если Вы подойдете бухгалтеру и спросите
у нее какая OC то она ответит пошел на XY.
Бизнес пользователю по барабану что и как
написано лижбе работало.
Что до оптимизациии... Оптимизация под железо, как мне кажется, - вещь не особо творческая и весьма рутинная, и если делать уж совсем уникальную вещь, можно заодно и железо подоптимизировать. Оптимизировать лучше под повторное использование кода;-). Хотя и тут есть вопросы - если через 5 лет систему выкинут и прошлый код никому не потребуется, то и такая оптимизация не нужна.
Есть еще неприятный для РФ момент - отсутствие отечественных субъектов политики и законодателей моды в области ИТ. У Sun и MS есть большие исследовательские позразделения, в РФ ничего подобного нет, негде заниматься всякими декларативными языками типа пролога и лиспа и прочей програмистской элитарщиной. Все новинки приходят с Запада, русским остается только их применение и тиражирование, нет способа сказать новое слово, это очевидно для тех, кто хочет его сказать, кто любит творить.
Но настоящие творцы не пропали - в новой ситуации они ещё больше выделяются на фоне общей массы (той, которая называется ремесленниками). Другой вопрос в том, что для того, чтобы выделиться из этой массы, нужно (1) изрядно попотеть, (2) иметь нестандартное мышление, а сие есть дар Божий. (Хотя в определённой мере это можно в себе и развить).
А оптимизация (в разумных пределах) - это не столько "справится с этим железо или нет", сколько вопрос хорошего тона и порядочности.
Что касается профессионалов и гениальных программистов, хехе. Ну во первых, назвать программиста гениальным язык не поворачивается, т.к. сейчас для таких людей другие названия - проектировщик, архитектор и т.п., поскольку масштабы систем такие, что самые большие сложности возникают именно при их проектировании и интеграции, а не в написании отдельных алгоритмов и их оптимизации. Опять таки из-за масштабов систем, в создании которых хотят участвовать гениальные разработчики, понятно, что один человек ничего не сможет сделать (ну есть другие примеры. конечно, но их меньше). Поэтому сейчас разработка - это все более коллективная игра. Гениальные программисты (в том смысле, который имеет автор этой статьи), как правило не коллективные люди:(, им очень трудно найти место в разработке и ладить с командой.
Чего действительно жаль, так это гаражной культеры, которая умерла в начале 90-х, когда в домашних условиях создавались те же Макинтоши, PL/1, ФИДО и другие знаковые творения эпохи компьютеров.
Если сослуживцы программируют плохо - показывайте пример, "тыкайте" их носом. Если пишут хорошо - пишите лучше, например так, чтобы Ваш код был сразу понятен и/или легко интергрируем. Освоили эти рубежи - придумайте новые: на то Вы и творцы.
Esli podrobnee, to tak...
Optimizatsia - A est' li v nei smisl? Mozhno napisat' ne sil'no optimizirovanni kod no o4en' poleznii, zhelezo obo vsem pozabotitsia :)
Commercheskii trud - nevozmozhno rabotat' programmerom v firme, i dolgo reshat' zadachi, potomu chto vse dvizhetsia tak bistro, chto esli ne ti to kto to drugoi... A firma ot etogo tol'ko teriaet.
Ne commercheskii trud - redko komu prigozhdaetsia, zachastuu to chto pishetsia odnim krutim programmerom, kotorii pihtit nad svoei progoi, v kontse ostaetsia libo ne dobipanim, po tem ili inim prichinam, libo dopisannim no v predelah ego zhe HDD ili nebol'shoi gruppi ego druzei.
- придираюсь: слово научить не соответствует содержанию статьи, вот ПРИучить - самое то.
И summery:
широкое распространение знания ведёт к неизбежному ухудшению его качества "в среднем", но профессионалы остаются, есть даже гении (всегда и независимо от эпохи).
И если в старые добрые времена профессионал владел большИм, но ограниченным числом Алгоритмов (возможно специфических), то теперь перед ним значительно более трудная задача: освоить абстрактные механизмы Взаимодействия сложных структур.
ИМХО эти категории похожи на начала Математики и на Математический анализ. Специалист обязан владеть и тем и тем в совершенстве. Однако мат анализом пользуются и те, кто не помнит всех фундаментальных аксиом - и, не исключено, именно он совершит новое открытие.
Необходимый уровень и характер знаний определяется поставленными задачами - проф-алгоритмик не всегда хороший современный программист, по крайней мере, не во всех сферах.
Если говорить о задачах оптимизации - испокон веков (ну, годов с 60-х, если судить по статье) - считалось что оптимизация - это оптимизация работы компьютера. Сегодня этот вопрос активно пересматривается (как справедливо заметил автор, в связи с сильно возросшими мощностями). Оптимизация будущего - оптимизация человеческих усилий! как наиболее дорогого и важного ресурса. Звучит, конечно, пафосно, но мысль определяет.
ПС: оч интересно узнать мнение и других уважаемых читателей.
А вообще, после нудной смены - бодрит.