프로그래밍 기술을 전반적으로 향상시키는 프로그래밍 언어? [닫은]


27

프로그래머가 언어를 많이 사용하기 때문이 아니라 (있을 수도 있지만) 프로그래밍 언어를 전반적으로 향상시키고 다른 언어로 생각하게 할 수 있기 때문에 프로그래머에게 어떤 언어를 배우라고 제안하겠습니까? ) 방법?


12
하나도 아닙니다. 오히려 : 가능한 많은 것들이 있으며, 가능한 한 다른 것들과는 다릅니다.

답변:


27

"정상적인"프로그래밍 및 알고리즘 :

  • 파이썬, 배우기 쉽고, 사용하기 쉽고, 읽기 쉽습니다.
  • C ++, 컴퓨터가 정말 무엇인지 알려줍니다.

생각이 바뀌는 경험을 위해 :

  • 하스켈
  • 프롤로그

당신의 마음을 파괴하고 padawan과 Jedi Master 사이의 경계를 넘어서 :

  • 일반적인 LISP

3
그렇습니다. chrisaycock, C 및 어셈블리에 동의하면 컴퓨터가 실제로 무엇인지 가르쳐 줄 것입니다. C ++은 아주 조금만
올라가지

mh. 프롤로그는 훌륭하지만 일반적인 프로그래밍 기술을 향상시키는 데 어떻게 흥미로울 지 모르겠습니다. 나는 그것을 대체 수학 / 논리 표기법 시스템으로 본다. 그의 구조는 프로그래밍 언어보다 더 많은 것을 쿼리 할 수있다 (프로 시저가 아닌 stati를 설명한다). 편집 : 그것은 당신이 무언가에 대해 생각하는 방식을 확실히 바꾸지 만, 무언가는 프로그래밍이 아닙니다.
cbrandolino

프롤로그는 프로그래밍입니다. 선언적 프로그래밍이며 논리에 뿌리를두고 있으므로 수학적으로도 그렇습니다. 그러나 여전히 프로그래밍. 마지막 요점은 다른 Lisp (예 : Scheme)도 마찬가지라고 생각하십니까?

3
프롤로그는 가장 잘 알려진 논리 패러다임 언어입니다. 프로그래머가 더 좋아지기를 원한다면 정신적 민첩성을 높이고 새로운 도구를 제공하는 데 도움이 될 것입니다. 나는 일반적인 Lisp에서 볼 수있는 Lisp 방언이 나에게 가장 생산 가능한 Lisp처럼 보입니다.
Lacrymology

1
Common Lisp보다 Scheme에 투표했습니다. 실제로 프로덕션에서 Lisp를 사용한다고 생각 하느냐에 달려 있습니다. 그렇지 않다면, 계획으로 가십시오.
Skilldrick

13

Javascript를 잊지 마십시오 .

일반적인 OO 기능이 아닌 OO 기능이 있습니다. 고차 함수 및 클로저에 적합하며 일상적으로 사용합니다. 많은 기능 프로그래밍 트릭을 허용합니다. 매우 유연합니다.

그리고 모든 심각한 브라우저가 가지고 있기 때문에 실용적입니다.

(물론 불쾌한 단점도 많이 있습니다. 실용적인 언어는 거의 없습니다)


1
JS에는 Java에없는 OO 기능이 있습니까?
Mahmoud Hossam

3
@Phobia : JS는 완전히 다른 방식으로 OO를 수행합니다. 수업이 없습니다. 상속은 프로토 타입을 통해 이루어집니다. 본질적으로 객체는 다른 객체로부터 상속받을 수 있습니다. 함수는 일류 값입니다. 전달할 수있을뿐만 아니라 기존 객체에 새로운 메소드를 쉽게 할당 할 수 있습니다. JS가 데이터 숨기기를 수행하는 방식도 Java와는 매우 다릅니다. 객체가 노출하는 모든 것이 공개되므로 클로저를 사용하여 데이터와 메서드를 숨 깁니다. '정식 OO'는 없습니다. JS는 스몰 토크가 C ++보다 발명 한 '원본'OO에 조금 더 가깝지만 Java의 OO는 이제 '정식'입니다.
9000

11

컴퓨터 작동 방식에 대한 C어셈블리

기능 프로그래밍 및 메타 프로그래밍을위한 HaskellLISP

벡터 및 간결한 프로그래밍을위한 APL

프로그래밍 방식으로 컴퓨터를 관리하는 방법에 대한 bash 또는 tcsh


4
APL 대신 동일한 저자가 J를 사용할 수 있습니다.
9000

조립시 +1 중요한 개발을 한 후에도 고급 언어를 똑같은 방식으로 보지 마십시오. 코딩에 대해 정말로 다른 방식으로 생각하게 할 무언가를 찾고 있다면 ASM이 그렇게 할 것입니다.
Kurtis

9

나는 계획을 제안 할 것이다.

Lisp에서 파생 된 함수형 프로그래밍 언어입니다 (실제로는 방언이라고 생각합니다). Common Lisp와의 주요 차이점은 접근 방식이 매우 미니멀 하다는 것입니다. 예를 들어, Scheme의 정규 분포 (Scheme <R5 또는 Mit / GNU / Scheme)에서는 루프 구현을 찾을 수 없습니다. 꼬리 재귀를 사용하여 자체적으로 만들어야합니다.

실제로 표현력이 뛰어나고 구문은 프로그래밍과 관련하여 새로운 것을 배우는 데 좋습니다. 코드를 살펴보면 컴파일러 / 통역사가 어떻게 작동하는지 알 수 있습니다.

또한 MIT 웹 사이트에서 무료로 다운로드 할 수 있는 최고의 프로그램 북, 컴퓨터 프로그램의 구조 및 해석을 제공합니다 .

다음은이 흥미로운 언어에 즉시 관심을 가질 수있는 비디오 강의입니다. 연사는 SICP의 저자입니다. http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman- 강의 /


고맙습니다. 그래도 교훈은 열정적 인 프로그래머를 눈물로 옮길 수 있다는 경고입니다.
cbrandolino

@cbrandolino-사실, 함수형 프로그래밍 클래스는 많은 사람들을 컴퓨터 과학 프로그램에서 쫓아 냈습니다.
jmort253

1
구성표 최소한이지만 R5에서는 약간의 사마귀가 생겼으며 R6에서는 확실히 거대했습니다. 그것은 매우 아름다웠 기 때문에 유감입니다. 정말 미니멀하지만 실용적인 언어는 Lua
Javier

@Javier, 네 말이 맞아. 구현을 지정하기 위해 답변을 편집하겠습니다.
cbrandolino

나는 대학 ATM에서 계획을하고 있고 싫어. 기능적인 언어가 아니기 때문에 오랫동안 그 언어로 들어가고 싶습니다. 그러나 구문은 실제로 나를 죽입니다. 키보드에는 세 가지 유형의 버팀대가 있으며 (앵글 괄호를 세면 네 개) 패러 틴 만 사용합니다. 왜? 다른 것을 사용하는 데 어떤 문제가 있습니까?
Femaref

4

LISP, 바람직하게는 Abelson & Sussman의 "컴퓨터 프로그램의 구조 및 해석"과 조합 된 Scheme은 C / C ++에 의해 부과 된 것과 다른 용어로 생각하도록 가르 칠 것입니다.

FORTH, 특히 블록 중심의 FORTH는 파일 지향적 인 것이 아니라 (예 : D85) 당신의 충성을 억제하도록 가르 칠 것입니다. 어떤 상황에서도 64 줄의 16 줄을 초과하는 루틴을 작성할 수없는 경우 추상화하고 고려해야합니다.


4

Java는 전 세계 대학에서 가장 많이 사용되는 언어 중 하나이며 그 이유가 있습니다. 종종 공룡과 비슷하지만 모든 사람에게 현대 프로그래밍 개념에 대한 훌륭한 개요를 제공합니다. 컴퓨터 자체가 어셈블러 또는 이미 훨씬 더 추상적 인 C와 같은 방식으로 작동하는 방법을 보여주지는 않습니다. 그러나 조종사는 비행을 할 수 없어 스스로 비행기를 만들 수 없어야합니다. Java, C ++, php, c #, ruby ​​(on rails) python 등 오늘날 가장 일반적인 언어로 (공명을 위해) 작성하는 모든 코드에 대한 좋은 기초로 ...

최대


3

LINQ를 사용한 C # 3

함수형 프로그래밍에 대한 훌륭한 소개입니다.

프로그램을 작성하거나 Project Euler를 해결하고 LINQ 호출로 가능한 많은 루프를 교체하십시오.
기능 프로그래밍 및 지연 평가의 개념을 마스터하는 데 도움이됩니다.

거기에서 F #으로 넘어갈 수 있습니다


3

손을 내밀어 하스켈이라고합니다. 그리고 두 가지 이유로 :

  • 함수형 프로그래밍을 배우는 가장 좋은 방법입니다. 다른 모든 언어는 기본적으로 부작용을 허용하지만 기능적으로 기능을 수행 할 수 있습니다 (그렇습니다. 여기에는 ML 및 Erlang이 포함됩니다. 자세한 내용은이 대화 참조 ). Haskell은 기본적으로 작동하지만 필요할 때 부작용을 사용하도록 만들 수 있습니다.
  • 코딩하기 전에 생각하도록 장려하는 언어입니다. 솔직히 말해서 이것은 실제로 나에게 문제가되지 않았습니다 (아무것도 정반대입니다). 그것은 내가 소수 인 것 같습니다. 내가 경험 한 대부분의 프로그래머는 "5 분 안에 솔루션을 코딩하기 전 며칠 동안 문제를 생각해 보자"라는 사고 방식보다는 "코드 우선, 나중에 질문하기"사고 방식에 더 가깝게 보인다. . 따라서 이러한 종류의 언어는 대부분의 프로그래머에게 소중한 경험을 제공 할 수 있습니다.

3

C / Java 세계 출신이라면 Scala를 제안 할 것입니다.

순전히 기능적인 프로그래밍 언어는 아니지만 OO를 사용하여 일부 기능적 프로그래밍 기능을 시뮬레이트합니다 (예 : 객체를 사용하여 일등 함수 및 고차 함수 시뮬레이션).

OO에 익숙하다면 Scala는 이미 알고있는 용어를 사용하여 기능적 세계를 설명합니다.

Haskell, List 등과 같은 더 기능적인 프로그래밍에 들어가기보다는 Scala의 기능 프로그래밍을 이해하는 것이 더 쉽다는 것을 알았습니다.


2

기능적 언어는 내가 현재있는 곳으로 나를 안내하는 데 도움이되는 언어입니다. 웹 응용 프로그램 개발을하고 있지만 기능적 언어에서 배운 개념은 내가 보지 못했던 문제에 대한 솔루션을 보는 데 도움이됩니다. 대학에서 함께 일한 언어는 다음과 같습니다.

  • C ++ (기능은 없지만 포인터 및 메모리 관리와 같은 개념은 매우 중요합니다)
  • 닥터 스킴
  • ML / Ocaml (우리는 ML / Ocaml을 사용하여 다른 언어를 썼습니다!)
  • 자바 스크립트 (클라이언트 측과 서버 측 모두 산업에서 주목 받고있는 기능 언어)

이러한 언어를 익히면 추상화의 세계를 이해하고 다른 기능을 캡슐화하는 코드 블록을 작성하는 방법을 이해하고 세부적인 수준의 세부 사항을 숨겨서 높은 수준의 비즈니스 목표에 집중할 수 있습니다.


1

Ruby에는 내가 사용한 가장 강력하고 직관적 인 테스트 프레임 워크 중 하나가 있습니다. 루비로 테스트 작성을 시작할 때까지 조롱과 스터 빙을 올바르게 사용하는 방법을 실제로 이해하지 못했습니다. rSpec과 Cucumber는 환상적인 도구입니다.


1

문제에 대해 새로운 방식으로 생각해야하는 많은 프로그래밍 언어가 있습니다 (물론 익숙한 것에 비해). 명령형 언어를 배운 것을 배우는 가장 일반적인 언어는 기능적이며 논리적 언어 (예 : prologlisp) .

일부 언어는 ocamlHaskell 과 같은 범주 이론에 크게 영향을 받고 일부 언어는 Curry (기능 및 논리)와 같은 종간 언어 입니다. Curry는 아마도 내가 아는 가장 마음에 드는 언어 일 것입니다. 논리 프로그래밍을 통해 Haskell의 모든 마음을 불어 넣었을뿐 아니라 제약 기반 프로그래밍과의 통합 때문입니다.

또 다른 재미있는 언어는 동시성에 너무 무겁기 때문에 최근의 arduino 포트 때문에 Occam-pi 입니다.


1

다재다능한 프로그래머는 자신의 소매를 속이는 몇 개의 백을 가지고 있으며 여기에는 다음이 포함됩니다.

  • 컴퓨터의 내장이 어떻게 작동하는지 배우는 조립.
  • C 또는 Pascal과 같은 절차 적 언어
  • 구성표와 같은 기능적 언어
  • Squeak와 같은 OOP 언어.

이것들은 모두 문제 에 대해 생각 하고 접근 하는 약간 다른 방법을 가르쳐 줍니다.


0

명확한 목표가 없으면 프로그래밍 언어를 제대로 배우지 못합니다. 당신이 그것으로 무엇을하고 싶은지 알면 필요에 맞는 프로그램을 결정할 수 있습니다.

예를 들어, c #에 대해 말해 봅시다.

C #은 웹 프로그램, 콘솔 프로그램, 독립 실행 형 실행 파일, 게임 프로그램, silverlight 프로그램 및 모바일 프로그램을 수행 할 수 있습니다. 구문은 거의 모든 경우에 동일하지만 모든 시나리오에서 다르게 작동합니다. 예를 들어 독립 실행 형 실행 파일은 언로드되거나 프로그램이 완료 될 때까지 정보를 유지하지만 웹 프로그램은 페이지를로드 할 때마다 정보가 삭제되며 실버 라이트에서는 대부분의 시간을 xml 파일

둘째, 이국적인 언어 (예 : Haskel)로 시간을 보내지 말고 기업 말하기, java (언덕의 왕), c # / vb.net, php 및 sql과 같은 노력할만한 가치가 거의 없습니다.


0

Processing 이라는 Java 애플릿을 작성하는 매우 간단한 프로그램이 있습니다.

이 언어는 시작하는 경우 변수, 루프 및 그 종류의 것들에 대한 매우 기본적인 이해를 제공합니다.


0

여기에 좋은 제안이 있습니다. 아마 개인적으로 C 또는 C ++와 함께 갈 것입니다. 그것들은 일이 어떻게 작동하는지 이해하는 데 크게 중요하지만 다른 언어로 난독 화되는 경향이있는 많은 개념을 다루도록 강요합니다. 실제로 작동하는 방식을 이해하면 나중에 사용하는 언어에 세부 사항이 숨겨져 있어도 프로그래머로서 도움이 될 것입니다.

조금 더 낮은 수준으로 파고 싶다면 조립은 재미 있지만 많은 것을 기대하지는 않습니다. :)


0

루비를 추천합니다. 루비는 패러다임을 바꿀 것을 요구하지 않지만 여러 패러다임에서 일하도록 장려합니다. 나는 이것의 장점은 당신이 익숙한 방식으로 일할 수 없다는 것에 좌절하지 않고, 당신이 익숙한 방식으로 일을 수행하는 데 한계가있는 좌절과는 다른 패러다임을 사용한다는 것입니다.

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