저는 1972 년에 작성된 렌탈 시스템에서 운영되는 렌터카 회사의 렌탈 에이전트 / 관리자로 일하고 있습니다. 업데이트가 필요한 시점이라고 생각했습니다. 약간의 배경 지식을 위해 다음은이 프로그램에서 매일 처리해야하는 광기의 예입니다.
임대 대행사는 한 화면에 인쇄 할 때 ACT 필드에서 "MXC"(모든 것이 짧은 코드를 기반으로 함)를 사용한다는 것을 기억해야합니다.이 코드는 "계약의 MaXimum 표시"를 의미하며, 다른 화면에서는 PR (프린트)이 필요합니다. ACTION 필드이지만 PT (PrinT의 경우) 필드에서 Y를 사용하는 화면이 있지만 PRT (PrinT의 경우) 필드에서 Y를 사용하는 화면이 있지만 다른 화면에서는 사용자가 Enter 키를 눌러야합니다. 문자는 줄 바꿈 문자이므로 숫자 패드에 입력해야합니다.) F8은 다르지만 관련 화면에는 단순히 F8이 필요합니다. 일부 화면에는 PRT라는 필드가 있으며 일부 필드에는 PRinT에 대한 필드이지만 실제로는 필드입니다 여러 프롬프트를 수행 한 후 아무 것도 수행하지 않고 인쇄가 자동으로 수행되며 더 많은 화면에 PRINT Y / N이라는 레이블이 지정된 필드가 있습니다.다른 위치에서 이미 서류 작업을 수행하는 작업의 경우 기본적으로 Y로 기본 설정되고 다른 딜러가 서류 작업이 필요한 작업의 경우 N으로 기본 설정됩니다.
나는 이것보다 더 나은 일을 할 수 있다고 결정했기 때문에 이것을 업데이트하기로 결정한 회사의 담당자에게 연락하기 시작했습니다. 결국이 프로그램을 담당하는 IT 부사장을 만나게됩니다. 나는 그에게서 약간의 정보를 얻었고, 내 렌터카 회사는 약간의 COBOL이 혼합 된 IBM 메인 프레임 어셈블러로 작성된 렌탈 프로그램을 가지고 있음을 알게되었습니다. 그는 현재 포지션이 없지만 오픈해야한다고 말합니다 어쨌든 내 이력서를 이메일로 보내십시오.
이것은 내 질문으로 이어집니다.
첫 번째는 기술입니다. 앞으로 유지 관리 성을 향상시키려는 생각으로 어셈블리 언어보다 더 높은 수준의 언어로 다시 작성하는 것이 좋습니다. 내 경험 영역은 C ++에 있으므로 분명한 선택입니다. 내가 최근에 내가 말한 사람이 팀이 열심히 일했다고 말한 기사를 읽었으므로 회사는 프로그램을 쉽게 업데이트 할 수있는 더 쉬운 방법이 절실히 필요합니다. 그들은 프로그램이 현재 5를 지원한다고 발표하게 된 것을 자랑스럽게 생각합니다 -4 자리가 아닌 숫자 위치 코드와 7 자리가 아닌 8 자리 차량 번호. 심지어 상황이 긴박한에서 업데이트에 대한 나의 철학은, 조엘의 라인에 있습니다 : http://www.joelonsoftware.com/articles/fog0000000069.html 즉, 다시 쓰기 전에이 있었다 오히려 모든 것을 던지는보다 증가해야한다 그리고 신선한 시작.
IBM 어셈블리를 C ++와 쉽게 통합 할 수있는 방법이 있습니까? 그렇다면 어떻게해야합니까? 나는 asm 키워드를 모호하게 알고 있지만 그것을 사용하거나 다른 것을하는 것이 최선인지는 모르겠습니다. 그러한 계획은 잘못된 조언입니까? 나는 g ++과 GNU make를 사용하여 Linux에서 대부분의 작업을 수행하므로 특정 답변을 환영하지만 반드시 필요한 것은 아닙니다 (어떤 종류의 빌드 시스템이 없는지 전혀 모르지만 거의 아무것도 의심하지 않기 때문에).
두 번째 질문은 더 정치적입니다. 이 회사가 전환을해야한다고 설득하려면 어떻게해야합니까? 이론적 인 비용 절감은 엄청납니다 (제 추정에 따르면 회사는 매년 백만 달러 정도를 낭비하고 프로그램과 상호 작용하는 방법을 배우기 위해 교육 비용이 증가했기 때문에). 현행 프로그래머들이 제정되어야한다면, 변화에 대한 구조적 저항이 크다.
편집 : 왜 회사가 이미 가지고있는 것을 수정하는 것이 나에게 가장 좋은 해결책처럼 보이는지 설명해야합니다. 그러나 이것은 여전히 다른 제안에 열려 있습니다. 왜냐하면 이것이 프로그램의 괴물이기 때문입니다. 이전에 프로그래밍 작업을 한 번도 해 본 적이 없으므로 잘못된 분석을 수행하여 수정 해주세요.
먼저, 상용 솔루션이 있습니다.
이런 종류의 일에 대해 몇 가지 중간급 관리자와의 대화에서 새로운 시스템으로 전환하는 데 대한 주요 관심사 중 하나는 수십 년 동안 회사에 있었으며 지금까지 시스템에 익숙한 많은 충성스러운 직원입니다. . 우리가 가진 것을 수정할 수 있다면 현재의 인터페이스를 일종의 '호환성 모드'로 유지할 수 있습니다. 사용자는 현재 시스템을 사용하기 위해 이미 로그인해야하므로 사용자가 '변경'후 처음으로 로그인 할 때 설정을 활성화하는 기능을 추가 할 수 있습니다. '클래식'인터페이스 또는 '새'인터페이스 이를 가능하게하는 상용 솔루션을 찾을 수있는 방법은 없습니다.
우리 회사는 또한 우리가 사용하는 소프트웨어를 소유합니다. 우리는 그것을 라이센스하지 않습니다. 이것은 내가 현재 말하고있는 경영진이 실제로 변경을 승인 할 수있는 사람들과 동일하다는 것을 의미합니다. 타사 솔루션을 사용하면 회사에서 제품을 개발 한 회사에서 필요한 모든 권리를 확보하는 것 외에도 회사의 승인을 얻어야합니다. 이것은 또한 회사가 "그들의"제품을 포기하고 다른 제품을 가져 가도록 설득해야 할 것인데, 이는 우리가 가진 것을 업데이트하려고 시도하는 것보다 더 큰 장애물처럼 보이지만이 문제에 대해서는 틀릴 수 있습니다.
마지막으로 미래를 살펴보면 사용자 인터페이스를 개선하고 몇 가지 버그를 수정하고 싶지 않습니다. 이러한 '긴급한'문제를 업데이트 한 후 기술과 관련하여 회사가 운영하는 기본 방식을 업데이트하기를 희망했습니다. 이러한 종류의 문제에 1-2 년을 소비 한 후 저의 계획은 경영진으로 돌아가 더 극적인 변화를 제안하는 것이 었습니다. 회사가 운영하는 많은 방법들이 현재 사용하지 않는 기술에 의해 근본적으로 개선 될 수 있습니다. 예를 들어, 각 지역은 거의 같은 방식으로 작동합니다. 지역의 주요 공항은 자동차를 배포하는 중앙 허브입니다. 그들은 주로 필요에 따라 보내집니다. 그러나 공항은 모든 운영의 본거지로 사용됩니다. 차 한 대에 두 사람을 내 위치로 보내서 필요없는 차 한 대를 가져옵니다. 그런 다음 그들이 들어온 차와 함께 공항으로 돌아갑니다 (우리는 공항에서 32 마일 거리). 그런 다음 두 대의 차에서 5 마일 떨어진 위치로 와서 그 중 하나를 내린 다음 다른 차를 공항으로 반환합니다. 우리가 돌려 보낸 차가 우리 근처에 필요한 것과 같은 종류의 차인 경우에도 이렇게합니다. 나는 약 2 년 동안 회사와 함께 일해 왔으며, 자동차 부족이 가장 극심한 상황 (그러므로 3 배 정도)에서만이 상황에서 벗어나는 것 같습니다. 나는 모든 지역에서 일하는 4 명의 사람들을 자동차가 어디로 갈지 결정하고 자동으로 예약 시스템을 사용하여 가장 필요한 시간 + 마일 + 드라이버가 필요한 경로를 찾아서 더 높은 수준의 수정의 예 언젠가 추가하고 싶습니다.
그러나이 모든 것을 제안하는 것이 편안해지기 전에 인터페이스 업데이트와 같은 작은 작업을 수행하여 회사와 코드베이스에서 발판을 얻는 것이 도움이 될 것이라고 생각합니다. 아웃소싱과 같은 솔루션은 이러한 가능성을 제거합니다.
if (m_newInterface)
코드 소스 전체에 스파게티 코드가 빠르게 나타나기 시작했습니다. 디커플링 및 리팩토링은 완료되었을 때 대부분의 사용자가 이미 새 인터페이스로 마이그레이션 한 데 수년이 걸렸습니다.