80021

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

Реферат

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

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

Украинкский

2017-02-21

55.5 KB

3 чел.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


 

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

32601. Учет внеоборотных и оборотных активов в КФХ 34.5 KB
  На первоначальном этапе создания крестьянского фермерскогохозяйства его основные и оборотные средства формировались в основном за счет имущественного пая выделяемого сельскохозяйственным предприятием или за счет собственных средств. В дальнейшем строительство и приобретение зданий машин взрослого продуктивного и рабочего скота и других объектов основных средств осуществляется за счет собственных средств крестьянского фермерскогохозяйства. Приемпередачу объектов основных средств от сельскохозяйственного предприятия крестьянскому...
32602. Учет денежных средств в кассе‚ на расчетных и других счетах в банке 74.5 KB
  Порядок хранения и расходования денежных средств в кассе установлен Инструкцией ЦБ РФ Порядок ведения кассовых операций в РФ от 4. Поступление денежных средств учитывается по дебету списание по кредиту. Для обеспечения надлежащего контроля за сохранностью денежных средств ежемесячно проводится инвентаризация кассы комиссией утвержденной руководителем предприятия.
32603. Учет денежных средств и расчетов в крестьянском фермерском хозяйстве 33.5 KB
  Такие средства представляют собой сумму наличных денежных средств в кассе предприятия свободные денежные средства на расчетном валютном и других счетах в банке ценные бумаги и прочие денежные средства предприятия.2000 N 94н используются следующие счета в КФХ: 50 Касса ; 51 Расчетные счета ; 52 Валютные счета в редких КФХ которые только занимаются экспортом сельскохозяйственной продукции. Порядок открытия расчетного счета определяется банком. Для его открытия крестьянское фермерское хозяйство представляет учреждению банка: заявление...
32604. Учет долгосрочных и краткосрочных кредитов и займов 48.5 KB
  Операции связанные с получением и погашением банковских кредитов и займов отражаются в бухгалтерском учете на счетах 66 Расчеты по краткосрочным кредитам и займам и 67 Расчеты по долгосрочным кредитам и займам . Причитающиеся по полученным кредитам и займам проценты к уплате отражают по кредиту счета 66 67 в корреспонденции с дебетом счета 91. Суммы полученных организацией краткосрочных кредитов и займов отражаются по кредиту счета 66 Расчеты по краткосрочным кредитам и займам и дебету счетов 50 Касса 51 Расчетные счета 52...
32605. Калькулирование себестоимости продукции животноводства 52.5 KB
  Данные первичных документов по учёту приплода и прироста живой массы систематизируются в отчёте о движении скота и птицы на фермах форма №223АПК. Если мы приходуем приплод и прирост живой массы то Д11 К 20 2 Если мы приходуем молоко шерсть яйца то Д 43 2 К 20 2. Калькулирование себестоимости продукции животноводства Порядок исчисления себестоимости продукции КРС молочного направления В молочном скотоводстве по основному стаду выделяют два объекта калькулирования приплод и молоко по животным на выращивании прирост живой массы и...
32606. Вспомогательными производства 42 KB
  Учёт затрет во вспомогательных производствах ведется на счете 23 Вспомогательные производства. Он имеет следующие субсчета: 23 1 Ремонтные мастерские; 23 2 Ремонт зданий и сооружений; 23 3 Машиннотракторный парк; 23 4 Автомобильный транспорт; 23 5 Энергетические производства хозяйства; 23 6 Водоснабжение; 23 7 Гужевой транспорт; 23 8 Прочие вспомогательные производства. Аналитический учёт по счёту 23 ведут в производственных отчётах по вспомогательным производствам форма № 83АПК который открывается на...
32607. Особенности организации учёта и исчисления себестоимости продукции основных видов промышленных производств 52 KB
  Для первичных документов по учету сырья и выхода готовой продукции предусмотрен отчёт о переработке продукции форма № 180АПК. В первом разделе отчёта учитывается количество израсходованного сырья во втором количество полученной продукции. Схема учета затрат на производство и выхода продукции животноводства представлена на рисунке 6. По дебету счета собираются затраты а по кредиту учитывается выход продукции в течении года по плановой себестоимости с доведением в конце года или месяца до фактической в зависимости от вида производств.
32609. Докладно описати вантажні станції, розташовані на під’їзних коліях, виділивши: 1) умови розміщення станцій; 2) характеристика портових станцій і станцій паромних переправ; 3) характеристика перевантажувальних станцій 146 KB
  Докладно описати вантажні станції розташовані на під’їзних коліях виділивши: 1 умови розміщення станцій; 2 характеристика портових станцій і станцій паромних переправ; 3 характеристика перевантажувальних станцій. 1 В пунктах стикування залізниць різної колії залізничних доріг з іншими видами транспорту і на п к підприємств споруджуються спеціальні вантажні станції. На основній станції виконується передача вагонів від УЗ на п к розформування поїздів і підбір вагонів по окремим пунктам подавання вагонів на вантажні станції або...