Як кіраваць выпадковай складанасцю ў праграмных праектах

Калі Мюрэй Гела-Ман быў зададзены пытанне, як Рычард Фейнман ўдалося вырашыць так шмат цяжкіх задач Гела-Ман адказаў, што Фейнман быў алгарытм:

  1. Запішыце гэтую праблему.
  2. Падумайце неабыякай.
  3. Запішы рашэнне.

Гела-Ман спрабаваў растлумачыць, што Фейнман быў іншы выгляд вырашэння праблем і не было ідэі, якія можна атрымаць, вывучаючы яго метады. Я накшталт адчуваю сябе так жа, як аб кіраванні складанасцю ў сярэднім/вялікіх праграмных праектах. Людзі, якія добрыя толькі па сваёй сутнасці добрыя ў гэтым і нейкім чынам умудраюцца пласт і ўкладваюць розныя абстракцыі, каб зрабіць усё гэта кіраваным без увядзення якіх-небудзь старонніх халусця.

Так Фейнмана алгарытм адзіны спосаб кіраваць выпадковай складанасцю або ёсць фактычныя метады, якія распрацоўнікі праграмнага забеспячэння могуць паслядоўна прымяняць прыручыць выпадковую складанасць?

73
@CortAmmon ня быць скупым, але гэта гучыць як даволі тупой праніклівасці. 99% таго, што распрацоўшчыкі ведаюць, стала вядома, у нейкі момант праз так званы "на ляту" росту. Патрабуецца добры вырашальны праблемы, каб зрабіць добры праграміст. Рашэнне праблем з'яўляецца тое, што мы па сваёй прыродзе звяртаецца. Калі вашы распрацоўшчыкі are't растуць яны, верагодна, робяць шмат сумнай манатоннай працы. Тып працы, які будзе рабіць якія-небудзь дастаткова таленавітых распрацоўшчыкаў няшчаснымі і падушанымі. І ... «Спіраль развіцця» няма нічога, акрамя паўторнага хэшавання асноўнай канцэпцыі итеративной распрацоўкі з вадаспадам вех.
дададзена аўтар Cristián Romo, крыніца
(Працяг) Дарэчы, не браць «нямы» заўвагу нападу пекла-HOMINEM. Пад «нямы» Я маю на ўвазе ваш падыход наіўны. Скачкі на апошнюю методыку, як «Спіраль развіццё» з'яўляецца эквівалент да кроку 1 і 2. пропуску прадзільнага 3D анімацыі спіраляў добрыя, калі вы хочаце, каб даць «тыпах бізнэсу» а «цёплы і недакладныя» і агульнае ўяўленне пра тое, як усталяваць цыкл развіцця. Калі вы хочаце ўбачыць некаторыя сапраўды натхняюць прыклады, проста паглядзіце на тое, як Open Source праекты кіравання цыкламі выпуску.
дададзена аўтар Cristián Romo, крыніца
Я не хачу здавацца клішэ, але тое, што я кажу, ўвасабляецца цытаты, «10 гадоў вопыту не тое ж самае, як 1 год вопыту ў 10 разоў.» Колькі часу дапамога павінна праграмістам быць дадзена ўбачыць новыя праблемы залежыць ад графіка і арганізацыі. Google, здаецца, што 20% з'яўляецца добрым укладаннем. Мала таго, што 20% часу прыводзяць да новых бізнес-магчымасцяў, але ён унёс свой уклад у доўгатэрміновы рост і шчасце таленту свайго распрацоўніка.
дададзена аўтар Cristián Romo, крыніца
@CortAmmon Bad аналогія. Кинестетическая памяць рэагуе так, як ён навучаецца. Практыкуючы на ​​хуткасці гульні менавіта тое, што вы павінны зрабіць, толькі ў кароткія прамежкі часу. Ва ўсякім разе, гэта не фітнес сайт. Справа ў тым, выпадковая складанасць з'яўляецца вынікам няздольнасці ідэнтыфікаваць/кіраваць складанасцю. Калі яны сутыкаюцца з новымі праблемамі і абмежаваным разуменнем магчымых рашэнняў распрацоўшчык будзе спрабаваць «код» вакол гэтай праблемы. Патрабуецца досвед сутыкаецца складаныя праблемы, каб мець магчымасць распазнаваць і ўкараняць новыя падыходы.
дададзена аўтар Cristián Romo, крыніца
@pdr Калі ласка, задавайце пытанні па StackExchange, калі яны добрыя пытанні, нават калі вы ўжо вырашылі яго (вы нават можаце адказаць на сваё пытанне). Вы ніколі не ведаеце, як надзвычай каштоўным, што маленькі кавалачак інфармацыі можа быць хто-то яшчэ :)
дададзена аўтар xandy, крыніца
@RoryHunter: Гэта. Амаль кожны тыдзень, я сутыкаюся з праблемай, што я не магу вырашыць, напісаць ліст каму-то, каб растлумачыць гэта. Тады разумеюць, што гэта такое, што я не разглядаю, вырашыць праблему і выдаляць паведамленні электроннай пошты. Я таксама напісаў каля дзясятка пытанняў, на гэтым сайце, які ніколі не быў пасланымі.
дададзена аўтар fluffels, крыніца
@RoryHunter - Згодзен. І частка выпісваючы праблемы і дзяліцца з кімсьці азначае, што вы прызнаеце, што не ёсць рашэнне яшчэ.
дададзена аўтар bstpierre, крыніца
JeffO фунтовыя, што менавіта кропка гумавая качка адладкі
дададзена аўтар Newbie, крыніца
Я не здзіўлюся, калі акт спісання праблемы (і канкрэтызацыі яго, каб вы маглі адэкватна растлумачыць гэта каму-небудзь яшчэ), дапамог ідэнтыфікаваць рашэнне.
дададзена аўтар Rory Hunter, крыніца
@pdr: Як Dev свінец, я разглядаю патрабаванне для практыкантаў і пачаткоўцаў, якія Peer просьбы аб аказанні дапамогі ставяцца ў пісьмовай форме менавіта па гэтай прычыне. (Гэта гучыць крыху драконаўскім, так што я, верагодна, не буду ўжываць яго, але ўрок з'яўляецца магутнай адзін.)
дададзена аўтар user50055, крыніца
На 99% маёй здольнасці, вось дзе я пачынаю змагацца з вызначэннем таго, якімі частцы маёй работы павінны быць перапрацаваныя для зручнасці чытання, таму што я ледзь магу вызначыць, якія часткі неабходныя. Я мяркую, працоўны працэс, дзе вашыя распрацоўшчыкі правесці частку свайго часу напружваючы свае межы, і ўсё астатняе час аднаўлення і рэфактарынгу, якія маглі б працаваць. Я бачу, што вельмі шмат, як прафесійны спорт. Калі футбаліст гуляў на хуткасці гульні падчас трэніроўкі, яны не будуць доўжыцца месяц да іх цела выдавала. Калі вы хочаце кіраваць траўмы, вы пераканайцеся, што яны не марнуюць шмат часу на макс.
дададзена аўтар Cort Ammon, крыніца
Самая фундаментальная рэч, якую я даведаўся, не просяць распрацоўшчыкаў, каб справіцца з праблемай, якая толькі ў межах іх дасяжнасці. Хоць гэтыя праблемы з'яўляюцца захапляльнымі, яны таксама звязаны з распрацоўшчыкам, цягнуцца на незнаёмыя месцы, што прыводзіць да вельмі "на ляту" рост. Некаторыя інструменты, такія як спіраль развіццё, добрыя для зазямлення каманд распрацоўнікаў у невялікіх згаворліва праблемах перш, чым вырошчванне яго ў канчатковае рашэнне
дададзена аўтар Cort Ammon, крыніца
@Evan камбала: Пытанне было пра тое, як кіраваць выпадковай складанасцю, ня як развіваць добрыя праграмісты. Так, падаючы распрацоўнікам складаных задач мае важнае значэнне для падтрымання здаровай працы enviornment. Тым не менш, занадта шмат выкліку можа быць надзвычай небяспечным па выпадковай складанасці фронту. На маю вопыту, калі я дасягаю задачы, складае 50% ад маёй здольнасці, я надакучаюць хутка. Калі я дасягну чагосьці, што знаходзіцца на ўзроўні 90% ад маёй здольнасці, я застаюся цікава. Тым не менш, калі я падыходжу праблему на 99% маёй здольнасці, што, калі выпадковая складанасць закрадаецца.
дададзена аўтар Cort Ammon, крыніца
У якасці канкрэтнага прыкладу з маім жыцці: я распрацаваў дзве часткі кода, якія былі крайнія ўчасткі для мяне тэхнічна. Я быў надзвычай зацікаўлены ў іх, і я даведаўся зусім трохі ад кожнага з іх. Тым не менш, атрыманы код мае занадта шмат выпадковай складанасці. У выніку, я адзіны распрацоўшчык, здольны падтрымліваць іх - калі першапачатковы аўтар можа толькі адсочваць код, як павінен новы распрацоўшчык даведацца яго? Я лічу, што два праекты збою з-за выпадковай складанасці ... але яны таксама дзве мае любімыя няўдачы калі-небудзь.
дададзена аўтар Cort Ammon, крыніца

6 адказы

When you see a good move, look for a better one.
—Emanuel Lasker, 27-year world chess champion

На маю вопыту, самы вялікі кіроўца выпадковай складанасці праграмісты тырчаць з першым праектам, толькі таму, што гэта адбываецца на працу. Гэта тое, што мы можам атрымаць з нашых ангельскіх класаў кампазіцыі. Яны будуюць у час, каб прайсці праз некалькі праектаў у сваіх заданнях, уключаючы зваротную сувязь настаўніка. Праграмаванне класаў, па нейкай прычыне гэтага не робяць.

Ёсць кнігі, поўныя бетону і аб'ектыўныя спосабы распазнаюць, красамоўны, і выправіць неаптымальнай код: Чысты код , Working Эфектыўны з успадкаваным кодам , і шматлікімі іншымі. Многія праграмісты знаёмыя з гэтымі метадамі, але яны не заўсёды маюць час, каб прымяніць іх. Яны цалкам здольныя змяншаць выпадковую складанасць, яны проста не зрабілі гэта звычка паспрабаваць .

Частка праблемы заключаецца ў тым, мы не часта бачым прамежкавую складанасці коды іншых людзей, калі ён не прайшоў рэцэнзаванне на ранняй стадыі. Чысты код выглядае, як гэта было лёгка пісаць, калі на самай справе гэта, як правіла, уключае ў сябе некалькі праектаў. Вы пішаце, што лепшы спосаб, які прыходзіць у галаву, па-першае, звярніце ўвагу непатрэбных складанасцяў, якія яна ўводзіць, то «шукаць лепшы ход» і рэарганізаваць, каб выдаліць гэтыя складанасці. Затым вы працягваеце «у пошуках лепшага кроку» да таго часу, пакуль не ўдаецца знайсці.

Тым не менш, вы не паставіць код за разгляд толькі пасля ўсёй гэтай маслабойку, таму вонкава ён выглядае, як ён, магчыма, таксама быў Фейнман падобным працэсам. Вы схільныя думаць, што вы не можаце зрабіць гэта ўсё адзін кавалак, як гэта, так што вы не спрабуй, але ісціна з'яўляецца аўтарам гэтага прыгожа просты код, які вы толькі што прачыталі, як правіла, не можа напісаць усё гэта ў адным кавалку як што альбо, або калі яны могуць, гэта толькі таму, што яны маюць вопыт напісання аналагічнага код шмат разоў, і цяпер можа бачыць узор без прамежкавых стадый. У любым выпадку, вы не можаце пазбегнуць скразнякоў.

100
дададзена
ТЛ; інш; рэфактарынг, не баяцца.
дададзена аўтар ocodo, крыніца
Ааа, але вы, здаецца, былі ў стане напісаць чысты адказ на гэтае пытанне на вашу першую спробу. (І вельмі пераканаўчыя адзін, у гэтым.) Можа быць, вы проста Фейнман у маскіроўцы.
дададзена аўтар user50055, крыніца
1 для ахоплівае недасканаласці. Чалавек, гэта тое, што кожны <�я> кажа пра , але толькі нешматлікія людзі. Я стараюся, каб перамантаваць мой мозг думаць пра сябе як алгарытм машыннага навучання, дзе памылкі на самай справе <�б> добра і вучаць пра тое, як палепшыць. Выдатны Перафразуючы яго з «Чарнавікі» метафара.
дададзена аўтар soundsbeard, крыніца

«Архітэктура праграмнага забеспячэння ўменне не можа выкладацца» з'яўляецца шырока распаўсюджаным памылкай.

Лёгка зразумець, чаму многія людзі лічаць, што гэта (тыя, хто добра гэта хочацца верыць, што яны містычна спецыяльныя, а тыя, хто не хочуць верыць, што гэта не іх віна, што яны не з'яўляюцца.) Гэта тым не менш, не так; уменне проста некалькі больш практыкі інтэнсіўна, чым іншыя навыкі праграмнага забеспячэння (напрыклад, разуменне цыклаў, праца з паказальнікамі і г.д.)

Я цвёрда перакананы, што будаўніцтва буйных сістэм успрымальны да шматразовай практыцы і вывучэнні досведу такім жа чынам, што, стаўшы вялікім музыкам або аратарам з'яўляецца: мінімальная колькасцю талентаў з'яўляецца неабходным умовай, але гэта не гнятліва велізарным мінімум, які знаходзіцца па-за дасягнуць большасці практыкаў.

Праца са складанасцю з'яўляецца уменнем вы набываеце ў асноўным, спрабуючы і не ў некалькі разоў. Гэта проста, што многія агульныя прынцыпы, што супольнасць Выяўленыя для праграмавання ў вялікіх (пластах выкарыстоўваюць, змагацца дублявання ўсюды, дзе ён падымае сваю галаву, прытрымліваюцца рэлігійна 0/1/бясконцасці ...) не гэтак відавочна, правільныя і неабходныя да пачатковец, пакуль яны на самой справе не робяць тое, што праграма з'яўляецца вялікім. Да таго часу, пакуль на самай справе былі укушаны дублявання, што выклікала праблемы толькі некалькі месяцаў праз, вы проста не можаце «атрымаць» важнасць такіх прынцыпаў.

44
дададзена
Я не разумею, як вы можаце сцвярджаць, што няздольнасць навучыць архітэктуры праграмнага забеспячэння з'яўляецца памылкай, але працягваеце казаць, што паўтаральная практыка, навучанне на аснове вопыту і памылак (у спалучэнні з нейкім прыроджаным талентам) з'яўляецца адзіным спосабам, каб даведацца яго , Маё вызначэнне таго, што можа быць выкладаецца гэта тое, што вам не трэба практыкаваць інтэнсіўна, каб атрымаць, але вы можаце даведацца, назіраючы, слухаючы і чытаючы. Я згодны з усім у гэтым адказе, за выключэннем першага радка, так як ён, па-відаць якое супярэчыць астатняе.
дададзена аўтар Joel Spolsky, крыніца
Хоць, я не згодны, што архітэктура праграмнага забеспячэння «у цэлым» можна навучыць большасці Sw распрацоўшчыкаў. Як большасць распрацоўнікаў не могуць трымаць вялікую карціну ў сваёй галаве, і нават калі яны могуць, яны не могуць выкарыстоўваць гэтую карцінку, каб зрабіць неабходныя злучэння паміж модулямі, каб зразумець наступства рашэнняў. Хоць Архітэктура праграмнага забеспячэння «у цэлым», вядома, не элітнае ўменне, але і, вядома, не тое, што большасць распрацоўнікаў будзе калі-небудзь добра. Існуе прыроджаны талент, што ў некаторых людзей ёсць і іншыя проста не ўсё гэта, што робіць адзін добры на яго.
дададзена аўтар Switch, крыніца
@Thomas: Вяртаючыся да размаўлялым аналогіі грамадскасці. Незалежна ад таго, колькі кніг вы прачыталі, колькі гадзін вы праводзіце вывучэння тэмы ці колькі настаўнікаў спрабуюць навучыць вас быць добра публічнымі выступамі, вы можаце не атрымаць добра гэта, калі вы робіце гэта праз паўтарэнне практыкі, вывучэнне вопыту і памылак. Вы ніколі не будзеце пераканаць мяне, што хто-то можа даведацца майстэрства, проста назіраючы, слухаючы і чытаючы. Тое ж самае тычыцца практычна любога навыку, у тым ліку архітэктуры праграмнага забеспячэння. Я на самой справе не магу думаць пра які-небудзь навыку любога рэчыва, якое вы можаце даведацца, проста назіраючы, слухаючы і чытаючы.
дададзена аўтар Switch, крыніца
Справа ў тым, што многія людзі сцвярджаюць, што многія людзі абсалютна, пры любых абставінах </я> не можа навучыцца быць добрымі архітэктарамі (няхай гэта будзе ў лекцыйным зале або ў прамысловасці), таму што яны «не атрымалі тое, што гэта займае". Гэта тое, што я лічу агульным, але хлусня.
дададзена аўтар sigirisetti, крыніца
«Здаровы сэнс прыходзіць з вопыту. Вопыт прыходзіць ад дрэннага меркаванні.» --Mulla Насрэддзін
дададзена аўтар DANY PAUL BABY, крыніца
Я правёў ўвесь апошні тыдзень спрабуе навучыць некаторыя даволі балотнай стандартны шаблон праектавання і SoC матэрыял для інжынера з больш гадоў, чым сябе і ўвесь час здзіўлены, наколькі цяжка было забіваць ў прычынах <�я> чаму </я> і фокус на просты абстракцыі, а не разумных маналітаў. Я прыйшоў да высновы, што я быў дрэнным выхавальнікам.
дададзена аўтар Gusdor, крыніца
Мне вельмі падабаецца ваша апошняя прапанова. Я ўпэўнены, я даведаўся так шмат у маёй першай працы, таму што я быў там досыць доўга, каб мае памылкі, каб дагнаць мяне. Гэта каштоўны вопыт.
дададзена аўтар Warpspace, крыніца
«Немагчыма навучыць» і «не могуць быць вывучаныя» вельмі розныя рэчы, таму пярэчанні ... Мабыць, справа ў тым, што яна не можа рэальна навучыць, але можна напэўна даведацца?
дададзена аўтар woggy, крыніца

Pragmatic thinking by Andy Hunt addresses this issue. It refers to the Dreyfus model, according to which there are 5 stages of proficiency in various skills. The novices (stage 1) need precise instructions to be able to do something correctly. Experts (stage 5), on the contrary, can apply general patterns to a given problem. Citing the book,

<�Р> Гэта часта цяжка для экспертаў, каб растлумачыць свае дзеянні на тонкі ўзровень дэталізацыі; многія   іх адказаў настолькі адпрацаваны, што яны становяцца предсознательного дзеяннямі. Іх велізарны досвед здабываецца невербальныя, предсознательного абласцямі мозгу, што робіць яго цяжкім для нас, каб назіраць і цяжка для іх, каб сфармуляваць.      <�Р> Калі эксперты робяць сваю справу, аказваецца, амаль магічны для ўсіх нас-дзіўных загавораў, разуменне таго, што, здаецца, з'яўляецца з ніадкуль, і, здавалася б, дзіўная здольнасць ведаць правільны адказ, калі астатнія з нас нават не усё, што ўпэўнены ў пытанні.   Гэта не магія, вядома, але так, што эксперты ўспрымаюць свет, як яны вырашаюць праблемы, ментальныя мадэлі, якія яны выкарыстоўваюць, і гэтак далей, усё прыкметна адрозніваецца ад неадмыслоўцаў.

Гэта агульнае правіла ўбачыць (і, як следства, пазбягаючы) розныя пытанні могуць быць ужытыя спецыяльна пытанне пра выпадковую складанасці. Маючы пэўны набор правілаў, не дастаткова, каб пазбегнуць гэтай праблемы. Там заўсёды будзе сітуацыя, якая не падпадае пад гэтыя правілы. Нам трэба, каб атрымаць вопыт, каб быць у стане прадбачыць праблемы і знаходзіць рашэнні. Вопыт гэта тое, што нельга навучыць, гэта можа быць дасягнута толькі шляхам пастаяннай спробы, няўдачу або поспех і вучыцца на памылках.

This question from Workplace is relevant and IMHO would be interesting to read in this context.

22
дададзена
Гэта значыць, як кажуць, што гэта не магія, як «элітныя» спартсмены здольныя рабіць тое, што яны робяць, гэта проста пытанне іх здольнасць натуральна выконваць дыскрэтныя і лагічныя крокі, неабходныя для выканання на самым высокім узроўні. Так што, калі толькі тыя спартсмены маглі б сфармуляваць гэтыя дыскрэтныя і лагічныя крокі да нас, то мы маглі б быць усё элітнымі спартсменамі. Канцэпцыя, што мы ўсе маглі б быць элітныя спартсмены, незалежна ад таго, які ўзровень ведаў мы атрымліваем, гэтак жа недарэчна, як мы ўсе маглі б быць экспертамі ў любой навык, мы спрабуем даведацца, незалежна ад здольнасцяў у гэтай галіне навыкаў.
дададзена аўтар Switch, крыніца
@Super: Я б пытанне любой кнігі/даследаванні, якія зрабілі такую ​​смешную прэтэнзію, як толькі 1-5% людзей з'яўляюцца экспертамі. Размова аб пацягнуўшы некалькі з іх # & # & $ #. Эксперты пры чым? Іду ў заклад, ёсць значна больш высокі працэнт людзей, якія з'яўляюцца экспертамі ў дыханні, хада, ежа. Хто вырашае, што з'яўляецца эксперт ўзроўню? Патрабаванне, як 1-5% дыскрэдытуе любыя далейшыя прэтэнзіі і аналіз з дапамогай такіх аўтараў.
дададзена аўтар Switch, крыніца
@Super: Што тычыцца «элітных»/магічнага пытання. Я перачытаў пост і, магчыма, чыталі ў яго больш, чым ён кажа, таму што я сапсаваны аналагічных нітак у мінулым, якія сцвярджаюць, што, стаўшы экспертам з'яўляецца толькі пытаннем досведу (гэта значыць. 10000 гадзіну правілы). Я проста сцвярджаючы, што незалежна ад таго, колькі навучання, коучінг і практыкуючыя людзьмі робіць, калі яны не маюць прыроджаную здольнасць, яны ніколі не маглі б стаць «эліта» спартсменам. Нават з 100.000 гадзін вопыту, не кажучы ўжо пра 10 000 гадзін. Тое ж самае тычыцца і любых іншых складаных навыкаў, як тыя, якія патрабуюць высокага ўзроўню функцыянавання мозгу здольнасцяў.
дададзена аўтар Switch, крыніца
дададзена аўтар Robbie Dee, крыніца
Якое выдатнае апісанне таго, як лічаць эксперты. Гэта на самай справе гэта не чараўніцтва, гэта проста цяжка сфармуляваць усе дыскрэтныя і лагічныя крокі.
дададзена аўтар Warpspace, крыніца
@Dunk, магія будзе, калі гэтыя «элітныя» спартоўцы маглі б выконваць тыя ж без якіх-небудзь трэніровак наогул. Асноўная ідэя заключаецца ў тым, што няма срэбнай кулі. Незалежна ад таго, наколькі таленавіта адзін досвед не можа быць дасягнуты толькі шляхам вывучэння некаторых «дыскрэтныя і лагічных крокаў». Дарэчы, па той жа кнізе, толькі 1-5% людзей з'яўляюцца экспертамі.
дададзена аўтар Dennis Spaan, крыніца

Вы не па літарах, але «выпадковая складанасць» вызначаецца як складанасць, якая не ўласцівая праблема, у параўнанні з «істотнай» складанасці. Метады requireed для «Утаймаванне» будзе залежаць ад таго, дзе вы пачынаеце з. Ніжэй у асноўным адносіцца да сістэм, якія ўжо набылі залішнюю складанасць.

У мяне ёсць вопыт у шэрагу буйных шматгадовых праектаў былі «выпадкова» кампанент значна пераважвае «істотны» аспект, а таксама тыя, дзе гэта не так.

На самай справе, алгарытм Фейнмана ставіцца да нейкай ступені, але гэта не значыць, што «здаецца, вельмі цяжка» азначае толькі магію, якая не можа быць кадыфікаваныя.

Я лічу, ёсць два падыходу, якія павінны быць прыняты. Вазьміце іх абодвух - яны не з'яўляюцца альтэрнатыўнымі. Адным з іх з'яўляецца для яе рашэнняў па частках, а другі, каб зрабіць вялікія пераробкі. Так, вядома, «запісаць гэтую праблему». Гэта можа прыняць форму аўдыту сістэмы - кодавыя модулі, іх стан (пах, узровень аўтаматызаванага тэставання, колькі супрацоўнікаў сцвярджаюць, каб зразумець гэта), агульная архітэктура (ёсць адзін, нават калі ён «мае праблемы» ), стан патрабаванняў і г.д. і да т.п.

Гэта прырода «выпадковай» складанасці, што не існуе адна праблема, якая проста мае патрэбу ў адрас. Так што вам трэба сартаванне. Дзе балюча - з пункту гледжання здольнасці падтрымліваць сістэму і яе далейшай распрацоўкі? Можа быць, нейкі код сапраўды смярдзючы, але не з'яўляецца галоўным прыярытэтам, і мацавання могуць быць зроблены, каб чакаць. З іншага боку, можа быць некаторы код, які будзе хутка вяртаць час, які затрачваецца рэфактарынгу.

Вызначыць план для таго, што лепш архітэктура будзе і паспрабаваць, каб пераканацца, новая праца адпавядае гэтаму плану - гэта паэтапны падыход.

Акрамя таго, агучваць кошт праблем і выкарыстоўваць, каб пабудаваць бізнэс выпадак, каб апраўдаць рэфактарынг. Ключавым момантам тут з'яўляецца тое, што добра спраектаваная сістэма можа быць значна больш надзейнай і правяранай прыводзіць да значна больш кароткія тэрміны (кошт і графік), каб ажыццявіць змены - гэта мае рэальнае значэнне.

Адна з асноўных пераробак прыходзяць у катэгорыі «думаць вельмі цяжка», - вам трэба, каб атрымаць гэта права. Гэта дзе, які мае «Фейнман» (ну, невялікая частка аднаго было б добра) не пагасіць велізарна. Асноўная пераробка, што не прыводзіць да лепшай архітэктуры можа быць катастрофай. Поўная сістэма перапісвае заведама для гэтага.

Няяўныя ў любым падыходзе, ведаючы, як адрозніць «выпадкова» з «істотным» - які павінен сказаць, што вам трэба мець вялікі архітэктар (або каманда архітэктараў), якія сапраўды разумее сістэму і яе мэта.

Сказаўшы ўсё гэта, самае галоўнае, што для мяне <�моцны> аўтаматызаванае тэставанне . Калі ў вас ёсць дастаткова, ваша сістэма знаходзіцца пад кантролем. Калі вы гэтага не зробіце. , ,

4
дададзена
Не маглі б вы растлумачыць, як аўтаматызаванае тэставанне служыць для адрознення выпадковай і істотнай складанасці?
дададзена аўтар Alastair Pitts, крыніца
@RyanSmith. Карацей кажучы, № На самай справе, я не думаю, што ёсць які-небудзь канкрэтны спосаб (акрамя «думаць цяжка») да <�я> адрозніваць гэта. Але гаворка ідзе пра «кіраванні» яго. Калі разглядаць патрабаванні, дызайн, тэставыя выпадкі, як частка архітэктуры сістэмы, то адсутнасць аўтаматызаваных тэстаў самога па сабе выпадковая складанасць, таму даданне аўтаматызаванага тэставання, дзе адсутнічаюць сапраўды дапамагае адрасаваць яго і зрабіць тое, што ёсць больш <�я> кіраваны </я>. Але дакладна гэта не вырашае ўсё.
дададзена аўтар Keith, крыніца

"Everything should be made as simple as possible, but no simpler."
— attributed to Albert Einstein

Дазвольце мне эскіз мой асабісты алгарытм для вырашэння выпадковай складанасці.

  1. Напісаць аповяд карыстальніка ці выпадак выкарыстання. Агляд з уладальнікам прадукту.
  2. Напішыце інтэграцыйны тэст, які не таму, што функцыя не існуе. Агляд з QA або вядучым інжынерам, калі ёсць такая рэч у вашай камандзе.
  3. Тэсты запісу адзінкі для некаторых класаў, якія маглі б прайсці тэст інтэграцыі.
  4. Напісаць мінімальны рэалізацыя для тых класаў, якія праходзяць юніт-тэсты.
  5. блок Агляд і тэсты рэалізацыі з распрацоўшчыкам субрата. Перайдзіце да кроку 3.

Уся канструкцыя магія будзе на кроку 3: як вы стварылі гэтыя класы? Гэта ператвараецца ў адзін і той жа пытанне, як: як вы сабе ўявіць, што ў вас ёсць рашэнне вашай праблемы <�моцны> перад ў вас ёсць рашэнне вашай праблемы?

Характэрна, што <�моцны> толькі здаецца ў вас ёсць рашэнне , здаецца, адна з галоўных рэкамендацый людзей, якія пішуць на рашэнне праблем (так званы «жаданае за рэальнае» Абельсоном і Зуссмана ў Структура і інтэрпрэтацыя кампутарных праграм і" працуе ў зваротным напрамку "ў Поўна Як гэта вырашыць )

З іншага боку, не кожны мае той жа « густ ўяўных рашэнняў »: ёсць рашэнні, якія толькі вы знойдзеце элегантныя, і ёсць іншыя, больш зразумелыя больш шырокай аўдыторыі. Менавіта таму вам трэба прыгледзецца-агляд кода з іншымі распрацоўшчыкамі: ня столькі для налады прадукцыйнасці, але дамовіцца аб зразумелых рашэннях. Звычайна гэта прыводзіць да рэдызайн і, пасля некаторых ітэрацый, каб значна лепш кода.

Калі вы ўстаўляеце з запісам мінімальную рэалізацыі прайсці тэсты і пісаць тэсты, якія зразумелыя многімі людзьмі, вы павінны скончыць з кодам базай, дзе застаецца толькі <�моцны> непрыводных складанасць .

3
дададзена

выпадковая Складанасць

Арыгінальны пытанне (перафразаваў) было:

How do architects manage выпадковая Складанасць in software projects?

Accidental complexity arises when those with direction over a project choose to append technologies that are one off, and that the overall strategy of the project's original architects did not intend to bring into the project. For this reason it is important to record the reasoning behind the choice in strategy.

выпадковая Складанасць can be staved off by leadership that sticks to their original strategy until such time as a deliberate departure from that strategy becomes apparently necessary.

Як пазбегнуць непатрэбнай складанасці

Грунтуючыся на целе пытання, я б перафразаваць гэта наступным чынам:

<�Р> Як архітэктары кіраваць складанасцю ў праграмных праектах?

Гэта перефразировка больш Дарэчы ў целе пытання, дзе Фейнман алгарытм быў затым прывёў у, забяспечваючы кантэкст, які прапануе, што для лепшых архітэктараў, калі яны сутыкаюцца з праблемай, ёсць гештальт, з якога яны затым ўмела пабудаваць рашэнне, і што астатнія з нас не можа спадзявацца даведацца гэта. Маючы гештальт разумення залежыць ад інтэлекту суб'екта, а таксама іх гатоўнасці даведацца асаблівасці архітэктурных варыянтаў, якія маглі б быць у межах сваёй кампетэнцыі.

Працэс планавання праект будзе выкарыстоўваць вывучэнне арганізацыі, каб скласці спіс патрабаванняў праекта, а затым паспрабаваць скласці спіс усіх магчымых варыянтаў, а затым ўзгадніць варыянты з патрабаваннямі. гештальт эксперта дазваляе яму зрабіць гэта хутка, і, магчыма, з невялікай колькасцю нагляднай працай, робячы выгляд, лёгка прыйсці да яго.

Я ўяўляю вам, што яна прыходзіць да яго з-за яго падрыхтоўку. Для таго, каб мець гештальт эксперта патрабуецца веданне ўсіх вашых варыянтаў, і прадбачанне, каб забяспечыць простае рашэнне, якое дазваляе ў агляднай будучыні неабходна, што вызначаецца праект павінен прадугледжваць, а таксама гібкасць для адаптацыі да зменлівых патрэб праект. падрыхтоўка Фейнман была тое, што ён меў глыбокае разуменне розных падыходаў да тэарэтычнай і прыкладной матэматыцы і фізіцы. Ён быў прыроджаныя цікаўныя, і досыць яркі, каб мець сэнс рэчаў, ён адкрыў аб натуральным свеце вакол яго.

Эксперт тэхналогіі архітэктар будзе мець падобнае цікаўнасць, абапіраючыся на глыбокае разуменне асноў, а таксама шырокага ўздзеяння вялікага разнастайнасці тэхналогій. Ён (ці яна) будзе мець мудрасць, каб абапірацца на стратэгіі, якія апынуліся паспяховымі ў розных даменах (напрыклад, Асновы Unix праграмавання ), і тыя, якія адносяцца да пэўных даменаў (напрыклад, дызайн шаблоны і стыль кіраўніцтва ). Ён не можа быць глыбока дасведчаным кожны рэсурс, але ён будзе ведаць, дзе знайсці рэсурс.

пабудова рашэння

Гэты ўзровень ведаў, разумення і мудрасці, можна атрымаць з вопыту і адукацыі, але патрабуе розуму і разумовай дзейнасці пазбіваць стратэгічнае рашэнне гештальт, які працуе разам такім чынам, каб пазбегнуць выпадковай і непатрэбнай складанасці. Яна патрабуе ад спецыяліста, каб пакласці гэтыя асновы разам; гэта былі работнікі разумовай працы, якія Друкер прадбачылі, калі першы прыдумаў гэты тэрмін.

Назад да канкрэтных канчатковых пытанняў:

Specific methods to tame выпадковая Складанасць can be found in the following sorts of sources.

Прытрымліваючыся прынцыпаў Unix праграмавання будзе вам ствараць простыя модульныя праграмы, якія добра працуюць і з'яўляюцца надзейнымі з агульнымі інтэрфейсамі. Пасля Design Patterns дапаможа вам будаваць складаныя алгарытмы, якія з'яўляюцца не больш складаным, чым гэта неабходна. Пасля Стылю кіраўніцтва забяспечыць ваш код чытаны, ремонтопригоден і аптымальны для мовы, на якім напісаны код. Эксперты засвоілі многія з прынцыпаў, знойдзеных у гэтых рэсурсах, і будуць мець магчымасць паставіць іх у згуртаванай без шва.

2
дададзена
Што вы маеце на ўвазе пад «гештальт»? Я выявіў, што гэта так жа, як «парадыгма» - звычайна няправільна, або выкарыстоўваюцца, каб даць што-то паветра навуковай супольнасці.
дададзена аўтар Mark Stahler, крыніца
дададзена аўтар Aaron Hall, крыніца