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


11

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

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

Крім того, я також досить рішуче проти більшості сучасних стилів C ++ та OO. Ті, хто написав цей код, справді випили глибокий OO та Modern C ++ kool-ade. Я вважаю, що насправді коду набагато важче дотримуватися, набагато важче вирішити, де щось виправити чи змінити. Я не знаю, чи це частина лівої / правої відмінності (або як би ви цього хотіли назвати) чи ні.

Але працювати над C ++ я повинен - ​​люди залежать від мене за мої доходи. Які поради та методи вирішити цю ситуацію, щоб бути максимально ефективним для мого роботодавця?


9
Це не різниця лівий мозок / правий мозок - ніхто не може зрозуміти або змінити такий код C ++ без великих зусиль, крім людини, яка його написала (часто навіть не вони). Просто переконайтесь, що коли вас запитають про оцінку того, як довго щось займе, ви накладете це на добрі кількасот відсотків, щоб мати справу з "сучасним" дизайном.
Carson63000

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

1
@Rocket: Ви підірвали це :-), але я погоджуюся по шматочках.
Geek

@mojuba - так, ми використовуємо додаткову форму C ++: D
DarenW

2
Це називається "Спадковий кодекс", і проблема не лише у вас. Дивіться en.wikipedia.org/wiki/Legacy_code за посиланням на книгу Майкла Пір'я про те, як приручити такого звіра.

Відповіді:


2

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

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


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

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

Ще один момент - це знати, що ви хочете створити: Графіка, програми, веб-сайти, процеси або системи? Це все трохи різні речі, які, бажаючи створити, вас можуть попросити "Створити що?"


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

4
Мені подобається обслуговування коду. Хоча це швидше хірургія, ніж чистка туалетів: вам доведеться виправити частину робочої системи, не порушуючи її.
Френк Ширар

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

3
@FrankShearar Іноді це як хірургія, зроблена в туалеті; (
mlvljr

16

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

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

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

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


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

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

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

2
@darrenw впевнений, smalltalk 80
Тім Вілліскрофт

10

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

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

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

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

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

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

Ще зі мною поки що? Ось де я дійшов до того, що я мав на увазі під собою, що дві сторони були дзеркальними зображеннями один одного. Тоді ніхто цього не усвідомлював, але вони, по суті, будували ескіз того, де функціональність лежить у мозку. Дійсно, кожне з функцій-позицій Юнга було відображено на грубі місця в мозку. Як виявляється, всі функції Р (інтровертне судження та екстравертне сприйняття) знаходяться в правій частині мозку, а функції J - у лівій частині мозку.

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

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

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

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

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


Приємно глибокий і досить довгий, щоб прочитати, щоб відкласти справжню роботу на деякий час!
DarenW

6
Дуже цікавий матеріал. Маєте джерела?
Мейсон Уілер

4

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

О, і, можливо, ви не зможете, це занадто ненадійно. Але так як ви запитали ...;)


2

Я думаю, що візуально також і деталі типографії мене переконали.

Терміни Google: Британський сайт для дислексії також Стилі навчання: візуальне просторове мислення, повне навчання.

Поняття спочатку, поради після

  1. Правомовні люди уявляють усе у своєму «розумовому оці».
  2. Коли ваша візуалізація добре відповідає дійсності, робота легка
  3. Правомовні мислителі, які не працюють з лівим розумом, повинні добре покладатися на візуалізацію
  4. Правильно зауважені учні навчаються всього цього одразу "ага!" потім вкладають деталі в ментальну конструкцію. Їм потрібен огляд ПЕРШИЙ, потім деталі.
  5. Без огляду контексту, деталі пливуть у вакуумі, не пов'язані між собою в очах розуму - тому потрібно запам'ятовувати грубу силу. Дуже важко для правого мозку.

ПОРАДИ, які мені допомогли:

  • 1 Використовуйте колір, щоб виділити синтаксичні частини
    1. напишіть псевдокод коду, який ви налагоджуєте: це робить це, потім перейдіть сюди та позначте розділи коду мітки, щоб вони відповідали
    2. якби об'єкти були, скажімо, справжніми тваринами, вони мали б звички та очікувану поведінку. Це легше візуалізувати спосіб мислення про кодування.
    3. Я уявляю код як історію з псевдокодом як свої замітки, а потім слідкую за процесом.

  • Який розділ виправити далі?

  • Мій робочий процес

  • Хто там живе? (процес, з'єднання, дані тощо)

  • що їм потрібно зробити? (функція) Гаразд

    гаразд

  • код десь він може бути синтаксисом / правописом перевірений. OK скопіювати та вставити

  • Тест

    Результат -> це працює? Так, продовжуйте

    Немає? Герої повинні виконувати роль Гамлета, де всі вмирають.

  • Повернення до навколишнього середовища-

  • щось залишено ?, помилки в синтаксисі
  • потребує з'єднання
  • потребує даних
  • код помилки має значення?
  • він працює в іншій частині коду?
  • Проблема з версією?
  • вона повинна працювати
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.