2008-10-09 7 views
11

지금까지 내가 아는 한 많이 알지는 못했지만, 현재 널리 사용되는 프로그래밍 패러다임은 Object Oriented (Java, C#, Ruby)와 functional (F #)이다. 첫 번째 패러다임을 가장 잘 알고있는 사람으로서 몇 가지 질문이 있습니다.프로그래밍 언어 패러다임이 어떤 직업에 적합한가요?

  • 프로그래머는 단순히 자신의 모든 삶의 패러다임을 고수 할 수 있습니까? 또는 다른 말로하면, 모든 문제가 한 망치의 손톱으로 줄어들 수 있습니까?
  • 그렇지 않은 경우 어떤 도구가 어떤 유형의 작업에 적합합니까? 예를 들어 : 아름답고 반응 등의 데이터를 신속하게 위기 할 수 인터페이스,
  • 이 사람들이 지금 새로운 패러다임을 배울 필요 적이을 만들어 바탕 화면 대 웹 기반? 지난 2 년 동안 일하는 직장에는 Java와 C#이 필요했습니다. 비 OO 언어를 특별히 사용하는 직장이 있습니까?

분명히 "최고의"언어는 없지만 새로운 패러다임을 배우는 데 시간과 노력을 투자할만한 가치가 있는지 궁금합니다. 미리 감사드립니다!

+0

루비 (및 파이썬)는 모두 객체 지향적이며 동적입니다. 객체 지향 대 프로 시저와 기능은 하나의 차원입니다 (논쟁의 여지가 있습니다). 동적 대 정적은 또 다른 차원입니다. 웹 대 데스크탑 - 언급되지 않았습니다. 이 질문은 혼란 스럽습니다. –

+0

패러다임에 어수선한 점에 대해 유감스럽게 생각합니다. 나는 아직도 그들에 대해 배우고 있습니다. 그 외에, 나의 질문의 어떤 부분이 혼란 스럽습니까? – echoblaze

+0

@echoblaze : 패러다임은 의미가 없었기 때문에, 다른 것을 해석하려고 시도 할 필요가 없었습니다. 그래서 필자는 구체적으로 패러다임 문제를 열거했다. 그것은 막 다른 길목이었습니다. 아마도 당신은 시작 단락을 단순화 할 수 있습니다. –

답변

12

"다시 말하면, 모든 문제를 하나의 해머에 대한 손톱으로 줄일 수 있습니까?" 예. 기간. 실행할 가능성이있는 프로그래밍 언어는 다른 모든 프로그래밍 언어와 마찬가지로 완전합니다. 실제로 프로그래밍 언어에 대한 "완전성"에 대한 공식적인 정의가 있습니다.

"사람들이 새로운 패러다임을 배울 필요가 있었습니까?" 항상.

실제로 "패러다임 변화"의 기복을 다음과 트릭이있다. 지난 30 년 동안 저는 프로그래밍이 상대적으로 단순한 명령형/절차 형 모델에서부터 프로세스와 데이터 간의 균형이 더 좋은 훨씬 더 풍부한 모델로 성장했음을 보았습니다.

나는 다음을 발견했습니다 ... 원동력의

일부는 인공 지능 커뮤니티입니다. 이러한 "새로운 모델"중 많은 부분이 AI 지식 표현 방식으로 시작되었습니다. 그들은 거기에서 견인력을 얻었고, 그런 다음 더 많은 주류 응용 프로그램으로 흘러 들었습니다.

엔터티 관계 모델은 원래 비즈니스 트랜잭션이 아닌 지식 표현을위한 모델입니다. 마찬가지로 Object 모델도 지식 표현을위한 모델이었습니다. 그런 다음 시뮬레이션 사람들이 그것을 발견했습니다. 이제 나머지 사람들도 그것을 가지고 있습니다.

내 결론은 다음과 같습니다.

소프트웨어는 지식 표현이다.

패러다임이나 모형 또는 접근 또는 스타일의 선택은 다음과 같은 질문에 대한 대답을 기반으로

: "어떻게 제일이 문제를 나타낼 수 있습니다"

문제가 객체와 관계가있는 경우 OO. 문제에 알고리즘 및 변환, 맵, 필터 및 감소가있는 경우 기능적입니다. 문제가 동적 인 경우 유연하고 유연합니다. 문제가 정적이라면 빠르게 확장 될 것입니다.

+0

총 합의, 좋은 요약을 배울 필요가 있습니다. 프로그래밍 언어 개발의 역사는 언어에 포함 된 지식의 증가를 특징으로합니다. –

2

나는 당신이 온 회중에서 대답을 찾을 것이라고 생각합니다. 더 많이 일할수록 다른 사람들을 아는 것이 "도움이된다"는 것을 알게됩니다. C#/VB/SQL Server 개발자로서 저는 F #과 다른 언어에 대해 조금 배우는 것이 도움이된다는 사실을 발견했습니다.

9

그것이 도움이 될 것입니다 때문에 당신이 다른 방법으로 문제에 대해 생각하는 다른 패러다임을 (OO, 기능, 절차 적, 동적, 등) 학습 가치가있다.

예를 들어, 재귀를 사용하는 것과는 달리 선형 방식으로 트리 순회를 해결하는 차이점에 대해 생각해보십시오. 또는 Google이 Map과 Reduce의 조합을 사용하여 인터넷 색인 생성을 돕습니다.

새로운 방법은 가장 어려운 문제 중 일부를 중단 할 수 있습니다 오래된 문제에 적용 생각합니다.

0

OOP를 염두에두고 디자인 및 건축 기술을 개발하는 것은 언어에 무관심한 커리어를위한 가장 바람직한 스킬 셋입니다.

Oops에서 코딩 할 때 benifit은 다른 팀원과 조직 전체를위한 것입니다. 코드가 모든 사람에게 이해 될 수 있고 개발자가 그 일을 그만두면 회사는 그다지 걱정할 필요가 없습니다. 다른 경우에는 기능적 스타일을 따를 경우 다른 사람들이 자신이 한 일을 이해하는 것이 정말 어려울 것입니다.

7

패러다임은 언어와 독립적입니다. C에서 OO 스타일로 개발할 수 있습니다 (GTK를보세요). 자바로 프로그래밍 할 때 주로 기능적 스타일을 사용합니다.

그것은 가능한 한 많은 패러다임을 아는 가치가있다. 어떤 문제는 한 패러다임에서 해결하기가 쉽지 않으며 또 다른 패러다임에서 정교한 제작이 필요합니다. 즉, 기능이 더 의미하지 않는다 (http://www.rosettacode.org/rosettacode/w/index.php?title=Quicksort

더 나은 해결할 문제가 있습니다 : A (사소한) 예를 들어

이 페이지에, 더 나은 여전히 ​​Java 및 OCaml의, 또는, 하스켈 퀵 구현을 비교합니다. OO).

+0

고마워요, 그러면 상황이 좀 더 명확 해집니다! OO로 어떤 종류의 문제를 쉽게 해결할 수 있습니까? – echoblaze

5

하나의 망치로 모든 문제를 손톱으로 줄일 수 있습니까?

예. 하나의 망치로 문제를 해결할 수 있습니다.그 문을 반으로 자르는 것만으로도 훨씬 더 오래 걸립니다.

는 사람들은 지금 새로운 패러다임을 배울 필요가 있나요

? 지난 2 년 동안 일하는 직장에는 Java와 C#이 필요했습니다. 비 OO 언어를 특별히 사용하는 직장이 있습니까?

개발자는 모든 15-20년 정도이 작업을 수행 할 수 있습니다.

확실히 절차 VBA로 작성된 액세스 기반의 시스템과 중소 기업의 전체 산업이 있습니다. (그리고 나는 그들 대부분을 위해 일했다고 생각한다). 기본 ASP 개발자는 ASP.NET을 배워야합니다. Perl 개발자는 Python을 배우고 있습니다. 일괄 주도형 개발은 이벤트 기반 개발로 이어졌습니다.

+1

망치로 그 문을 반으로 자르면 길어질뿐만 아니라 실제로는 진절머리 나는 것처럼 보일 것입니다. :) –

+0

VBA 개발자는 Typescript ... –

1

동적 물건이 나를 밖으로 쓰레기를 무서워하지만, 루비 온 레일즈는 지금까지 내가 웹 물건에 대한 본 최고의 개발 시스템입니다. 기존의 컴파일 된 완성 된 코드의 의미를 변경하는 것이 너무 쉽기 때문에 실제로 크고 무거운 유지 관리 프로젝트에이 코드를 사용하는 것이 편안하지는 않습니다. 또한 한 사람의 코딩 스타일을 새로운 언어로 만들기가 너무 쉽습니다.

동적/스크립팅은 시스템 관리자 및 Linux 시스템을 실행하는 모든 사용자에게 알리는 것이 좋습니다. BASH 나 Ruby에 빠른 스크립트를 작성하면 Java 나 C++에서 동일한 기능을 구현하려는 시도에서 벗어날 수 있습니다.

OO를 사용하면 많은 양의 코드를 훨씬 쉽게 이해할 수 있습니다. 대규모 팀이 있거나 대규모 팀이 여러 개이고 신속하게 개요를 제공해야하는 경우 OO를 사용하면 특정 기능을 더 쉽게 설명하고 격리 할 수 ​​있습니다. 나는 정확하게 대충을 말해야한다!

나는 모든 것이 불변 할 수 있기 때문에 기능적으로 멀티 스레드 프로그래밍에 좋다고 생각한다.

0

대부분의 사람들은 어떤 언어를 사용하여 문제를 해결할 수 있으며 일반적으로 다른 패러다임 스타일로 작성할 수 있습니다.

다른 패러다임을 사용하는 법을 배우는 데 시간이 걸리면 미래에 어떤 패러다임을 사용하든 지식 표현과 문제 해결에 대해 다른 것을 배웁니다.

패러다임 및 도메인이 소프트웨어가 작동하는 데 필요한 환경의 특성에 따라 언어를 선택하는 것이 가장 좋습니다 사이에 정렬이된다.

  • 는 여러 데스크탑 플랫폼에서 실행해야합니까 ?
  • 데스크톱 응용 프로그램의 경우 기본 모양과 느낌이 있어야합니까?
  • 디자인의 빠른 반복이 중요합니까?
  • 유지 관리 방법은 무엇입니까?
  • 어떤 타사 시스템이 함께 작동해야합니까?
  • 기존 프로그래머 지식/기술/기본 설정.