전문 프로그래머가 아닌 사람이 사용하기 쉽고 해석하기 쉬운 코드를 작성하도록 도와줍니다.


20

저는 엘비스입니다. 아인슈타인이되기 위해 열심히 노력하고 있습니다. 저는 Mort를 위해 일합니다.

이 미친 바보가 무슨 소리 야!?!? (처음 몇 단락 만 읽으면됩니다)

그 링크를 읽고 싶지 않다면 기본적으로 나는 전문 프로그래머이며 내 상사는 (정확히 정확합니다) :

컴퓨터 공학 학위는 없지만 Office 및 VBA에 대해 잘 알고 있으며 일반적으로 동료들과 공유하는 생산성 응용 프로그램을 작성하는 전문 업무용 프로그래머

내 직업의 많은 부분이 자신의 코드를 모아서 제작 준비를하고 있습니다. 그러나 매우 열악한 스타일과 화물 문화 는 이것을 어렵게 만듭니다. 이것은 그가 프로그래밍 서적을 읽거나 그의 코드를 리팩터링하도록 도와주지 않기 때문에 더욱 복잡해집니다.

전문 프로그래머가 아닌 사람을 도울 수있는 다른 전략이 있습니까? 전문 프로그래머가 앞으로 더 읽기 쉽고 사용하기 쉬운 코드를 작성하지 않습니까?


3
Workplace.stackexchange.com 에 숨겨진 좋은 질문이있는 것 같지만 질문이 현재 형식으로 잘 수신 될지 확신 할 수 없습니다.
Bart van Ingen Schenau

2
@BartvanIngenSchenau 나는 거기에 게시하는 것을 고려했지만 문제는 프로그래밍에 따라 다르기 때문에 여기에서 선택했습니다. 나는 이것이 (도움으로부터) 개발 방법론과 프로세스소프트웨어 엔지니어링 관리라고 생각한다 . 나는 일반적인 직장 문제, 사무실 정치 에 대해 묻지 않고 "그와 같은 사람과 함께 일하기 위해 어떤 소프트웨어 개발 전략을 사용할 수 있는지"를 묻습니다.
durron597 님

3
@gnat 나는 이것이 하나의 큰 차이로 인해 중복이 아니라고 생각합니다.이 중복에서 잘못된 코드가 이미 작성되었습니다. 여기서 문제는이 나쁜 코드가 다른 사람이 처음에 작성되는 것을 방지하는 방법입니다.
Euphoric

6
문제는 당신 이이 상황에서 부하 직원 무엇을 할 수 있습니까?
Philipp

4
여기서 해결해야 할 문제가 없습니다. 일의 질이 낮기 때문에 회사의 다른 사람들로부터 문제를 겪고 있습니까? 유지 관리 비용으로 인해 중요한 마감일이 누락되었거나 소프트웨어가 지속적으로 오작동하여 사용자 및 / 또는 사용자가 문제를 일으 킵니까? 위의 어느 것도 없다면, 당신과 당신의 상사가 생성하는 저질의 작업이 비즈니스가 원하는 것과 정확히 필요한 것이라고 생각합니다. 다른 직업을 원한다는 것 외에는 아무런 문제가 없습니다. 어떤 시점에서 당신 만 방법을 결정할 수 있습니다 많은 사용자가 다른 작업을 할 그것의 가치 위험이있는 경우
지미 호파

답변:


8

여러 의견에 대한 귀하의 답변을 살펴보면, 특히 경험이 많은 분야 전문가 (전문가라고 부름)가 필요한 전문 분야에서 일할 때 경험하는 것이 매우 일반적이라는 것을 알고 있는지 모르겠습니다. 당면한 문제에 대한 알고리즘을 통합하고 조정합니다.

과학자에 대해 불평하고 변화를 기대하기보다는 과학자가 "코드 품질"에 대해 많은 관심을 기울여야한다는 것을 인식하지 마십시오. 다른 소프트웨어 개발자가 프로그래밍이 아닌 도메인에 관심이있는 사람은 물론 "코드 품질"에 관심을 갖기 어려운 경우가 종종 있습니다.

여기에서 어디로 가는지는 "과학자"가 자신의 작업을 이해하는 능력에 대한 신뢰 정도에 크게 좌우됩니다. 그들이 당신이 그들의 코드를 이해할 수 있고 자신을 수정할 때 코드를 이해하지 못한다고 확신한다면 일반적으로 문제는 없습니다. 그들은 당신의 전문 지식에 의존합니다.

그러나 과학자가 코드 변경을 원하지 않으면 아직 자신의 신뢰를 얻지 못했을 가능성이 높습니다. 그렇다면 과학자 고정에 중점을두기보다는 "고정"에 집중해야합니다. 내가 의미하는 바는 자신감을 얻기위한 조치를 취하는 것입니다. 아마도 가장 쉬운 방법은 다음과 같습니다.

테스트 과정의 일부로 :

  1. 알고리즘을 이해하기 쉬운 것으로 전환하기 시작하십시오 (예 : 다이어그램, PDL, 수학 표기법)
  2. 알고리즘 이해를 배우십시오.
  3. 최첨단 사례를 확인하십시오.
  4. 단순화 된 "대체"표현이 올바른지 과학자에게 문의하십시오.
  5. 그리고 발견 한 문제를 가장 중요하게 식별합니다. "비난"소리없이 "알고리즘을보고 있었는데 XYZ가이 작업을 수행해야하는지 아니면 그렇게해야하는지 알았습니까?" 이 총알보다 더 나은 자신감을 얻을 수있는 것은 없습니다.

버그를 발견하고 관심 영역에 관심을 보인 경우, 코드를 수정하여 더 전문적인 것으로 만들 수있는 확률이 훨씬 높아집니다. 종종 프로토 타입을 더 이상 코딩 할 필요조차 없다고 생각합니다. 그들은 단지 당신이 그들에게 가르쳐주지 않은 "대체 된"표기법 중 하나에 무언가를 쓰게 될 것이며, 그것들이 무엇을 의미하는지 알 것이라는 확신을 가질 것입니다.

항상, 나의 첫 번째 시도는 당신을 돕기 위해 과학자가 어떻게 "의사 소통"을 더 잘 도울 수 있는지에 대한 제안을하는 것입니다. 그러나 당신이 그것을 시도한 것처럼 들립니다. 따라서 제어 할 수있는 유일한 단계는 수행하는 것입니다. 자신감을 얻으면 거의 항상 도메인 전문가가 다른 사람에게 코딩을 전달하고 코드 작성에 필요한 모든 세부 사항에 대해 걱정할 필요가 없습니다. 알고리즘 개선에 집중하고 있습니다.

때때로, 당신이 할 수있는 모든 제안을 제안하고 그 후에 남겨 두십시오. 자신이 100 % 정확하더라도 이미 거부하거나 원하지 않는 일을 계속하고 있다면 상사 나 선배에게 깊은 인상을주지 않을 것입니다. 사실, 이것은 제안자이든 제안자이든 관계를 손상시킬 수 있습니다. 업무를보다 쉽게하기 위해 할 수있는 일에 집중하십시오.


19

그가 "전문 프로그래머가 아닌 사람이라면 결코 전문 프로그래머가 될 수 없습니다"라고 말하고 작업의 많은 부분이 실제로 "무엇을 함께 묶어 코드를 작성하여 제작할 준비가 되었으면" 2 인 팀은 프로그래밍을 당신에게 맡기고 프로젝트의 관리 부분에 집중할 때 더 생산적 일 것입니다.

그러나 이것은 당신이 옳다고 가정합니다. 우리 프로그래머들은 항상 다른 사람들이 작성한 코드를 우리 자신보다 훨씬 나쁘게 무시하는 경향이 있습니다. 이 선입견은 실제로 패배하기 어렵고 동료들을 과소 평가하게 만듭니다. "카고 컬트 프로그래밍"이라고 생각하는 것은 그의 관점에서 "최고의 모범 사례"일 수 있으며 "객체 지향 패턴의 우아한 적용"이라고 생각하는 것은 "필요하지 않은 오버 엔지니어링"일 수 있습니다. 나는 당신의 이야기의 측면 만 알고 있기 때문에 나에게 말하기 어렵다.

다른 사람들의 코드에 대한 경멸은 프로그래밍 스타일이 다양할수록 강해집니다. 이 경우 하나의 프로젝트에서 서로 다른 프로그래밍 스타일을 혼합하면 유지 관리가 매우 어렵 기 때문에 긍정적 인 본능입니다.

두 사람이 다른 사람의 스타일을 모방 할 수없는 경우 명확한 책임을 정의 할 수 있습니다. 한 사람은 신청서의 한 부분을 책임지고 다른 사람은 다른 사람을 책임집니다. 두 모듈 사이에 명확한 인터페이스를 정의하되 내부 구현은 담당 책임자에게 맡기십시오. 코드에서 버그를 더 잘 알기 위해 단위 테스트를 작성하고 함께 지정한 인터페이스 계약에 따라 코드가 작동하지 않는 시점을 지적 할 수 있습니다.

명확한 코드 소유권을 확립하면 다양한 스타일의 더 나은 공존에 도달 할 수 있습니다. 또한 두 사람 모두 자신의 코드로 버그를 수정해야하는 경우 서로 코드를 자주 탐색 할 필요가 없습니다.


2
나는 이것을하고 싶습니다. 문제는 우리가 지금 각각 40 주 동안 일한다면 노동 분업이 20과 60과 같은 것으로 바뀌고 나머지 시간과는 거의 관계가 없다는 것입니다. 더 많은 직원이 필요하기 때문에 (프로그램 할 필요가 없음) 우리 모두가 원하는 것이지만 현재 재정 문제가 있습니다.
durron597

4
이것은 우리가하는 것이 아니라 DNA를 분석하는 프로젝트를 진행하고 있다고 상상해보십시오. 당신의 상사는 여러 가지 일에 대한 하나의 작은 데이터 세트를 분석하고 정확성을 검증하는 엉터리 프로그램을 작성합니다. 그리고 당신의 임무는 전체 Human Genome Project 데이터베이스에서 그 프로그램을 실행하는 것입니다. 나는 스타일을 정리할뿐만 아니라 성능 알고리즘을 개선해야합니다. 그러나 그의 직무 (급여를받는 이유)는 "정확성"부분에 대한 전문 지식인데, 이는 실제로 프로그래밍 문제가 아니며 동일한 전문 지식이 없습니다.
durron597

2
@ durron597 : 거친 개념 증명을 해킹 한 다음 멋지고 세련되게 제작할 수있는 것처럼 들립니다.
FrustratedWithFormsDesigner

4
@ durron597 정확성을 검증 할 수있는 도메인 전문가라면 모든 것을 완전하게 지정할 수있는 단위 테스트 작성 아이디어가 열려 있습니까? 기본적으로 기능을 프로토 타이핑하는 대신 모든 것이 올바른지 확인하고 실제 구현을 수행하기 위해 테스트를 작성하는 TDD 형식을 사용합니다.
Evicatos

4
@ durron597 (의견 중 하나에 의해 촉발 된 야생 토끼를 따름) : (n E) DSL을 작성하여 자신의 논리를 더 간결하게 표현할 수있는 방식으로 자신의 부분을 다시 쓰지 않아도됩니다. ?
paul

3

당신은 스스로에게 물어야합니다 : 여기서 당신의 궁극적 인 목표는 무엇입니까? 1. 상사를 돕기 위해? 2. 회사를 돕기 위해? 3. 자신을 돕기 위해? "위의 모든 내용"에 답하기 전에 속도를 줄이십시오. 첫 번째 과제는 답변이 달려 있기 때문에 기본 목표를 명확하게 정의하는 것입니다.

목표는 다음과 같습니다.

  1. 상사를 도와주세요? 포기하다. 그는 그것을 요구하지 않는 것 같습니다. 당신은 "그는 자신의 코드가 나쁘다는 것을 알고 있지만 그것이 필요한 것을 수행합니다." 그럼, 토론의 끝. 당신의 상사가 현재 상황에 불만족하지 않는 한, 그는 변하지 않을 것이며, 그를 도우려는 당신의 노력을 원망할 것입니다. 미래에 그가 현 상태의 "고통"을 느끼면, 당신은 신뢰할 수있는 멘토로 자신을 설립하고 도움을 얻을 수있는 곳을 알게 될 것입니다.

  2. 귀사를 도와주세요? 현재 상황이 수익을 위협하고 있습니까? 마감일이 위험합니까? 경영진이 열을 증가시키고 있습니까? 그렇지 않다면 포기하십시오. (이는 본질적으로 Jimmy Hoffa가 귀하의 원래 게시물에 대한 의견을 제시 한 시점입니다.) 그러나 현재 상황이 실제로 부서 / 회사에 수용 할 수없는 위험을 나타내는 경우 프로세스 변경이 순서대로 이루어집니다. 이 경우 나는 당신이 앉아 다른 개요를 제안합니다분업. 여기서 핵심은 상사의 코드를 리팩토링하는 데 걸리는 시간이 새로운 코드를 작성하는 데 더 잘 사용될 것이라고 설명하는 것입니다. 당신은 당신이 그것을 직접 쓰는 시간이 없다고 말하지만, 그것은 내가 제안하는 것이 아닙니다. 각각의 장점을 극대화하는 방법을 찾아야합니다. 그를 Mort으로 생각하지 말고 우수한 도메인 지식을 갖춘 주니어 개발자로 생각하십시오. 그것은 업계에서 매우 일반적인 작업 배열이므로 번성하는 방법을 배우는 것이 좋습니다. 예를 들어 있는지 확인하십시오 그가 것을 알고 자신의 전문 지식이 얼마나 중요한 알 (보통이 단계를 반복), 및 다음(a) 작업을 "민첩한"스프린트로 나누고, (b) 오버 헤드를 정의하는 전면에서 (각 스프린트마다) 공동 작업 -모든 요구 사항 및 아키텍처. (c) 이전 단계에서 동의 한 인프라를 구축하면서 모든 알고리즘 결정을 수행 할 수 있도록 프로토 타입을 제작 해 보자. (d) 알고리즘을 검증하기 위해 테스트를 작성하는 동안 알고리즘을 구조에 구현하십시오. (e) 피어 프로그래밍 환경에서 V & V를 함께 수행하십시오. (예 : "이 테스트는 실패했습니다. 왜? 알고리즘 논리 오류 또는 코딩 실수입니까?"; 여기에서 반복).

  3. 알아서 드세요? 여기서 정직하십시오. 당신이하고있는 모든 일이 당신이 일을 즐기지 않는다고 불평하고 있다면, 위의 # 2에 대해 더 많은 시간을 할애 할 것을 제안합니다. 회사에 관심이없고 일을 즐기지 않는다면 이력서 배포를 시작하십시오. 회사에 관심이 있지만 일을 즐기지 않는다면 # 2에 집중하면 두 계정 모두에 도움이됩니다. 그러나 그 경우에, 당신의 열정이 팀을 돕기위한 욕망에서 비롯된 것이 아니라, 과제에있어서의 자기 중심적인 좌절 만이 아니라는 것이 모든 사람들에게 명백한 경우에만 "윈-윈"입니다.


1
좋은 대답입니다. 확실히 # 2이며,해야 할 일에 대한 설명은 지난 며칠 동안 논의한 내용과 비슷합니다. 우리는 분명히 충분히 의사 소통하지 않습니다.
durron597

방금 3 번째 지점에서 마지막 문장 하나를 추가했습니다. 아마도 가장 중요한 것입니다. 게시물을 다시 읽고 정직하게 자신이 다른 사람과 만나는 길인지 자문 해보십시오.
kmote

2

이 토론에 무언가를 추가할지는 확신하지 못하지만 액세스 위반이 ShowMessage('Hello');비슷한 줄에서 발생 하거나 비슷한 줄에서 비슷한 줄에서 화면을 통해 동일한 줄에 더 많은 코드가 있음을 알았습니다. 권리,

두 가지 기본 옵션이 있다고 생각합니다.

  1. 코드를 실행 시키십시오 . 코드가 작동하고 수행해야 할 작업이있는 경우, 상사가 코드 수정을 요청하지 않는 한 그대로 두십시오. 그것은 또한 코드가 더 멋지게 보이고 작업을 당신에게 맡긴다는 것을 이해하도록 이끌 수 있습니다 (Dunk가 그의 답변에서 지적한 것처럼).
  2. 코드를 전문적으로 만들겠다고 결심 했다면 그가 사용할 수 있는 라이브러리 / 프레임 워크빌드하십시오 . 일반적으로 수정하는 오류 / 전략에 패턴이있는 경우 해당 파일을 몇 개의 라이브러리 파일로 랩핑하여 "회사의 기본 라이브러리" 로 제공 할 수 있습니다. 공통 인터페이스.

"라이브러리 / 프레임 워크 구축"저는 자유 시간이 생길 때마다 그렇게하려고 노력했지만 문제는 "즉시 단기적인 우려"를 위해 프로젝트가 계속 진행되고 있다는 것입니다.
durron597

1
나는 그 장소에 갔다. 나는 상사에게 고객의 명함을 주었고,이 고객을 위해 "실제로 명함 이외의 다른 정보를 가지지 않고"며칠 안에 웹 사이트를 만들도록 요청했습니다. 도서관 준비 계획에 대해 이야기하고 시간을 절약 할 수 있도록 제작을 향상시키는 방법에 대해 이야기 해보십시오.
mavrosxristoforos 4

라이브러리 작성은 그의 프로그램 중 하나만 수정 한 후에 이미 작성한 작은 프로그램의 간단한 모음으로 시작해야합니다.
DougM
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.