Філософія програмування тренувань. Інформаційний портал з безпеки

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 фунтів (117/69 кг);
Взяття штанги на груди та поштовх: 319/187 lbs (145/85 кг);
Присідання зі штангою на спині: 434/247 фунтів (197/112 кг);
Станова тяга: 509/311 фунтів (231/141 кг).

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

Найважливіше однаково годувати всі три голови: тобто, стежити за рівномірним розвитком трьох основних якостей щодня, щотижня, щомісяця.

Останні 15 місць розділили атлети, чий результат у Взятті та поштовху був 295 фунтів (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 перекочував до неї. Зараз почути фразу "я прочитав в Інтернеті..." можна почути частіше, ніж "я був у бібліотеці...". Мені особисто знайомі люди, зазвичай старшого покоління, що беззастережно вірить усьому, що “сказав” комп'ютер. Цим широко користуються недобросовісні торговці. Ще нещодавно в самому центрі Москви можна було зустріти бізнесмена з переносним комп'ютером, який за деяку суму запитував у обчислювальної машини астрологічний прогнозабо щось у цьому роді. І видавав надруковані тут же прогнози. А якщо придивитися до рекламних роликів, які крутяться на телебаченні, то важко не помітити, що в кожному другому з них комп'ютер відіграє роль порадника у використанні тієї чи іншої речі. Образ людини в білому халаті, що натискає кнопку комп'ютера, на екрані якогось якісь графіки, просто кочує з ролика в ролик.

Ця віра людей у ​​непогрішність обчислювальної машини ґрунтується також на внутрішньому страху перед незрозумілим. Адже все, що робить комп'ютер приховано від сторонніх очей, десь глибоко в темних переплетеннях джгутів проводів і павуків мікросхем з незрозумілими написами. І лише на екрані зненацька виникають написи, поради, готові рецепти на всі випадки життя. Люди бояться свого нерозуміння, всієї цієї складної конструкціїі тому вірять у її непогрішність.

Останнім часом повною мірою заявила про себе проблема нерозуміння справжньої цінності речей та справжніх наслідків своїх дій. А комп'ютерні програми поряд із низькопробними фільмами, які не можна навіть назвати мистецькими, вносять у цю проблему свій не найменший внесок. Особливо сильний вплив "електронного гуру" на незміцнілі душі підлітків. Безліч комп'ютерних програм пропагують насильство. Ігри, де підлітки керують кривавою битвою, все частіше переносяться в дійсність. Підліток ще не може зрозуміти, що в комп'ютерній грі можна з розмаху вдарити супротивника ногою без жодних наслідків, але також дія перенесена в реальне життяможе призвести до трагедії. Підлітки не розуміють реальних наслідків своїх дій, вони переносяться у віртуальний світ, де все не справжнє, вони набувають досвіду, який не можна застосувати на практиці, у них формується викривлене розуміння навколишнього світу. І що більш реалістично виконана “віртуальна реальність”, то важче повернутися в реальний світ, з його реальними проблемами та об'єктивними законами, не перевернутими електронною технікою. У середовищі підлітків існує такий термін "зависнути", який застосовується навіть до гравців в комп'ютерні ігри. У цьому контексті він означає, що людина настільки занурюється у “віртуальний” світ, що перестає відчувати об'єктивну реальність, і не може відірватися від монітора, доки не “пройде” всю гру до кінця.

Цей стан схожий на запою у дорослих. Відчуття те саме. Людина поринає у сюрреалістичний світ фантазій і вивести його звідти досить важко.

Часто людина втрачає розуміння істинних цінностей і перестає адекватно сприймати навколишню дійсність у зв'язку з цим. Прикладом такої втрати цінностей може бути ті, хто отримав широке поширенняНині звані “тамагочі” - електронні звірята. "Тамагочі" є невеликим електронним брелоком з екраном і кількома кнопками, за допомогою яких можна керувати закладеною в цей пристрій програмою. Програма зроблена за таким алгоритмом, що при її роботі складається враження, що цей пристрій живий. Його потрібно електронним чином "годувати", грати з ним, "лікувати" тощо. при правильній послідовності звернення "тамагочі" "зростає" і "щасливий", при неправильній послідовності він може "захворіти" або "померти". Таким чином програма не припиняє своєї роботи ні вдень, ні вночі, створюючи враження, що “тамагочі” живе. Дорослі з уже усталеними поглядами розуміють, що це не більше, ніж електронна іграшка, але діти ще не можуть відрізнити живі істоти від електронної моделі. Це приходить із життєвим досвідом. Адже відомо, що за розвитку дитини існує період одухотворення неживих речей, що з віком минає. Але така електронна іграшка "поводиться" як жива, що ускладнює правильну оцінку дитиною її одухотвореності. Відомий випадок, коли дитина вдарила свого молодшого брата, за те, що вона "вбила" "тамагочі", причому такі випадки не поодинокі. Таким чином спочатку здавалося б непогана ідея прищеплювати дитині почуття турботи про ближнього, виростає зрештою у перекіс поглядів та усунення життєвих цінностей. Зрештою, я не підміняв би живу істоту, про яку можна піклуватися і виховувати в дітях любов до ближнього, на електронний сурогат.

У розповіді Рея Бредбері "Вельд" швидко обіграно саме така ситуація. Ще до винаходу такого типу електронних іграшок геніальний письменник зобразив наслідки заміни дійсних цінностей на електронну модель. У цьому творі діти жорстоко розправилися зі своїми батьками лише через те, що вони “вбили” голографічне зображення, вимкнувши живлення екрану. Тут я не закликаю повністю відмовитися від електронних речей і програм і перейти в кам'яний вік, але до цих речей необхідно підходити досить серйозно, щоб не допустити згубного впливу програм на психіку, що не зміцніла.

Цікаво, що програми безпосередньо впливають як на “споживачів” електронної продукції але на “виробників” тобто. програмістів. Програміст звикає думати машинними категоріями та перекладає їх на оточуючих. Навіть зовнішній вигляд стає легко пізнаваним. Якщо ви бачите перед собою худого, мовчазного очкарика з колами від безсонної ночі під очима, то з високою ймовірністю можна припустити, що це затятий комп'ютерник. Програміст при досить довгому спілкуванні з машиною набуває особливого розуму. Він звик давати точні відповіді на питання, як він це робить під час написання програм. Відома стара історія з розряду анекдотів. На вулиці один перехожий запитує у іншого “Цей автобус іде до вокзалу?” - "Так.", перехожий не знав, що його співрозмовник - програміст, який точно відповів на поставлене запитання, але замовк, що до того, як автобус дійде до вокзалу, він спочатку доїде до кінцевої, зробить коло і тільки потім піде в потрібному напрямку. . Якби перехожий поставив питання "Як проїхати до вокзалу?" і ще уточнив би, що його цікавить найбільш оптимальний шлях, то отримав би відповідь, що необхідно перейти вулицю сісти в автобус такий номер і проїхати дві зупинки. Але те, що в звичному житті здається смішним просто необхідно при спілкуванні з електронною машиною. Їй необхідні точні інструкції щодо виконання тих чи інших операцій і наскільки точно програміст може сформулювати покроковий алгоритмдій, залежить його кваліфікація. Цікаво, що військові досягають певних висот у програмуванні. Це можна пояснити тим, що військових вчать віддавати точні розпорядження та керувати великими людськими групами, суворо розділяючи повноваження та роботу між членами групи. Цю техніку можна поширити на комп'ютерні програми, коли необхідно точно описати алгоритм роботи кожної частини програми, взаємодія її різних частин.

Життя електронної думки (чи комп'ютери мислять).

У створенні будь-якої речі рано чи пізно настає момент, коли її творець "покладе останній мазок", коли він вирішить, що зробив усе, що міг і настав час відправляти свій твір у "велике життя". І з цього моменту програма починає жити самостійним життям незалежно від свого творця. Тут виникає таке поняття як "штучний інтелект", яке безпосередньо пов'язане з поняттям "мислення" та "мозок". Відомо, що електронно-обчислювальну машину часто називають "електронним мозком". Тоді, провівши аналогію між людським мозком та його думками, можна назвати програму "електронною думкою" саме електронного мозку. Розглянемо саме поняття "мозок" і чи може воно застосовуватись до електронно-обчислювальної машини. Звісно, ​​зовні людський мозок і комп'ютер немає нічого спільного, проте можна знайти подібність у діяльності даних об'єктів.

У працях Павлова М.Г. , Сєченова І.М була доведена рефлекторна діяльність людського мозку У людини засвоєння форм діяльності, що історично склалися, відбувається в процесі індивідуального розвитку людини. Тому такі спеціальні людські здібності як мовленнєвий і музичний слух, здатність до абстрактного мислення є функціями нейродинамічних мозкових структур, що мають відносну стійкість. p align="justify"> Процес психічної діяльності людей пов'язаний з розвитком форм людського досвіду, його зберігання, передачі та переробки.

Проглядається пряма аналогія між діяльністю людського мозку та роботою програми електронно-обчислювальної машини. При її роботі використовуються електричні імпульси, що проходять через мільйони транзисторів (аналогічно імпульсам, що проходять через нейрони). Людський мозок також чистий при народженні дитини як комп'ютер без програми. Зростаючи, людина набирається знань, і комп'ютер одержуючи складнішу програму, “розумніє”. Комп'ютерні програми вже перевершують людину в такій абстрактній грі як шахи. Можуть виконувати як рутинну роботу, так і інтелектуальну, підказуючи людині, наприклад при проектуванні чогось готові рішення, виконуючи роль експертів. Але чи можна назвати цей процес мисленням? Адже мислення це активний процес відображення об'єктивного світу у поняттях, судженнях, теоріях тощо. , Пов'язаний з вирішенням тих чи інших завдань.

Є цікавий приклад із серії так званих систем самонавчання. Ці системи на основі проб та помилок отримують інформацію про правильне рішення і надалі використовують її для ухвалення рішення в аналогічних ситуаціях. Програма зберігає у своїй пам'яті ситуації у яких відбувалися помилки і вибудовує алгоритм подальших дій те щоб ці ситуації виникали з найменшою ймовірністю. Ці системи можуть бути побудовані на суто механічних принципах і логічних законах. Можна сказати, що ці системи "пізнають" світ, але чи можуть вони робити висновки, висновки, виводити теорії? Безперечно ні. Отримавши якийсь “досвід” ці системи у тій ситуації приймуть правильне рішення, але якщо ситуації відрізняється навіть трохи від тієї, у якій вони побували, це поставить систему в глухий кут. У таких систем немає можливості абстрагуватися від конкретної ситуації, немає можливості до аналізу і яка б хороша програма для ЕОМ була лише вибирає рішення з допомогою логіки з набору закладених ситуацій, і якщо ситуація комп'ютеру не знайома це призведе до збою.

Таким чином, можна з упевненістю сказати, що на даному етапі розвитку ЕОМ програми, а отже, і комп'ютери мислити не можуть.

Морально – етичні проблеми програмування.

Термін "комп'ютерні віруси" міцно увійшов у наше життя. Будь-яка людина, хоча б трохи знайома з сучасними комп'ютерами, чула це словосполучення, а хтось і стикався безпосередньо з його руйнівними впливами. Отже, що таке “комп'ютерні віруси”? Це програми, які своїми діями порушують роботу інших програм, руйнують дані, не дозволяють користувачам комп'ютера нормально працювати. Причому такі програми можуть копіювати себе з комп'ютера на комп'ютер, щоб захоплювати нові території для своїх “чорних справ”.

Якщо це програма, написана людиною, виникає резонне питання: хто складає такі програми? Така людина повинна мати деякі навички у поводженні з комп'ютерами, особливо в написанні програм. Він повинен мати доступ до комп'ютера. У нього має бути причина поширення вірусу. Безумовно, мільйони людей мають навички, достатні для того, щоб навмисно або випадково написати програму-вірус. Будь-який студент, який вивчає програмування, та безліч кмітливих підлітків здатні на це.

Звичайно, і фахівці з програмування можуть створити програми-віруси. Але вони цінують свою працю і, перш ніж взятися за справу, намагатимуться знайти простіший і менш ризикований спосіб досягнення своєї мети. Наразі прийнято закон, який за навмисне псування комп'ютерних даних передбачає покарання, аж до кримінального (стаття 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 колись трапляються колізії). Процеси, які передбачалися надійними, будуть падати набагато частіше, ніж ви очікували.

Це нормально.

У деяких випадках ви можете просто затаймаутитися, викинути виняток або ще якось голосно впасти. В інших випадках доводиться послабити вимоги системи. Або додавати додатковий шар, що фільтрує, який займеться «очищенням» і передасть в систему вже правильний варіант вхідних даних.

Дані можуть бути зроблені опціональними або замінені умовчальними.

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

Обмеження унікальності можна

Ще під час читання мені згадався Едсгер Дейкстра з його знаменитою фразою: «Я вдень і вночі благаю, щоб якомога більше моїх побратимів-програмістів знайшли спосіб звільнитися від прокляття сумісності». 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++ (а точніше, його попередник, 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Х, сприймається як шістнадцяткове ціле.

У шістнадцяткові цифри входять літери від або A до 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. Будуємо каркасний будинок. Ландшафтний дизайн. Будівництво. Фундамент.