Як працює робота в команді (в рамках проекту OO)? [зачинено]


15

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

З цікавості я хотів запитати: як працює команда над проектом, особливо коли працює над проектом OO?

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

Спасибі


Відповіді:


29

Сподіваюся, я можу вам трохи допомогти або принаймні вказати на вас у правильному напрямку!

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

  1. Код і джерело управління
  2. Комунікації та деякі поради.

Що стосується конкретно проектів OOP - я, чесно кажучи, не можу побачити занадто багато проблем, характерних для OOP, яких немає ніде.

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

Абстракції, які може забезпечити ООП, в команді приголомшливі.

Контроль джерела

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

Я можу говорити лише про Git, оскільки я ніколи не використовував SVN - однак я вважаю, що вони схожі, але з різною термінологією.

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

Після того, як функція чи виправлення завершені, вони можуть бути " об'єднані " назад у базу даних коду основного проекту. Будь-які « конфлікти » можуть бути виявлені Git та вирішені на рівні джерела відповідальним розробником.

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

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

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

Зв'язок

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

Вся команда повинна усвідомлювати, хто робить що, коли це робить і на що це впливає.

Відповідальність повинна бути чітко визначена

Це очевидно, але більшість проектів використовуватимуть певну форму квиткових систем - де запити чи помилки реєструються, а потім надаються певному персоналу. ( JIRA , Unfuddle тощо) Часто вони вбудовані в систему управління джерелами, що робить життя трохи простішим. (BitBucket і GitHub обидва забезпечують відстеження випусків для сховищ Git, розміщених з ними.)

Це зупиняє або допомагає запобігти принаймні розробникам випадково працювати над тими ж проблемами.

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

Загалом, ці проблеми можуть бути вирішені ...

Регулярні зустрічі

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

Я працюю над X,

Щоб досягти / виправити Y,

Що передбачає зміну / внесення змін до Z.

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

Архітектурні наради

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

Мені особисто це подобалося, я не дуже сприяв, оскільки був зовсім новим у проекті, але вміння слухати дискусії дав мені багато розуміння; досить скоро я міг зрозуміти проект, а також індивідуальні стилі мислення.

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

Інші питання

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

Конфігурація

Якщо ви працюєте над проектом Java - то, можливо, хороша ідея може бути забезпеченням (для принаймні середовищ розробки, звичайно, не для тестування.) Версії JVM поширені серед команди? Потім IDE. Це допомагає головним чином, якщо вся команда використовує Eclipse або NetBeans або ваш IDE на вибір.

У веб-проекті може бути так, що всім розробникам потрібен певний стек; з певними версіями Apache або PHP

Мислення таких факторів просто дозволяє команді «гелювати» трохи швидше в моїй свідомості.

Стиль

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

Насправді ви насправді не зможете сказати, хто написав певний розділ коду - ви просто повинні знати, що він належить .

Ось чому багато проектів з відкритим кодом відкрито публікують вказівки / стилі керівництва щодо формату вихідного коду - щоб дізнатися, що вони містять, подивіться на Google StyleGuides для власних проектів з відкритим кодом.

Завдання та одиничні тести

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

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

Як людина, я використовую GruntJS для створення свого сайту, перш ніж розгорнути його на своєму FTP-сервері - одна команда Grunt - це все, що потрібно для того, щоб мій CSS / Sass був скомпільований і мінімізований , мої активи будуть стиснуті, а потім мої файли для завантаження.

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

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

Документація

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

1. Середовище розробки:

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

2. Робочий потік

"Усі функції повинні бути розроблені на гілці" особливість / * "і об'єднані в гілку" тестування "до того, як вони будуть розглянуті як готові до випуску."

3. Обов'язки в колективі:

"Що стосується проблем із базами даних, поговоріть зі Стівом. Що стосується платформи, поговоріть з Девідом."

4. " Трубопровід " на майбутнє

"При розробці нового коду пам’ятайте, що станом на червень 2014 року ми хочемо реалізувати x - застарілий код, можливо, буде потрібно переглянути, перш ніж це відбудеться."

Приклади

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

Заключне слово попередження

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


1
Вау, стільки за швидку відповідь. Я підозрюю, що для позбавлення від деяких цих помилок може знадобитися ще одна редакція ...
Фергюс У Лондоні

Чудова відповідь на запитання, яке я вважав занадто широким, щоб сприймати гарне.
Док Браун

Велике спасибі за докладну відповідь :) Одне питання: Чи можете ви сказати , що в цілому , кожен розробник в команді , як правило , працює на шматок коду , ніж інші розробники НЕ або рідко подивитися або змінити? Наприклад, у проекті OO уявіть команду з чотирма розробниками: Developer A, B, C та D. Чи спільно для розробника A працювати над класом X, розробник B працює над класом Y і так далі - кожен будує внутрішня реалізація їх класу та інтерфейс для цього класу для спілкування з іншими класами - а інші розробники не змінюють код цього класу?
Авів Кон

1
Дякую @DocBrown! @Prog - Це дуже цікаве запитання, і не одне, я цілком впевнений, що можу відповісти! Якщо говорити з досвіду, то, здається, цілком звичайно, що така ситуація існує на початку - або коли реалізується функція. Розробник може взяти право власності на свою нову функцію (і, таким чином, будь-які нові об’єкти, реалізовані) - однак, коли вона повертається до бази даних коду і починається технічне обслуговування, то дуже багато, кому присвоєно певну помилку, відшукуючи цю помилку куди завгодно насправді живе!
Фергюс в Лондоні

1
@Prog: Це залежить від культури в колективі та компанії. У дуже великих проектах ви побачите кілька команд, які працюють над ним, і кожна команда відповідає за певний набір модулів. Це поняття "право власності" також може застосовуватися в команді, але також можливо, що всі члени команди працюють над усім кодом. Обидва мають свої переваги та недоліки.
Барт ван Іґен Шенау
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.