이 질문에 대한 답은 정확히 무엇을 배우고 싶은지에 달려 있습니다.
Python과 Ruby
Python 및 Ruby와 같은 고급 언어는 높은 수준이고 구문이 읽기 쉽기 때문에 종종 제안됩니다. 그러나 이러한 언어에는 모두 공통 데이터 구조에 대한 추상화가 있습니다. 자신의 버전을 학습 연습으로 구현하는 것을 막을 수는 없지만 다른 고수준 데이터 구조 위에 고수준 데이터 구조를 구축하고 있다는 것을 알 수 있습니다. 이는 반드시 유용하지는 않습니다.
또한 Ruby와 Python은 동적 형식의 언어입니다. 이것은 좋지만 초보자에게는 혼란 스러울 수 있으며 일반적으로 런타임까지 분명하지 않기 때문에 오류를 포착하기가 더 어려울 수 있습니다.
씨
C는 다른 극단에 있습니다. 메모리 관리 방법과 같은 매우 낮은 수준의 세부 정보를 배우고 싶은 경우 좋지만 메모리 관리는 malloc () / free ()의 올바른 사용과 같이 갑자기 중요한 고려 사항입니다. 그것은 산만해질 수 있습니다. 또한 C는 객체 지향이 아닙니다. 그것은 나쁜 것은 아니지만 단순히 주목할 가치가 있습니다.
C ++
C ++이 언급되었습니다. 댓글에서 말했듯이 이것은 끔찍한 선택 이라고 생각합니다 . C ++는 단순한 사용법에서도 엄청나게 복잡하고 우스꽝스러운 양의 "잘못"이 있습니다. 또한 C ++에는 공통 기본 클래스가 없습니다. 이것은 해시 테이블과 같은 데이터 구조가 공통 기본 클래스에 의존하기 때문에 중요합니다. 명목상의 기본 클래스에 대한 버전을 구현할 수는 있지만 약간 덜 유용합니다.
자바
Java도 언급되었습니다. 많은 사람들이 Java를 싫어하고 언어가 매우 장황하고 더 현대적인 언어 기능 (예 : 클로저)이 부족하다는 것은 사실이지만 그 어느 것도 실제로 중요하지 않습니다. Java는 정적으로 유형이 지정되고 가비지 콜렉션이 있습니다. 즉, Java 컴파일러는 동적으로 입력 된 언어 (런타임까지)가 수행하지 않는 많은 오류를 포착하고 세분화 오류를 처리하지 않습니다 (Java에서 메모리 누수를 할 수 없다는 것은 아닙니다. 당연히 가능합니다). Java가 좋은 선택이라고 생각합니다.
씨#
C # 언어 는보다 최신 버전의 Java와 같습니다. Java와 마찬가지로 가상 머신에서 실행되는 관리 (가비지 수집) 중간 컴파일 언어입니다. C / C ++를 제외하고 여기에 나열된 다른 모든 언어도 가상 머신에서 실행되지만 Python, Ruby 등은 바이트 코드로 컴파일되지 않고 직접 해석됩니다.
C #은 기본적으로 Java와 동일한 장단점을 가지고 있습니다.
Haskell (기타)
마지막으로 Haskell, OCaml, Scheme / Lisp, Clojure, F # 등과 같은 기능적 언어가 있습니다. 이들은 모든 문제에 대해 매우 다른 방식으로 생각하고 어느 시점에서 배울 가치가 있지만 다시 배우고 싶은 것에 따릅니다. 함수형 프로그래밍 또는 데이터 구조? 나는 문제를 혼동하기보다는 한 번에 한 가지만 배우는 것을 고수 할 것입니다. 어느 시점에서 기능적 언어를 배우는 경우 (내가 권장하는) Haskell은 안전하고 훌륭한 선택입니다.
나의 충고
Java 또는 C #을 선택합니다. 둘 다 무료로 제공되는 훌륭한 IDE (Eclipse, Netbeans 및 IntelliJ Community Edition for Java, Visual Studio Express for C #, Visual Studio Community Edition)를 사용하여 코드 작성 및 실행을 쉽게 할 수 있습니다. 배열보다 복잡한 기본 데이터 구조와 직접 작성한 객체를 사용하지 않는 경우 기본적으로 C / C ++에서와 동일한 것을 배우지 만 실제로 메모리를 관리 할 필요가 없습니다.
설명하겠습니다. 충분한 요소가 추가되면 확장 가능한 해시 테이블의 크기를 조정해야합니다. 모든 구현에서 백업 데이터 구조 (일반적으로 배열)의 크기를 두 배로 늘리고 기존 요소를 복사하는 것과 같은 작업을 수행해야합니다. 구현은 기본적으로 모든 명령형 언어에서 동일하지만 C / C ++에서는 무언가를 올바르게 할당하거나 할당 해제하지 않을 때 세분화 오류를 처리해야합니다.
동적 타이핑이 처음에는 문제가 될 수 있기 때문에 Python 또는 Ruby (어떤 것이 중요하지 않음)가 다음 선택이 될 것입니다.