Які конкретні практики можна було б назвати "майстерністю програмного забезпечення", а не "програмним забезпеченням"? [зачинено]


11

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

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

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

Які конкретні речі може робити майстер із програмного забезпечення, що інженер з програмного забезпечення (можливо, поганий) може не робити?


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

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

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

Це просто звучить як справді претензійний титул, який потрібно дати собі.
michaelsnowden

Відповіді:


13

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

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

Трохи пристрасть охоплює все це, не порушуючи поту.


Я думаю, що остання особливо важлива
Ловіс

7

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

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

Які конкретні речі може робити майстер із програмного забезпечення, що інженер з програмного забезпечення (можливо, поганий) може не робити?

Нічого - інженер - це майстер ... але більше. Техніка будується на майстерності.

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

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


2
І ви, безумовно, маєте освіту для підтвердження свого досвіду - радий, що ви не сказали "формально".
treecoder

@greengit У багатьох місцях, щоб використовувати титул "інженер", ви повинні мати офіційну освіту. В Європі це означає закінчення ступеня інженера. Італія також додає вимогу проходження сертифікаційного іспиту. У Північній Америці, Техасі, Флориді та Канаді вимагають, щоб особи, які використовують назву "інженер" (включаючи інженерів програмного забезпечення), склали ліцензійний іспит.
Томас Оуенс

Хоча це не означає, що хтось без цієї формальної освіти не може займатися інженерією. Вони просто не можуть назвати себе інженером як професійного звання.
Томас Оуенс

1
Я не згоден, інженер не обов’язково є майстром.
Ніколь

2
@ Renesis За визначенням, інженерія - це ремесло. Визначення ремесла: "мистецтво, торгівля чи професія, що вимагає особливої ​​майстерності, особливо ручної майстерності". Техніка - це заняття, яке вимагає спеціальних навичок, тому це ремесло. Однак це також більше застосування наукової теорії (серед іншого).
Томас Оуенс

2

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

Його мета подвійна: відновлення довіри до програмістів, а для цього - підвищення рівня якості програмного забезпечення та навичок розробників.

Sw майстерність просуває технічні практики, такі як:

  • Принципи дизайну SOLID
  • Шаблони дизайну
  • TDD (метафора "обліку подвійного запису")
  • ...

І командні / організаційні практики:

  • Парне програмування
  • Наставництво
  • Каталог кодів
  • Додж / код відступає
  • ...

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


1
Я не погоджуюся - причина невдачі інженерії програмного забезпечення полягає в тому, що в ній не було інженерів, лише майстри, що претендують на інженерів. НАСА не відправляло космічні кораблі на Місяць за допомогою майстрів!
gbjbaanb

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

Космічні апарати не виготовлені з нематеріальних речей, які можна переробляти, переробляти і перерозподіляти знову і знову. Закони, яких вони дотримуються, значною мірою відрізняються від законів програмних програм.
guillaume31

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

Будь-ласка, визначте "розум інженера" ​​в контексті програмного забезпечення.
guillaume31

1

Перейшовши за http://manifesto.softwarecraftsmanship.org/, я отримав би наступне.

Майстер відрізняється від традиційного сприйняття "інженера" ​​тим, що

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

4
Чесно кажучи, усі ці пункти описують хорошого інженера. Особливо 1, 2 та 4.
Томас Оуенс

@ThomasOwens А що з поганим інженером? Він теж майстер? Або хороший проти поганого майстра?
Ейфорія

@Euphoric Я не думаю, що ти можеш бути хорошим інженером, не будучи добрим майстром. Це як постановка. Ви повинні досягти "хорошого майстра", перш ніж досягти "хорошого інженера". Однак ти можеш бути добрим майстром і не бути хорошим інженером.
Томас Оуенс

1

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

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

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

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


0

Рефакторинг на шаблони.

Тобто створити щось, що задовольняє 90% вимог до програмного забезпечення, а потім перетворити весь проект на якийсь чистий, елегантний дизайн.

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

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

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

Спайк-розчин.

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

Позбавлення , з будь-якої причини.

В інженерії програмного забезпечення будь-яка депресія може бути здійснена лише в кінці життєвого циклу програмної системи. Це потрібно планувати як частину SDLC.

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

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


-1

Я б сказав, що тест на одиницю, що охоплює 100% коду, був би хорошим. Оскільки це дозволяє позбавити зайвий матеріал.

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

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


3
Як блискуче ми говоримо тут? :-)
Кріс

1
Більшу частину часу я погоджуюся з цим - але я не впевнений, що суворі 100% завжди варті - наприклад, геттери / сетери, де вони не мають логіки. Також згенерований код, як правило, краще залишити без одиничних тестів (хоча тести інтеграції можуть бути доречними)
FinnNk

@FinnNk - я згоден. Я нещодавно використовував dotCover, і це говорить про те, що геттер / сеттер охоплюється, якщо він використовується в іншому тесті. Отже, я не мав на увазі метод тестування для кожного геттера та сеттера
Ентоні Скотт,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.