머리말
이것은 참으로 어려운 일이며, 다루어야 할 근거가 많이 있습니다. 적절한 도구와 교육 자료에 대한 포인터와 함께 팀을위한 다소 포괄적 인 가이드로 겸손히 제안합니다.
다음 사항을 기억하십시오 : 이 지침 은 상황에 따라 채택, 조정 또는 폐기하기위한 것입니다.
주의 : 한 번에 팀에이 모든 것을 덤프하면 실패 할 가능성이 높습니다. 땀에 가장 잘 걸리는 요소를 선택하고 한 번에 하나씩 천천히 소개해야합니다.
참고 : 이 모든 것이 G2와 같은 Visual Programming Systems에 직접 적용되는 것은 아닙니다. 이를 처리하는 방법에 대한 자세한 내용 은 끝에 있는 부록 섹션을 참조하십시오 .
참을성이없는 사람을위한 행정상 개요
- 다음과 같이 견고한 프로젝트 구조를 정의하십시오 .
- 프로젝트 템플릿 ,
- 코딩 규칙 ,
- 익숙한 빌드 시스템 ,
- 인프라 및 도구에 대한 사용 지침 세트 .
- 좋은 SCM을 설치하고 사용 방법을 알고 있는지 확인하십시오.
- 기술 에 적합한 IDE 를 가리키고 사용법을 알고 있어야합니다.
- 빌드 시스템에서 코드 품질 검사기 및 자동보고 기능 을 구현 하십시오.
- 빌드 시스템을 지속적인 통합 및 지속적인 검사 시스템에 결합하십시오.
- 위의 도움으로 코드 품질 "핫스팟"을 식별 하고 리팩터링하십시오 .
이제 긴 버전의 경우 ...주의, 조심하십시오!
강성은 (종종) 좋다
강성은 종종 당신을 대항하는 힘으로 여겨지기 때문에 이것은 논란의 여지가 있습니다. 일부 프로젝트의 일부 단계에 해당됩니다. 그러나 일단이를 추측을 없애는 프레임 워크 인 구조적 지원으로 간주하면 낭비되는 시간과 노력을 크게 줄일 수 있습니다. 당신을 대항하지 말고 당신을 위해 일하도록하십시오.
강성 = 프로세스 / 프로 시저 .
소프트웨어 개발에는 화학 공장이나 공장에 매뉴얼, 절차, 드릴 및 비상 지침이있는 것과 동일한 이유로 올바른 프로세스와 절차가 필요합니다. 나쁜 결과 방지, 예측 가능성 증가, 생산성 극대화 ...
그러나 강성은 적당히 온다!
프로젝트 구조의 강성
각 프로젝트에 고유 한 구조가있는 경우, 귀하 (및 신규 사용자)는 길을 잃을 수 있으며 프로젝트를 열 때마다 처음부터 다시 선택해야합니다. 당신은 전문 소프트웨어 상점에서 이것을 원하지 않으며 실험실에서도 이것을 원하지 않습니다.
빌드 시스템의 강성
각 프로젝트 가 다르게 보일 경우, 서로 다르게 구축 될 가능성이 높습니다
. 빌드에는 너무 많은 연구 나 추측이 필요하지 않습니다. 당신은 정규 일을하고 세부 사항에 대해 걱정할 필요가 없습니다 수 있도록하려면 : configure; make install
, ant
,
mvn install
, 등 ...
동일한 빌드 시스템을 재사용하고 시간이 지남에 따라 발전하게되면 일관된 품질 수준이 보장됩니다.
README
프로젝트의 세부 사항을 신속 하게 지적하고 사용자 / 개발자 / 연구자 (있는 경우)를 정상적으로 안내해야합니다.
또한 빌드 인프라의 다른 부분, 즉 다음을 크게 촉진합니다.
따라서 (프로젝트와 같은) 빌드를 최신 상태로 유지하지만 시간이 지남에 따라 더 엄격 해지고 위반 및 잘못된 관행을보고하는 데 더 효율적입니다.
바퀴를 다시 만들지 말고 이미 한 것을 재사용하십시오.
추천 자료 :
프로그래밍 언어 선택의 강성
특히 연구 환경에서 모든 팀 (및 더 적은 개발자)이 동일한 언어 및 기술 스택을 사용하도록 기대할 수는 없습니다. 그러나 "공식적으로 지원되는"도구 세트를 식별하고 사용을 권장 할 수 있습니다. 좋은 이론적 근거가없는 나머지는 허용되지 않아야합니다 (프로토 타이핑 제외).
기술 스택을 단순하게 유지하고 필요한 기술의 유지 관리 및 폭을 최소한으로 유지하십시오 : 강력한 핵심.
코딩 규칙 및 지침의 강성
코딩 규칙 및 지침을 통해 팀으로서의 정체성과 공유 용어 를 개발할 수 있습니다 . 소스 파일을 열 때마다 terra incognita 에 실수하지 않습니다 .
단 한 번의 간단한 위반으로 커밋이 거부되는 정도로 삶을 어렵게하거나 금지하는 행동을 명백하게하는 무의미한 규칙은 부담입니다. 하나:
개인적 접근 : 코딩 컨벤션에 있어서는 공격적입니다. 일부는 나치 라고도합니다 . 왜냐하면 저는 팀에서 인식 할 수있는 스타일 인 lingua franca 를 가지고 있다고 믿기 때문
입니다. 쓰레기 코드가 체크인되면 할리우드 스타의 얼굴에 찬 상처처럼 보입니다. 검토와 작업이 자동으로 트리거됩니다. 사실, 나는 종종 부적합 커밋을 거부하기 위해 사전 커밋 후크의 사용을 옹호하기까지했습니다. 앞에서 언급했듯이 지나치게 열광적이어서 생산성을 방해해서는 안됩니다. 특히 처음에 천천히 소개하십시오. 그러나 잘못된 코드를 수정하는 데 많은 시간을 소비하여 실제 문제를 해결할 수없는 것이 좋습니다.
일부 언어는 심지어 의도적으로 이것을 시행합니다
코드 썩음 이 미끄러지지 않도록하십시오 . 코드 컨벤션 , 지속적인 통합 및 지속적인 검사 , 페어 프로그래밍 및 코드 검토 는이 악마와의 대결입니다.
또한 아래에서 볼 수 있듯이 코드는 documentation 이며 이는 규칙이 가독성과 명확성을 장려하는 또 다른 영역입니다.
문서의 강성
문서는 코드와 함께 진행됩니다. 코드 자체는 문서입니다. 그러나 물건을 만들고 사용하고 유지하는 방법에 대한 명확한 지침이 있어야합니다.
문서에 단일 제어 지점 (예 : WikiWiki 또는 DMS)을 사용하는 것이 좋습니다. 프로젝트를위한 공간,보다 무작위적인 밴터 및 실험을위한 공간을 만듭니다. 모든 공간에서 공통 규칙과 규칙을 재사용하십시오. 그것을 팀 정신의 일부로 만들어보십시오.
코드 및 툴링에 적용되는 대부분의 조언은 문서에도 적용됩니다.
코드 주석의 강성
위에서 언급 한 코드 주석도 문서입니다. 개발자는 코드에 대한 느낌을 표현하는 것을 좋아합니다 (주로 요청하면 자부심과 좌절감). 따라서보다 공식적인 텍스트가 적은 표현이나 드라마로 동일한 의미를 전달할 수있을 때 주석 (또는 코드)으로 불확실한 용어로 이러한 용어를 표현하는 것은 드문 일이 아닙니다. 재미 있고 역사적인 이유로 몇 가지 이야기를 들려도 무방 합니다. 또한 팀 문화 를 발전시키는데도 도움이 됩니다. 그러나 모두가 수용 할 수있는 것과 수용 할 수없는 것을 아는 것이 매우 중요하며, 그 주석 소음은 바로
noise 입니다.
커밋 로그의 강성
커밋 로그는 SCM 수명주기의 성 가시고 쓸모없는 "단계"가 아닙니다. 정시에 집으로 돌아 오거나 다음 작업을 계속하거나 점심으로 떠난 친구들을 따라 잡기 위해 건너 뛰지 마십시오. 그것들은 중요하고, (대부분의) 좋은 와인과 같이 시간이 지날수록 가치가 높아집니다. 그러니 제대로 해 동료가 거대한 커밋 또는 명백하지 않은 해킹을 위해 하나의 라이너를 작성하는 것을 보았을 때 나는 화를 내고 있습니다.
커밋은 이유 때문에 수행되며 그 이유는 항상 코드와 입력 한 커밋 로그 한 줄로 명확하게 표현되지는 않습니다. 그것보다 더 많은 것이 있습니다.
각 코드 줄에는 이야기 와 역사가 있습니다. diff는 역사를 말할 수 있지만 이야기를 써야합니다.
이 줄을 왜 업데이트 했습니까? -> 인터페이스가 변경 되었기 때문에.
왜 인터페이스가 바뀌 었습니까? -> 라이브러리를 정의하는 L1이 업데이트되었으므로.
라이브러리가 업데이트 된 이유는 무엇입니까? -> 기능 F에 필요한 라이브러리 L2 때문에 라이브러리 L1에 의존했습니다.
그리고 기능 X 란 무엇입니까? -> 이슈 트래커의 작업 3456을 참조하십시오.
그것은 나의 SCM 선택이 아니며, 실험실에서도 가장 좋은 것이 아닐 수도 있습니다. 그러나 Git
이 권리를 가져오고 사용하여, 더 대부분의 다른 SCM들 시스템보다 좋은 기록을 작성하도록 강요하려고 short logs
하고
long logs
. 작업 ID (예, 필요)를 연결하고에 대한 일반적인 요약을 남기고 shortlog
긴 로그를 확장하십시오. 변경 세트의 스토리 작성 .
로그입니다. 업데이트를 추적하고 기록하기 위해 여기에 있습니다.
경험의 규칙 : 나중에이 변경에 대해 무언가를 검색했다면, 로그가 질문에 대답 할 가능성이 있습니까?
프로젝트, 문서 및 코드가 살아 있습니다
그것들을 동기화 상태로 유지하십시오. 그렇지 않으면 더 이상 공생체를 형성하지 않습니다. 당신이 가지고있을 때 놀라운 일을합니다 :
- 이슈 트래커의 작업 ID에 대한 링크가있는 SCM의 커밋 로그 지우기,
- 이 추적기 티켓 자체는 SCM의 변경 세트 및 CI 시스템의 빌드에 연결됩니다.
- 그리고 이들 모두에 연결되는 문서 시스템.
코드와 문서는 응집력이 있어야합니다 .
테스트의 강성
엄지 손가락의 규칙 :
- 모든 새로운 코드에는 (적어도) 단위 테스트가 제공됩니다.
- 리팩토링 된 레거시 코드는 단위 테스트와 함께 제공됩니다.
물론 이러한 요구 사항은 다음과 같습니다.
- 실제로 귀중한 것을 시험하기 위해 (또는 시간과 에너지를 낭비하는 것),
- 잘 작성하고 주석 처리하십시오 (체크 인하는 다른 코드와 마찬가지로).
또한 문서화되어 있으며 코드 계약을 간략히 설명하는 데 도움이됩니다. 특히 TDD 를 사용하는 경우 . 당신이하지 않더라도, 당신의 마음의 평화를 위해 그것들이 필요합니다. 새 코드 (유지 관리 또는 기능)와 워치 타워를 통합하여 코드 부패 및 환경 오류를 방지 할 때 안전망이됩니다.
물론 더 나아가서 통합 테스트 와
수정 가능한 각 버그에 대한 회귀 테스트 를 수행 해야합니다.
도구 사용시의 강성
가끔 개발자 / 과학자가 소스에서 새로운 정적 검사기를 시도하거나 다른 것을 사용하여 그래프 또는 모델을 생성하거나 DSL을 사용하여 새 모듈을 구현하는 것이 좋습니다. 그러나 모든 팀원이 알고 사용해야 할 정식 도구 세트가있는 것이 가장 좋습니다 .
그 외에도 회원이 모두 원하는 한 회원이 원하는 것을 사용하도록하십시오.
- 생산 ,
- 정기적으로 도움이 필요하지 않음
- 정기적으로 일반 인프라에 적응하지 ,
- 코드, 빌드 시스템, 문서와 같은 공통 영역을 수정 하여 인프라를 방해하지 마십시오 .
- 다른 사람의 작업에 영향을 미치는하지 ,
- 요청 된 작업을 적시에 수행 할 수 있습니다.
그렇지 않은 경우 기본값으로 폴백하도록 강제하십시오.
강성 대 다양성, 적응성, 프로토 타이핑 및 비상
유연성이 좋을 수 있습니다. 누군가 해킹, 퀵-앤-더러운 접근 방식 또는 좋아하는 애완 동물 도구를 사용 하여 작업을 완료하도록하는
것이 좋습니다. 결코 그것이 습관이 될 수 있도록없고, 결코 이 코드가 지원하는 실제 코드베이스가 될 수 있도록합니다.
팀 정신 문제
코드베이스에서 자부심을 개발하십시오
- 코드의 자부심 개발
- 월 보드 사용
- 지속적인 통합 게임을위한 리더 보드
- 문제 관리 및 결함 계산을위한 월 보드
- 사용하여 이슈 트래커 / 버그 추적기를
비난 게임 피하기
- 지속적인 통합 / 지속적인 검사 게임을 사용하십시오. 잘 운영되고 생산적인 경쟁을 촉진합니다 .
- 결함을 추적하지 마십시오. 좋은 하우스 키핑입니다.
- DO 근본 원인을 식별 : 그냥 미래 교정 프로세스입니다.
- 그러나 비난을 할당 하지 마십시오 : 그것은 비생산적입니다.
개발자가 아닌 코드에 관한 것입니다.
개발자가 코드의 품질을 의식하게하지만 코드를 분리 된 엔티티로 보거나 확장하지 않고 비난 할 수는 없습니다.
역설입니다. 건강한 직장에서는 자아없는 프로그래밍 을 장려해야 하지만 동기 부여 목적으로 자아에 의존해야합니다.
과학자에서 프로그래머로
코드를 소중히 여기고 자부하지 않는 사람들은 좋은 코드를 만들지 않습니다. 이 부동산이 등장하기 위해서는 얼마나 가치 있고 재미 있을지 알아 내야합니다. 전문성과 선을 행하려는 욕망만으로는 충분하지 않습니다. 열정이 필요합니다. 따라서 과학자를 프로그래머 로 전환해야합니다
(대규모로).
어떤 사람은 프로젝트와 코드에 대해 10-20 년이 지나면 누구나 애착을 느낄 것이라고 의견을 주장했다. 어쩌면 내가 틀렸지 만 코드 자체 또는 코드 작성 작업이 아니라 코드의 결과와 작업 및 유산을 자랑스럽게 생각합니다.
경험을 통해 대부분의 연구자들은 코딩을 필수 또는 재미있는 산만으로 간주합니다. 그들은 단지 그것이 작동하기를 원합니다. 이미 그것에 정통하고 프로그래밍에 관심이있는 사람들은 모범 사례 채택 및 기술 전환을 설득하기가 훨씬 쉽습니다. 반쯤 가져와야합니다.
코드 유지 보수는 연구 작업의 일부입니다
누구도 엉터리 연구 논문을 읽지 않습니다. 그렇기 때문에 출판 준비가 완료된 것으로 간주 될 때까지 동료 검토, 교정, 읽기, 수정, 재 작성 및 승인을 거듭했습니다. 논문 과 코드베이스 에도 동일하게 적용됩니다 !
코드베이스를 지속적으로 리팩토링하고 새로 고치면 코드 썩음이 방지되고 기술 부채가 줄어들며 향후 다른 프로젝트의 작업을 재사용하고 조정할 수 있습니다.
왜이 모든 ??!
왜 우리는 위의 모든 것을 귀찮게합니까? 대한 코드 품질 . 아니면
품질 코드 입니까 ...?
이 지침은이 목표를 향해 팀을 이끌 기위한 것입니다. 어떤 측면은 단순히 길을 보여주고 그렇게하도록함으로써 (훨씬 나아짐) 다른 부분은 손으로 가져갑니다 (그러나 사람들을 교육하고 습관을 키우는 방식입니다).
목표가 달성되는 시점을 어떻게 알 수 있습니까?
품질은 측정 가능
항상 양적 으로 측정되는 것은 아니지만 측정 할 수 있습니다. 앞에서 언급했듯이 팀에서 자부심을 키워야하며 진보와 좋은 결과를 보여주는 것이 중요합니다. 정기적으로 코드 품질을 측정하고 간격 간 진행 상황과 그 중요성을 보여줍니다. 행해진 일과 그것이 어떻게 더 나아 졌는지에 대해 회고하십시오.
지속적인 검사를 위한 훌륭한 도구가 있습니다 . Sonar 는 Java 세계에서 인기가 있지만 모든 기술에 적용 할 수 있습니다. 그리고 다른 많은 것들이 있습니다. 코드를 현미경으로 유지하고 성가신 버그와 미생물을 찾으십시오.
그러나 내 코드가 이미 크랩 인 경우 어떻게해야합니까?
위의 모든 것은 Never Land 로의 여행처럼 재미 있고 귀엽지 만 이미 (증기 나 냄새가 많은) 쓰레기 코드가 있고 변경을 꺼리는 팀이있을 때는 쉽지 않습니다.
비밀은 다음과 같습니다 . 어딘가에서 시작해야합니다 .
개인 일화 : 프로젝트에서 우리는 원래 650,000+ Java LOC, 200,000+ JSP 라인, 40,000+ JavaScript LOC 및 400+ MB의 이진 종속성을 갖는 코드베이스로 작업했습니다.
약 18 개월이 지나면 500,000 Java LOC (MOSTLY CLEAN) , 150,000 줄의 JSP 및 38,000 JavaScript LOC이며, 거의 100MB에 달하는 의존성을 갖습니다 (더 이상 SCM에는 없습니다!).
우리는 어떻게 했습니까? 우리는 방금 위의 모든 것을했습니다. 또는 열심히 노력했습니다.
그것은 팀의 노력하지만 우리는 천천히 주입 급하게 동안, 우리의 제품의 심장 박동을 모니터하기 위해 프로세스 규정 및 도구의 파괴력 은 "지방"멀리 : 우리는 모든 개발을 멈추지 않았다 ... 쓰레기 코드, 쓸모없는 종속성을 우리는 때때로 코드베이스에 열중하고 그것을 찢어 버릴 수있는 상대적으로 평화 롭고 조용한시기를 가지고 있지만, 대부분의 경우 우리는 기회가있을 때마다 "검토 및 리팩터링"모드로 기본 설정하여 모두 수행합니다. : 빌드 중, 점심 식사 중, 버그 수정 스프린트 동안, 금요일 오후에 ...
큰 "작업"이있었습니다 ... 빌드 시스템을 8500+ XML LOC의 거대한 Ant 빌드에서 멀티 모듈 Maven 빌드로 전환하는 것이 그 중 하나였습니다. 우리는 다음을 가졌다 :
- 명확한 모듈 (또는 적어도 이미 훨씬 나아졌으며 앞으로도 여전히 큰 계획이 있습니다),
- 자동 종속성 관리 (쉬운 유지 관리 및 업데이트 및 쓸모없는 dep 제거)
- 더 빠르고, 쉽고, 재현 가능한 빌드
- 품질에 대한 일일 보고서.
우리는 의존성을 줄이기 위해 노력했지만 "유틸리티 도구 벨트"를 주입했습니다. Google Guava와 Apache Commons는 코드를 줄이고 코드의 버그를 줄 입니다.
또한 IT 부서에서 새로운 도구 (JIRA, Fisheye, Crucible, Confluence, Jenkins)를 사용하는 것이 기존 도구보다 우수하다고 설득했습니다. 우리는 여전히 우리가 멸시 한 일부 (QC, Sharepoint 및 SupportWorks ...)를 처리해야했지만 더 많은 여유 공간이있는 전반적인 개선 된 경험이었습니다.
그리고 매일, 일을 고치고 리팩토링하는 일만 처리하는 수십 개의 커밋이 있습니다. 우리는 때때로 물건을 깰 수 있습니다 (단위 테스트가 필요하며 물건을 리팩토링 하기 전에 더 잘 작성하십시오 ). 그러나 우리의 사기와 제품에 대한 전반적인 이점은 엄청났습니다. 한 번에 코드 품질 비율의 일부만 얻을 수 있습니다. 그리고 그것이 증가하는 것을 보는 것은 재미있다! !!
참고 : 새롭고 더 나은 것을위한 공간을 만들기 위해 강성을 다시 흔들어야합니다. 일화에서, 우리 IT 부서는 우리에게 어떤 것들을 강요하려고 시도하고 다른 사람들에게는 잘못을 시도하는 데 부분적으로 옳 습니다. 아니면 그들이 옳았을 수도 있습니다 . 모든것은 변한다. 생산성을 높이는 더 좋은 방법임을 입증하십시오. 시운전 및 프로토 타입 이 여기에 있습니다.
최고 품질의 증분 스파게티 코드 리팩토링주기
+-----------------+ +-----------------+
| A N A L Y Z E +----->| I D E N T I F Y |
+-----------------+ +---------+-------+
^ |
| v
+--------+--------+ +-----------------+
| C L E A N +<-----| F I X |
+-----------------+ +-----------------+
툴 벨트에 양질의 도구가 있으면 :
코드 품질 검사기로 코드를 분석 하십시오.
린터, 정적 분석기 또는 무엇을 가지고 있습니까?
중요한 핫스팟과 낮은 매달린 과일을 확인 하십시오 .
위반에는 심각도 수준이 있으며 심각도가 높은 클래스가 많은 클래스는 큰 위험 신호입니다. 따라서 라디에이터 / 히트 맵 유형의보기에서 "핫스팟"으로 나타납니다.
핫스팟을 먼저 수정 하십시오.
비즈니스 가치가 가장 높기 때문에 짧은 시간 내에 귀하의 영향력을 극대화합니다. 이상적으로는 잠재적 인 보안 취약성 또는 충돌 원인이 될 수있는 중대한 위반이 발생하는 즉시 처리해야하며 책임을 유발할 위험이 있습니다 (귀하의 경우 실험실 성능이 저하됨).
자동화 된 코드베이스 스윕으로 저수준 위반을 정리 하십시오 .
신호 대 잡음비를 향상시켜 레이더에 중대한 위반이 나타날 때이를 확인할 수 있습니다. 그들이 돌보지 않았고 코드베이스가 야생에서 느슨해지면 처음에는 큰 사소한 위반이 종종 발생합니다. 실제 "위험"을 나타내지는 않지만 코드의 가독성과 유지 관리 성이 손상됩니다. 작업을 수행하는 동안 만나거나 가능한 경우 자동 코드 스윕으로 대규모 청소 퀘스트를 통해 문제를 해결하십시오. 훌륭한 테스트 스위트 및 통합 시스템이없는 경우 큰 자동 스윕에주의하십시오. 성가심을 최소화하기 위해 동료들과 적시에 합의해야합니다.
만족할 때까지 반복하십시오 .
이 제품이 여전히 활성화 된 제품이라면 이상적이지 않아야합니다. 계속 발전 할 것입니다.
집을 잘 지키기위한 빠른 팁
파일에서 파일까지 일주일을 소비하고 여러 기능 및 모듈에 걸친 수천 가지 수정 사항으로 끝나는 미래에 추적하지 마십시오. 미래 추적이 어려워집니다. 코드에서 하나의 이슈 = 트래커에서 하나의 티켓. 때때로 변경 세트가 여러 티켓에 영향을 줄 수 있습니다. 그러나 너무 자주 발생하면 아마도 뭔가 잘못되었을 것입니다.
부록 : 비주얼 프로그래밍 환경 관리
맞춤형 프로그래밍 시스템의 벽으로 둘러싸인 정원
OP의 G2와 같은 여러 프로그래밍 시스템은 다른 짐승입니다 ...
소스 없음 "코드"
소스 "코드"의 텍스트 표현에 액세스 할 수없는 경우가 있습니다. 독점 바이너리 형식으로 저장되거나 텍스트 형식으로 항목을 저장하지만 숨길 수도 있습니다. 맞춤형 그래픽 프로그래밍 시스템은 반복적 인 데이터 처리 워크 플로의 자동화를 단순화하기 때문에 실제로 연구소에서는 드문 일이 아닙니다.
툴링 없음
그들 자신을 제외하고는. 프로그래밍 환경, 자체 디버거, 자체 인터프리터, 자체 문서 도구 및 형식에 의해 제약을받는 경우가 많습니다. 라이센스가 허용하는 경우 형식을 역 엔지니어링하고 외부 도구를 구축 할만큼 동기를 부여한 사람의 관심을 끌 경우를 제외하고 는
벽으로 둘러싸인 정원 입니다.
문서 부족
종종 틈새 프로그래밍 시스템은 상당히 폐쇄 된 환경에서 사용됩니다. 그들을 사용하는 사람들은 자주 NDA에 서명하고 자신의 행동에 대해 이야기하지 않습니다. 그들을위한 프로그래밍 커뮤니티는 드물다. 따라서 자원이 부족합니다. 당신은 당신의 공식 참조에 갇혀 있습니다.
아이러니 한 (그리고 종종 실망스러운) 비트는 주류 및 범용 프로그래밍 언어를 사용 하여이 시스템이 수행하는 모든 것을 분명히 달성 할 수 있다는 것입니다. 그러나 프로그래밍에 대한 더 깊은 지식이 필요한 반면, 생물 학자, 화학자 또는 물리학 자 (예를 들어 몇 명)가 프로그래밍에 대해 충분히 알기를 기대할 수 없으며, 구현 (및 유지) 할 시간 (및 욕구)이 줄어드는 것을 기대할 수 없습니다. 오래 지속될 수도 있고 그렇지 않을 수도있는 복잡한 시스템. 우리가 DSL을 사용하는 것과 같은 이유로, 우리는 이러한 맞춤형 프로그래밍 시스템을 가지고 있습니다.
개인 일화 2 :사실, 나는 이것들 중 하나에서 일했습니다. OP의 요청과 관련이 없었지만 프로젝트는 상호 연결된 큰 데이터 처리 및 데이터 저장 소프트웨어 (주로 생물 정보학 연구, 건강 관리 및 화장품뿐만 아니라 비즈니스 용)였습니다. 지능, 또는 모든 종류의 연구 데이터 추적 및 데이터 처리 워크 플로 및 ETL 준비를 암시하는 모든 도메인). 이러한 응용 프로그램 중 하나는 드래그 앤 드롭 인터페이스, 버전이 지정된 프로젝트 작업 공간 (메타 데이터 저장을 위해 텍스트 및 XML 파일 사용), 이기종 데이터 소스에 대한 많은 플러그 가능 드라이버 및 비주얼과 같은 일반적인 종과 휘파람을 사용하는 시각적 IDE였습니다. N 개의 데이터 소스에서 데이터를 처리하고 결국 M 개의 변환 된 출력을 생성하는 파이프 라인을 설계하는 캔버스 가능한 반짝이는 시각화 및 복잡한 (대화 형) 온라인 보고서. 사용자의 맞춤형 비주얼 프로그래밍 시스템. 사용자의 요구에 맞는 시스템을 설계하는 과정에서 약간의 NIH 증후군이 있습니다.
그리고 예상 한 바와 같이,이 시스템은 멋진 시스템으로, 때로는 약간은 뛰어나지 만 "명령 줄 도구를 대신 사용하지 않는 이유는 무엇입니까?"라는 궁금증이 생길 수 있습니다. 다른 "최상의"사례를 사용하여 많은 다른 사람들에게 대규모 프로젝트를 수행하는 팀.
좋아, 우린 운명이야! -우리는 어떻게해야합니까?
글쎄, 결국, 위의 모든 내용이 여전히 유효합니다. 더 많은 주류 도구와 언어를 사용하기 위해이 시스템에서 대부분의 프로그래밍을 추출 할 수없는 경우 시스템의 제약 조건에 맞게 조정하면됩니다.
버전 관리 및 스토리지 정보
결국, 가장 제한적이고 벽으로 둘러싸인 환경에서도 거의 항상 버전을 관리 할 수 있습니다. 대부분의 경우이 시스템에는 여전히 자체 버전이 있습니다 (불행히도 다소 기본적이며 이전 버전을 유지하면서 많은 가시성없이 이전 버전으로 되돌릴 수 있습니다). 선택한 SCM과 같이 차등 변경 세트를 정확하게 사용하지 않고 여러 사용자가 동시에 변경을 제출하는 데 적합하지 않을 수 있습니다.
그러나 여전히 이러한 기능을 제공하는 경우 귀하의 솔루션은 위의 사랑하는 업계 표준 지침을 따르고이 프로그래밍 시스템에 전치하는 것입니다 !!
스토리지 시스템이 데이터베이스 인 경우 내보내기 기능이 노출되거나 파일 시스템 레벨에서 백업 될 수 있습니다. 사용자 지정 이진 형식을 사용하는 경우 이진 데이터를 제대로 지원하는 VCS를 사용하여 버전을 간단하게 지정할 수 있습니다. 세밀하게 제어 할 수는 없지만 최소한 재난에 대비할 수있는 정도의 재난이 발생하고 어느 정도의 재해 복구 규정을 준수해야합니다.
테스트 정보
플랫폼 자체 내에서 테스트를 구현하고 외부 도구 및 백그라운드 작업을 사용하여 정기적 인 백업을 설정하십시오. 아마도이 프로그래밍 시스템으로 개발 한 프로그램을 실행하는 것과 동일한 방법으로이 테스트를 실행했을 것입니다.
물론, 이것은 해킹 작업이며 "정상적인"프로그래밍의 일반적인 표준에 맞지 않지만, 전문적인 소프트웨어 개발 프로세스의 유사성을 유지하면서 시스템에 적응하는 것이 좋습니다.
길은 길고 가파르다 ...
틈새 환경과 맞춤형 프로그래밍 시스템에서 항상 그렇듯이 위에서 언급했듯이 이상한 형식, 제한적 (또는 완전히 존재하지 않는) 어수선한 도구 세트와 커뮤니티 대신 공백을 처리합니다.
권장 사항 : 가능한 맞춤형 프로그래밍 시스템 외부에서 위의 지침을 구현하십시오. 이를 통해 적절한 지원과 커뮤니티 추진력을 가진 "공통"도구를 이용할 수 있습니다.
해결 방법 : 이 옵션이 아닌 경우이 전역 프레임 워크를 "상자"에 추가하십시오. 아이디어는이 업계 표준 모범 사례 청사진을 프로그래밍 시스템 위에 겹쳐서 활용하는 것입니다. 다음과 같은 조언이 여전히 적용됩니다 : 구조 및 모범 사례 정의, 적합성 장려.
불행히도, 이것은 당신이 다이빙을하고 엄청난 양의 레그 워크를해야 할 수도 있음을 의미합니다. 그래서...
유명한 마지막 단어와 겸손한 요청 :
- 문서화 당신이하는 모든 일을.
- 경험을 공유 하십시오.
- 어떤 도구를 사용하든 오픈 소스 하십시오.
이 모든 작업을 수행하면 다음을 수행 할 수 있습니다.
- 비슷한 상황에있는 사람들로부터 도움을받을 가능성을 높일뿐 아니라
- 또한 다른 사람들에게 도움을 제공하고 기술 스택에 대한 토론을 장려하십시오.
누가 알다시피, 당신은 Obscure Language X 의 새로운 역동적 인 커뮤니티의 시작 부분에있을 수 있습니다 . 아무것도 없다면 시작하십시오!
- 에 대한 질문 질문 스택 오버플로를 ,
- Area 51 에 새로운 StackExchange 사이트에 대한 제안서를 작성하는 것도 가능
합니다.
어쩌면 그것은 아름다운 내부입니다 ,하지만 아무도 단서가 없다 지금까지, 그래서 도움 이 추한 벽을 가지고 와 다른 사람이 들여다 보자!