Чи повинні методи розвитку розбити індивідуалізм розробника?


9

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

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

Чи сказав нам інструктор неправильно, попросивши перерахувати кожну функцію? І чи ці методи проектування розчарують індивідуалізм розробника, щоб написати код, як вони найкраще це зрозуміти?


20
Це дуже погано, що ваш клас викладає метод Waterfall, який є канонічним прикладом поганих процесів розробки програмного забезпечення.
whatsisname

6
Я б сказав, що цей клас тебе багато чому навчив.
JeffO

7
Насправді, оригінальний водоспад має ітерації, які зворотний зв'язок один з одним. Це неправильне вчення про водоспад протягом багатьох років знищило його корисність. Навіть із чимось таким, як, наприклад, Scrum, кроки, через які Історія проходить у спринті, імітують водоспад у собі. Діаграми UML корисні лише для дизайну високого рівня. Як тільки цей код буде написаний, будь-які документи, написані до цього коду, тепер застаріли. Це реалізація техніки. Зрештою, кодом має бути документація.
Ендрю Т Фіннелл

10
Практично кожен розробник бачив випадки індивідуалізму розробника, який повинен був бути розбитий. (Хоча, мабуть, не за методологією водоспаду).
пс

2
@whatsisname, я категорично не згоден. Кожен розробник повинен навчитися розробці водоспаду, щоб вони РОЗУМИТИ і ДОСВІДИТИ це як канонічний приклад поганої розробки програмного забезпечення. Крім того, багато магазинів все ще залишаються Водоспадом правильним чи неправильним, і важливо, щоб міста були підготовлені до цього.
maple_shaft

Відповіді:


10

Ви запитували у інструктора, чому вам довелося перелічити всі методи?

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

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


+1, щоб вказати, як потрібен різний дизайн для різних цілей. Хороші моменти щодо дизайну класів; розпитати інструктора - це гарна ідея
Етел Еванс

1
Запам’ятайте правило проходження курсу в коледжі: з’ясуйте, чого хоче професор, і поставте це.
Крістофер Махан

9

Ні, інструктор має рацію сказати вам перелічити всі властивості та методи наперед, якщо ви використовуєте метод водоспаду. Вікіпедія відзначає критику водоспаду:

Багато хто стверджує, що модель водоспаду є поганою ідеєю на практиці - вважаючи, що жоден нетривіальний проект неможливо закінчити фазу життєвого циклу програмного продукту до того, як перейти до наступних етапів та вивчити їх. Наприклад, клієнти можуть не знати точно, які вимоги їм потрібні, перш ніж переглянути діючий прототип і прокоментувати його. Вони можуть постійно змінювати свої вимоги. Дизайнери та програмісти можуть мало контролювати це. Якщо клієнти змінюють свої вимоги після завершення дизайну, дизайн повинен бути змінений, щоб він відповідав новим вимогам. Це фактично означає позбавлення великої кількості робочого часу, що означає збільшення витрат, особливо якщо велика кількість ресурсів проекту вже вкладена в Big Design Up Front.

Ці методи проектування не розбивають виконавця індивідуалізму дизайну, оскільки є ще частини для інтерпретації та способів нанести унікальні штрихи на структуру, наприклад, малюнок, що надається скелету та додавання м'язів та інших тканин, щоб створити тварину цікаво, скільки свободу, чи потрібно було вам проектувати цю тварину?

Ви знайшли недолік водоспаду, але все має свої сильні та слабкі сторони.


4

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

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

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

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

Це все дуже справедливі моменти.

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

Поради чистих кодексів (я ніколи не читав - я просто проводжу те, що ви розмістили), здається, справедливим і застосовним навіть при використанні методології водоспаду. Ви можете розробити свої класи та методи відповідно до Принципу єдиної відповідальності , розділення проблем та інших принципів SOLID . Водоспад не говорить про те, як проектувати, коли саме це потрібно зробити. Однак, це важче наперед, коли ви дізнаєтесь і придумаєте кращі способи зробити це під час впровадження.

Я думаю, що це вказує на той факт, що між розробкою та впровадженням потрібно чітко пройти ітерацію - проблема, якої традиційний Водоспад не має.


1
@pillmuncher Так мало хто читав, це сумно.
Томас Оуенс

3
Найсумніше в цьому папері - це те, що більшість людей насправді виявили водоспад через нього, тоді як це документ, який ретельно дискредитує цю практику.
Joeri Sebrechts

3

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

Якщо ви вважаєте, що це нудно, зачекайте, поки ви отримаєте справжнє програмування роботи. Подумайте, на хвилину, що програмне забезпечення для вас може не бути життєздатним.

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

Тому?

чи інструктор сказав нам неправильно, попросивши перерахувати кожну функцію?

Ні. Це загальна вимога.

І, чи ці методи проектування пригнічують реалізатор дизайну (розробник) індивідуалізму, щоб написати код, як вони найкраще це зрозуміють?

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

Ні. Ти просто балуєшся на тугу. Отримайте це і поверніться до роботи.


1
@FreshDaddy. "Вони (здебільшого) ніколи не побачать приватні функції." Помилковий. Після того, як ви виграєте в лотерею, інші програмісти візьмуть ваш код і побачать приватні функції. Також. Деякі мови (наприклад, Python) уникають такого роду конфіденційність.
S.Lott

2
@ S.Lott - Перерахування кожної приватної функції зовсім не є загальною вимогою. Буває, не зрозумійте мене неправильно, але повномасштабний "список усіх приватних функцій перед написанням коду", звичайно, досить рідкісний. Є "необхідний тідій", а потім є "нікчемний тідій". Зважаючи на те, що програмісти займаються усуненням "нікчемного тедіуса", клієнти реального світу навряд чи коли-небудь вимагатимуть щось таке дороге і безглуздо, якби це не був код типу "життя чи смерть".
Морган Херлокер

1
@ironcode: "" список усіх приватних функцій перед написанням коду ", звичайно, досить рідкісний." Не в моєму досвіді. Це те, як люди вчаться робити дизайн. Молодші програмісти часто дотримуються цього стандарту, поки не зможуть довести, що для їх роботи не потрібен такий рівень нагляду. Як правило, менше року. Організація, яка забрала n00bs зі школи і кинула їх на програмування без нагляду, здебільшого просто створює величезні проблеми. Цей рівень нагляду є важливим для того, щоб переконатися, що код може працювати.
S.Lott

1
@S Lott - моє гасло полягає в тому, що якщо розробка програмного забезпечення втомлива, ти робиш це неправильно. Ми програмісти. Ми автоматизуємо тид. Ми не повторюємо себе в коді, і немає підстав повторюватися в документації.
кевін клайн

1
@kevin: ця відповідь - чистий сарказм. Як таке, це абсолютно недоречно, і я позначив це.
Майкл Боргвардт

1

Програмування - це мистецтво працювати в рамках обмежень. ЦП забезпечує обмежений набір інструкцій; IO обмежується конструкцією обладнання; API API створені для заохочення певної поведінки та обмеження інших; Мови високого рівня часто покликані рекламувати один набір ідіом над іншими ...

І методології теж створені для обмеження.

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

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

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


1

Я думаю, що інструктор є чудовим для того, щоб змусити вас робити цей проект, і таким чином навчати вас плюсам і (переважно) мінусам розвитку водоспаду.


1

Просте правило, щоб оцінити складність аналізу проекту, - "Чи може розробник або компанія, над якою він працює, нести відповідальність за щось досить драматичне (як правило, за смерть або величезну суму втрачених грошей), що відбувається з створеним програмним забезпеченням?".

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

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

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


І будьте обережні щодо "Чи може вона вбивати людей, якщо вона зазнає аварії", є ще один тип під назвою "Чи може хтось піти у в'язницю, якщо це виводить неправильні дані", і це часто повертається до хлопця, що перебирає клавіатуру, тому добре мати дуже детальну інформацію вимоги, до дрібниць.
Крістофер Махан

@Christopher: відповідно підкоригував мою відповідь, дякую за коментар :)
Matthieu

0

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


0

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

Викладач "сказав вам неправильно"?

Я думаю так.

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


2
Смію сказати, що ви ніколи не працювали на компанію, яка заробляє гроші на державних контрактах (редагувати) Ви сказали, що комерційне програмне забезпечення. Зараз моя заява безглузда.
Ендрю Т Фіннелл

@Andrew Finnel: Істина настільки болюча, на стільки рівнів.
Пітер Роуелл

2
@Andrew - Я працював до DOD2167. Це було жахливо і малопродуктивно, як це практикувалося. Пізніше я працював в іншій компанії, яка робить спритний розвиток для уряду з частими поставками. Клієнт дико задоволений. Вони мали корисну програму через півроку та отримували нові функції щокварталу.
кевін клайн

@Andrew Я маю понад 2-річний досвід роботи в США, як державний службовець, і як підрядник. Застосовуються спритні методи. Одна команда, над якою я працював, активно використовувала Scrum, виготовляючи "достатньо часу" документації "вчасно". Так, документація (навіть "достатньо" документації) значно більш обширна, ніж у багатьох інших місцях, але це, як правило, визначається кількістю залучених сторін (контракти можуть змінюватись, інші сторони можуть розробляти інші системи тощо) та / або критичність та важливість безпеки та важливість систем, що розробляються.
Томас Оуенс

2
@Andrew, це не лише уряди. Я бачив 40 сторінок специфікацій на "товари"; як правило, ви можете вибрати все з цієї таблиці і дати мені це розмежування, будь ласка. Ніхто ніколи не може заважати читати їх ...
Бен-
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.