체계적으로 프로그래밍 언어 선택하기


24

언어를 선택하는 방법론을 찾고 있습니다. 언어에 대한 의견을 요구하지 않습니다. 저는 상점의 현재 언어를 사용 가능한 다른 언어와 비교하는 과정을 맡았습니다. 우리는 웹 개발 상점 btw입니다.

우리의 CEO는 사용 가능한 모든 웹 기반 언어, 이들이 파생 된 부모 언어에 대한 전체 백서를 원합니다 (예 : jsp는 c / c ++의 java에서 온 것입니다). 특정 언어의 모든 주요 요소와 해당 언어의 단점이 포함 된 행렬을 만들어야합니다. 언어가 플랫폼에 의해 제한됩니까, 기능 프로그래밍, 절차 또는 OO 용으로 설계 되었습니까? 아니면 프로그래밍 패러다임과 함께 사용할 수 있습니까?

또한 주어진 언어에 대한 인재 풀의 크기 및 해당 풀의 중간 급여와 같은 정보가 덜 기술적 인 정보가 필요합니다. 시장은 어떻게 우리의 선택을 볼 수 있습니까?

우리는 이러한 모든 것들을 이해하는 데 도움을 줄 컨설턴트를 찾기 시작했지만 대부분의 컨설턴트가 개발 배경에서 나온다는 사실을 알게되었으며 종종 " xxx 는 최고의 언어 인 것 같습니다. 지난 n 년 동안 가장 많이 사용했으며 결코 실망시키지 않았습니다. 프론트 엔드에 yyy 를 추가하고 zzz 라이브러리를 사용할 수 있습니다. "

저는이 일에 압도 감을 느끼고 있으며 CEO가 찾고있는 것을 고려할 때 최선의 행동을하는 것처럼 느낍니다. 학계의 세계를 살펴보고 실제 개발 경험이없는 교수를 고용하여 우리를 "교시"하는 것입니다. 가능한 모든 언어에 대해

다른 사람이이 운동을 겪어야합니까? 프로세스를 진행하는 데 사용한 단계 및 / 또는 방법을 공유 할 수 있습니까?


21
CEO는 실제로이 매트릭스를 사용하여 "$ {nextBigProject}를 구축하기 위해 $ {language}를 사용할 것입니다!"와 같은 것을 결정할 계획입니까? 실제로 유용 할 수있는 것을 구축하는 데는 ( 심지어 유용 할지는 확신하지 못하지만 ) 상당한 시간이 걸리고 유지 보수가 진행될 것입니다.
FrustratedWithFormsDesigner

3
프로젝트의 언어 / 환경을 선택하는 일반적인 가이드는 먼저 프로젝트가 해결하려는 특정 문제 (언어에 무관 한 방식)를 더 깊이 이해하려고 시도하는 도구 일 것입니다. 당시 문제를 해결 한 다음 해당 도구 / 라이브러리와 함께 작동하는 데 필요한 언어를 확인하십시오. 그것은 아마도 당신에게 언어의 명단을 줄 것입니다. 그리고 거기에서 당신은 그들에 대한 당신의 친숙 함, 벤더 지원, 예산 등에 기초하여 그것을 알아낼 수 있습니다.
FrustratedWithFormsDesigner

9
첫 번째 대답 질문은 "우리가 전혀 변경해야합니까?"입니다 현재 선택한 언어로 어떤 문제가 해결되지 않습니까?
John Bode

4
스택 오버플로는 개발자가 기술을 평가하는 데 어떻게 도움이됩니까? "오늘 아침 나는 약 8 개의 프레임 워크를 가지고 있었고, 어느 프레임을 사용할 것인지 결정하려고 노력했다 ..."
gnat

7
실제로 다트를 던질 수도 있습니다. 웹 분야 (특히 JavaScript 등)에는 다양한 강점, 약점, 친화도 및 비 호환성을 가진 수십 가지 옵션이 있습니다. 당신은 그것을 죽음으로 분석하거나, 교육받은 추측을하고, 앞으로 나아가고, 필요한 경우 중간 코스 수정을 할 수 있습니다.
Daniel R Hicks

답변:


53

@FrustratedWithFormsDesigner는 위에서 언급했듯이 더 무뚝뚝해질 것입니다. 비싸지 만 쓸모없는 작업으로 기소되었습니다.

CEO가 자신의 언어 선택을 뒷받침 할 반박 할 수없는 객관적인 증거를 찾고있는 것 같습니다. 문제는 언어의 선호가 백서가 유용 할뿐 아니라 의미를 갖기에는 너무 많은 주관적이고 외적인 요소로 가득 차 있다는 것입니다.

다시 말해, 이상적인 언어가 있다면, "객관적으로"결함이있는 언어 대신 모든 언어를 사용하게 될 것입니다. 또한이를 작동시켜야하는 엔지니어의 주가되어야하는 소액 관리 수준을 말합니다. Erlang은 "객관적으로 최고"일 수 있지만 아무도 모르는 경우 6 개월 / 엔지니어 시작 비용과 6 개월 / 엔지니어 추가하여 역량을 확보하십시오.

당신의 직업이 없어서 잃어 버릴 염려가 없습니다. 나는 CEO에게 실제 교회-투어링 논문에 관한 논문을 줄 것이다. 그런 다음 선임 엔지니어들과 함께 모여서 사용해야 할 것에 대해 엄격하지 않고 객관적인 의견을 얻고 CEO에게 당신이 무엇을 사용해야하는지 알려주세요. 그 대가로 엔지니어는 이사회, CFO, 회계 방법, VP 선정 등을하지 않을 것을 약속합니다. 우리가 전문화해야 할 이유가 있으며, 그는 당신이 그의 영역에서하는 것보다 공학적 선호에 더 이상 자리하지 않습니다.


6
하, 나는 마지막 단락의 무모한 열정을 좋아합니다. 당신이 언급 한 성가신 6 개월 때문에 CEO 도메인이라고 말하고 싶습니다.
Nathan Cooper

1
"물리적 교회-투어링 논문"거기 가지 말자. 공식적인 의미론을 가진 프로그래밍 언어는 거의 없으며, Turing이 완성되기 위해서는 거의 전제 조건입니다. (하나가 없으면 계산 모델도 아닙니다.)
Rhymoid

4
Lisp를 선택하고 완료하십시오.
Eric

1
Lisp는 ClojureScript를 의미합니다. :-)
Brian Knoblauch

1
+1. 이것이 왜 좋은 접근 방식 이 아닌지 CEO에게 전달하는 것은 엔지니어로서의 일 입니다. 좋은 접근 방식처럼 보이기 때문에 어려울 수 있지만 필요합니다.
djechlin

25

고려해야 할 몇 가지 광범위한 브러시 획 :

언어 인기

인기는 반드시 생산성, 표현성 또는 더 중요한 다른 언어 특성과 동일하지는 않기 때문에 중요하지는 않지만 다음과 같은 이유로 다른 고려 사항보다 우선합니다.

  1. 널리 사용되는 언어로 소프트웨어 개발자를 쉽게 찾을 수 있습니다.
  2. 널리 사용되는 언어로 도구와 라이브러리를 쉽게 찾을 수 있습니다.
  3. 의사 결정자들은 언어 교환을 이해하지 못하므로 안전한 결정을 내릴 것입니다 ( "많은 회사들이이 언어를 사용하므로 좋은 언어 여야합니다").

문제 영역에 적용

모든 프로그램은 Turing-complete 프로그래밍 언어로 작성 될 수 있지만, 일부 언어는 다른 문제보다 특정 문제 영역에 더 적합합니다. 웹 응용 프로그램을 작성하는 경우 해당 언어에 적합한 언어 및 도구를 사용하게 될 것이며 아마도 객체 지향 언어 일 것입니다.

반면에 주로 리서치 기반 또는 수학 기반의 소프트웨어를 작성하려는 경우 기능적 패러다임 을 수용하는 언어를 선호하게 될 것입니다 .

물론, 그 사이에는 모든 것이 있습니다. 많은 언어가 여러 패러다임을 지원하며 일부 소프트웨어 패턴은 특정 기능이나 패러다임이없는 언어의 한계를 극복하기 위해 존재합니다.

표현력과 생산성

어떤 언어는 다른 언어보다 표현력이 좋습니다. 수천 줄의 코드를 사용하여 한 언어로 작성할 수있는 것은 수백 줄의 코드를 사용하여보다 표현적인 언어로 작성할 수 있습니다. 트레이드 오프는 수백 줄의 코드가 전문 지식이 많은 사람들이 덜 대중적인 언어로 작성했을 가능성이 있습니다.

LOB (기간 업무) 응용 프로그램을 작성하는 데 사용되는 개체 지향 언어로 제공되는 많은 코드 줄이 식입니다. 이 의식은 개발에 많은 시간과 노력이 들지만,보다 표현적인 언어로는 쉽게 드러나지 않는 가시적 인 구조를 제공합니다. 전문성이 적은 사람들은 위험을 줄이면서 코드 작업에 필요한 것보다 전문 지식이 적은 사람들을 허용합니다.

여러 언어의 시대

단일 언어를 결정하려는 욕구가 잘못된 딜레마 일 수 있다고 주장함으로써 결론을 내릴 것입니다. 오늘날의 응용 프로그램은 종종 하나가 아니라 여러 언어로 작성됩니다. 각 언어마다 고유 한 장점이 있으며 이론적으로는 사용중인 작업에 맞게 설계되었습니다. 일부 문제 도메인 (예 : 웹 브라우저 논리 또는 데이터베이스 액세스)에는 특정 언어가 필요합니다.


7
마지막으로 여러 언어를 사용하려는 경우 언어 간 상호 운용성을 쉽게 지원하는 플랫폼 (.Net CLR 또는 JVM)을 고려하는 것이 좋습니다.
svick

9
@NathanCooper : 웹 애플리케이션을 작성해 본 적이 없다는 것을 의미합니까? 작은 것조차? 아니면 모바일 앱을 여러 플랫폼으로 이식해야합니까? 아니면 임베디드에서 일했습니까? 아니면 SQL 데이터베이스에서 데이터를 검색 했습니까?
Robert Harvey

10
@ NPSF3000 : 당연히, 당신은 마법의 방법을 공개하려고 귀찮게하지 않았습니다. 나는 shenanigans를 호출합니다.
Robert Harvey

9
@ NPSF3000 C #은 당신이하는 일에 좋은 선택 일 수 있지만 (Unity를 사용하면 분명히 모든 다국어 무거운 리프팅을 할 수 있도록 설계되었으므로 일을 조금 늘릴 ​​수 있지만) 일화는 반박하지 않습니다. 확실히 대부분의 비 사소한 프로젝트는 SQL과 다른 기술을 사용한다는 점에서 다국어이지만, 그 외에도 많은 사람들이 서로 다른 프로그래밍 언어를 병렬로 사용하거나 한 언어로 응용 프로그램을 작성하고 다른 언어로 도구를 작성하는 등의 작업을 수행합니다. 주장이 전혀 논쟁 적이 지 않다.
Chris Hayes

7
@ NPSF3000 문제가있는 경우 다음과 같이 말합니다 . 우리가 당신이 의미하는 바를 알아 내려고하는이 속임수를 거치지 않도록하십시오. 로버트가 "일부 문제 도메인에 특정 언어가 필요하다는 데 동의하지 않는다"고 명시 적으로 언급하면 ​​기꺼이 편집 해 드리겠습니다. 즉, 여러 언어로 작업하는 것이 "기본적으로 유익하다"는 의미는 전혀 없습니다.
Chris Hayes

5

언어를 선택해야하는 사업상의 이유가 있고 언어를 선택해야하는 공학적 이유가 있으며 트웨인이 항상 만나지는 않습니다. 학문적 인 이유로 던지면 상황이 악화 될 수 있습니다. 교수님이 필요한 방식으로 당신을 도울 수있을 것 같네요.

언어의 조상과 기능에 대한 사실은 찾기가 쉽습니다. 위키피디아에서 하루를 보내면 대부분의 정보를 채울 수 있습니다. 대부분의 사람들은 자기 자신을 단일 언어 프로그래머로 생각하지 않기 때문에 인재 풀 규모와 급여는 더 어렵습니다. 스칼라와 같이 덜 대중적인 언어를 사용하는 회사는 언어 별 경험이없는 훌륭한 일반 프로그래머를 고용 할 것으로 예상합니다. 내가 본 일부 프레젠테이션에서 볼 때 그 전략은 잘 작동 한 것 같습니다.

사실을 아는 것조차도 여전히 주관적인 선택이 될 것입니다. CEO는 기능 당 달러와 같은 대략적인 지표로 요약하기를 원할 것입니다. 정확한 그림을 얻으려면 프로토 타입을 만든 다음 배우는 것이 얼마나 쉬운 지, 기본을 익힌 후 프로토 타입을 작성하는 것이 얼마나 빠르며, 유지 관리가 얼마나 쉬운 지 이야기해야합니다. , 귀하가 일반적으로하는 업무에 얼마나 광범위하게 적용되는지 생각합니다.

모든 언어를 다루려고하기보다는 다른 프로그래밍 패러다임과 프레임 워크 유형에서 대표를 구하고 각각에 프로토 타입을 구현하려고합니다.

백엔드 범주의 대략적인 목록은 다음과 같습니다.

  • 마이크로 소프트. (하위 카테고리가있을 수 있습니다. 나는 그들에 대해 아무것도 모른다.)
  • Drupal과 같은 헤비급 OOP
  • 파이썬 병처럼 가벼운 OOP.
  • 스칼라를 이용한 놀이 / 리프트 / 스칼라 트라.
  • Java를 사용하여 재생 / 리프트합니다.
  • 봄 같은.
  • 스트럿 같은.
  • 레일 같은.
  • 하스켈 기반.
  • Node.js

프런트 엔드에서 :

  • OOP 스타일 JavaScript
  • Underscore와 같은 기능적 스타일 JavaScript
  • 베이컨과 같은 반응 형 JavaScript
  • 구글 웹 툴킷
  • 느릅 나무

간단한 프로토 타입을 구현하기 위해 각 카테고리에서 하루나 이틀을 보내면 몇 달이 걸리며, 그 후에는 각각의 강점과 약점을 훨씬 더 잘 이해할 수 있습니다. 회사의 문화 나 경험에 따라 좀 더 빨리 배제 할 수 있습니다.

이 보고서는 비즈니스 보고서이므로 "어떤 언어가 <회사>에서 사용 하는가"와 같이 인터넷을 검색하는 데 시간이 걸릴 것입니다. 그들 중 많은 사람들이 왜 특정한 언어를 선택했는지에 대한 백서를 작성했습니다.


4

기존 개발 프로세스에 내재 된 단점을 $ A로 식별하고 비용을 지불하십시오. 다른 개발 프로세스로 전환하는 비용을 $ B로 식별하십시오.

$ A가 $ B보다 작 으면 중지하십시오.

알려진 단점이 변경 비용을 능가하는 경우 (그리고 큰 경우!), 단점을 자세히 분석하고이를 해결하는 언어 / 개발 환경 / 개발 프로세스 변경 사항을 찾기 시작하십시오.

솔직히 말해서, 현재 Fortran에서 웹 앱을 개발하려고하지 않는 한, 사용하는 언어가 그 차이를 메우기 위해 사용하는 계약자 비용에 영향을 미칩니다. 주류 및 성숙한 언어 / 도구 / 개발 프로세스는 이미 가장 최신의 최신 도구가 가장 비싼 트레이너와 계약자이지만 가장 덜 성숙한 솔루션 인 곳에서 직면 할 수있는 대부분의 문제를 이미 해결했습니다. 그리고 그러한 변화를 보증하는 결점이 있다면, 선택한 언어가 그것들을 완전히 다룰 것 같지 않습니다.

그러나 여기서 수익성이 주요 목표가 아닌 경우 최첨단의 구도에 대해 구식으로 간주되는 오명을 고려해야합니다. 방정식의이 부분에 사용할 달러 값을 상사에게 문의하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.