프로그래밍의 기초가 강하면 모든 프로그래밍 언어를 쉽게 익힐 수 있습니다. 사실 또는 신화? [닫은]


33

프로그래밍의 기초가 상당히 좋은 사람이 프로그래밍 언어를 쉽게 배울 수 있다는 것이 사실입니까?

글쎄, 프로그래밍 언어를 말할 때 PHP, Perl, Ruby 등과 같은 민첩하고 역동적 인 언어를 언급하지만 먼 과거의 이전 프로그래밍 언어는 아닙니다.

나는 자바, 그루비 및 플렉스에서만 어느 정도 일했습니다. 그래서 내가 아마추어 프로그래머이지만 빠른 학습 자라는 사실을 고려할 때, 그러한 언어 중 하나에서 발판을 얻는 데 얼마나 걸립니까?


1
"Any"를 "Most"로 바꾸십시오.

4
언어를 '민첩하게'만드는 것은 무엇입니까? 나는 민첩성이 개발 과정 이라고 생각했다 .
oosterwal

17
쉽게 마스터? 아니요. 쉽게 배웠습니까? 예. 숙달은 모든 언어에서 수년간의 사용이 필요한 전문 지식 수준을 의미합니다. 기본이 정해지면 언어를 사용하는 방법을 배워야합니다.
Joel Etherton

1
아니요, 비슷한 언어에 대해서만 적용됩니다. Java를 아는 것은 Haskell을 배우는 데 도움이되지 않지만 C ++ 등을 배우는 데 도움이됩니다. PHP를 아는 것은 어셈블리를 배우는 데 도움이되지 않지만 Ruby를 배우는 데 도움이됩니다.
iveqy

답변:


46

예, 예약이 있습니다.

4 주 전에 저는 C와 C ++에 전문가 수준의 기술이 있고 Java에 아마추어 수준의 기술이 있다고 말하고 싶습니다. 상사는 경험이 전혀없는 JavaScript로 소프트웨어를 작성해달라고 요청했습니다.

앞으로 2 주 동안 많은 샘플 코드 스 니펫을 읽고 멋진 라이브러리를 모두 찾아서 프로그램을 작성했습니다. 끝났고 작동합니다. 그리고 지난주에 나는 JavaScript 책을 샀고 그것을 읽었고, 소년은, 내가 무엇을하고 있는지 몰랐습니다. 이제 나는 왜 내 물건이 그렇게 이상하게 행동했는지 이해합니다.

이제 저는 조금 JS를 알고 있다고 말합니다. 나는 그것을 읽고 그것을 사용할 수 있지만, 내가 쓰고있는 것이 비효율적이며 읽기 어려우며 모범 사례를 따르지 않는다고 확신합니다.

일반적으로 빠른 학습자는 일주일이 걸리고 새로운 언어로 저품질 제품을 생산하기 시작할 수 있습니다. Java를 알고 있다면 C, C ++, PHP, Python, JavaScript를 신속하게 선택할 수 있지만 코드를 수정하거나 잘 정의 된 함수를 작성하기에 충분합니다. (정규식이 복잡하기 때문에 Perl이 더 어려울 수 있습니다.) 새로운 언어로 시스템을 올바르게 설계하려면 숙련 된 멘토 아래에서 1 년 동안 전문적으로 개발하는 것이 좋습니다.


18
나는 2 년이 걸린다고 말하고 싶었다. 첫해는 상대적으로 능숙해야하며, 둘째 해는 상대적으로 효율적이어야합니다.
Tim Post

4
나는 수십 년 전에 (십여 개의 언어를 배운 후)이 경험을 가졌습니다 ... 나는 에이다에서 일해야했습니다. Ada에서 코드를 작성하는 데 며칠이 걸렸습니다. 언어 / 런타임 시스템 디자이너의 헤드 스페이스에 들어가서 GOOD 코드를 작성하려면 1 년이 걸렸습니다.
quick_now

1
솔직히 말해서 Java도 이런 식으로 배웠습니다. 나는 현재 1 년의 점수를 받았으며 "상대적으로 능숙하다"고 정확하다고 말할 것입니다.
Brad

1
그 이유는 당신의 기초가, 심지어 광범위하지 않은 곳에서도 강력하기 때문입니다. jscript 이전에 클로저, 목록 이해, 기타 데이터 구조 및 기타 범위 지정 규칙을 사용하여 다른 언어를 알고 있다면 문제가 덜했을 수 있습니다.
피터

VB.net과 비슷한 경험을했습니다. 몇 년 동안 VB 경험이있는 상사가 작성한 코드를 읽을 때까지는 ... 중복 코드처럼 코드가 언어를 초월하는 경향이 있습니다!
DisgruntledGoat

28

기본적으로 대답은 '예'입니다 ... 그리고 안돼 ... 당신이 무슨 뜻인지에 따라 기초 하고 쉽게 마스터 .

  • 프로그래밍의 기초를 아는 것은 언어에 관계없이 도움이 될 것입니다. 기본적으로 여기서 나는 주어진 패러다임에 국한되지 않는 것을 의미합니다. 알고리즘, 추상화 수준, 격리 등

  • 주어진 패러다임 (OOP, 기능 등)의 기초를 잘 알고 있으면 동일한 패러다임을 지원하는 언어를 쉽게 배울 수 있습니다. 언어를 잘 알면 같은 가족의 언어를 빠르게 선택할 수 있습니다.

  • 같은 가정에서 배운 모든 언어가 다음 언어보다 훨씬 쉬워 질 것입니다.이 학습 곡선이 당신이 더 많이 알면서 기하 급수적으로 더 빠르더라도 놀라지 않을 것입니다.

신화

  • 새로운 패러다임으로 옮겨 갈 때 첫 패러다임의 언어를 잘 아는 것은 같은 가정에서 언어를 배우는 것만 큼 도움이되지 않을 것입니다. 사실, 그들 사이의 차이에 따라, 앞으로 나아가고 새로운 패러다임을 실제로 잡기 전에 먼저 몇 가지를 먼저 배워야 할 수도 있습니다.

--- 주석을 기반으로 마지막 섹션 편집 ---

것...

  • 첫 번째 패러다임을 아는 것은 다음 학습에 도움이 수 있습니다.

그러나

신화

  • 건방진 소리를 내지 마십시오. 세 번째 패러다임의 속도를 늦추거나 전혀 도움이 될 수 없습니다.

마지막 것을 제외하고는 모두 좋습니다. 일화 적으로, C와 같은 절차 적 프로그래밍 언어를 아는 것은 Prolog와 같은 논리 언어를 배우려고 할 때 도움이되지 않았으며, 제 경우에는 "Q : 루프를 어떻게 프롤로그에 코딩합니까?" ==> "A : 당신은하지 않습니다".
Steven A. Lowe

2
내가 들었던 일화적인 증거는 Scheme에서 프로그래밍 초보자를 상당히 쉽게 시작할 수 있지만 BASIC 또는 C # 또는 그와 비슷한 것으로 프로그래밍 한 경우 훨씬 어렵다는 것을 암시합니다.
David Thornley

1
@ 스티븐 & 데이비드 : 나는 그 마지막 것에 대해 확신이 없었습니다. 나는 절차상에서 객체로, 기능적으로 갔지만 아직 로직 패밀리를 시도하지 않았습니다. 시간과 경험이 갈수록 쉬워 지지만 대담하지는 않았습니다. 귀하의 의견에 따라 답변을 수정하겠습니다.
Newtopian

14

어떤을위한 유사한 언어, 예

근본적으로 다른 패러다임을 가진 언어의 경우

예를 들어 C ++을 알고 있고 Java를 배우고 싶습니다. VB.NET을 알고 있다면 프롤로그를 배우고 싶을 것입니다.


1
동의한다. 완전히 다른 철학을 따르는 언어가 있습니다. 따라서 C와 같은 명령형 언어에서 약간의 노력을 기울이지 않고 Prolog와 같은 논리 프로그래밍 언어로 전환하는 것은 쉬운 일이 아닙니다.
사키 스크

4

간단한 대답은 "정확하지만 검증하기는 어렵다"고 생각합니다. 언어의 실제 구문보다 밀접하게 연관된 API, 사용법, 관용구 및 패러다임 (OO, 기능 등)을 배우는 것은 매우 어렵습니다. 프로그래밍 기초와 일부 컴파일러 지식에 대한 지식과 경험이 있지만 보조 자료로 인해 마스터하기 어려운 경우 언어 자체가 쉽게 정복된다고 생각합니다.

한 언어에서 다른 언어로가는 명확한 예가 있습니다. C에서 Java로. 코드 구문은 C 스타일 프로그램과 매우 유사하지만 Java API (일반, 가비지 콜렉션 등)를 알아야하며 현재 "IT 환경"에서 일부 타사 프레임 워크 (Spring, jUnit)를 알아야합니다. , Hibernate 등)는 비즈니스에 유용한 것을 수행합니다. 따라서 C를 해본 적이 있다면 언어 구문은 문제가되지 않으며 나머지는 문제가되지 않습니다.

이것은 Java, C #, Javascript, HTML, CSS, Delphi 등을 알고있는 나에게서 온 것입니다. 사용하는 프레임 워크 또는 라이브러리에 대해 구석 구석을 알지 못할 수도 있지만, 내 방식을 알고 빠르게 배울 수 있습니다. 이전과 다른 것을 사용한 경험. "빠른 학습자"는 모든 측면 적 사고입니다.


나는 이것에 전적으로 동의합니다. 모범 사례 / apis / 인기 라이브러리 등을 배우는 것은 프로그래밍 언어의 구문을 배우는 것보다 훨씬 오래 걸리며, 이는 실제 도전 과제였으며 언어와 언어를 다루는 데 시간을 투자해야만 얻을 수있는 문제였습니다. 생태계.
jviotti

3

알아야 할 컴퓨터 과학의 기초에는 수학적 기초 (설정 이론, 논리, 그래프 이론, 대수, 정보 이론, 알고리즘 정보 이론 등)뿐만 아니라 각 프로그래밍 언어 중 적어도 하나가 포함됩니다. 그룹-즉, 명령형 (OPP 일 수 있지만 그 비트는 필수는 아님), 열성 기능, 지연 기능, 논리적, 연결 또는 스택 기반.

이 기초를 통해 주어진 새로운 언어를 쉽게 배울 수 있습니다. 일부 비트가 누락되면 심각한 저항이 발생할 수 있습니다.

그리고 내부에서 언어를 배우는 가장 좋은 방법은 장난감 컴파일러 또는 해석기의 상당 부분을 구현하는 것입니다 (물론 표준 라이브러리가없는-모든 언어에서 가장 복잡하고 지루한 부분입니다).


2

나는 여기에 합의가있다. 좋은 기본을 갖는 것이 어느 정도 도움이 될 것이며, 나는 그것에 동의하지 않는다. 그러나 다른 답변에서 누락 된 한 가지 점은 언어의 관용구를 집어 올리는 문제이며, 나는 관용어로 작성 해야하는 언어를 마스터한다고 생각합니다.

예를 들어 using, 객체를 자동으로 처리하기 위해 명령문을 사용하지 않고도 완전히 정확한 C #을 기록 할 수 있지만 잘 작성된 관용적 C # using {...}에서는 많은 것을 볼 수 있습니다 . 나는이 구조를 가진 none-.Net 언어를 모른다. (하지만 다른 언어를 거의 알지 못하고 Java는 다소 녹슨 것이어서 틀릴 수 있지만)이없는 다른 언어의 전문가조차 기능은이 관용구를 처음부터 처음부터 배워야합니다.


Lisp와 Scheme에서 널리 사용되는 비슷한 관용구가 있으므로 그 배경에서 오는 새로운 것은 아니며 새로운 언어 로이 기능을 고의적으로 찾을 것입니다.
SK-logic

예, 그러나 파스칼이나 ADA에서 온다면 완전히 새로운 관용구가 될 것입니다.
Steve

그것이 바로 새로운 언어를 배우고 현명하게 도구를 선택할 수 있으려면 각 그룹에서 적어도 하나의 언어를 알아야한다고 믿는 이유입니다.
SK-logic

@ SK-logic : "사용"및 "시도 ..."와 같은 것을 보았을 때, 일반적인 Lisp "unwind-protect"와 거의 동등한 것으로 이해하는 데 아무런 문제가 없었습니다. 그러나 이와 같은 언어 기능은 지정된 여러 패러다임 선택 언어에 표시되지 않을 수 있습니다.
David Thornley

1

"정말 양호"와 "쉽게"의 일부 정의에 대한 진정한 진술입니다.

기초에 대한 이해가 좋을수록 한 언어에서 다른 언어로 쉽게 전환 할 수 있습니다. 예를 들어 객체 지향 언어에 대해 잘 알고있는 전문적인 Java 프로그래머라면 Java와 C #의 기본적인 구문 차이는 일주일 내에 비교적 쉽게 마스터 할 수 있어야합니다. 연결된 모든 라이브러리의 기능이 서로 매핑되는 방식을 이해하는 데 시간이 더 걸리지 만 한 달 또는 두 달 안에 기본 라이브러리를 적절히 처리 할 수 ​​있습니다. 그런 다음 언어 A의 문제에 대한 표준 접근 방식이 언어 B의 표준 접근 방식으로 직접 변환되지 않는 경우를 파악하고 (즉, Java의 JPA 대신 C #에서 LINQ를 사용하려는 경우) 이해해야합니다. 새로운 언어로 충분히 구 언어로 생각하고 "번역"하는 것이 아니라 다시 생각해야합니다. 일반적으로 사용하는 기능이 맵을 얼마나 잘 사용하는지에 따라 3-6 개월이 소요될 수 있습니다. 6 개월 만에 전문가 Java 프로그래머는 아마도 합리적이고 효율적이며 유능한 C # 개발자 일 것입니다. 그러나 무엇과 마찬가지로 복잡한 세부 사항을 모두 배우고 언어에는 속하지 않지만 주변 생태계의 일부인 다양한 라이브러리 및 추가 기능을 마스터하고 일반적으로 해당 언어의 개발자로 자신을 향상시킬 수 있습니다. 전문가 Java 프로그래머는 아마도 합리적이고 효율적이며 유능한 C # 개발자 일 것입니다. 그러나 무엇과 마찬가지로 복잡한 세부 사항을 모두 배우고 언어에는 속하지 않지만 주변 생태계의 일부인 다양한 라이브러리 및 추가 기능을 마스터하고 일반적으로 해당 언어의 개발자로 자신을 향상시킬 수 있습니다. 전문가 Java 프로그래머는 아마도 합리적이고 효율적이며 유능한 C # 개발자 일 것입니다. 그러나 무엇과 마찬가지로 복잡한 세부 사항을 모두 배우고 언어에는 속하지 않지만 주변 생태계의 일부인 다양한 라이브러리 및 추가 기능을 마스터하고 일반적으로 해당 언어의 개발자로 자신을 향상시킬 수 있습니다.


1

나는 그것이 새로운 언어를 배우려는 사람의 열정에 전적으로 달려 있다고 말합니다. 기초가 강하고 새로운 언어가 어떻게 해석하는지 이해할 수 있다면 어떤 언어라도 배우기가 매우 쉽습니다.

가장 좋은 예는 내 자신입니다. C #에서 대부분의 작업을 수행했지만 꽤 많은 언어로 작업했지만 C에서 경력을 시작했으며 C ++, Java, VB, PHP, 스크립팅 언어, perl 등을 배우기 위해 계속했습니다. 이 용어의 어느 곳에서나 나는이 언어를 배울 수 없다고 느꼈습니다.


3
그리고 당신이 묘사 한 언어들은 서로 비슷하거나 비슷합니다. 도전을 위해 Haskell, Scheme, Forth 또는 Prolog를 배우십시오.
David Thornley

1

나는 새로운 프로그래밍 언어를 배우는 것이 결코 어려운 일이 아니라 반대로 대부분의 재미를 느꼈습니다. 그러나 내가 보았지만 이해하지 못한 언어가 있습니다. 왜냐하면 그 뒤에있는 아이디어를 이해할 수 없었기 때문입니다. 하나의 예는 COBOL입니다. 나는 어떤 부문과 섹션에 무엇이 들어가야하는지 이해하지 못했습니다. 다른 예로는 PHP와 Groovy가 있습니다. PHP를 사용하여 펄이 있다는 것을 감안할 때 처음부터 왜 필요한지 이해하려고했습니다. 아마도 누군가가 설명 할 수 있습니다. Groovy를 사용하면 그 뒤에 숨겨진 개념도 이해하지 못합니다.


1

모든 것이 다릅니다.

나는 그것이 종종 대답이라는 것을 알고 있습니다 ...

그러나 기본은 무엇을 의미합니까 ? 하나의 패러다임 (OO와 같은)에 대한 기본을 가진 많은 사람들은 다른 패러다임 (기능과 같은)을위한 사람들이 없습니다.

OO에서 온 많은 사람들이 모든 디자인 패턴을 알고 있으며 기능적 디자인 패턴이나 목록 이해, 커링, 꼬리 재귀, 클로저와 같은 것들에 대한 단서가 없을 수도 있습니다 ...

예 : 기본이 모든 패러다임의 기본을 의미한다면.

이 경우 문제는 자바 스크립트가 절차 적, OO 및 기능적 비트와 같은 많은 패러다임을 사용하고 Java, C ++ 등에서 이상한 범위가 있다는 것입니다.

따라서이 경우 기본 사항은 도움이되지 않지만 여기서 더 많은 기본 사항을 선택하고 여전히 다른 언어로 변환하면 도구 상자에서 더 많은 패턴을 얻을 수 있습니다.


0

컴퓨터 프로그래밍의 기술은 당신이 의미하는 바를 정확하게 유지하는 기술이라는 것을 잊지 마십시오. 따라서 컴퓨터에서 Java에서 Access, Excel에서 Visual Fortran에 이르기까지 무엇을하는지 알려주는 수단은 프로그래밍 언어입니다.

그리고 일부 언어는 평범하지 않습니다. IMHO Excel과 Basic은 나쁜 언어입니다. 자바와 C ++는 좋은 언어입니다. FileMaker 스크립팅은 끔찍한 언어입니다. 조잡하지 않으면 HTML이 우수 할 수 있습니다.

당신은 그것을 배울 수 있습니까? 좋으면 그렇습니다. 그것이 나쁜 경우, 당신의 혐오감에 달려 있습니다. 숨기고 싶은 것들을 배우기가 어렵습니다.

언어 X를 이미 보거나 연주하지 않은 한 프로젝트에서 언어 X를 사용하기로 약속 한 것은 아닙니다.


0

대답은 "이것은 신화가 아닙니다!"입니다.

나는 당신처럼, 또한 다양한 기술 즉, 일했습니다. java, .net 그리고 최근에 iPhone, android 및 blackberry와 함께 작업했습니다.

그물은 자원으로 가득 차 있습니다. 정보를 통해 이해하고 구현하고 더 발전 시키십시오.

사실 "기술은 개발자를위한 것이 아니라 개발자를위한 것이 아니라 기술을 바꾸는 것입니다."

:)

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