Right-Brainer는 어떻게 대규모 Left-Brainer 코드를 처리 할 수 ​​있습니까? [닫은]


11

나는 예술가 / 물리학 자라고 설명하지만 대부분 예술가입니다. 수학을 할 수 있고, 단어를 다루고, 좌뇌로 간주되는 "논리적"물건이지만, 노력하고 실수를하는 반면, 나는 우뇌와 관련된 것들에 대해 잘 생각하고 있습니다. 사고-공간적 관계, 전체 론적 인 큰 그림의 맥락 등. 오른쪽 왼쪽 뇌 이론이 지나치게 단순화되고 정신 활동이 그렇게 단순하지 않기 때문에 퍼지가있는 모든 것은 물론입니다. 그러나 나는 예술가, 비디오 감독, 요리사 및 기타 비언어적 사고, 독창적 인 유형에 잘 어울리는 것을 알고 있지만 "IT"또는 하드 코어 소프트웨어 엔지니어의 대부분의 사람들은 세부 사항에주의를 기울여 자세를 유지하면서 다르게 작동하는 마음을 가지고 있습니다. 한 번에 많은 세부 사항을 염두에두고 강력한 합리적이고 언어적인 기능을 제공합니다.

그래서 나는 여기에 OO에 매우 무거운 C ++ 소프트웨어의 거대한 떼에서 까다 롭고 모호한 버그를 해결하기 위해 돈을 받고 있으며 20 개의 다른 클래스와 메소드 이름을 염두에 두지 않으면 한 줄의 코드는 의미가 없습니다. 그들 사이의 관계, 실행의 흐름 (매우 스파게티 같은)과 다른 세부 사항.

그 외에도, 나는 현대의 많은 C ++ 및 OO 스타일에 대해서도 강력하게 반대합니다. 이 코드를 작성한 사람들은 실제로 깊은 OO와 Modern C ++ kool-ade를 마 셨습니다. 실제로 코드를 따르기가 더 어려워지고 수정하거나 변경할 위치를 결정하기가 훨씬 더 어려워졌습니다. 이것이 왼쪽 / 오른쪽 차이의 일부인지 (또는 당신이 그것을 부르기를 원하는지) 모르겠습니다.

그러나 나는 C ++에서 일해야합니다. 사람들은 저의 수입에 의존합니다. 이 상황을 처리하고 고용주에게 가능한 한 효과적인 팁과 기술은 무엇입니까?


9
좌뇌 / 우뇌의 차이는 아닙니다. 아무도 그것을 작성하는 사람 (종종, 심지어는 아니고)을 제외하고는 엄청난 노력없이 그러한 종류의 C ++ 코드를 이해하거나 수정할 수 없습니다. 시간이 얼마나 걸리는지 예상 할 때 "현대적인"디자인을 다루기 위해 수백 퍼센트 정도의 비용을 지불해야합니다.
Carson63000

8
좌절하지 마십시오. C ++은 디자인 목표가 유용성 (인간)이나 컴파일 가능성, 명확성, 정확성 (컴파일러)이 아닌 매우 이상한 언어입니다. C ++의 유일한 디자인 목표는 가능한 모든 어휘 순열이 완전히 실용적이지 않더라도 무언가를 의미하도록하는 것이 었습니다.

1
@ 로켓 : 당신은 그것을 날려 버렸습니다 :-) 그러나 나는 조각으로 동의합니다.
Geek

@mojuba-그렇습니다. 우리는 C ++ : D
DarenW의 고급형

2
이것을 "레거시 코드"라고하며 문제는 혼자가 아닙니다. 그러한 짐승을 길들이는 방법에 대한 Michael Feathers 책의 링크는 en.wikipedia.org/wiki/Legacy_code 를 참조하십시오 .

답변:


2

퍼지에 편한 것이 강점 인 디자인 측면에서 더 많은 것을 시도해보십시오. 커리어 진행 측면에서 나의 제안이 될 것입니다. 창의력을 좋아하는 사람은 유지 보수 작업이 적합하지 않을 수 있지만 가능한 경우 새 작업을 수행하는 것이 더 나을 수 있습니다.

자신의 일에 자부심을 갖고 싶은 데는 아무런 문제가 없지만, 세부 사항에 얽매이지 않고 싶어하는 것은 개선하기 위해 새로운 접근법을 찾아야 할 수도 있습니다. 쓰러지고 더러워진 것으로 보지 않고 어떻게 든 재미있게 만들 수있는 또 다른 관점이있을 수 있습니다.


일부 사람들은 새로운 시스템에 배치하는 것보다 기존 시스템을 조정하는 것을 선호하기 때문에 지원 및 유지 보수에는 팬이있을 수 있습니다. 나는 에테르에서 무언가를 꺼내기보다는 기존 시스템에서 더 잘 작동하는 경향이 있음을 알고 있습니다.

당신이 시도하는 것은 사람들이 다양한 문제 지점과 브레인 스토밍 솔루션을 다루기위한 아이디어를 원할 때 주목하는 것입니다. 어떤 코드 줄을 변경해야하는지 아는 것이 아니라 누군가에게 "그 객체를보고 그것이 주장하는 것보다 더 많은 일을하고 있는지 확인 했습니까?" 일종의 것.

또 다른 요점은 그래픽, 응용 프로그램, 웹 사이트, 프로세스 또는 시스템 중 무엇을 만들지 알고 있습니까? 이것들은 모두 만들고 싶은 것에 약간 다른 것들이며, "무엇을 만드시겠습니까?"


이 아이디어는 어제 내 상사와의 회의에서 거의 직선적입니다. 나는 모든 사람들이 항상 더 바람직한 것을 창조하지는 않으며 항상 화장실 청소와 같은 유지 보수를하지 않습니까? 누군가 "나는 오히려 물건을 만들고 싶다!"라고 말하면 그들은 진지하게 받아 들여질 것입니까?
DarenW

4
내가 좋아하는 코드를 유지 보수합니다. 그것은 화장실을 청소하는 것보다 수술과 같습니다.
Frank Shearar

"이더에서 무언가를 끌어 내십시오"-레몬 도넛을 공중에서 꺼내어 소녀에게 감동을주는 꿈을 떠올리게합니다. 새로운 것을 창조합니다.
DarenW

3
@FrankShearar 가끔 화장실에서하는 수술과 같습니다; (
mlvljr

16

코드가 특히 객체 지향적이거나 특히 "Modern C ++"와 비슷한 것처럼 들리지 않습니다 . 오히려 좋은 객체 지향 의 핵심 요소 중 하나 는 캡슐화이며, 주요 목표는 주어진 시간에 추적해야 할 것들의 수 를 줄이는 것입니다. 마찬가지로, "매우 스파게티와 같은 ... 실행 흐름"은 객체 지향적이거나 현대적인 것이 아닙니다.

이제 유지 관리중인 코드를 보았을 때 다르게 보거나 코드가 현재 유지 관리하는 것과 비슷한 것으로 보일 수 있습니다. 추측하기가 다소 어렵습니다. 내 코드의 작동 방식에 대한 모든 세부 사항을 추적하려고하면 오히려 스파게티와 같은 제어 흐름으로 볼 수 있다고 가정합니다.

예를 들어, 나는 많은 프로그래머들보다 상당히 암묵적인 변환에 대해 훨씬 더 좋아하거나 적어도 관대합니다. 프록시 클래스와 같은 것을 꽤 많이 사용합니다. 이것은 단일 함수를 호출하는 과정에서 다른 유형의 임시 객체가 3 ~ 4 개 쉽게 생성 될 수 있음을 의미합니다 (실제로 함수를 실행 하는 것이 아니라 호출 하는 것만 말하는 것은 아닙니다). 물론, 모든 임시 객체는 함수 호출을 포함하는 표현식의 끝에서 다시 파괴됩니다. 계산하면 코드에서 "명확하게"호출 된 하나의 함수를 호출 / 복귀 할 때 수십 개 이상의 개별 함수가 쉽게 호출 될 수 있습니다.

방법은, 그러나이라고하고 것들의 요점은 쉽게 할 수 있도록 무시 같은 세부 처리에 관련된 퀴즈 (예를 들어) 대부분의 방법 은 특정 객체가 표현을하고, 정말 어떤에만 집중 입니다 대신. 특정 부분에서 버그를 발견 한 경우 해당 코드의 대부분 만 처리하면됩니다. 그러나, 작고 간단한 클래스를 만들어서 거의하지 않는 클래스를 만들어서 많은 것을 피하려고 노력합니다. 그 과정이 명백히 정확 하다는 사실을 깨닫는 데는 한 눈에 지나지 않습니다.


어! 그런 종류의 물건들은 나를 울부 짖습니다! 어쩌면 내 생각 스타일이 너무 낮기 때문에 "opcode 지향 프로그래밍"과 같이 편안하지 않을 수도 있습니다.
DarenW

2
"사소한 일을 쉽게 무시할 수있게하기 위해"코딩 스타일은 사소한 영광 인 것 같습니다. 이번 주에 한 가지 작은 것을 고치려고 노력하면서, 실제로 아무것도하지 않는 믿을 수없는 양의 세부 사항이있었습니다.
DarenW

"... 작고 간단한 클래스를 만들어서 조금만해도 거의 한 눈에 걸리지 않습니다 ..."좋은 오픈 소스 예제가 있습니까?
DarenW

2
@darrenw sure, smalltalk 80
Tim Williscroft

10

경고 :이 답변은 매우 길며 많은 정신병을 가지고 있습니다 (설명하려고하지만 여전히). 내가 무엇을 말할 수 있습니까? 심리학은 프로그래밍 이외의 내가 가장 좋아하는 과목 중 하나입니다.

나는 예술가 / 물리학 자라고 설명하지만 대부분 예술가입니다. 수학을 할 수 있고, 단어를 다루고, 좌뇌로 간주되는 "논리적"물건이지만, 노력하고 실수를하는 반면, 나는 우뇌와 관련된 것들에 대해 잘 생각하고 있습니다. 사고-공간적 관계, 전체 론적 인 큰 그림의 맥락 등. 오른쪽 왼쪽 뇌 이론이 지나치게 단순화되고 정신 활동이 그렇게 단순하지 않기 때문에 퍼지가있는 모든 것은 물론입니다. 그러나 나는 예술가, 비디오 감독, 요리사 및 기타 비언어적 사고, 독창적 인 유형에 잘 어울리는 것을 알고 있지만 "IT"또는 하드 코어 소프트웨어 엔지니어의 대부분의 사람들은 세부 사항에주의를 기울여 자세를 유지하면서 다르게 작동하는 마음을 가지고 있습니다. 한 번에 많은 세부 사항을 염두에두고 강력한 합리적이고 언어적인 기능을 제공합니다.

이것은 실제로 다소 오래된 신경 과학에 대한 관점에 근거합니다. 어느 시점에서 과학자들은 왼쪽 뇌는 논리와 원시 감각 데이터에만 책임이 있고 오른쪽 뇌는 직관과 느낌에 대해서만 책임이 있다고 믿었습니다. 결과적으로, 왼쪽 뇌는 실제로 오른쪽 뇌의 모든 것을 할 수 있으며 그 반대도 가능합니다. 누군가으로 매우 아직 논리적 방향 및 공간 방향으로 끔찍한, 전통적으로 우뇌와 관련된 예술적 창의성의 완전히없는 권리 두뇌,이 증명할 수 있습니다.

왼쪽과 오른쪽 뇌의 차이점을 생각하는 가장 좋은 방법은 그것들을 서로의 거울상으로 생각하는 것입니다. 이를 이해하려면 배경 데이터가 필요합니다. Carl Jung이라는 심리학자는 20 년대에 성격 이론을 생각해 냈는데, 성격 이론은 몇 가지 차원으로 나뉘 었습니다. 아마도 그 중 하나에 대해 들어봤을 것입니다 : 내향성 대 외향성. 필자는 이 주제에 대해 몇 가지 블로그 게시물 을 작성 했지만 기본적으로 이것으로 요약됩니다. 내향성은 다른 사람들과 차별화되는 반면 외 버전은 다른 사람들과 연결하는 방법에 중점을 둡니다. 이것을 "태도"라고합니다.

그런 다음 사고, 느낌, 감각 및 직감의 네 가지인지 기능이 있습니다. 간단히하기 위해이 두 기능 중 하나는 "판단"기능 (사고와 느낌)으로 간주되고 다른 두 기능은 "인식"기능이라고 가정 해 봅시다. 심사 기능은 결정을 내립니다. 당신이 판단의 사고에있을 때, 당신은 놀라움을 피하려고 노력하고 있습니다. 미리 모든 결정을 내리고 싶을 때 놀라움을 느낄 때 적응할 필요가 없습니다. 미리 계획을 많이 했으므로 일단 결정을 내리면 단단하고 융통성이없는 경향이있을 수 있습니다. 반면에, 지각적인 사고 방식은 바지의 좌석으로 날아가고 펀치로 구르는 것을 선호하는 경향이 있습니다.

일반적으로, 기능과 태도를 결합하여 (창의적으로 명명 된) 기능 태도 (내 향적 사고, 외향적 감정 등)를 만듭니다. 사람들의 의식적인 성격은 주로 지배적 인 기능 태도와 보조 기능 태도에 의해 정의됩니다. 결국, 심리학자들은 크게 두 가지 유형의 사람들이 있다고 합의에 이르렀습니다. 일차적 인 두 가지 기능이 내 향적 판단 기능과 외향적인지 기능으로 구성되는 사람들, 또는 일차적 인 두 가지 기능이 외향적 판단 기능과 내 향적인지 기능으로 구성된 사람들 . MBTI 또는 이와 유사한 성격 테스트를 본 적이 있다면 마지막 편지에 귀하가 속하는 카테고리가 표시됩니다. 당신이 P라면, 그것은 당신이 내성적 인 판사 / 외향적 인식 자이고 J가 다른 방법이라는 것을 의미합니다.

아직도 나랑 같이있어? 여기에 내가 서로의 거울 이미지 인 양면이 의미하는 것을 얻을 수있는 곳이 있습니다. 당시에는 아무도 몰랐지만, 본질적으로 기능이 뇌의 어디에 있는지에 대한 스케치를 작성하고있었습니다. 실제로 Jung의 각 기능 자세는 뇌의 거친 위치에 매핑되었습니다. 결과적으로 모든 P 기능 (내 향적 판단 및 외향적 지각)은 뇌의 오른쪽에 있고 J 기능은 뇌의 왼쪽에 있습니다.

좌뇌 사람들이 세부 사항을 잘하고 우뇌 사람들이 "큰 그림"을 잘한다고 말할 때마다 ( "전체 그림"이 더 정확하다고 말할지라도), 당신은 사물의 외향적 측면에 집중하고 있습니다. . 좌뇌가있는 사람이 우뇌가있는 사람을 관리한다면, 왼손잡이가 옳은 일이 어떻게 일을 앞두고 미리 ​​수행 할 것인지에 대한 모든 세부 사항을 알고 싶어 할 것입니다. 그들은 요구 사항이 정해져 있고 마감 기한이 미리 결정되기를 원합니다. 정당한 사람들은 그들이 무엇을해야하는지에 대한 광범위한 아이디어를 원하기 때문에 나중에 세부 사항을 채울 수 있습니다.

그러나 이것이 당신이 겪고있는 것으로 보이지는 않습니다. 왼손잡이의 코드는 아마도 끔찍하게 미리 잘 생각되지 않았고 일부 예측으로 예방할 수있는 몇 가지 문제가있는 것처럼 보입니다. 이것은 머리에 코드와 같은 추상 모델을 만들 때 내 향적 인 기능을 사용하기 때문에 다른 방식으로 작동하기 때문입니다. Righty는 해당 모델을 미리 구축하고 필요한 모든 세부 사항 채우 거나 모든 세부 사항을 쉽게 채울 있는 방식으로 모델을 구축하려고합니다 . 또한 최상의 접근 방식 측면에서 견고 해 질 수 있습니다 (C ++의 고급 기능에 대해 어떻게 생각하는지에 유의하십시오). 왼손잡이의 모델은 더 임시적이고 갈수록 채워질 것입니다.

나의 경험은 이것 때문에 좌파들이 모든 것을 과도하게 설계 한 것에 대한 권리를 비난 할 것이고, 권리자들은 좌파들이 너무 빠르고 더럽다고 비난 할 것이다. 양측은 그들에게 진실을 가지고 있지만, 그 접근 방식이 극단적으로 이루어질 때만 가능합니다. 재미있는 점은 다음과 같습니다. 동일한 목표를 달성하기 위해 반대의 접근 방식을 취하고 있습니다 (즉, 작업 수행). 권리자들은 모델을 미리 결정하여 구현하는 데 더 적은 시간을 투자하여 전체 프로젝트를 더 빨리 완료하기를 원합니다. 왼손잡이는 건축 시간을 단축하여 더 빨리 일을 처리 할 수 ​​있기를 원합니다.

덧붙여서,이 두 가지 태도는 프로젝트 관리 유형에 관한 것 (타임 라인 결정, 요구 사항 도출 등)에서 반대입니다. 이것은 한 쪽이 다른 쪽이 너무 단단하다고 비난하는 반면에 다른 쪽은 다른 쪽이 충분히 계획하고 있지 않다고 주장하고, 다음 주장은 양쪽이 정반대의 입장을 취하게하는 매우 혼란스러운 상황으로 이어질 수 있습니다.

이 모든 것에 대해 무엇을 할 수 있습니까? 이러한 차이점을 인식하고 상대방의 견해를 최대한 수용하려고 노력하는 것 외에는 아무것도 없습니다. 그러나 문제는 이것이 두 가지 방법으로 진행된다는 것입니다. 왼손잡이를 최대한 이해하고 수용 할 수 있지만, 그들이 호의를 돌려주지 않으면 큰 차이가 없습니다. 이것은 항상 도전입니다. 좌익들이 멍청하고 우익들의 삶을 비참하게 만들고 싶어하기 때문이 아니라, 좌익들이 프로그래밍 분야에서 지배적이기 때문에 사용된다. 만약 당신의 사고 방식이 다른 모든 사람들에 의해 반향된다면, 당신도 당신이 옳다는 확신을 가질 것입니다.


멋지고 깊고 잠시 동안 실제 작업을 끝내기 위해 읽을만큼 충분히 길다!
DarenW

6
매우 흥미로운 것들. 소스가 있습니까?
메이슨 휠러

4

직감을 믿어 라. 당신이 좋은 전문가라면, 그것은 좌뇌가 의식적으로하는 "뇌"(왼쪽 또는 오른쪽)에 관계없이 당신이 직관적으로 할 수있는 것을 의미합니다. 결국 그것은 같은 것입니다. 불행히도 우리는 우리의 잠재 의식을 통제하지는 않지만, 우리의 의식보다 더 빨리 일을합니다. 어디에도없는 직관적 인 통찰력은 잠재 의식 계산의 결과입니다.

아, 그리고 당신은 실패 할 수 있습니다, 너무 신뢰할 수 없습니다. 그러나 당신이 요청한 이후로 ...;)


2

나는 또한 시각적으로 생각하고 타이포그래피의 세부 사항은 나를 악하게 생각합니다.

구글 용어 : 영국 난독증 사이트 학습 스타일 : 시각적 공간 사고, 전체에서 부분 학습.

먼저 개념, 팁 후

  1. 올바른 두뇌를 ​​가진 사람들은 모든 것을 '마음의 눈'으로 상상합니다.
  2. 시각화가 현실과 잘 일치하면 작업이 쉽습니다.
  3. 좌뇌 사고를 잘하지 않는 우뇌 사상가들은 시각화에 의존해야한다
  4. 우뇌 학습자들은 모든 것을 한 번에 '아하!' 그런 다음 세부 사항을 정신 구성에 맞 ​​춥니 다. 먼저 FIRST 개요와 세부 사항이 필요합니다.
  5. 맥락에 대한 개요가 없으면 세부 사항은 진공 상태로 떠 다니고 마음의 눈에 연결되지 않으므로 무차별 강제 암기를 사용해야합니다. 오른쪽에 아주 힘들다.

도움이 된 팁 :

  • 1 색상을 사용하여 구문 부분을 구별
    1. 디버깅하는 코드의 의사 코드를 작성하십시오.이 작업을 수행 한 다음 여기로 이동하여 코드 섹션에 레이블을 지정하십시오.
    2. 만약 실제 동물이 대상이라면 습관과 예상되는 행동이있을 것입니다.
    3. pseudicode를 내 노트로 사용하여 이야기로 코드를 상상 한 다음 그 과정을 따르십시오.

  • 다음에 고칠 부분은 무엇입니까?

  • 내 워크 플로우

  • 누가 거기에 삽니까? (프로세스, 연결, 데이터 등)

  • 그들은 무엇을해야합니까? (기능) OK

    확인

  • 어딘가에 그것을 구 문화 할 수 있습니다.

  • 테스트

    결과-> 작동합니까? 예, 계속가요

    아니? 캐릭터는 모두가 죽는 햄릿을 연기해야합니다.

  • 환경으로 돌아 가기

  • 무엇을 남겼습니까?, sysntax 오류
  • 연결이 필요하다
  • 데이터가 필요하다
  • 오류 코드에 의미가 있습니까?
  • 코드의 다른 부분에서 작동합니까?
  • 버전 문제?
  • 작동해야한다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.