80021

Специфіка розробки програмного забезпечення

Реферат

Информатика, кибернетика и программирование

Творчість в програмуванні починається з визначення цілей програми і закінчується тільки тоді, коли в її вихідному коді, написаному на якій-небудь мові програмування, поставлена остання крапка з комою. Спроби розділяти програмістів на творчу еліту, архітекторів і проектувальників, і нетворчих програмістів-кодерів не мають під собою підгрунття

Украинкский

2017-02-21

55.5 KB

3 чел.

Специфіка розробки програмного забезпечення

Будь-яку діяльність людини можна віднести до одного з двох видів.Репродуктивнадіяльність (праця) є відтворенням, копією з діяльності іншої людини або копією своєї власної діяльності з освоєного попереднього досвіду. Така діяльність, як, наприклад, праця токаря в будь-якому механічному цеху, або рутинна повсякденна діяльність менеджера-управлінця на рівні раз і назавжди засвоєних технологій.Продуктивнадіяльність (творчість) - діяльність, направлена на отримання об'єктивно нового або суб'єктивно нового (для даної людини) результату.

У програмуванні немає місця для репродуктивної діяльності. Після третього повторення однотипної дії програміст пише утиліту, яка цю дію автоматизує раз і назавжди. Ф. Брукс більше 30-ти років тому написав: «Програміст, подібно до поета, працює майже безпосередньо з чистою думкою. Він будує свої замки в повітрі і з повітря, творить силою уяви. Важко знайти інший матеріал, що використовується в творчості, який такий же гнучкий, простий для шліфовки або переробки і доступний для втілення грандіозних задумів». Деякі психологи, які працюють з програмістами, йдуть далі і навіть стверджують, що «програмування - це вища форма творчості».

Творчість в програмуванні починається з визначення цілей програми і закінчується тільки тоді, коли в її вихідному коді, написаному на якій-небудь мові програмування, поставлена остання крапка з комою. Спроби розділяти програмістів на творчу еліту, архітекторів і проектувальників, і нетворчих програмістів-кодерів не мають під собою підгрунття. Навіть якщо алгоритм програми математично строго визначений, два різних програміста його закодують по-різному, і отримана програма матиме різні характеристики продуктивності та якості.

Творчість - це отримання нового результату. Саме тому, програмування було, є і залишиться в найближчому майбутньому творчою діяльністю. Яка частка нових результатів і творчості в проектах розробки програмного забезпечення? Конкретних таких даних немає, але є така думка, що дуже велика. Опосередковано про це свідчать висока невизначеність при розробці програмних систем, велика різниця в продуктивності різних програмістів і частка провальних програмних проектів, яка, за різними оцінками, складає від 70% до 80%. Існуючий стан програмної інженерії можна порівняти з великою куховарською книгою з численними описами рецептів одного разу успішно приготованих страв з інгредієнтів, яких у вас ніколи в майбутньому не буде, оскільки вже завтра будуть інші обчислювальні машини, технології, мови програмування, інструменти і базове ПЗ, нові проблеми взаємодії з якими знову обов'язково доведеться вирішувати.

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

Однак, програмування це не мистецтво, в тому сенсі, що воно не є «творчим віддзеркаленням і відтворенням дійсності в художніх образах». Про мистецтво в програмуванні можна і треба говорити тільки в сенсі уміння, майстерності, знання справи, як і в будь-якій іншій професії. І як в будь-якій іншій професії майстерність програміста може доставляти справжню естетичну насолоду, але тільки для людей, причетних до цієї професії.

Програмування також не можна вважати наукою.У програмуванні немає системи впорядкованих знань про закономірності створення програм. Напрацювання математиків в області логіки, теорії інформації, чисельних методів, реляційної алгебри, теорії графів і деяких інших дисциплінах на долю відсотка не покривають різноманітність завдань, які поставлені перед програмістами. Навіть найкращі програмісти не візьмуть на себе сміливість стверджувати про архітектуру нової програмної системи те, що вона буде успішною. Хоча в програмуванні вже накопичений досить великий досвід невдалих проектів, який може допомогти досвідченому розробнику побачити в архітектурі нової системи антипатерни - джерела серйозних майбутніх проблем. Але не більше того.

Програмування - не мистецтво і не наука, це скоріше ремесло. Існує думка, що до виходу з «дитячого» періоду програмуванню ще дуже далеко. Складність і масштаб завдань програмістів росте швидше, ніж «дорослішає» програмна індустрія. А оскільки це ремесло, то людина, що навчилася писати програми, наприклад мовою C++, буде також далека від професіонала, як учень третього класу середньої школи, що навчився писати англійською, від Шекспіра чи Діккенса. Шлях до майстерності в ремеслі лежить тільки через досвід. Не можна навчитися програмувати, тільки читаючи відповідну літературу. Як не можна по книгах навчитися писати романи, картини, вірші, музику. А ще програмістам потрібно постійно самовдосконалюватися. Тому далеко не всі, хто вміє складати програми, стають професіоналами. Продуктивність праці програмістів з однаковим рівнем знань і досвідом в осяжному майбутньому, як і раніше, відрізнятиметься на порядок навіть при розв’язуванні схожих за складністю задач незалежно від того чи продуктивність вимірюється в кількості рядків початкового коду, чи в кількості помилок на сто рядків коду чи в функціональних крапках. Творчість нерозривно зв'язана з натхненням, а це субстанція капризна і непередбачувана. Без натхнення в програмуванні не обійтися. І, чим складніше завдання, тим важче витягнути це натхнення з підсвідомості. Іноді для цього потрібно годину, а іноді тижні.

Професійна творчість програміста принципово відрізняється від творчості в науці і мистецтві. Завдання з кожним роком стають все складнішими і масштабнішими, а терміни, за які потрібно вирішити ці завдання, навпаки, з кожним роком скорочуються. Тому сучасні програмні системи створюються колективами від декількох до тисяч програмістів, тоді як творчі діячі науки і мистецтва працюють, в більшості своїй, поодинці. Проблемиколективноїтворчості –це чи не найменш вивчені питання сьогодні, як з точки зору психології і соціології, так і з точки зору менеджменту та керованості.

З іншого боку, існують також прикладні інженерні напрямки, такі як будівництво, космічна галузь, авіа- та автомобілебудування та інші високотехнологічні галузі промисловості, в яких над створенням нових виробів працюють тисячі людей. Відповідно, виникає спокуса провести аналогію з цими галузями і говорити про індустріалізацію підходу до розробки ПЗ. Але і тут не все так просто. Спрощено, шлях від ідеї до її реалізації в цих галузях виглядає таким чином: науково-дослідна робота (НДР), дослідно-конструкторська робота (ДКР), виробництво. У верхній частині цієї піраміди знаходяться галузеві науково-дослідні інститути, які проводять ідеї і займаються проектуванням нових виробів. На другому поверсі піраміди працюють конструктори в конструкторських бюро, завдання яких полягає в реалізації нового проекту в кресленнях деталей і технологіях виготовлення і збірки. На нижньому рівні знаходяться виробничі потужності - заводи, на яких інженери і робочі втілюють в реальність креслення і технології.

Якщо проводити аналогію, то програмісти працюють виключно на вершині описаної піраміди. Програмування - це ідеї і проектування. Роль конструкторського бюро для програмного проекту виконують компілятор і редактор зв’язків, а аналогом «програмного» заводу, який переводить конструкторську документацію в продукт, доступний користувачеві, служить обчислювальний комплекс, на якому розгортається і виконується створена програма.

Статистика показує, що відсоток інновацій, що дійшли до виробництва, від загального числа дослідницьких проектів, виконаних в галузевих НДІ, буде порівнянний з відсотком успішних програмних проектів. І це при тому, що учені в НДІ спираються на досить добре вивчені закони математики, фізики і хімії, а програмування, як відзначено вище, поки залишається лише ремісничим виробництвом.

За параметром успішності (частка вдалих проектів) для колективної творчості програмістів скоріше доречна аналогія із створенням художнього фільму, театрального спектаклю або виконання музичного твору оркестром. Ще одна аналогія програмних проектів з кінематографом: наявність зіркових акторів сама по собі ще не забезпечує успіх фільму. Тільки талановитий режисер здатний організувати і надихнути акторів на створення шедевра, відкрити нові зірки. А талановитих режисерів, як, втім, і талановитих менеджерів програмних проектів, на жаль, не так багато, як хотілося б.

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

Є ще щось, що відрізняє працю професійного програміста від ученого, художника, композитора і поета. Предметом діяльності учених є спрощені моделі, в яких вони можуть абстрагуватися від більшості деталей реального миру, не істотних для їх цілей. Математик, доводячи нову теорему про тензори, не піклується ні про що, окрім системи постулатів, покладених в основу диференціальної геометрії. Фізик, описуючи динаміку руху рідини в трубі, абстрагується від того, як рухаються і стикаються молекули і від того, як рухаються планети навколо Сонця. Діячі мистецтва теж багато в чому оперують абстракціями. Поетові, композиторові, художникові достатньо лише зробити натяк, обрис об'єкту творчості, і на цьому його робота закінчена. Все інше нехай додумує читач, слухач, глядач.

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

Крім того, програміст повинен володіти маніакальною посидючістю, зосередженістю і завзятістю для перебору всіх можливих варіантів поведінки своїх абстракцій і досконального опрацювання всіх деталей. Це опрацювання повинне бути абсолютно точним і не містити жодної помилки, неправильного, зайвого або відсутнього символу вихідного коду програми (а це сотні тисяч рядків, а деколи і мільйони). Інструментальні засоби розробки, такі як синтаксичні аналізатори, компілятори, середовища програмування, можуть лише трохи полегшити цю роботу.

Ще одна особливість, притаманна творчості програміста - це постійне оновлення інформаційних технологій, які програмістові необхідно знати і успішно застосовувати в своїй роботі. Тому професійний програміст повинен, як сказав один з колишніх вождів, «вчитися, вчитися і ще раз вчитися». Програміст повинен тримати в голові, постійно поповнювати і активно застосовувати на практиці гігабайти професійної інформації. Це будова комп'ютерів, комп'ютерних мереж і мережевих протоколів. Це операційні системи і мови програмування. Це програмні інтерфейси проміжного ПЗ і прикладних бібліотек з особливостями і багами їх реалізації в конкретних версіях продукту. Це технологічні стандарти, технології розробки і інструменти, які їх підтримують. Це архітектура програмних систем, патерни і антипатерни проектування і багато-багато іншої інформації.

Ще на початку 70-х чудовий вчений, академік А.П.Єршов сказав: «Програміст повинен володіти здібністю першокласного математика до абстракції і логічного мислення у поєднанні з едісоновським талантом споруджувати все, що завгодно, з нуля і одиниць. Він повинен поєднувати акуратність бухгалтера з проникливістю розвідника, фантазію автора детективних романів з тверезою практичністю економіста». Можна стверджувати, що професійний програміст повинен поєднувати в собі легкість і політ таланту Моцарта з посидючістю і скрупульозністю Сальері.


 

А также другие работы, которые могут Вас заинтересовать

76259. Роль радиотермометрии при хирургическом лечении непальпируемых новообразований молочной железы 116.5 KB
  Исследований направленных на определение эффективности радиотермометрии для выявления ранних так называемых малых раков не проводилось. Данное обстоятельство послужило причиной для более подробного изучения возможностей радиотермометрии в скрининге непальпируемых новообразований молочных...
76260. Биологическое оружие. Способы применения бактериальных и вирусных средств 166.07 KB
  Это научно-технологический комплекс включающий в себя средства производства хранения обслуживания и оперативной доставки биологического поражающего агента к месту применения. Поражающее действие биологического оружия основано в первую очередь на использовании...
76261. Особенности профессиональной деятельности в условиях реализации чрезвычайных ситуаций того или иного вида 42.24 KB
  Интерес к деятельности человека в экстремальных условиях связан с состоянием современной техносферы а также мощными катаклизмами природного характера. Деятельность человека в этих условиях сопряжена с опасностью для жизни высока их психологическая цена стоимость...
76262. Порядок маркировки шасси и двигателя автомобилей Зил-131, Урал-4320, Уаз-3151, Камаз 4310, МТЛБ, прицепы 2ПН4, 2ПН2 507.14 KB
  Шасси как составная часть транспортного средства маркируется на раме в задней части правого лонжерона на расстоянии 1000-1250 мм назад от оси балансирной тележки и 40-60 мм. вниз от верхней полки лонжерона. Маркировка содержит 14 знаков и производится ударным способом.
76263. Сучасний стан економічного розвитку України 31.87 KB
  З цієї причини вивченню фінансово-економічної кризи та напрямів розвязання проблем які вона зумовила присвячено безліч публікацій як науковців так і фінансистів-практиків. Проте враховуючи що наслідки світової фінансової та економічноїкризи до цього часу не мінімізовані зазначена...
76264. Глобальный экологический кризис, его причины и проявления 28.73 KB
  Развитие человеческого общества невозможно без взаимодействия с окружающей средой без воздействия на природу без использования ее ресурсов. Возможно также существенное перераспределение водных ресурсов.
76266. Электропривод 165.34 KB
  В простейшем понимании электропривод представляет собой электромеханическую систему предназначенную для преобразования электрической энергии в механическую приводящую в движение рабочие органы различных машин.
76267. Административная ответственность несовершеннолетних 22.19 KB
  Норма данной статьи Кодекса корреспондируется с нормами уголовного гражданского трудового и других отраслей права. Таким образом законодатель считает лицо достигшее 16 лет обязанным и способным осознавать социальный смысл своего поведения признавать и уважать права...