Задаваясь вопросом, что же такое качественная разработка и профессиональный подход в области программирования я пришел к выводу, что существует только одна среда и один подход создающий единственно верное направление. В этот микс входит один язык программирования и методы разработки используемые при создании такой системы.
В этой небольшой заметке я опускают рассмотрение всего множества языков, инструментов и подходов, ссылаясь на них одним словом. Поэтому я не претендую на полный анализ и выкладки по всему возможнному спектру решений в случае "правильной системы". Возможно вы сможтете предложить на аналогичных со мной рассуждениях свой язык и свою платформу покзав что она ничуть не уступает моему варианту. Я только рад буду это услышать! Это покажет вас как специалиста знающего свой инструмент и я буду рад разместить здесь ссылку.
Для того чтобы понять логику рассуждений давайте подробней изучим все составляющие нашей системы. Я постораюсь показать свое видение а вы оценить мои наблюдения.
Прежде всего часть нашей системы это инструмент которым мы собираемся записывать наши логические конструкции. В этом мире свободных мыслей и течений вы без труда назовете сотню-другую таких инструментов и имя им: языки программирования.
Существуют логические, функциональные и командные способы описания ваших логических конструкций и алгоритмов которые вы закладываете в код. Поэтому одной из составляющей нашей системы будет язык программирования и его набор синтаксисических правил.
Так как наш язык это только способ выражения наших алгоритмов нам необходимо упросить жизнь и создать набор библиотек с множеством готовых решений приминительно к нашему языку и среде. И следовательно мы получаем вторую важную компоненту предпологаемой идеальной ситемы: библиотеки.
Следовательно, что бы быть профессиональным программистом и владеть системой, которую вы создаете вы должны ловко оперировать языкым инструментом и знать где взять уже готовые решения тех задач, которые вы должны решить. Для того чтобы не изобретать велосипед вы изучаете документацию и гуляете по безграничным просторам интернета (для тех кто думает что интернет не безграничный я прямо сейчас могу написать скрипт который будет генерировать каждый раз новое содержимое на основании хотя бы одного параметра - текущего времени) и читаете статьи на википедии. После долгих путешествий вы находите, что некоторые библиотеки работают лучше в том случае если их использовать в соотвествии с некоторыми ограничениями накладываемыми средой. Например, вы узнаете что выделять и удалять память в некоторых системах не эффективно. Узнаете, что вновь созданный буфер нельзя удалять другой библиотекой. Или что создание специфичного алгоритма использующего кеш процессора для некоторых систем, выгодней на системах с большой нагрузкой. Следовательно вы узнаете что применение ваших знаний по языку и синтаксису целиком и полностью зависит от условий в которых ваша программа выполняется - среды выполнения.
За более чем приличный срок работы с комьпютерыми системами вы будете неприрывно сталкиваться с понятиями передачи данных между частями системы. Тем самым это будет входить в привычную для операцию с пакетами даных или событиями. Вы не чаянно создаете более удобное для вашей работы и более легкого восприятия коллеками термины которые в точности описывают те или иные процессы по передачи последовательности бит с одной системы в другую. Так вы рождаете различные устоявшиеся правила и слова евенты, подписка на события, датаграмм пакеты, другими словами - архитектурные решения. То же называемое современным языком и имеющие старые корни - дизайн паттерн.
Если вы не будете прыгать от системы к системе не вникая в суть процесса, то без труда заметите, что все архитекрутные решения целиком и полностью зависят от среды исполнения и вы понимаете, и их эффективная работа зависит от вашего правильного их выбора в каждом конкретном случае.
Итак что у нас получилось:
Язык это:
- синтаксис
- библиотеки
- среда выполнения
Программирование это:
- язык
- архитектурные решения
, где:
Синтаксис - это язык и его правила определния функций\методов\переменных\классов
Библиотеки - это набор готовы алгоритмов и правил обработки данных
Среда выполнения - это механизмы выделения памяти (куча), преобразования кода в операции процессора и оптимизация этих процессов, ассмеблер, байткод и оптимизация обектных файлов, сетевые особенности транспорта данных, работа с переферийными устройствами (общая область памяти, регистры и пулинг)
Арихтектурные решения - это шаблоны проектирования, транспортный уровень, алгоритмы.
Хорошее професионал это: человек полноценно владеющий языком программирования на уровне чтобы его код и его архитектурные решения эффективно исполнялись целевой среде исполнения.
Из чего следует, что самая эффективная конструкция может быть создана только на шаблонном С++. Так как в результате инстанциации шаблона создается то самое единственное и уникальное понятие идеального объекта, который в свою очередь оптимизируется компилятором в объектном файле для конкретного процессора.
А это означает, что будущее за С++ и его парадигмами, которые не усыпно копируют все современные направления и клоны этого единственно верного языка!
вторник, 17 февраля 2009 г.
Подписаться на:
Комментарии к сообщению (Atom)


0 коммент.:
Отправить комментарий