Философия программирования тренировок. Информационный портал по безопасности

Ben Bergeron дважды был участником Crossfit Games, а также имел честь тренировать таких выдающихся атлетов как Chris Spealer (7 раз участник КроссФит Игр, в 2011 году занял 3-е место), Becca Voigt (7 раз участница КроссФит Игр, в 2011 году заняла 3-е место), Heather Bergeron (2 раза участница КроссФит Игр, в 2010 году заняла 8-е место), Michele Letendre (4 раза участница КроссФит Игр, в 2014 году заняла 4-е место), Brian Curley (Чемпион категории Мастер в 2010 году), Lisa Mikkelson (Чемпионка категории Мастер в 2012) и команду КроссФит из штата Новая Англия (Мировые чемпионы в 2011 году, второе место в 2013).

Тренировка таких атлетов позволила мне разработать самые действенные и эффективные программы. В этой статье приведены примеры тренировок, которые лежат в основе создания моего сайта Competitors Training.

Трехглавый монстр

Основная задача – стать этим самым трехглавым монстром. Для того чтобы добиться успехов в КроссФите необходимо развивать три фундаментальных качества: силу, навыки и кондицию. Самое важное одинаково кормить все три головы: то есть, следить за равномерным развитием трех основных качеств каждый день, каждую неделю, каждый месяц. Если атлет чувствует, что какое-то из качеств отстает в развитии (одна голова меньше двух остальных), то нужно работать над ним пока оно не догонит остальные.

Кондиция

Кондиция – это «спорт в фитнесе», фитнес в данном случае означает работоспособность. Атлет должен уметь переносить испытания вне зависимости от сложности

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

поставленной задачи и, несмотря на продолжительность и усилия, которые могу быть затрачены. Многие атлеты среди мужчин могут выполнить 10-20 приседаний со штангой на груди с весом 102 кг, но когда они выполняют 225 приседаний без веса – их пульс доходит до 190 ударов.

Сила

КроссФит любит сильных атлетов. Ниже приведены характеристики участников Crossfit Games 2013. (мужчины/женщины).
Рывок: 259/153 lbs (117/69 кг);
Взятие штанги на грудь и толчок: 319/187 lbs (145/85 кг);
Приседание со штангой на спине: 434/247 lbs (197/112 кг);
Становая тяга: 509/311 lbs (231/141 кг).

Cамым предсказуемым испытанием было CJ Ladder (добавление веса каждые 90 секунд при взятии и толчке). В десятку лучших среди мужчин вошли атлеты, которые закончили испытание со средним результатом 325 lbs (147 кг). Места с 11 по 20 распределились между атлетами с результатом 315 lbs (143 кг), а 21-30 строчки заняли атлеты, результат которых составил 313 lbs (142 кг).

Самое важное одинаково кормить все три головы: то есть, следить за равномерным развитием трех основных качеств каждый день, каждую неделю, каждый месяц.

Последние 15 мест разделили атлеты, чей результат во Взятии и толчке был 295 lbs (134 кг). Иными словами, чем сильнее атлет, тем выше его шансы на успех. Однако, это возможно лишь при наличии и достаточном развитии двух других качеств.

Навыки

Существует лишь несколько качеств, которые могут помочь отличить хорошего атлета от лучшего больше, чем его навыки. Работоспособность и сила необходимы для успеха, но совершенно неважно насколько силен атлет (становая тяга 227 кг) и насколько он вынослив (способен пробежать 5 миль), или сколько бёрпи и махов гирей он в состоянии выполнить. Если атлет неспособен осилить большие сеты выходов на кольцах, отжиманий в стойке на руках, двойных прыжков на скакалке, подтягиваний баттерфляем, то он будет вынужден остановиться там, где заканчивается арсенал его навыков.

От трехглавого монстра к игроку с пятью оружиями

Подвижность

Исходя из названия понятно, что это то качество, которое позволяет двигаться с большей эффективностью и тренироваться в большем объеме.

Моральный настрой

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

Лучшим примером среди атлетов, обладающих всеми 5-ю качествами, конечно же, является Рич Фронинг.

Он обладает всеми оружиями: силой, кондицией, навыками, подвижностью и моральной выносливостью, чтобы соревноваться в чем угодно, где угодно и на любом уровне. Именно этого мы пытаемся достичь.

Примеры программирования

Так строится программирование на сайте Comprtitors Wod, тренировочные программы разделены на несколько групп.

Подготовка к Crossfit Games

Задача атлетов, которые прошли квалификацию на Игры, просто выжить в течение месяцев, недель, дней между Региональными соревнованиями и Играми. Цель тренировочного процесса в данной ситуации подготовить атлета к неизвестному.

Подготовка к Региональным

Такая программа тренировок создается для атлетов, которые уверены, что будут заявлены на Региональные соревнования. Им не следует тратить силы на многократные повторения испытаний The Open, вместо этого лучше начать готовиться к Региональным. В этом процессе следует сфокусироваться на требованиях, выставленных соревнованиями (нагрузка, движения, объем и т.д.). Наша цель в данной ситуации равномерно развивать 5 качеств атлета.

Пример недельного цикла

Понедельник
Первый комплекс:

  1. Рывок с тяжелым весом;
  2. Взятие и толчок с тяжелым весом;
  3. Различные виды приседаний;
  4. Гимнастические упражнения (отжимания, носки к перекладине, выход на кольцах, бурпи, пистолеты и т.д.);

Второй комплекс:

  1. Меткон;
  2. Средняя линия (гиперэкстензия, растяжка (спина, бедра), L-удержания, обратная гиперэкстензия, наклоны со штангой на спине).

Среда
Работа над техникой:

  1. Рывок;
  2. Взятие и толчок;
  3. Приседание;
  4. Гимнастические навыки;
  5. Гребля;

Второй комплекс:

  1. Меткон;
  2. Средняя линия.

Пятница

  1. Работа над техникой рывка (тяга, тяга сумо, взятие штанги на грудь, рывок, наклону со штангой на спине);
  2. Базовые упражнения по 20 или 100 повторений;
  3. Меткон с добавлением инвентаря (гири, мячи, веревки, покрышки, камни, молот, и т.д.);
  4. Гребля;
  5. Работа над средней линией.

Вторник

  1. Спринт или прыжки (челночный бег, спринт на 40-60-100-200м, прыжки на тумбу, прыжки на одной ноге, прыжки в длину);
  2. Тяги (становая, сумо, наклоны со штангой на спине, мертвая тяга, взятие штанги на грудь с пола);
  3. Базовые упражнения по 20 или 100 повторений (взятие, толчок, рывок, тяга, сумо, приседания и выпады со штангой на груди, на спине, над головой);

Четверг
Работа на гибкость/подвижность (йога, разминка роликом, растяжка, статика).
Динамичное восстановление (прогулка, гребля, велоезда, серфинг, скалолазание и т.д.) предпочтительно, на свежем воздухе.
Суббота
(один иди два комплекса)

  1. Бег на длинную дистанцию;
  2. Тяжелая атлетика;
  3. Гимнастические упражнения/Меткон;
  4. Работа над силовыми качествами (подъем таза в положении лежа со штангой, болгарские приседания с гантелями, жим штанги лежа узким хватом, упражнения для трицепсов, упражнения на мышцы задней поверхности ноги).

Воскресенье
День отдыха.

ТА движения : Мы включаем различные приемы рывка, взятия и толчка в нашу тренировочную программу: один раз в неделю с тяжелым весом и второй раз работа над техникой выполнения. Быстрые движения со штангой – это краеугольный камень в соревнованиях по КроссФиту. Существует 100% вероятность того, что одно из тяжелоатлетических движений появится на следующем соревновании, поэтому не нужно жалеть на это времени и сил.
Приседания : очень важны! Каждый атлет преуспевает от того, что становится сильнее, и нет более эффективного упражнения, чем приседания со штангой. Следует выполнять различные виды приседаний 3 раза в неделю с тяжелым и средним весом. Даже с учетом приседаний в метконе, ТА и 20 повторов при базовых упражнениях – это лишь среднее количество приседаний.
20 повторов базовых упражнений : мы будем чередовать движения и менять количество повторений с 20 до 100 дважды в неделю. 20 повторений достаточно, чтобы убедиться в том, что мы развиваем не только максимальную силу. Работа должна быть направлена на тренировку выносливости, стамины и эффективности движений. Да, «100 повторений» звучит просто отвратительно, но во время соревнований атлет начинает вспоминать о них с благодарностью.
Тяги : вся цепь задних мышц является своеобразным двигателем. Крепкие ягодичные мышцы и эректор спины – это место, откуда приходит вся сила. Для их развития необходимо выполнять тягу с пола. Также эти упражнения для формирования устойчивости средней линии, что важно иметь каждому атлету вне зависимости от спорта.
Гимнастика : следует выполнять по 2 гимнастических комплекса в неделю. Один для отработки базовых упражнений и тренировки движений с использованием веса своего тела, а другой для развития навыков, баланса и силы.
Прыжки . Атлеты должны обладать резкостью. Эти плиометрические движения помогут увеличить скорость, координацию, ловкость, добавят резкости при работе со штангой и, в конечном итоге, помогут стать хорошим атлетом. Этому есть хороший пример: при отборе в НФЛ самым важным критерием является вертикальный прыжок.
Меткон : при удачном сочетании двух или трех упражнений можно добиться многого. Следует добавить к этому быстрый темп и многократные повторения и вот атлет уже сильнее и выносливее 90% остальных спортсменов.
Гребля : Концепт 2 восхитительно действенный инструмент для развития работоспособности атлета: как с метаболической точки зрения, так и с позиции выносливости, все это помогает выполнять испытания целиком без пауз. Мой совет всем желающим стать сильнее — больше грести.
Гибкость/Подвижность : пожалуй, самый недооцененный из 10 компонентов в фитнесе. Подвижность (вспоминаются шары для лакросса, роллеры, резинки и т.д.) — это здорово, но не стоит пренебрегать традиционной растяжкой.
Активное восстановление: среда – это не день отдыха. Активный отдых поможет быстрее восстановиться и подготовиться к следующему дню. Занятие вне зала помогают атлету расширить кругозор, а также применить опыт тренировок в реальной среде.
Работа над средней линией : все, что мы делаем, так или иначе, зависит от силы средней линии. При нашей тренировочной программе мы будем заниматься стабилизацией средней линии по субботам, а также во время некоторых гимнастических упражнений по понедельникам и четвергам.
Дни отдыха : следует полностью оградить себя от физической и умственной нагрузки. Это необходимо для того, чтобы оставаться свежим, здоровым и сильным.
Немного об объеме : региональные соревнования требуют от атлета приложить максимум усилий вне зависимости от временного промежутка, веса и упражнения. Наша тренировочная программа в состоянии подготовить атлета ко всему, что может ожидать его на соревнованиях.

Подготовка к The Open

Эта программа специально для атлетов, которые хотят выступить как можно лучше и заработать себе место на Региональных соревнованиях (или в Играх квалификации Мастер). Задача — подготовить спортсменов к требованиям Открытых соревнований (нагрузка, движения, объем и др.)

Понедельник
Меткон;
ТА с тяжелым весом;
Сила.
Вторник
Меткон;
Работа над навыками.
Среда
Меткон;
ТА работа над техникой;
Сила.

Четверг
Отдых.
Пятница
Меткон;
Навыки;
Сила.
Суббота
Меткон.
Воскресенье
Отдых.

Меткон. Открытые соревнования – это в первую очередь проверка объема работы, который атлет в состоянии выполнить в определенный отрезок времени. 100% испытаний за последние 3 года были основаны на проверке кондиционной подготовки. Задача №1 для нас — это создать мощный двигатель. Метконы будут появляться в каждом тренировочном комплексе, так как они помогут реализовать поставленную цель. Метконы будут основаны на выполнении как можно больше повторений за 4-20 минут, а также состоять из движений, которые были на прошлых соревнованиях и которые могут появиться в следующих. Бег, ходьба на руках, гребля, L-подтягивания, гиперэкстензия, отжимания на кольцах популярны в КроссФите и очень эффективны для общей физической подготовки, но вряд ли спортсмены столкнутся с ними на Открытых соревнованиях.
ТА. Пока что на Открытых соревнованиях еще ни разу не было задания на взятие максимального веса, но, так или иначе, следует работать над улучшением ТА навыков. За последние 3 года 36% элементов, подставленных на Открытых соревнованиях, являлись разновидностью рывка, взятия и толчка.
Сила. Чтобы хорошо выступить на Опенах не нужно обладать супер-силой, но бесспорно сила помогает в упражнениях с тяжелым весом. 25% всех упражнений выполняются с использованием среднего или тяжелого веса. Стать сильнее важно, но не в ущерб другим качествам. Не стоит делать цикл, состоящий лишь из силовых упражнений, если задача атлета хорошо выступить на Опенах.
Навыки . Основываясь на опыте прошлых соревнований, очень важно освоить конкретные движения: прыжки на тумбу, двойные прыжки на скакалке, выход на кольцах, носки к перекладине, грудь к перекладине. Конечно, нет никакой гарантии, что эти упражнения появятся снова, но нужно стараться стать в них профи.
Немного об объеме. Чтобы хорошо выступить на Открытых соревнованиях, следует выполнять 1-2 комплекса с максимальной отдачей по 4-20 минут в неделю. Это очень низкие требования по отношению к объему. Если атлет тренируется в большом объеме в надежде пройти отбор на Региональные соревнования, то он окажется за бортом. Вместо этого лучше сосредоточиться интенсивности и качестве тренировки.

Тренировка и практика

Очень важно видеть слабые стороны и работать над ними. Алгоритм действий, используемый для улучшения высоко неврологических движений, таких как двойные прыжки, выход на кольцах и подтягивания бабочкой, очень отличается от алгоритма высоко органических движений, таких как тяги, трастеры и прямые подтягивания.
Лучший способ тренировать неврологическую адаптацию (ловкость, баланс, координацию и точность) это практика. Практика включает в себя работу над навыками, таймингом и качеством выполнения. Практика не должна производиться при мышечной и сердечно-сосудистой нагрузке. Лучше всего проводить практику при равномерном сердцебиении, с малым весом и в обстановке, где можно контролировать технику выполнения.
Самый эффективный способ для развития органической адаптации (сердечно-сосудистая выносливость, сила, стойкость и гибкость) — это тренировка. Тренировка подразумевает интенсивную работу, с учащенным сердцебиением, тяжелым весом и максимальной интенсивностью.
Очень важно определить причину и использовать ее для составления тренировочной программы. Например, если спортсмен не силен в беге из-за слабого метаболизма, то ему следует тренироваться в беге как можно чаще. Если же спортсмен не силен в беге из-за формы выполнения, то бег с максимальной отдачей не даст никаких результатов. Лучше сконцентрироваться на беговых упражнениях. Которые позволят улучшить технику выполнения.

Оригинал статьи http://competitorstraining.com/programming-philosophy/
Перевела Кейних К.

Сергей Трофимов

Последнее время, я часто слышу о том, что философия умерла. Что вместе с эпохой Аристотеля, Гегеля, Бердяева ушла и философия, что сейчас умы людей полностью занимают точные науки, а для философии не осталось места. Но философия это в первую очередь мировоззрение, призма сквозь которую человек воспринимает окружающий мир свое место в этом мире, место среди окружающих его людей. Человечество, получив при помощи технического прогресса новые инструменты изучения окружающего мира одновременно получило и инструменты воздействия на этот мир и самого себя как часть окружающего. Люди остро нуждаются в осмыслении своего места в условиях технического прогресса влияния технических новшеств на самого человека, воспитании осторожного обращения с гигантской силой, данной человечеству техническим прогрессом.

Вступление.

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

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

В широком смысле слова под термином “программирование” понимается составление программ для технических устройств. Здесь будут рассмотрены вопросы составления программ для таких программно-управляемых вычислительных устройств как персональные компьютеры, которые наиболее доступны широкому кругу людей и которые достаточно развиты для так называемого “интеллектуального программирования”. Под термином “интеллектуальное программирование” здесь будет пониматься составление таких программ, которые могут соперничать с человеческим разумом или помогать ему в решении интеллектуальных задач.

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

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

Электронное воплощение человеческой мысли.

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

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

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

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

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

Сначала ЭВМ выполняли только рутинные счетные и поисковые операции, далее программы для ЭВМ становились все более сложными, их логика работы стала приближаться к работе человеческого мозга. Уже сейчас компьютерные программы играют в такие высокоинтеллектуальные игры как шахматы лучше человека. Примером тому служит победа программы “Deep Blue” в шахматном матче против чемпиона мира Гарри Каспарова.

На низшем уровне программа - это собрание миллиардов простых битов информации, нулей и единиц. Вычислительная машина преобразует эти биты информации во внутренний логический алгоритм, который с возрастанием объема программы становится все более сложным. Так же работает человеческий мозг. Его деятельность основана на электрических импульсах, пульсирующих между нейронами, которые преобразуются в мысли и команды человеческим органам. Но есть огромная разница между работой компьютера и человеческого мозга. Программа написана один раз одним или несколькими людьми и запущена в компьютере. А человек изменяет свою “программу” поведения ежесекундно, на одни и те же раздражители он может реагировать по разному, деятельность мозга, постоянно само совершенствующего свою внутреннюю программу не поддается описанию. Именно человеческая мысль вложена в электронные “мозги” четко описанная, разложенная по миллиардами бит информации и больше, чем вложено человеком взяться просто неоткуда. Можно привести простой пример. Программа - это большая книга написанная людьми и совершенно новых страниц, которые никем не написаны, там не будет никогда. Можно добавить несколько новых страниц или даже поручить это сделать компьютеру, но и в таком случае новые страницы будут скомпонованы из того что уже есть внутри “железного ума”.

Программирование - искусство или ремесло?

Человек получает эстетическое удовлетворение, когда создает что-либо своими руками, когда из под рук мастера выходит произведение искусства, которое доставляет удовольствие не только создателю, но и многим десяткам и тысячам людей, заставляет переживать чувства радости, печали, ненависти т.д.Искусство имеет своей задачей раскрывать истину в чувственной форме, в художественном оформленииС этой точки зрения программа тоже может рассматриваться как произведение искусства.

Как только появилось само понятие программирования, у людей стал возникать вопрос: программирование - это искусство или ремесло?

Искусство как эстетическое отображение реальности присутствует и в программе. Программист может моделировать объекты реального мира как он их видит и преобразовывать их по своему усмотрению.Однако просто моделирование объектов реального мира не является достаточным условием создания произведения искусства. Здесь вплотную мы подходим к вопросу, когда собственно некоторая вещь перестает быть простой, утилитарной поделкой и переходит в разряд произведений искусства.

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

Есть своя притягательность и красота в архитектурных ансамблях и даже в механизмах, произведенных человеческим разумом и руками. Не даром не пустеют залы Политехнического музея в Москве, где собраны макеты и “живые” примеры “эволюции” механизмов созданных человеком в разное время и в разных странах.

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

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

Воплощение индивидуума в программе.

Известно философское понятие - отражение человеческого “Я” в деятельности индивидуума. Как и в любой деятельности, программист вкладывает свои знания, опыт, а хороший программист и душу в создаваемую программу. Каждый индивидуум, приобретя какой-то предыдущий опыт, вкладывает его в создаваемые им вещи. И программист не исключение. В программе воплощается его миропонимание и мироощущение. Компьютер становится как бы продолжением человеческого разума. Действуя по заложенной человеком программе компьютер “говорит” вложенными в него человеком словами и на определенные ситуации отвечает так, как ответил бы человек, его программировавший. Написание программы чем-то сродни воспитанию ребенка. Только воспитание проходит всю жизнь, а программирование все-таки имеет ограниченный срок. Также как маленькому ребенку программист объясняет, что компьютер должен делать в той или иной ситуации. Какие будут последствия на его действия и что нужно будет предпринять для изменения таких последствий. И как воспитание ребенка зависит от личности и примера родителей, так и программа зависит от личности программиста. Хороший человек будет вкладывать в компьютер набор действий, которые будут помогать людям в работе, учебе или отдыхе. Безответственный человек будет “учить” компьютер ломать, крушить, разрушать созданные другими людьми знания. Характерным примером может служить неиссякаемый поток так называемых компьютерных вирусов, программ, которые, копируя себя с компьютера на компьютер, разрушающе воздействуют на компьютерные системы, выполняя заложенный в них разрушающий алгоритм.

Влияние программы на личность.

У человека глубоко развито чувство следования авторитетам, следование за лидером. Эта черта развивается с детства, когда лидером для маленького человека являлся каждый взрослый. Все, что говорили взрослые было непреложной истиной, не подвергающейся сомнению. Взрослея, человек начинает критически относиться к окружающему миру и мнениям других людей. Однако этот критический подход во многом зависит от мировоззрения человека, его образования и жизненного опыта. Просматривается определенная закономерность, что к печатному слову человек относится менее критично, чем к живому. Это обусловлено развитием системы образования человека. Большинство научных знаний индивидуум получает через печатные издания. И по большому счету мировоззрение человека формируется именно в процессе учебы. Именно в эти годы закладывается понимание мира и места личности в нем. Формируется система ценностей и авторитетов. Именно в это время глубоко в подсознание закладывается отношение к печатному слову, как к непреложному авторитету. Можно вспомнить еще недавние времена социалистической цензуры, когда вся информация, выдаваемая через печатные издания, была тщательно отфильтрована и причесана для воспитания так называемого “коммунистического мировоззрения”.

Сейчас авторитет печатных изданий во многом утрачен. Учебники истории переписываются с завидной периодичностью. Газеты и журналы печатают такую информацию, которую в некоторых случаях можно смело отнести в разряд мифов и легенд. Однако авторитет утраченный печатными изданиями был тут же подхвачен электронными изданиями. А с развитием глобальной сети Internet перекочевал в нее. Сейчас услышать фразу “я прочитал в Интернете...” можно услышать чаще, чем “я был в библиотеке...”. Мне лично знакомы люди, обычно старшего поколения, безоговорочно верящего всему, что “сказал” компьютер. Этим широко пользуются недобросовестные торговцы. Еще недавно в самом центре Москвы можно было встретить бизнесмена с переносным компьютером, который за некоторую сумму “спрашивал” у вычислительной машины астрологический прогноз или что-нибудь в этом роде. И выдавал отпечатанные тут же прогнозы. А если присмотреться к рекламным роликам, которые крутятся на телевидении, то трудно не заметить, что в каждом втором из них компьютер играет роль советчика в использовании той или иной вещи. Образ человека в белом халате, нажимающего кнопку компьютера, на экране которого какие-то графики, просто кочует из ролика в ролик.

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

В последнее время в полной мере заявила о себе проблема непонимания истинной ценности вещей и истинных последствий своих действий. А компьютерные программы наряду с низкопробными фильмами, которые нельзя даже назвать художественными, вносят в эту проблему свой не самый маленький вклад. Особенно сильно влияние “электронного гуру” на неокрепшие души подростков. Огромное количество компьютерных программ пропагандируют насилие. Игры, где подростки управляют кровавой битвой все чаще переносятся в действительность. Подросток еще не может понять, что в компьютерной игре можно с размаха ударить противника ногой без всяких последствий, но тоже действие перенесенное в реальную жизнь может привести к трагедии. Подростки не понимают реальных последствий своих действий, они переносятся в виртуальный мир, где все не настоящее, они получают опыт, который нельзя применить на практике, у них формируется искривленное понимание окружающего мира. И чем более реалистично выполнена “виртуальная реальность”, тем тяжелее вернуться в реальный мир, с его реальными проблемами и объективными законами, не перевернутыми электронной техникой. В среде подростков существует такой термин “зависнуть”, который применим в том числе и к игрокам в компьютерные игры. В этом контексте он означает, что человек настолько погружается в “виртуальный” мир, что перестает ощущать объективную реальность, и не может оторваться от монитора, пока не “пройдет” всю игру до конца.

Это состояние сродни запою у взрослых. Ощущение то же. Человек погружается в сюрреалистический мир фантазий и вывести его оттуда довольно трудно.

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

В рассказе Рея Брэдбери “Вельд” живо обыграна именно такая ситуация. Еще до изобретения такого типа электронных игрушек гениальный писатель изобразил последствия подмены истинных ценностей на электронную модель. В этом произведении дети жестоко расправились со своими родителями только за то, что они “убили” голографическое изображение, выключив питание экрана. Здесь я не призываю полностью отказаться от электронных вещей и программ и перейти в каменный век, но к этим вещам необходимо подходить достаточно серьезно, чтобы не допустить пагубного влияния программ на неокрепшую психику.

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

Жизнь электронной мысли (мыслят ли компьютеры).

В создании любой вещи рано или поздно наступает момент, когда ее создатель “положит последний мазок”, когда он решит, что сделал все, что мог и пора отправлять свое произведение в “большую жизнь”. И с этого момента программа начинает жить самостоятельной жизнью, независимо от своего создателя. Здесь возникает такое понятие как “искусственный интеллект” , которое напрямую связана с понятием “мышление” и “мозг”. Известно, что электронно-вычислительную машину часто называют “электронным мозгом”. Тогда, проведя аналогию между человеческим мозгом и его мыслями, можно назвать программу “электронной мыслью” именно электронного мозга. Рассмотрим само понятие “мозг” и может ли оно применяться к электронно-вычислительной машине. Естественно, внешне человеческий мозг и компьютер не имеют ничего общего, однако можно найти сходство в деятельности данных объектов.

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

Просматривается прямая аналогия между деятельностью человеческого мозга и работой программы электронно-вычислительной машины. При ее работе используются электрические импульсы, проходящие через миллионы транзисторов (аналогично импульсам проходящим через нейроны). Человеческий мозг также чист при рождении ребенка, как компьютер без программы. Взрослея, человек набирается знаний, так и компьютер получая более сложную программу, “умнеет”. Компьютерные программы уже превосходят человека в такой абстрактной игре как шахматы. Могут выполнять как рутинную работу, так и интеллектуальную, подсказывая человеку, например при проектировании чего либо, готовые решения, выполняя роль экспертов. Но можно ли назвать этот процесс мышлением? Ведь мышление это активный процесс отражения объективного мира в понятиях, суждениях, теориях и т.п. ,связанный с решением тех или иных задач.

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

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

Морально - этические проблемы программирования.

Термин “компьютерные вирусы” прочно вошел в нашу жизнь. Любой человек, хотя бы немного знакомый с современными компьютерами, слышал это словосочетание, а кто-то и сталкивался непосредственно с его разрушительными воздействиями. Итак, что же такое “компьютерные вирусы”? Это программы, которые своими действиями нарушают работу других программ, разрушают данные, не дают возможности пользователям компьютера нормально работать. Причем такие программы могут копировать себя с компьютера на компьютер, чтобы захватывать все новые территории для своих “черных дел”.

Если это программа, написанная человеком, то возникает резонный вопрос: кто составляет такие программы? Такой человек должен обладать некоторыми навыками в обращении с компьютерами, особенно в написании программ . Он должен иметь доступ к компьютеру. У него должна быть причина для распространения вируса. Безусловно, миллионы людей обладают навыками, достаточными для того чтобы преднамеренно или случайно написать программу-вирус. Любой студент, изучающий программирование, и множество сообразительных подростков способны на это.

Конечно и специалисты по программированию могут создать программы-вирусы. Но они ценят свой труд и, прежде чем взяться за дело, постараются найти более простой и менее рискованный способ достижения свой цели. Сейчас принят закон, который за умышленную порчу компьютерных данных предусматривает наказание, вплоть до уголовного (статья 273 УК). А компьютерная программа - это воплощение своего создателя, его мыслей и разума. Конечно, если вирус пишет террорист или шпион сопредельного государства, то даже угроза уголовного наказания его не остановит, однако большинство вирусов, как показала практика, написаны вовсе не террористами в полном смысле этого слова, а людьми, которым не дает покоя слава Герострата, варварами, которые не ищут выгоды от своих действий. Они хотят продемонстрировать свое умственное превосходство, показать, что они умеют делать то, чего не умеют другие, причем они вполне работоспособны, но, вместе с тем, маются от безделья . Эти люди из тех, кто бьет стекла, поджигает лифты, обливает кислотой картины в музеях. Ими движет противоречивое желание. С одной стороны они хотят продемонстрировать свое превосходство над другими людьми, а с другой стороны чисто хулиганские, варварские побуждения сделать что-нибудь гаденькое. Если такой человек обладает необходимыми навыками, он может написать компьютерный вирус.

Здесь возникает известная проблема, если взять пример Раскольникова. Топор не убивает, убивает человек. Так и компьютерный вирус, созданный человеком, несет в своем теле злой умысел программиста.

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

Заключение.

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

Список литературы

Философские вопросы кибернетики М. СОЦЭГИЗ 1961 –392с.

Кибернетика. Мышление. Жизнь М. Мысль 1964. – 511с.

Корецкий С. Искусственный интеллект – миф или реальность? Hard’n’Soft #2 1999.

Сеченов И.М. Рефлексы головного мозга. 1863.

Искусство и научно-технический прогресс. М. 1973–461с.

Соловьев В.С. Философия искусства и литературная критика. М Искусство 1991 – 699с.

Выжлецов Г.П.Эстетика в системе философского знания.ЛГУ 1983

Гегель "Эстетика" в 4-х томах, Москва, 1969 г.

Крутова О.Н. Мораль: сознание и поведение. Ин-т философии М.Наука 1986 –207с.

Панцурин В.А. Внутренний мир личности и искусство. Свердловск 1990 –212с.

Файтс Ф. Джонстоун П. Кратс М. Компьютерный вирус: проблемы и прогноз: Пер. С англ. - М. Мир, 1994.- 176с. ил.

Достоевский Ф.М. Преступление и наказание. М. 1974. 542с.

Бодалев А.А. Популярная психология для родителей. М. :Педагогика, 1988 - 256 с.

Брэдбери Р. О скитаниях вечных и о Земле: -М.:Правда, 1987.-656 с., ил.

Мы привыкли к быстрому доступу к информации и столь же быстрому её поглощению. Мы предпочитаем пятиминутные ролики глубоким лекциям и коротенькие статьи - книгам. Не буду утверждать, что хорошая книга по программированию заменит любую статью, это не так. И уж точно она не заменит практику. Тем не менее, лично ко мне настоящее понимание основ программирования пришло после того, как я, прорешав сотни задач на курсе программирования и прочитав тонну статей, начал параллельно изучать теорию по книгам и хорошо так в них углубился. Я довольно долго искал свой персональный «лучший учебник по Java для начинающих». Ниже - несколько книг, которые мне пригодились в большей или меньшей степени на разных этапах учёбы. «Для самых маленьких» Следующие две книги можно начинать читать на старте учёбы, параллельно с видео или, если учитесь на JavaRush, - вместе с первыми уровнями. Они, особенно первая, подходят людям с нулевым программистским прошлым.

Head First Java

Я начал с этой книги не потому, что она мне больше всего нравится, а потому, что она самая простая. Эта книга, по мнению очень многих программистов, - лучший самоучитель Java с нуля. Причём она по-настоящему и совсем «с нуля», то есть подходит тем, кто только-только начинает и не совсем понимает ещё, что за зверь такой - программирование. Ко мне она попала слишком поздно. Думаю, именно поэтому я не смог её оценить по достоинству. «Просто читать» её было очень приятно, а вот искать что-то конкретное в ней мне приходилось подолгу. Материал там подан живо, но довольно поверхностно (потому что с нуля!) и многих тем и нужных пояснений попросту нет. А вот мой друг, которому она ушла по наследству, был от нее в восторге и кричал, что это не просто лучший учебник по Java для начинающих, а прям мировой шедевр и именно так нужно подавать сложный материал. Достоинства:
  • Лучший самоучитель Java с нуля, для полных чайников, написан живым языком;
  • Прикольные иллюстрации и юмор;
  • Пояснения с жизненными примерами.
Недостатки:
  • Многовато «воды» для тех, кто уже въехал в тему;
  • Не всегда удачные паззлы и упражнения.

Герберт Шилдт. Java 8. Руководство для начинающих

Полистав этот учебник, я подумал, что он хорошо подойдёт тем, кому нравится более традиционное изложение материала, нежели в Headfirst, и при этом они ищут самоучитель «с нуля». Местами изложение в книге очень детальное, напоминает расширенную и переведённую документацию с хорошими наглядными примерами. Иногда, как по мне, автор переходит границу, и начинает слишком уж разжевывать, читать становиться скучновато… и вдруг - кульбит - и какое-то довольно сложное место проскакивается почти мгновенно, и ты в полном недоумении пытаешься понять, что и где пропустил. Тем не менее, таких мест в книге не слишком много, и я знаю людей, которые считают, что «Руководство для начинающих» - лучший самоучитель Java для тех, кто ещё ничего не знает. Лично мне он показался не очень ровным. Скажем, начинаю разбирать коллекции, и вместо человеческого пояснения мне подсовывают задачу по самостоятельному созданию Set на основе массивов. Классная задача, но я бы хотел для начала лучше понять, что такое стандартные коллекции! Хотя эта книга, как и предыдущая, считается учебником для начинающих, мой опыт преподавателя подсказывает, что она хороша только в совокупности с другими материалами: гуманитарию-свитчеру будет не всё просто и понятно. Лучше всего "Руководство для начинающих" подойдёт тому, кто худо-бедно учил программирование (например, в универе), давным-давно на него забил, и при этом ему нравится стиль изложения автора. Достоинства:
  • Традиционное вдумчивое изложение основ;
  • Хорошие примеры.
Недостатки:
  • Есть «прыжки» от «слишком разжевано» до «мельком сказано»;
  • Местами скучновато.
Кстати, у Герберта Шилдта есть ещё одна известная книга по программированию - «Java 8. Полное руководство». Это совсем другой учебник, более фундаментальный. К нему и переходим. Справочники и расширенные руководства Книги из этого раздела пригодятся тем, кто уже ввязался в по полной и ищет книги для лучшего понимания теории и практики.

Герберт Шилдт «Java 8. Полное руководство»

Эту книгу я решил загрузить из интернета, чтобы оценить, а потом - купить или не купить. Шутка ли, 1300 страниц текста! Ну и цена впечатляет не меньше объема. Точно так же я поступил и с двухтомником «Библиотека профессионала» Кея Хорстманна (о ней - ниже). Забегая наперед скажу, что я остановил свой выбор на второй. Почему? Потому что в книге «Java. Полное руководство» я узрел те же недостатки, что и в «Руководстве для начинающих». Иногда разжевано, иногда - скомкано, но при этом не просто скомкано, а как-то многословно скомкано. Вероятно, это - авторский стиль и, думаю, кому-то он будет по нраву, а точнее - по мышлению. В целом «Java 8. Полное руководство» - это неплохой справочник по Java. Но лично мне изложение тех же самых тем больше понравилось в другой книге. Достоинства:
  • Полное руководство. Кажется, там есть все темы, которые нужно знать новичку, и не только новичку.
  • Подробные пояснения.
Недостатки:
  • Много воды (но это кому-то может нравиться!);
  • Русский перевод не лучший.

Java. Библиотека профессионала, Кей С. Хорстманн, Гари Корнелл

Книги Шилдта и Хорстманна часто сравнивают друг с другом. И у той, и у другой есть преданные поклонники. Для меня именно двухтомник Хорстманна - лучший учебник по Java. Он же стал для меня настольной книгой на начальных и средних уровнях JavaRush. Когда я не понимал какую-то тему, в основном лез именно в Хорстманна, и тот многое прояснял. В книге рассматривается всё - от синтаксиса до многопоточного программирования, локализации приложений и работы с XML. И пусть вас не пугает название «Библиотека профессионала» (меня именно оно и отпугнуло), основы тут разобраны довольно хорошо. Кроме того, её полезно периодически перечитывать, чтобы освежить и упорядочить знания. Говорят, даже профессионалы находят в ней что-то полезное для себя… Не знаю. Стану профессионалом - расскажу! Достоинства:
  • При впечатляющем количестве страниц - мало воды (в отличие от Шилдта).
  • Содержит всё, что нужно новичкам.
  • Раскрывает Java 8.
  • Хорошая подача тем по коллекциям и дженерикам.
  • Очень хорошо сочетается с JavaRush. Доходите до темы, решаете задачки, в какой-то момент что-то не понимаете - смотрите Хорстманна, пробуете снова.
Недостатки:
  • Кому-то может показаться, что книга суховата;
  • Нет практики;
  • Русский перевод с ляпами.

«Java. Методы программирования». Блинов, Романчик

Когда-то я вычитал на форуме, что есть такая книга «Промышленное программирование», и в ней неплохие задачи. Оказалось - не соврали. Я нашёл её копию в PDF на сайте белорусского EPAM’а. Там издание не самое новое (по Java 6), а написана книга как основательный университетский учебник, то есть местами изложение несколько тяжеловесное, академическое. НО! Там действительно очень хороший сборник задач по программированию на Java, а также тестовые задания. Говорят, по этой книге учатся стажёры EPAM, а также её взяли на вооружение многие оффлайновые курсы по Java.

Там подход к задачам немного не такой, как у JavaRush, то есть, в среднем тут задачи чуть сложнее и каждая из них - что-то вроде… не мини, но микро-проекта. Так что рекомендую даже студентам JavaRush, так как недостатком практической стороны курса я считаю то, что все задачи в нём уже полностью спроектированы и есть слишком много подсказок. Скажем, задачи на ООП из этого сборника помогли мне очень неплохо разобраться в этом самом ООП наряду с книгами «неувядающей классики», о которых я пишу ниже. Книга написана как бы для будущих «гребцов», поэтому в ней описаны технологии Hibernate для разработки распределённых систем, а также основы HTML, XML, JavaScript. «Промышленное программирование» - если не лучший самоучитель Java, то очень неплохое учебное пособие. Но к ней нужно приходить уже подготовленным. Скажем, после десятка-другого уровней JavaRush. Позднее я обнаружил её более новое и переработанное издание, уже под именем «Java. Методы программирования ».

Достоинства:
  • Отличная подборка задач и тестовых заданий;
  • Есть официальная бесплатная версия (я полагаю, что она официальная, поскольку лежит не на каком-нибудь рутрекере, а на сайте EPAM);
  • Сравнение с С++.
  • Возможность понять, что проходят на стажировке EPAM.
Недостатки:
  • Слишком фундаментальное изложение. Но для повторения с практикой - подойдёт.
  • Нет Java 8.
Неувядающая классика Книги, о которых я пишу ниже можно назвать священными текстами для начинающих и продолжающих «джавистов».

Effective Java, Джошуа Блох

Это просто сокровище, а не книга, и посвящена она базовым принципам языка от одного из его авторов Джошуа Блоха. Скорее всего, вы уже пользовались его библиотеками (в Java Collection, например). Сразу оговорюсь: полнейшим новичкам, кроме каких-нибудь вундеркиндов-спидлёрнеров книга Effective Java не нужна. Сначала лучше усвоить синтаксис, и получить хоть какую-то практику программирования, так сказать, «набить шишки», а затем уже - браться за творение Джошуа Блоха. Книга пригодится тем, кто хочет по-настоящему понимать Java, сформировать правильный подход при программировании на этом языке, понять не только как нужно делать, но прочему нужно делать именно так. А ещё тем, кто хочет глубоко познать ООП (в принципе, это взаимосвязанные вещи). Эта книга - лучший учебник по Java в разрезе объектно-ориентированного подхода к программированию. Достоинства
  • Блестящее изложение материала по теме ООП.
  • Приведены лучшие практики программирования.
  • Автор очень хорошо знает Java изнутри.
Недостатки
  • Пока что отсутствует перевод самого нового издания книги (третьего).

Философия Java, Брюс Эккель

Название этой книги говорит само за себя. Это ещё одна «альфа и омега» для всех, кто хочет знать Java! В этой книге вы найдёте хорошие и внятные примеры, и из них будет понятно, как работает Java. Мне сложно сказать, какая из двух книг - «Философия Java» или «Эффективное программирование» - лучше. Я бы сказал, что Эккель несколько лояльнее к новичкам, в то время как Блох требует какого-никакого опыта. Впервые я прочитал главу из «Философии Java», когда только начинал учиться на JavaRush (кажется, на одном из ранних уровней она значилась в рекомендованных). Тогда она мне не пошла. Зато после 10 или 12 уровня - это была песня! И, я скажу, очень полезная песня. Я возвращался к ней и позже, уже когда пришёл к «Эффективному программированию». Скажу так: Блох и Эккель пускай говорят об одном и том же, но по-разному, и примеры приводят разные. Достоинства
  • Глубокое изложение принципов Java от профессионала;
  • Хорошо зайдет тем, кто переходит с других языков - много сравнений с С++, например.
  • Как мне кажется, её можно начинать читать уровня с 10-го, а вот Эккеля - чуть позднее.
Недостатки
  • Очень неудачные русские переводы;
  • Отсутствие нового издания книги на русском.

Краткие выводы

  1. Лучший самоучитель Java с нуля для тех, кто совсем ничего не знает - Head First Java;
  2. Лучший справочник-учебник по Java и настольная книга - «Библиотека профессионала». И, конечно, документация Oracle.
  3. Лучший сборник задач по программированию на Java - JavaRush. Ну а среди книг - «Java. Методы программирования».
  4. Лучшая неувядающая классика - «Философия Java» и «Effective Java». Это must read для всех, кто решил разобраться во всем по-настоящему, для глубокого понимания. Но лучше их читать постепенно и с расстановкой.
  5. Дополнительный вывод: есть возможность - читайте на английском. Русские переводы в основном очень слабые.

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

Здесь и далее я буду рассматривать общекнижный пример с сотрудниками предприятия, писать будем на чем-то СИ-подобном. Наследовать класс Сотрудник (Employee) от класса Человек (Person) – прекрасная идея, особенно если хранить данные исключительно в памяти: SQL имеет некоторые проблемы с наследованием таблиц, но речь не об этом - ООП со своим иерархизмом, агрегациями, композициями и наследованиями предлагает идеальный способ организации данных. Проблемы с методами.

За каждым методом бизнес-логики стоит факт мира, который этот метод (чаще не в одиночку) моделирует. Факты программирования – это операции: дальше будем называть их так. Делая метод членом класса, ООП требует от нас привязать операцию к объекту, что невозможно, потому что операция – это взаимодействие объектов (двух и более), кроме случая унарной операции, чистой рефлексии. Метод ВыдатьЗарплату (PaySalary) может быть отнесен к классам Сотрудник (Employee), Касса (Cash), БанковскийСчет (Account) – все они равнозначны в праве владения им. Дилемма о расположении методов сопутствует всему процессу разработки: неловкое ее разрешение может оказаться критичным и даже фатальным.

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

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


В 2015 году вы могли заметить перемены в способе разработки приложений на JavaScript. Разработчики уходят от непредсказуемой архитектуры с мутабельным состоянием в сторону более предсказуемой иммутабельной архитектуры приложений .

С такими фреймворками как Backbone, было принято синхронизировать сами данные и представление данных – для этого приходилось вручную подписываться на нужные события dom. Такой способ был подвержен ошибкам и вынуждал использовать слишком много типового кода. Пришел Angular и исправил это с помощью автоматизированного двустороннего биндинга.

Но сейчас все движется в другом направлении.

… но это нормально. Любое проектирование отстой. И всегда будет отстоем.

Если вы мне не верите, давайте объясню…

Ни один проект не переживает встречи с реализацией

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

Данные, которые вы ожидали как обязательные в ответе внешнего сервиса, могут отсутствовать (или быть невалидными). Ожидаемая уникальность может оказаться совсем не уникальной на практике (даже в sha1 когда-нибудь случаются коллизии). Процессы, которые предполагались надежными, будут падать гораздо чаще, чем вы ожидали.

Это нормально.

В некоторых случаях вы можете просто затаймаутиться, выкинуть исключение или еще как-нибудь громко упасть. В других случаях приходится ослабить требования системы. Или добавлять дополнительный фильтрующий слой, который займется «очисткой» и передаст в систему уже правильный вариант входных данных.

Недостающие данные могут быть сделаны опциональными или заменены умолчальными.

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

Ограничение уникальности можно

Еще по ходу чтения мне вспомнился Эдсгер Дейкстра с его знаменитой фразой: «Я денно и нощно молю, чтобы как можно больше моих собратьев-программистов нашли способ освободиться от проклятья совместимости» («I pray daily that more of my fellow-programmers may find the means of freeing themselves from the curse of compatibility») из книги Смиренный программист (1972 sic!!!). А позже и Эрик Реймонд с своим Собором и Базаром (1997 год). Но текст Винджа не только о проклятье совместимости, на трех страничках поднят (и в общем то оставлен без ответов) целый пласт вопросов:

  1. Проблема совместимости в широком смысле;
  2. Проблема поддержки старого кода;
  3. Проблема зависимости человеческой жизни «от бесчувственных роботов» (с), к чему мы стремительно приближаемся;
  4. Проблема data mining`а вообще и поиска готового решения в бездонной бочке рецептов в частности (github, stack overflow?);
  5. Проблема «переписывания» старого кода (и плохого, и хорошего) - этот момент так и хочется перечитывать:);
  6. Проблема необъятности ИТ-технологий. Иногда говорят, что последний универсальный физик жил в середине пошлого века, имея ввиду Льва Ландау. Похоже сейчас наступает (или уже наступило) время, когда найти универсального программиста таки уже невозможно;
  7. В тексте нет слова хакер, ни в позитивной, ни в негативной коннотации. Но написано и об исследователях, и о тех преимуществах, которые можно получить зная те или иные backdoor`ы и о том, какую власть это может дать.
  8. и наверное это не все… :)

Складывается впечатление, что писал это человек, на своей шкуре прочувствовавший эти самые проблемы.
Хочу отметить, что «Глубина в небе» была написана в 1999 году, когда многое из того, о чем пишет Виндж еще не было проблемой, или вообще только показалось на горизонте.

В качестве критики хочется отметить, что Виндж прошел мимо ИИ (и сильного и слабого, вообще мимо пробежал, даже нейронные сети не затронул) и свел преимущества ИТ к производительности. Так же в тексте не ощущается присутствие мегакорпораций (хотя конечно «Глубина в небе» не относится к киберпанку), если не считать Кенг-Хо таковой. Нет патентных войн, не затронуты вопрос копирайта и проблема закрытых проприетарных разработок, исходные коды к которым так и не были опубликованы.

Не о программировании, но о стандартах

Дальше в той же главе затронут интереснейший вопрос галактического вещания с целью распространения собственных технологий. Зачем? Стандартизация. Распространение собственного языка и собственных стандартов и технологий, что позволит с одной стороны подтянуть отсталые цивилизации до приемлемого для торговли уровня, а с другой снизить затраты на коммуникацию и обеспечение совместимости и как следствие облегчит торговлю и повысит маржинальность. Интересно, знал ли Виндж на момент написания книги о стандартизации корабельной оснастки английского флота времен великих завоеваний, позволившей снизить затраты на ремонт и обслуживание? А о распространении английского языка в качестве делового, научного и т.д.? Англичане учили (заставляли учить?) местных аборигенов своему языку. Аналогично поступали испанцы и французы. И сейчас английский, испанский, французский, португальский имеют очень широкое распространение. А вот голландцы считали, что аборигенов не нужно учить своему языку. Много ли мест на земном шаре, где говорят на голландском кроме самой Голландии?
Сейчас обучение английскому поставлено на поток по всему миру. Использование стандартизированных методик и учебников, стандартизированных экзаменов и шкал оценок. Только ли частный бизнес?

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

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

Разница между продуктом и проектом в том, что при разработке продукта есть план, а при разработке проекта есть исследования. Если у вас есть какая-то не решённая проблема, скажем вы ещё не решили какую базу данных использовать в своём проекте, то вам понадобится этот вопрос изучать, то есть исследовать. Это называется technology research. Исследование, это вовсе не обязательно, что-то совершенно новое в мировом масштабе, если вы строите мост, то вам надо исследовать грунт в данном конкретном месте, и пока этот грунт не исследован, мост, как продукт, ещё не существует, пока что это - проект. Ещё не известно, какой грунт, а значит не известно из чего делать мост, как его укреплять, невозможно посчитать бюджет и распланировать график работ.

Кто умеет копировать, тот умеет ДЕЛАТЬ. Это сказал Леонардо да Винчи. Видите ли, вы исходите из своих представлений, о том, что такое ХР, винда, операционка. Люди как рассуждают:

Мне было ещё мало лет у меня стояла ХР, вот были золотые деньки, но тепереча не то, что давеча. Новые времена, современное ПО. Не понимаю, зачем копаться в старье? Вы бы хоть делали клон десятой винды, но куда с вашей то скоростью, вы его сделаете лет через 100.

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

Дмитрий Якушев

«Философия»

программирования на языке С++

издание второе, дополненное и исправленное

УДК 004.43 ББК 32.973.202

Якушев Д. М.

Я49 «Философия» программирования на языке С++. / Д. М. Яку шев. - 2 е изд. - М.: Бук пресс, 2006. - 320 с.

ISBN 5 9643 0028 6

Автором языка C++ является Бьерн Страуструп, сотрудник известной фирмы AT&T. C++ (а точнее, его предшественник, С with classes) был создан под влиянием языка Simula (надо сказать, что этот язык программирования появился еще в 1967 году). Собственно, к тому моменту, когда появился C++, С уже заработал себе популярность; профессиональные программисты уважа ют его за возможность использовать преимущества конкретной архитектуры, создавая при этом программы на языке относительно высокого уровня.

В настоящее время C++ - один из самых популярных (если не самый популярный) языков программирования. Именно С++ позволяет написать программу с использованием объектно ориентированных подходов (а про граммы, которые этого требуют, обычно очень большие) и при этом достаточ но «быструю».

Эта книга познакомит читателя с «философией» и основами програм мирования на языке С++. В книге приводится множество примеров, скомпи лированных и проверенных автором.

УДК 004.43 ББК 32.973.202

Часть 1.

Глава 1. С++ - язык программирования общего назначения. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3

Глава 2. Лексика. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 Глава 3. Синтаксис. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 Глава 4. Область видимости. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 Глава 5. Определения. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 Глава 6. Компоновка. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 Глава 7. Классы памяти. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 Глава 8. Основные типы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 Глава 9. Производные типы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14 Глава 10. Объекты и LVALUE (адреса) . . . . . . . . . . . . . . . . . . . . . . . . .15 Глава 11. Символы и целые. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 Глава 12. Преобразования. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17 Глава 13. Выражения и операции. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 Глава 14. Описания. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 Глава 15. Спецификаторы класса памяти. . . . . . . . . . . . . . . . . . . . . .31 Глава 16. Описатели. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34 Глава 17. Описания классов. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39 Глава 18. Инициализация. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51 Глава 19. Перегруженные имена функций. . . . . . . . . . . . . . . . . . . . .58 Глава 20. Описание перечисления. . . . . . . . . . . . . . . . . . . . . . . . . . . . .59 Глава 21. Описание Asм. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60 Глава 22. Операторы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61 Глава 23. Внешние определения. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66

Глава 24. Командные строки компилятора. . . . . . . . . . . . . . . . . . . . .68 Глава 25. Обзор типов. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70 Глава 26. Соображения мобильности. . . . . . . . . . . . . . . . . . . . . . . . . .75 Глава 27. Свободная память. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76

Часть 2. Турбо С++

Глава 1. Интегрированная среда разработки. . . . . . . . . . . . . . . . . . . .78 Глава 2. Строка меню и меню. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 Глава 3. Окна TURBO C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 Глава 4. Работа с экранным меню. . . . . . . . . . . . . . . . . . . . . . . . . . . . .80

Глава 5. Структура файла, типы данных и операторов ввода вывода. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87

Глава 6. Арифметические, логические операции и операции отношения и присваивания. . . . . . . . . . . . . . . . . . . . . . .91

Глава 7. Логическая организация программы и простейшее использование функций. . . . . . . . . . . . . . . . . . . . . . . . . .95

Глава 8. Логическая организация простой программы. . . . . . . . . . .95 Глава 9. Использование констант различных типов. . . . . . . . . . . . .96 Глава 10. Управляющие структуры. . . . . . . . . . . . . . . . . . . . . . . . . . . .98

Глава 11. Приемы объявления и обращения к массивам, использование функций и директивы define

при работе с массивами. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100

Часть 3. От теории к практике

Глава 1. Правило «право лево» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103 Глава 2. STLport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104 Глава 3. Язык программирования от Microsoft: C# . . . . . . . . . . . . . .106 Глава 4. C++ Builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108 Глава 5. Применение «умных» указателей. . . . . . . . . . . . . . . . . . . . . .111 Глава 6. Рассуждения на тему «умных» указателей. . . . . . . . . . . . . .116 Глава 7. Виртуальные деструкторы. . . . . . . . . . . . . . . . . . . . . . . . . . . .122 Глава 8. Запись структур данных в двоичные файлы. . . . . . . . . . . .126

Глава 9. Оператор безусловного перехода goto . . . . . . . . . . . . . . . . . .132 Глава 10. Виртуальный конструктор. . . . . . . . . . . . . . . . . . . . . . . . . . .136 Глава 11. Чтение исходных текстов. . . . . . . . . . . . . . . . . . . . . . . . . . . .141 Глава 12. Функция gets() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143 Глава 13. Свойства. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146 Глава 14. Комментарии. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149 Глава 15. Веб программирование. . . . . . . . . . . . . . . . . . . . . . . . . . . . .154 Глава 16. Ошибки работы с памятью. . . . . . . . . . . . . . . . . . . . . . . . . .158 Глава 17. Создание графиков с помощью ploticus . . . . . . . . . . . . . . .161 Глава 18. Автоматизация и моторизация приложения. . . . . . . . . . .164 Глава 19. Обзор C/C++ компиляторов EMX и Watcom . . . . . . . . . .183 Глава 20. Использование директивы #import . . . . . . . . . . . . . . . . . . .188

Глава 21. Создание системных ловушек

Windows на Borland C++ Builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204 Вопросы и ответы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214

Н а у ч н о п о п у л я р н о е и з д а н и е

Якушев Дмитрий Михайлович

«ФИЛОСОФИЯ» ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ С++

Главный редактор Б. К. Леонтьев

Шеф редактор А. Г. Бенеташвили

Оригинал макет И. В. Царик

Художник О. К. Алехин

Художественный редактор М. Л. Мишин Технический редакторК. В. Шапиро

Корректоры Л. С. Зимина, К. В. Толкачева

Подписано в печать 07.05.2006. Формат 60x90/16. Гарнитура «Ньютон». Бумага офсетная. Печать офсетная. Печ. л. 20. Тираж 3000.

Введение в язык программирования С++

Часть 1. Введение в язык

программирования С++

С++ - язык программирования общего назначения

Автором языка C++ является Бъерн Страуструп, сотрудник изве стной фирмы AT&T. C++ (а точнее, его предшественник, С with classes) был создан под влиянием Simula (надо сказать, что этот язык программи рования появился еще в 1967 году). Собственно, к тому моменту (когда появлялся C++), С уже заработал себе популярность; обычно, его очень уважают за возможность использовать возможности конкретной архи тектуры, при этом все еще используя язык относительно высокого уров ня. Правда, обычно, именно за это его и не любят. Конечно же, при этом терялись (или извращались) некоторые положения построения про грамм; например, в С фактически отсутствует возможность создавать модульные программы. Нет, их конечно же создают, но при помощи не которых «костылей» в виде использования директив препроцессора - такой модульности, как, например в Modula 2 или Ada, в С нет. Кстати сказать, этого нет до сих пор и в C++.

С самого начала подчеркивалось то, что C++ - развитие языка Си, возможно, некоторый его диалект. Об этом говорит тот факт, что первым компилятором (существующим до сих пор) являлся cfront , кото рый занимался тем, что переводил исходный текст на C++ в исходный текст на Си. Это мнение бытует до сих пор и, надо сказать, до сих пор оно является небезосновательным; тем не менее, С и C++ - разные языки программирования.

Основное отличие C++, когда он только появлялся, была явная поддержка объектно ориентированного подхода к программированию. Надо понимать, что программировать с использованием ООП и ООА можно где угодно, даже если инструментарий явно его не поддерживает; в качестве примера можно взять библиотеку пользовательского интер

Введение в язык программирования С++

фейса GTK+, которая написана на «чистом» С и использованием прин ципов объектно ориентированного «дизайна». Введение в язык про граммирования средств для поддержки ООП означает то, что на стадии компиляции (а не на стадии выполнения программы) будет производит ся проверка совместимости типов, наличия методов и т.п. В принципе, это достаточно удобно.

Опять же, точно так же как и С не является в чистом виде языком программирования высокого уровня (из за того, что позволяет выпол нить слишком много трюков), C++, строго говоря, не является объект но ориентированным языком программирования. Мешают этому такие его особенности, как наличие виртуальных функций (потому что при разговоре о полиморфизме никто никогда не оговаривает того, что неко торые методы будут участвовать в нем, а некоторые - нет), присутствие до сих пор функции main() и т.п. Кроме того, в C++ нет таких сущностей, как, например, метаклассы (хотя они, наверное, не так уж сильно и нуж ны) и интерфейсы (вместо них используется множественное наследова ние). Тем не менее, C++ на текущий момент один из самых популярных (если не самый популярный) язык программирования. Почему? Да пото му что все эти «уродства» позволяют в итоге написать программу с ис пользованием объектно ориентированных подходов (а программы, ко торые этого требуют, обычно очень большие) и при этом достаточно «быструю». Этому способствует именно наличие виртуальных функций (т.е., то, что программист сам разделяет еще во время проектирования, где ему понадобится полиморфизм, а где будет достаточно объединить некоторые функции в группу по некоторому признаку), обязательное на личие оптимизатора и прочее. Все это позволяет при грамотном исполь зовании все таки написать работающую программу. Правда, достаточно часто встречаются примеры неграмотного использования, в результате чего выбор C++ для реализации проекта превращается в пытку для про граммистов и руководства.

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

Бесспорно правильное со всех сторон новшество. Наличие, наконец то, стандартных способов переносимо (имеется в виду, с компилятора на компилятор) отсортировать список (кроме написания всех соответству ющих подпрограмм и структур данных самостоятельно) очень сильно облегчило жизнь программиста. Правда, до сих пор очень много людей плохо себе представляют как устроена STL и как ей пользоваться (кроме std::cin иstd::cout ).

Введение в язык программирования С++

Важной вехой в развитии программирования явилось создание и широкое распространение языка С++. Этот язык, сохранив средства ставшего общепризнанным стандартом для написания системных и при кладных программ языка С (процедурно ориентированный язык), ввел в

практику программирования возможности нового технологического подхода к разработке программного обеспечения, получившего название «объектно ориентированное программирование».

Язык программирования C++ - этоC* , расширенный введением классов,inline функций, перегруженных операций, перегруженных имен функций, константных типов, ссылок, операций управления сво бодной памятью, проверки параметров функций.

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

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

С++ является языком программирования общего назначения. Именно этот язык хорошо известен своей эффективностью, экономич ностью, и переносимостью.

Указанные преимущества С++ обеспечивают хорошее качество разработки почти любого вида программного продукта.

Использование С++ в качестве инструментального языка позво ляет получать быстрые и компактные программы. Во многих случаях программы, написанные наС++ , сравнимы по скорости с программами, написанными на языке ассемблера.

Перечислим некоторые существенные особенности языка С++ :

С++ обеспечивает полный набор операторов структурного программирования;

С++ предлагает необычно большой набор операций;

Введение в язык программирования С++

Разнообразие операций позволяет выбирать их различные наборы для минимизации результирующего кода;

С++ поддерживает указатели на переменные и функции;

Указатель на объект программы соответствует машинному адресу этого объекта;

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

С++ поддерживает арифметику указателей, и тем самым позволяет осуществлять непосредственный доступ и манипуляции с адресами памяти.

Глава 2. Лексика

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

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

Комментарии

Символы /* задают начало комментария, заканчивающегося сим волами*/ . Комментарии не могут быть вложенными.

Символы // начинают комментарий, который заканчивается в конце строки, на которой они появились.

Идентификаторы (имена)

Многие операции С++ соответствуют машинным командам и поэтому допускают прямую трансляцию в машинный код;

Идентификатор - последовательность букв и цифр произвольной длины; первый символ обязан быть буквой; подчерк "_" считается за бук ву; буквы в верхнем и нижнем регистрах являются различными.

Идентификаторы signed иvolatile зарезервированы для примене ния в будущем.

Константы

Есть несколько видов констант. Ниже приводится краткая сводка аппаратных характеристик, которые влияют на их размеры.

Целые константы

Целая константа, состоящая из последовательности цифр, счита ется восьмеричной, если она начинается с 0 (цифры ноль), и десятичной в противном случае. Цифры 8 и 9 не являются восьмеричными цифрами.

Последовательность цифр, которой предшествует 0х или0Х , вос принимается как шестнадцатеричное целое.

В шестнадцатеричные цифры входят буквы от а илиА доf илиF , имеющие значения от 10 до 15.

Десятичная константа, значение которой превышает наибольшее машинное целое со знаком, считается длинной (long ); восьмеричная и шестнадцатеричная константа, значение которой превышает наиболь

Введение в язык программирования С++

шее машинное целое со знаком, считается long ; в остальных случаях це лые константы считаютсяint .

Явно заданные длинные константы

Десятичная, восьмеричная или шестнадцатеричная константа, за которой непосредственно стоит l (латинская буква «эль») илиL , считает ся длинной константой.

Символьные константы

Символьная константа состоит из символа, заключенного в оди ночные кавычки (апострофы), как, например, "х" . Значением символь ной константы является численное значение символа в машинном набо ре символов (алфавите).

Символьные константы считаются данными типа int . Некоторые неграфические символы, одиночная кавычка" и обратная косая\ , могут быть представлены в соответствие со следующим спискомescape после довательностей:

символ новой строки NL(LF)

горизонтальная табуляция NT

вертикальная табуляция VT

возврат на шаг BS

возврат каретки CR

перевод формата FF

обратная косая \

одиночная кавычка (апостроф) "

набор битов 0ddd

набор битов 0xddd

Escape последовательность\ddd состоит из обратной косой, за ко торой следуют 1, 2 или 3 восьмеричных цифры, задающие значение тре буемого символа. Специальным случаем такой конструкции является\0 (не следует ни одной цифры), задающая пустой символNULL .

Escape последовательность\xddd состоит из обратной косой, за которой следуют 1, 2 или 3 шестнадцатеричных цифры, задающие значе ние требуемого символа. Если следующий за обратной косой символ не является одним из перечисленных, то обратная косая игнорируется.

Введение в язык программирования С++

Константы с плавающей точкой

Константа с плавающей точкой состоит из целой части, десятич ной точки, мантиссы, е илиЕ и целого показателя степени (возможно, но не обязательно, со знаком). Целая часть и мантисса обе состоят из после довательности цифр. Целая часть или мантисса (но не обе сразу) может быть опущена; или десятичная точка, илие (Е) вместе с целым показате лем степени (но не обе части одновременно) может быть опущена. Кон станта с плавающей точкой имеет типdouble .

Перечислимые константы

Имена, описанные как перечислители, являются константами ти

па int .

Описанные константы

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

Строка есть последовательность символов, заключенная в двой ные кавычки: «...» . Строка имеет типмассив символов и класс памятиstatic , она инициализируется заданными символами.

Компилятор располагает в конце каждой строки нулевой (пустой) байт \0 с тем, чтобы сканирующая строку программа могла найти ее ко нец.

В строке перед символом двойной кавычки " обязательно должен стоять\ ; кроме того, могут использоваться те жеescape последователь ности, что были описаны для символьных констант.

И, наконец, символ новой строки может появляться только сразу после \ ; тогда оба, -\ и символ новой строки, - игнорируются.

Глава 3. Синтаксис

Запись синтаксиса

По синтаксическим правилам записи синтаксические категории выделяются курсивом, а литеральные слова и символы шрифтом посто янной ширины.

Введение в язык программирования С++

Альтернативные категории записываются на разных строках. Не обязательный терминальный или нетерминальный символ обозначается нижним индексом «opt», так что {выражение opt} указывает на необяза тельность выражения в фигурных скобках.

Имена и типы

Имя обозначает (денотирует) объект, функцию, тип, значение или метку. Имя вводится в программе описанием. Имя может использовать ся только внутри области текста программы, называемой его областью видимости. Имя имеет тип, определяющий его использование.

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

Область видимости

Есть четыре вида областей видимости: локальная, файл, програм ма и класс.

Локальная

Имя, описанное в блоке, локально в этом блоке и может исполь зоваться только в нем после места описания и в охватываемых блоках.

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

в самом внешнем блоке этой функции.

Имя, описанное вне любого блока или класса, может использо ваться в файле, где оно описано, после места описания.

Имя члена класса локально для его класса и может использовать ся только в функции члене этого класса, после примененной к объекту его класса операции, или после примененной к указателю на объект его класса операции > .

На статические члены класса и функции члены можно также ссы латься с помощью операции :: там, где имя их класса находится в облас ти видимости.

Введение в язык программирования С++

Класс, описанный внутри класса, не считается членом, и его имя принадлежит охватывающей области видимости.

Имя может быть скрыто посредством явного описания того же имени в блоке или классе. Имя в блоке или классе может быть скрыто только именем, описанным в охватываемом блоке или классе.

Скрытое нелокальное имя также может использоваться, когда его область видимости указана операцией :: .

Имя класса, скрытое именем, которое не является именем типа, все равно может использоваться, если перед ним стоит class ,struct илиunion . Имя перечисленияenum , скрытое именем, которое не является именем типа, все равно может использоваться, если перед ним стоитenum .

Глава 5. Определения

Описание является определением, за исключением тех случаев, когда оно описывает функции, не задавая тела функции, когда оно со держит спецификатор extern (1) и в нем нет инициализатора или тела функции, или когда оно является описанием класса.

Глава 6. Компоновка

Имя в файловой области видимости, не описанное явно как static , является общим для каждого файла многофайловой программы. Тако вым же является имя функции. О таких именах говорится, что они внеш ние.

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

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

Введение в язык программирования С++

Во всех остальных случаях должно быть ровно одно определение для внешнего имени в программе.

Реализация может потребовать, чтобы составное const , использо ванное там, где не встречено никакого определенияconst , должно быть явно описаноextern и иметь в программе ровно одно определение. Это же ограничение может налагаться наinline функции.

Глава 7. Классы памяти

Есть два описываемых класса памяти:

автоматический

статический.

Автоматические объекты локальны для каждого вызова блока и сбрасываются по выходе из него.

Статические объекты существуют и сохраняют свое значение в те чение выполнения всей программы.

Некоторые объекты не связаны с именами и их времена жизни яв но управляются операторами new иdelete .

Глава 8. Основные типы

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

В настоящий момент имеются целые трех размеров, описываемые как short int ,int иlong int . Более длинные целые (long int ) предоставляют не меньше памяти, чем более короткие целые (short int ), но при реализа ции или длинные, или короткие, или и те и другие могут стать эквива лентными обычным целым.

«Обычные» целые имеют естественный размер, задаваемый архи тектурой центральной машины; остальные размеры делаются такими, чтобы они отвечали специальным потребностям.

Введение в язык программирования С++

Каждое перечисление является набором именованных констант. Свойства enum идентичны свойствамint . Целые без знака, описываемые какunsigned , подчиняются правилам арифметики по модулю2n , гдеn - число бит в их представлении.

Числа с плавающей точкой одинарной (float ) и двойной (double ) точности в некоторых машинных реализациях могут быть синонимами.

Поскольку объекты перечисленных выше типов вполне можно интерпретировать как числа, мы будем говорить о них как об арифмети ческих типах.

Типы char ,int всех размеров иenum будут собирательно называть ся целыми типами. Типыfloat иdouble будут собирательно называться плавающими типами.

Тип данных void (пустой) определяет пустое множество значений. Значение (несуществующее) объектаvoid нельзя использовать никаким образом, не могут применяться ни явное, ни неявное преобразования.

Поскольку пустое выражение обозначает несуществующее значе ние, такое выражение такое выражение может использоваться только как оператор выражение или как левый операнд в выражении с запятой. Выражение может явно преобразовываться к типу void .

Глава 9. Производные типы

Кроме основных арифметических типов концептуально сущест вует бесконечно много производных типов, сконструированных из ос новных типов следующим образом:

массивы объектов данного типа;

функции, получающие аргументы данного типа и возвращающие объекты данного типа;

указатели на объекты данного типа;

константы, являющиеся значениями данного типа;

Введение в язык программирования С++

структуры, являющиеся классами без ограничений доступа;

объединения, являющиеся структурами, которые могут в разное время содержать объекты разных типов.

В целом эти способы конструирования объектов могут приме няться рекурсивно.

Объект типа void* (указатель наvoid ) можно использовать для ука зания на объекты неизвестного типа.

Объекты и LVALUE (адреса)

Объект есть область памяти; lvalue (адрес) есть выражение, ссыла ющееся на объект. Очевидный пример адресного выражения - имя объ екта.

Есть операции, дающие адресные выражения: например, если Е - выражение типа указатель, то*Е - адресное выражение, ссылающееся на объект, на который указываетЕ .

Термин «lvalue» происходит из выражения присваиванияЕ1=Е2 , в котором левый операндЕ1 должен быть адресным (value ) выражением.

Ниже при обсуждении каждого оператора указывается, требует ли он адресные операнды и возвращает ли он адресное значение.

Глава 11. Символы и целые

Символ или короткое целое могут использоваться, если может ис пользоваться целое. Во всех случаях значение преобразуется к целому.

Преобразование короткого целого к длинному всегда включает в себя знаковое расширение; целые являются величинами со знаком. Со держат символы знаковый разряд или нет, является машинно зависи мым. Более явный тип unsigned char ограничивает изменение значения от 0 до машинно зависимого максимума.

В машинах, где символы рассматриваются как имеющие знак (знаковые), символы множества кода ASCII являются положительными.

Введение в язык программирования С++

Однако, символьная константа, заданная восьмеричной esc по следовательностью подвергается знаковому расширению и может стать отрицательным числом; так например,"\377" имеет значение1 .

Когда длинное целое преобразуется в короткое или в char , оно урезается влево; избыточные биты просто теряются.

Float и doublе

Для выражений float могут выполняться действия арифметики с плавающей точкой одинарной точности. Преобразования между числа ми одинарной и двойной точности выполняются настолько математиче ски корректно, насколько позволяет аппаратура.

Плавающие и целые

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

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

Указатели и целые

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

Можно производить вычитание над двумя указателями на объек ты одного типа; в этом случае результат преобразуется к типу int илиlong в зависимости от машины.

Всегда при сочетании целого без знака и обычного целого обыч ное целое преобразуется к типу unsigned и результат имеет типunsigned .

Значением является наименьшее целое без знака, равное целому со знаком (mod 2** (размер слова)) (т.е. по модулю2** (размер слова)). В дополнительном двоичном представлении это преобразование является пустым, и никаких реальных изменений в двоичном представлении не происходит.



Похожие статьи

© 2024 parki48.ru. Строим каркасный дом. Ландшафтный дизайн. Строительство. Фундамент.