Python이 정말 쉬운 언어라고 생각하세요??

netkid의 이미지

일반적으로 파이썬 측에서는 파이썬이 매우 배우기 쉽고, 개발하기 편한 언어라고 주장합니다. 배우기 쉽다는 의미의 기준은 일반적으로 C를 기준으로 하는 것 같습니다. 국내에서도 파이썬을 전도?하고 계신 분들도 일관되게 파이썬은 쉽다고 주장하더군요.
파이썬을 포함한 적어도 기본적 문법 이상 알고 있는 언어들을 비교해본 결과....
제가 내린 결론은 통상적인 기준으로 볼때 파이썬은 어렵다 라고 해야 솔직한것 같습니다.
언어 문법만을 기준으로 학습 난이도를 본다면, vbscprit<php<perl<C<JAVA<C#<C++<Python 정도의 학습난이도를 가지지않을까 생각됩니다.(우측으로 갈수록 어렵움)
개발 효율성에 있어서는,
C<C++<JAVA<C#<Python 이렇게 되지 않을까 싶습니다.

파이썬이 배우기 어려운 언어인 이유는, 개체지향(기본 데이터 타입까지도 객체로 관리), 함수형 등의 최신기술?을 모두 적용하다보니 그런 것 같습니다.
반면 개발에 효율적인 이유 또한 같은 이유인 것 같습니다.
파이썬이 배우기 쉽고 개발에 효율적이다는 일반적 견해와 다르게 배우기 어렵고 개발에 매우 효율적이다라고 해야 맞다고 생각합니다.

여러분들의 생각은 어떻습니까??

PS: 파이썬을 막 시작했을때 쉽다고 착각하게 되는 원인 중 하나가 처음 접하는 것이 리스트 타입과 같은 변수사용의 막강함 때문인것 같기도 합니다. 그러나 한번에 많은 것을 할 수 있는 결과 중심적 능력은 언어학습을 쉽게 하는 것이 아니라 개발을 쉽게 한다고 봐야 할 겁니다.

exman의 이미지

언어의 난이도는 주관적인 요소 같습니다.

저도 처음에 Python의 잡다한(?) 자료형과 들여쓰기 규칙을 접하면서 참 당혹스러웠지만,

적응이 되고, 오히려 재밌다는 생각이 들었습니다.

음... 저는 vbscript 가 어렵다는 주관적인 생각을 가지고 있습니다.

geneven의 이미지

파이썬을 객체지향적인 언어로 공부하지 않고 단순한 함수형 언어로만 공부한다면 물론 파이썬을 제대로 활용한다고 할 수 없지만 초보들에게 아주 적합하다고 생각하거든요? 변수를 따로 만들어줄 필요도 없고 강력한 문자열 처리라든지
정말 간결하고 보기좋은 코드등... 저는 학교에서 C만 배우다가 파이썬 책을 봤는데 아주 큰 어려움 없이 클래스에 대해 이해가 가더군요... C++에서의 클래스는 - -; 정말 짜증납니다. 뭔 놈의 버츄얼 상속에다 음.....

netkid의 이미지

버츄얼 상속 같은 다형성에 관한 개념이 어렵다면, 다형성을 더욱 광범위하게 적용하는 파이썬이 쉽다고 할수 있을까요?
만약 파이썬의 객체지향적 특성을 사용하지 않는다면, 파이썬의 개발 효율성 또한 의미가 없어지지 않을지..

ps. 혹시해서...
파이썬은 여러 다형성의 기능 중 자바에서 처럼 버츄어 메소드와 관계된 override는 지원하지 않습니다. 그러나 필요하지 않기 때문인 것으로 이해 됩니다만..

서지원의 이미지

netkid wrote:
일반적으로 파이썬 측에서는 파이썬이 매우 배우기 쉽고, 개발하기 편한 언어라고 주장합니다. 배우기 쉽다는 의미의 기준은 일반적으로 C를 기준으로 하는 것 같습니다. 국내에서도 파이썬을 전도?하고 계신 분들도 일관되게 파이썬은 쉽다고 주장하더군요.
파이썬을 포함한 적어도 기본적 문법 이상 알고 있는 언어들을 비교해본 결과....
제가 내린 결론은 통상적인 기준으로 볼때 파이썬은 어렵다 라고 해야 솔직한것 같습니다.
언어 문법만을 기준으로 학습 난이도를 본다면, vbscprit<php<perl<C<JAVA<C#<C++<Python 정도의 학습난이도를 가지지않을까 생각됩니다.(우측으로 갈수록 어렵움)

문법을 기준으로 봤을 때 왜 python이 c++이나 perl, c보다 어려운지 도저히 이해가 가지 않습니다. 저는 오히려 문법의 복잡성은 perl, c++ << c < python이라고 생각하는데.. python 문법을 다 훑어 보는 데에는 30분에서 1시간이면 되지만, c나, c++(!)문법을 그 정도 시간에는 힘들죠.
Quote:

개발 효율성에 있어서는,
C<C++<JAVA<C#<Python 이렇게 되지 않을까 싶습니다.

파이썬이 배우기 어려운 언어인 이유는, 개체지향(기본 데이터 타입까지도 객체로 관리), 함수형 등의 최신기술?을 모두 적용하다보니 그런 것 같습니다.
반면 개발에 효율적인 이유 또한 같은 이유인 것 같습니다.
파이썬이 배우기 쉽고 개발에 효율적이다는 일반적 견해와 다르게 배우기 어렵고 개발에 매우 효율적이다라고 해야 맞다고 생각합니다.

여러분들의 생각은 어떻습니까??

PS: 파이썬을 막 시작했을때 쉽다고 착각하게 되는 원인 중 하나가 처음 접하는 것이 리스트 타입과 같은 변수사용의 막강함 때문인것 같기도 합니다. 그러나 한번에 많은 것을 할 수 있는 결과 중심적 능력은 언어학습을 쉽게 하는 것이 아니라 개발을 쉽게 한다고 봐야 할 겁니다.

python이 배우기 쉬운 이유는 우리가 원하는 작업에 집중할 수 있게 해 주기 때문입니다. 즉, c가 asm보다 쉬운 이유와 똑같습니다. asm->c로 오면서 register, stack등등 machine 의존적인 부분이 추상화 되었다면, c->python, java로 오면서 메모리 등의 "논리적 컴퓨터"에 의존적인 부분이 추상화 되었습니다.

게다가, 파이썬은 배우기 쉽도록 만들어져 있습니다. 파이썬의 모토는 CP4E입니다. (computer programming for everyone) 모든 사람이 쉽게 프로그래밍 할 수 있도록 문법도 간단하며, 그밖에 배우기 쉽도록 여러 도구들을 제공합니다. (interactive interpreter 및 pydoc.help, pprint.pprint 등등의 모듈들..)

말씀하신, "한번에 많은 것을 할 수 있는 결과 중심적 능력" 역시 개발을 쉽게하는 것 뿐만이 아니라, 배우는 데에도 많은 도움이 됩니다. 왜냐면, 보통 사람들이 뭔가를 배울 때, 한번 해 보고, 결과가 어떤지를 feedback받으면서 배울 때 훨씬 쉽게 이해하기 때문입니다.

객체지향(기본 데이터 타입까지도 객체로 관리), functional programming등의 여러 최신의 패러다임이 포함되어 있어서 어렵다는 것도 좀 이해가 안됩니다. 그것은 그런 "패러다임이 배우기 어렵다"는 것이지, 언어 자체가 어렵다는 것이 아닙니다. 객체지향이나, functional programming같은 패러다임을 몰라도 충분히 파이썬으로 프로그래밍을 할 수 있고. 반대로, c나 java등으로도 그런 패러다임을 가지고 프로그래밍 할 수 있습니다. (glib library에는 functional programming을 흉내낸 것들이 있죠. g_slist_foreach 등의 함수들..)

게다가, 파이썬으로 프로그래밍을 배우면, 그러한 패러다임들을 더 쉽게 배울 수 있습니다. 즉, 파이썬에서 제공하는 여러 라이브러리들이 객체지향적으로 만들어진 것들이 많기 때문에, 그것들을 사용하면서 자연스레 객체지향에 대해서 배울 수 있습니다.

다즐링의 이미지

다른건 모르겠습니다.

전 SE고 프로그래머가 아닙니다.

c , perl , php 를 약간씩 했지요.

( 머 잘하는 수준은 아닙니다 -_-; )

언어의 쉽고 어렵고를 떠나서.

파이썬을 배운뒤로

인생이 쉬워보이기 시작했습니다 ;;;
( 잘하는건 아닙니다. 필요한데에 어느정도 적용가능 하죠 )
쉘스크립트로 작업하다가 약간 어려우면.

파이썬 모듈찻아서 해결하면 그만이더라는..
( 물론 쉘이 빠르긴 빠릅니다; )
게다가 asynchat 을 배운뒤로는..

재미나게 프로그래밍이 가능합니다.

( 별 개념없고 잘 모르는 저라도 가능했습니다. 책 2권정도로.. )

윈도우부터 안해서 그런지 몰라도..

vb를 약간해보았는데..

죽을만큼 어렵더군요..

------------------------------------------------------------------------------------------------
Life is in 다즐링

netkid의 이미지

어떤 언어든 학습자의 상황과 접근하는 입장에 따라 상황을 달라 질 수도 있으니, 그런 점도 고려 해야 할것 같군요!

파이썬이 배우기 어렵다고 얘기한 관점은 이미 추상화된 상황 위에서 따라 하는 정도의 학습에 만족하는 경우를 얘기 하는 것이 아닙니다. 추상화되어 나열된 지식을 암기하고 제한된 지식의 단편 조합을 하는 것에 만족한다면, 그건 c를 하던 파이썬을 하던 둘다 아주 쉬운 언어가 될 것 입니다.
이 사이트가 개발자가 모이는 사이트인 만큼, 프로그램을 효율적으로 개발해야 하는 개발자의 관점에서 바라본 것 입니다. 예를 들어 컴퓨터의 기계적 특성을 전혀 모르거나 알필요가 없는 사람의 경우와 실제 프로그램을 개발해야 되며, 그 코드가 실행되는 환경에서 문제 없이 효율적으로 실행되야 하는 것을 고려해야 하는 사람이 학습을 위해 접근하는 입장은 매우 다를 수 밖에 없습니다.

아주 단순한 예를들면, c와 파이썬 각각 어떤 변수에 값을 대입한다고 할때
위에 첫번째로 예로든 사람의 입장에서는 c와 파이썬의 구제적 처리과정을 생각할 필요가 없습니다. 결과에 만족하면 그만입니다. 어떤 입력에 어떤 결과가 나온다고 암기하면 그만입니다. 전문 프로그래머가 아닌 사람이 필요에 의해 프로그램을 배워 작성하는 경우가 그렇겠지요.

그런데 개발자의 입장에서는 그 처리방법과 과정을 생각하지 않을 수 없습니다. c에서는 코드상에 보여지는 그대로 값 자체가 변수의 기록 위치에 대입 되며, 다른값을 대입하면 값이 저장된 메모리상에 다른 값이 대체된다는 단순한 처리과정을 알면 되지만, 파이썬의 경우 변수명과 값이 메모리에 먼저 할당된 후 변수명과 값이 저장된 각각의 주소를 해당 네임스패이스의 디션널리에 변수명의 주소는 키로, 값의 주소는 키값으로 기록하며, 다른 값을 동일 변수에 대입하면, 기존 값과 다른 메모리 위치에 값을 생성하고, 그 주소를 디션널리내에 기존 값의 주소값을 대체하여 참조 관계를 변경한다라는 과정을 이해해야 합니다.
위 예는 아주 기초적인 예일겁니다. 클래스를 기본 데이터 타입과 같이 데이터 타입으로 변환할 수 있으며, 생성된 객체는 자체에 기본 테이터를 대입하고, 객체내에서 처리된 값을 객체 자체가 값으로 가지며 리턴할 수 있는 경우등 좀 복잡한 경우도 있겠지요.
c는 명령어가 30개도 안되는 매우 단순한 언어입니다. 만약 포인터 때문에 c를 이해하기 어렵다면, 그건 자바나, c# , 파이썬의 레퍼런스나 객체는 더욱 이해하지 못했다는 의미라고 봐야할 것입니다. 레퍼런스나, 객체 타입은 구체적인 처리상황에서 포인터와 다르지 않으며, 내부 처리과정을 이해하기에는 좀 더 복잡하지만 복잡한 프로그램을 개발하기에는 좀 더 편하다 정도 일것입니다.

만약 c를 배우는 사람이 개발자가 아니라면 포인터를 이해할 필요도 배울 필요도 없을 것이며, 실제 프로그램을 만들때 거의 포인터를 사용할 일도 없을 것이며, 단지 몇게 않되는 명령을를 암기하고, 모든 언어에 동일하게 사용되는 제어문을 이해하는 정도면 충분할 것입니다. 단지, 특별한 라이브러리를 사용하지 않는다면, 스트링을 처리하기 위한 코드를 작성할 때 파이썬보다 좀 더 많은 코드를 작성해야 하겠지요. 같은 사람이 파이썬을 배우겠다면, 레퍼런스 타입이나 객체 타입을 알필요도 없고, 모든 언어가 기본적으로 동일한 제어문을 배우고, 리스트,튜플, 사전 형식의 c에 없는 좀더 복잡한 변수 타입을 공부하면 되겠지요.

그러나 이 사이트에 있는 사람들은 대부분 개발자일 것이라고 생각되기 때문에, 사용하기 편리한 것과 배우기 쉬운 것과는 분명 구별해야 할 것입니다.

ps. :shock: "python이 배우기 쉬운 이유는 우리가 원하는 작업에 집중할 수 있게 해 주기 때문입니다. 즉, c가 asm보다 쉬운 이유와 똑같습니다."라고 하셨는데, "python으로 개발하기 쉬운 이유는 우리가 원하는 작업에 집중할 수 있게 해 주기 때문입니다. "라고 해야 되지않을 까요? 그리고 c가 asm보다 쉽나요? 맞찬가지로 사용하기 쉬운거라고 해야 되겠지요. 세상에 asm 만큼 단순한 문법을 가진 언어는 없지요. asm이 어렵게 느껴지는 것은 문법이 어려운 것이 아니라 마찬가지로 asm으로 개발하기 대단히 어렵기 때문이 겠지요. 또한 cpu마다 asm 모두 다른것도 어렵다고 느겨지게 하는 이유가 되겠지요.

alfalf의 이미지

안녕하세요.
제 생각에 어떤 언어의 문법을 익히는 것과 그 언어로 프로그램밍을 한다는 것을 나누어 생각해야 할것 같습니다. 먼저, 문법을 익히는 문제의 경우 통상적으로 Python은 쉬운 언어에 속하고 C는 어려운 언어라고 생각합니다(물론 이것도 개인차가 나더군요. 제가 아는 어떤 분은 언어를 처음으로 공부하시는데 C언어가 Python보다 적성에 맞고 쉽다고 하시더군요).
다음으로 어느정도 문법이나 언어 내부사정(?)을 알고 그 언어로 효율적 프로그래밍을 하는것은 또 다른 문제라고 생각합니다.
예를 들어 Python과 같은 경우 어떤게 프로그래밍 하느냐에 따라 그 효율성은 천차만별이 나는 경우가 허다합니다. 쉬운 예로 Text 파일로 부터 읽어들인 문자열을 하나의 스트링으로 만들경우 리스트를 이용할것인가 아님 처음부터 그냥 문자열을 더할것 인가의 문제가 있겠지요. 그래서 복잡한 프로그램밍으로 갈수록 프로그래머가 효율적으로 프로그래밍을 하기위해 더욱 많은 고민을 해야 하는 문제가 생깁니다(이 경우 C언어 프로그래밍 등을 통해 컴퓨터 내부 자료가 어떻게 흘러가는지를 익히지 않았을 경우 정말 어려운 문제가 돼 버리더군요). 토론의 제의하신 님도 그런점 때문에 Python이 결코 쉬운 언어가 아니라고 하신것 같습니다(물론 생각없이 원하는 시간이 얼마가 걸리던 원한는 결과만 얻으면 되는 분들은 아무 생각없이 프로그램밍 하셔도 되는 쉬운 언어이겠지만요).
반면에, C로 프로그램밍을 할 경우 위와 같은 고민은 안해도 됩니다. 자신이 하부 프로세스의 흐름까지 모두 머리속에 넣으면서 프로그래밍하기 때문에 프로그래밍 시간은 좀 걸릴지 모르지만 웬만큼 짜도 어느정도 이상의 효율적인 프로그램이 나오기 때문에 쉬운(?) 언어 라고 생각할 수 있겠습니다.
정리하자면 Python의 경우 초기 투자시간은 얼마 걸리지 않는데 반해 프로그래밍을 하는 내내 프로그래머가 고민해야 하는 언어이고요 C는 초기 투자시간은 많이 걸리는데 반해 그 이후에는 프로그래머가 별로 고민안해도 되는 언어정도가 된다고 생각합니다.

불량도ㅐㅈㅣ의 이미지

저두 파이썬 공부한지 얼마 안되는 초보지만,

그래도 쉬운 측에 들어가지 않나요?물론 제 생각이지만,

다른 언어보다 생소한 측면이 있어서 그렇지 적응만 되면 꽤 괜찮은 언어라고 보는데요....

특히 C 또는 Java와 잘 짬뽕(?)이 되는 파이썬 좋은 언어임은 틀림 없다고 봅니다.

문근영 너무 귀여워~~

slayer의 이미지

배우기 쉽다는 것이 그런 의미라면 모든 인터프리터 언어가 다 그렇지 않을까요?
막말로 GW-BASIC이 배우기 쉽다고 하지만, 그 내부에서 무슨 일이 일어나는지 아시는 분이 과연 몇이나 될련지.. 8)
물론 C와 같은 low level에 근접한 언어에서는 내부에서 어떤일이 일어나는지 아는 것도 프로그램 성능을 위해서 상당히 중요하긴 합니다만..
python과 같은 인터프리터 언어는 애초에 그런 목적을 가지고 태어난 언어는 아니지 않습니까..
단지 편하게 프로그래밍 하면 그만 이죠..
실제로 무슨 일이 일어나는 지 다 알려한다면 그것은 이미 인터프리터 언어의 본질에도 어긋난다고 봅니다..
그런 것은 인터프리터 설계로 넘겨져야하는 문제겠지요..

chaeso의 이미지

프로그래밍에 애먹는 사람한테 보통 Python 을 많이 추천해왔습니다.

대체로 만족하더군요

평균적으로 볼때 Python 이 쉬운 언어라고 느낍니다.

또한 무언가를 구현할때 손쉽게 구현이 가능하지요

하지만 항상 쉬운 부분은 아니더군요 OOP 쪽은 어렵더군요

RedPain의 이미지

C보다 어셈이 배우기 쉽다는 말은 처음 들어보는 군요. -_-a
그런 식으로 말씀하신다면 제가 지금까지 보아온 것중 가장 배우기 쉬운 언어를 소개해 드리지요.
http://www.wikipedia.org/wiki/Brainfuck
명령어는 단 8개 밖에 없습니다.
문법은 5분이면 배울 수 있겠죠.
이 언어가 과연 배우기 쉬울까요?
어떤 언어를 배우기 쉽다 어렵다를 판단할 때 단순히 문법의 복잡성이 절대적인 기준인 것은 아닙니다.
씨언어 책 하나 다 읽어본다고 씨언어를 배운 것은 아니겠죠.
그 언어를 배우려면 예제도 실행해보고 변형해보고 연습문제도 풀이해보고 해야합니다.
씨언어를 하다보면 씨언어는 어셈보다는 컴퓨터를 추상화해서 좀 더 코딩하기 쉽게 해주죠.
어셈으로 코딩할 때는 분기할 때 flags를 생각해서 조건점프를 해야 하지만 씨언어 같은 경우는 if문으로 그냥 비교하면 되죠.
파이썬은 씨언어보다 더 컴퓨터를 추상화해서 더욱 코딩하기 쉽게 해줍니다.

netkid의 이미지

제가 발제한 주제에서 너무 벗어나지 않았으면 합니다.
언어의 학습 난이도에 대한 의제를 제시한 겁니다.
프로그래밍 즉 개발 과정의 쉽고 어렵움을 얘기하는 것이 아니고, 언어를 배우는 과정에서 대상언어의 개념을 파악하고 이해하는데 있어, 파이썬의 경우 어떠냐는거지요..
당연 코딩하기 쉬우라고 추상화하는거 아니겠습니까?
그래서 제가 의제에 파이썬은 매우 개발효율이 높은 언어라고 말씀드린거지요.

netkid의 이미지

slayer님 basic을 말씀하셨군요.
일단 예전 gw-basic은 내부 사정이 매우 단순하다고 말씀드려야 겠군요.
c보다 훨씬 단순한 구조입니다. (컴파일러와 인터프리터를 비교한다는 것이 좀 이상하긴하군요.)
따라서 내부 사정을 이해하려고 했다면, 또는 알아야 되는 입장이었다면 어렵지 않게 알수 있는 수준의 언어입니다.
그런데 대부분 basic을 배우는 사람들은 내부정을 알려하지 않습니다.
왜그럴까요?
과연 gw-basic을 개발자가 배우는 언어라고 할 수 있을까요?
예외는 있겠습니다만,
즉, 개발자용 언어는 아니라는 거지요.
또한 제품 개발에 적합한언어도 아니고요.
만약 예전 basic이 주요 개발용 언어였다면,(예전에는 제품개발에 어셈을 썼죠)
c 못지않게, 스텍, 힙 얘기하고, 포인터, 레퍼런스 타입을 얘기하면서 언어 내부 사정을 고민했을겁니다.
정리하면 gw-basic의 개념적 그리고 시스템적으로 파악하기는 어렵지 않으나, 그 언어를 배우는 사람이 그럴 필요성이 없었기(아마 여력도 없겠지만), 때문이라고 봐야 되지않겠습니까?

아마도 님도 예전 gw-basic을 배울 때 그 당시 개발자로서가 아니라, 컴퓨터 관심자로서 호기심을 가진입장에서 배우셨을 거 같습니다만..

파이썬은 사정이 다르지요. 나름대로 메이저 언어가 되고자 노력하는 언어로써 많은 개발자들이 실무에 사용해 주길 바라는 언어이며, 그에 맞게 gw-basic과 비교할 수 없는 대단히 잘 만들어진 수준있는 언어라고 생각합니다. 자바 컴파일에 미치지는 못하지만 바이트코드로 컴파일도 되고, 실제 스크립트 기반 언어중 젤 빠른것 같기도 하고요.

인터프리터로 실행되는 자바의 내부사정에 대한 개념이 전혀 없이 gw-basic 처럼 사용한다면, 과연 개발이 될까요?

다시말씀 드리지만 저의 관점은 제품을 개발하고자 하는 개발자 입장에서의 경우를 말씀 드리는 것으로 이해해 주셨으면 합니다.

ps. 저는 요즘 죽을 맛입니다. 왜냐고요?
제가하는 일은 개발 메니지먼트인데, 개발자들이 개발한 결과의 실행성능이 너무 느려터졌기 때문입니다. 기능요? 버그도 많지만 기능은 다 됩니다. 그런데 문제는 엄청 버벅 거린다는 거지요. 논리적 버그는 하나씩 수정하고 있지만 여전히 버벅거립니다. 그래서 제 생각은요! 개발자라면 결과만 나오는 코드가 아니라 잘 돌아가기도 하는 코드를 만들기를 간절히 바라는 입장입니다.

slayer의 이미지

아무래도 netkid님은 critical한 용도에 사용되는 python으로 배우기에는 너무 어렵다고 주장하시는 것 같습니다..
관점의 차이겠지만, python은 프로그램의 성능을 최적화 해서 프로그래밍하라고 나온 언어같지는 않습니다..
인터프리터형 언어 대개가 그렇지만, 성능보다는 개발의 편의성이 우선입니다..
(자바는 좀 어중간하지만..-_-; )
그렇기에 내부에서 어떤 일이 일어나는지, native machine code로 컴파일 되어서 돌아가는 언어들보다는 알 필요가 줄어든다는 것이겠죠..
성능에 목 매달아야하는 프로그램이라면 그건 이미 인터프리터 언어로 할 일이 아니죠..
아무리 python의 성능이 좋아진다고 해도 그것으로 커널을 만들어 볼 사람은 별로 없을 겁니다..
(있긴 있을지도..-_-; )
C와 어셈으로 만드는게 가장 빠른데 그걸 굳이 python으로 만들 필요가 없겠죠..
다만, 요즘 컴퓨터 파워가 인터프리팅의 오버헤드를 어느 정도 감수할 정도까지 왔기에 성능에 그다지 큰 구애를 받지 않는 프로그램들은 python으로 짜도 큰 무리가 없기 때문에 개발 효율이 뛰어난 python이 상당히 각광받는 것입니다..
결국, python과 같은 인터프리터 언어와 C와 같은 컴파일형 언어와는 애초의 지향하는 바가 다르기 때문에..
python에서는 내부에서 어떤 일이 일어나는지, 그에 대한 필요가 훨씬 적어진다고 생각합니다..

morris의 이미지

쉽다 어렵다는 지극히 주관적인 개념이지 않습니까?

오히려 전 어렵다는 perl이 쉽고

쉽다는 python이 어렵더군요

asheap의 이미지

각언어를 학습하는 데는 먼저 배운 프로그래밍 언어의 선행지식과 관계가 있다고 생각합니다.

일반적으로 많이들 처음부터 학습하게 되는 C,bash shell script를 1년정도 활용해본 상태에서 언어별 학습 난이도는

제가 학습을 시도햇던 언어중에서는

php<perl<c++<java<java sciprt<python

이더군요.

php,c++,perl 이야 c와 sh script를 알면 그냥 좀 보고 간단한 프로그램 작성 바로 들어갈 수 있었구요. (C++,perl의 모든 문법을 다 알고 쓰는 것은 물론 오랜 기간이 걸리지만, 당장 스스로 이해가 가는 문법으로만 작성해 나가는 것은 쉽습니다.)
java의 개념이해에 좀 시간이 걸렸고,
java script는 html과 맞물려서 도통 복잡하고 혼란스러워서 더 힘들었고
python의 장점을 보고 처음에는 너무 매력적으로 보여서 바로 학습시도에 들어갔지만, 기존의 언어와는 다른 생소한 점들 때문에, "이렇게 배우는게 오래 걸릴바에 그냥 perl이나 쓰자"라고 생각하고 잠시 접어둔 상태입니다 --; (사실 perl을 먼저 배웠기 때문일 수도 있겠군요.)

다른 사람의 경우에도 각자의 스타일이나 선행지식에 따라서 언어의 학습 난이도는 천차 만별 인것 같더군요...

NeoTuring의 이미지

여기서 언어의 난이도란

당연히 Language Syntax만을 얘기하는건 아니겠죠..?

통상적으로 어떤 언어를 익힌다는것은..

첫째, Language Syntax
둘째, Language가 기반하는 프레임웍 및 라이브러리(플랫폼, API...)
셋째, 프로그래밍 패러다임

크게 이렇게 세가지를 익히는것이라고 생각합니다.

일반적으로 생각했을때..첫번째가 가장 익히기 쉽고

두번째 세번째로 갈수록 익히기가 어렵다고 봅니다.

(세번째는.. 구조적 프로그래밍, 객체지향 프로그래밍, 값중심 프로그래밍,
제네릭 프로그래밍등과 같은 것들입니다.)

저는 여지껏 C++/C, Java 를 사용해왔는데..

파이썬은 공부해보고 싶다는 느낌만 받아오다가.. 게을러서

스터디를 못해봤거든요. ^^

조만간 파이썬을 익혀볼 생각인데..

파이썬이 저 세가지 요소중에 어떤부분이 얼마나 더 어려운지..

좀 구체적으로 지적해주실수는 없으신지요? ^^

Together의 이미지

C 플밍 할줄 아는 사람에겐 파이선이 무쟈게 배우기 쉬운 언어이고
그렇지 않은 사람에겐 꽤 배우기 어려울것 같아 보이더군요.

C 플밍 하시는 분은 파이선에서 C 에는 없는 람다식(함수형 플밍)
사용법만 익히면 나머지는 별 무리없이 가볍게 배울수 있을듯 합니다.

파이선 다 좋은데 왜 허구많은 이름중에 파이선 이라는 이름을
택했는지 이름 마져 멋졌으면 더 좋았을 탠대요. ^^

- 험한 세계에서 자주국방 없는 경제력은 경비없는 은행이다. -

lucie의 이미지

언어 개발자가 코미디 그룹?인 Monty Python의 팬이라서 그렇게 지었다고 하네요 ㅎㅎ

nohmad의 이미지

파이썬에서의 OOP는 강제가 아니라 옵션입니다. 물론 내부적으로는 모든 타입이 객체로 취급됩니다만, 파이썬에서의 객체사용에는 별다른 문법적 제약이 없습니다. OOP에 대해 무지하더라도 객체를 사용할 수 있게끔, 객체지향 문법이 매끄럽습니다. 단적인 예로 file 객체를 보죠.

fp = open('some.file', 'r')
content = fp.read()
fp.close()

open은 file 클래스에 대한 alias입니다. '.' 연산자 외에 객체지향 문법의 요소를 발견할 수 있습니까? OOP에 대해 설명하지 않고도 얼마든지 OOP를 사용할 수 있게끔 배려하고 있습니다. 그리고 OOP에 대해 알고자 한다면, 인터랙티브 인터프리터와 강력한 인트로스펙션으로 객체 내부를 손쉽게 들여다볼 수도 있어, OOP에 대한 학습에도 많은 도움이 됩니다.

nohmad의 이미지

netkid wrote:
제가 발제한 주제에서 너무 벗어나지 않았으면 합니다.
언어의 학습 난이도에 대한 의제를 제시한 겁니다.
프로그래밍 즉 개발 과정의 쉽고 어렵움을 얘기하는 것이 아니고, 언어를 배우는 과정에서 대상언어의 개념을 파악하고 이해하는데 있어, 파이썬의 경우 어떠냐는거지요..
당연 코딩하기 쉬우라고 추상화하는거 아니겠습니까?
그래서 제가 의제에 파이썬은 매우 개발효율이 높은 언어라고 말씀드린거지요.

대부분의 언어는 나름대로 자기완결성이 있습니다. 꼭 C나 어셈블리 코드와 비교되어 설명될 필요없이 자기 나름의 설명체계를 가지고 있다는 말입니다. 포인터와 malloc/free 등으로 이루어지는 C에서의 원시적인 메모리 접근방식에 대해 몰라도 파이썬으로 프로그래밍하는데 별 지장 없습니다. 파이썬에서는 네임스페이스와 객체, 레퍼런스 카운팅, 가비지컬렉션으로 메모리 구조를 잘 설명할 수 있습니다. 그것이 C 코드론 이러저러하게 구현되었을 것이다, 라고 말하는 것은 C언어의 관점일 뿐입니다. 파이썬은 충분히 독립적이고 자기완결적인 언어이므로 모든 코드에 있어 'C'적인 설명을 필요로 하지 않습니다.

포인터가 강력하다는 것은 분명하지만, 왜 C 이후에 만들어진 다른 언어들이 포인터 도입을 배제했는지를 생각해보십시요. 포인터를 아는 것과 포인터를 사용하는 것은 별개의 문제입니다. 포인터 개념을 설명하고 이해시키는 것은 2-30분이면 됩니다. 하지만 실제 코딩에서 포인터를 잘 사용하는 것은 아주 어려운 일입니다. 숙련된 개발자라도 실수할 가능성이 높고, 사소한 실수라도 그 여파가 무척 큽니다.

혹시 GC에 대해서도 못마땅하신가요? 만일 그러시다면 효율성 때문에 너무 많은 것을 포기하지 말라고 말하고 싶습니다. 세상에는 효율성 말고도 추구할 것이 많습니다. 그리고 세상에는 이런 프로그래머보다 델파이, VB, 자바, PHP, Perl 개발자들이 훨씬 더 많습니다. 비록 C에서처럼 메모리 구조를 직접적으로 알게 해주진 못한다하더라도, 각 언어들의 철학과 방법론에 맞게 작성한 코드는 훌륭한 코드입니다. 좀더 넓은 시각으로 프로그래밍 패러다임을 바라보심이 어떨지요.

http://ropas.kaist.ac.kr/~kwang/

위 링크는 함수형 프로그래밍 언어인 ML의 방언쯤 되는 언어를 개발하고 있는 분의 홈페이지인데, 닫힌 생각을 여는데는 더없이 좋을 것으로 생각합니다.

netkid의 이미지

많은 분들의 말씀이 계시내요. 파이썬에 관심을 가진 분들이 많아 좋군요. 한 가지 안타까운 것은 학습 효율과 개발 효율을 자꾸 혼동 한다는 것이군요.

NeoTuring wrote:
여기서 언어의 난이도란

당연히 Language Syntax만을 얘기하는건 아니겠죠..?

통상적으로 어떤 언어를 익힌다는것은..

첫째, Language Syntax
둘째, Language가 기반하는 프레임웍 및 라이브러리(플랫폼, API...)
셋째, 프로그래밍 패러다임
...
파이썬이 저 세가지 요소중에 어떤부분이 얼마나 더 어려운지..

좀 구체적으로 지적해주실수는 없으신지요? ^^

둘째는 제외한 경우를 말씀 드리고 있습니다.
둘째 까지 포함하면, 평가하기가 대단히 모호해지기 때문이며, 공정하지 않기도 하기 때문이죠!
c로 도스 프로그램 하는 것과, windows api로 프로그램하는 것은 엄청난 차이가 있는 것 처럼요. 전산학도는 전문 개발자 입장에서의 첫번째와 세번째 경우를 얘기하고 있습니다.

Together wrote:

C 플밍 하시는 분은 파이선에서 C 에는 없는 람다식(함수형 플밍)
사용법만 익히면 나머지는 별 무리없이 가볍게 배울수 있을듯 합니다.

haskell, sml, ocaml 과 같은 함수형 언어는 어떤지 모르나, 파이썬이 지원하는 함수적 프로그램 개념자체는 어려운것 같지않습니다. 어렵거나 또는 혼란스럽게하는 것은 개체에 기반한 자료구조와 그것을 최대한 활용하는 언어 구조인것 같습니다.

nohmad wrote:
파이썬에서의 OOP는 강제가 아니라 옵션입니다.
...
fp = open('some.file', 'r')
content = fp.read()
fp.close()

open은 file 클래스에 대한 alias입니다. '.' 연산자 외에 객체지향 문법의 요소를 발견할 수 있습니까? ...


좀 당황스런 주장인 것 같습니다.
어떤 oop 언어든 oop않쓰고 프로그래밍 한다고, 누가 강제할 수 있겠습니까? 예로 c++로 c 프그래그램 한들 어째겠습니까?
내장 개체를 사용하는 경우가 파이썬의 특징이라면,내장 개체 사용에 목숨거는 vbscript나 javascript와 다를게 없지 않을까요?

nohmad wrote:
...
파이썬은 충분히 독립적이고 자기완결적인 언어이므로 모든 코드에 있어 'C'적인 설명을 필요로 하지 않습니다.
...
만일 그러시다면 효율성 때문에 너무 많은 것을 포기하지 말라고 말하고 싶습니다. 세상에는 효율성 말고도 추구할 것이 많습니다. 그리고 세상에는 이런 프로그래머보다 델파이, VB, 자바, PHP, Perl 개발자들이 훨씬 더 많습니다.
...
http://ropas.kaist.ac.kr/~kwang/

위 링크는 함수형 프로그래밍 언어인 ML의 방언쯤 되는 언어를 개발하고 있는 분의 홈페이지인데, 닫힌 생각을 여는데는 더없이 좋을 것으로 생각합니다.

C적 설명이 필요없는 만큼, 파이썬적 설명이 필요하겠지요. 바로 그 설명이 c보다 한참 어렵다는 것이지요!

개발 효율성과 실행 효율성 모두 중요하고, 상황에 따라 적절히 고려해야겠지요.
그리고, 거의 대부분의 공대생들이 처음 C를 배우지요. C를 아는 사람이 더 많겠지요. C로 베이직을 작성하는 수준이라도...
개발자의 경우도 C를 모르면서 델파이나, 자바등을 하는 사람이 몇명이나 될런지..

처음 파이썬을 배우면서 함수형 언어에 대해 알게 되었고, 함수형에 대한 자료를 찾아보다가 참고 하게 되었던 사이트 군요. ^^ 우리나라에도 실제 활용될 수 있는 언어 연구를 하시는 분이 계시다는 것이 좋더군요. nML이란 언어를 개발하시던데, OCaml이란 언어를 기반언어로 하고 있더군요.(nML과 OCmal의 차이가 뭔지 궁금하더군요.) 개인적으로 OCaml에 많은 관심을 가지고 있습니다. 함수형언어이며, 객체지향을 지원하고, GC를 지원하면서 정말 대단하다고 생각되는 것이 실행 성능이 c++를 수준이라고 하더군요. 감동이지요!! 기회되면 OCmal을 배워 볼 생각입니다.
그 교수님 수업 듣는 학생들이 레포트로 제출한 nML 감상문은 정말 재밋더군요. 학점이 뭔지.....

kall의 이미지

netkid wrote:
언어 문법만을 기준으로 학습 난이도를 본다면, vbscprit<php<perl<C<JAVA<C#<C++<Python 정도의 학습난이도를 가지지않을까 생각됩니다.(우측으로 갈수록 어렵움)
개발 효율성에 있어서는,
C<C++<JAVA<C#<Python 이렇게 되지 않을까 싶습니다.

대략 netkid님의 글을 읽어보니
'언어의 내부동작구조를 얼마나 쉽게 이해할 수 있는가'를 언어의 학습난이도로 보시는것 같군요.
그리고,
'얼마나 빨리 원하는 프로그램을 만드는가'를 개발효율성으로 보시는 듯하고...

그래서 어셈이 C보다 쉽다는 얘기도 나온듯 하고...

그렇게 보면 확실히 C가 파이썬보다는 쉽습니다.

하지만, 같은 식으로 어떻게 vb, php, perl이 C보다 학습난이도가 낮은지 모르겠군요.

----
자신을 이길 수 있는자는
무슨짓이든 할수있다..
즉..무서운 넘이란 말이지 ^-_-^
나? 아직 멀었지 ㅠㅠ

demorgan의 이미지

netkid wrote:

처음 파이썬을 배우면서 함수형 언어에 대해 알게 되었고, 함수형에 대한 자료를 찾아보다가 참고 하게 되었던 사이트 군요. ^^ 우리나라에도 실제 활용될 수 있는 언어 연구를 하시는 분이 계시다는 것이 좋더군요. nML이란 언어를 개발하시던데, OCaml이란 언어를 기반언어로 하고 있더군요.(nML과 OCmal의 차이가 뭔지 궁금하더군요.) 개인적으로 OCaml에 많은 관심을 가지고 있습니다. 함수형언어이며, 객체지향을 지원하고, GC를 지원하면서 정말 대단하다고 생각되는 것이 실행 성능이 c++를 수준이라고 하더군요. 감동이지요!! 기회되면 OCmal을 배워 볼 생각입니다.
그 교수님 수업 듣는 학생들이 레포트로 제출한 nML 감상문은 정말 재밋더군요. 학점이 뭔지.....

그 감상문들을 어떻게 읽으셨는지 모르겠지만, 학점 딸려고 아부 떠는 글 보다는 진심으로 그렇게 쓴 글들이 많을 겁니다.
"광교주"님의 수업을 들으며 한 학기를 보내면 신실한 "뻥셔널교"신자가 된다고 합니다. :)

계속 쓰시는 글의 내용을 보면 프로그래밍 패러다임에 대한 이해가 부족하신 듯 합니다. 저로서는 파이썬 프로그래밍을 하면서 새로운 cpu와 os에 파이썬 인터프리터 구현하실 것도 아니실텐데 왜 파이썬 내부 구현에 신경쓰셔야 되는지 이해가 되지 않습니다. 내부 구현에 신경써야 되는 파이썬 프로그래밍을 하신다면 파이썬을 잘못 배워서 잘못 쓰시고 계시겠죠.
파이썬은 특정 머신과 운영체제의 내부 구조를 익히는데는 전혀 도움이 되지 않지만 "프로그래밍 교육"에는 뛰어난 언어라고 생각합니다.
C 프로그래밍의 개념에 얽매여 있으면 Ocaml 같은 함수형 언어를 제대로 배우고 프로그래밍 하기는 불가능할 겁니다. 시간 있으시면 PL 쪽을 교과서라도 보시면서 제대로 공부해 보시기 바랍니다.

netkid의 이미지

demorgan wrote:
계속 쓰시는 글의 내용을 보면 프로그래밍 패러다임에 대한 이해가 부족하신 듯 합니다. 저로서는 파이썬 프로그래밍을 하면서 새로운 cpu와 os에 파이썬 인터프리터 구현하실 것도 아니실텐데 왜 파이썬 내부 구현에 신경쓰셔야 되는지 이해가 되지 않습니다. 내부 구현에 신경써야 되는 파이썬 프로그래밍을 하신다면 파이썬을 잘못 배워서 잘못 쓰시고 계시겠죠.
파이썬은 특정 머신과 운영체제의 내부 구조를 익히는데는 전혀 도움이 되지 않지만 "프로그래밍 교육"에는 뛰어난 언어라고 생각합니다.
C 프로그래밍의 개념에 얽매여 있으면 Ocaml 같은 함수형 언어를 제대로 배우고 프로그래밍 하기는 불가능할 겁니다. 시간 있으시면 PL 쪽을 교과서라도 보시면서 제대로 공부해 보시기 바랍니다.

의제를 상당히 잘못 이해하시는 것 같습니다.
어떤 분이 내부구조란 언급을 해서 그렇게 생각할 수도 있겠군요.
님은 파이썬을 배우는데 c보다 쉽다고 하시는 분이 파이썬의 객체기반 자료구조의 개념과, 함수적 개념을 쉽게 이해했을 거라고 단적으로 주장하실 수 있습니까?

이상하군요? c프로그램의 개념에 얽매여있다고 단정하는 이유는 뭐지요?
파이썬은 파이썬 나름대로 c보다 훨씬 발전된의 언어적 개념을 가지고 있습니다.님은 패러다임이라고 하셨군요. 맞나요?
바로 그 개념이 c보다 복잡하다는 겁니다.
아닌가요?

님의 말씀하시는 패러다임이 혹시 교육용 언어로서 패러다임인가요?
파이썬을 언어의 일반적인 공통점인 제어문을 배우는 것 처럼 얕게 배우는 것이 목적이라면 차라리 베이직이 쉬울겁니다. 베이직을 배우는게 나을지 모르죠. 베이직도 교육용으로 나온것이죠!
아니면 객체지향 이론을 쉽게 배우기 좋다는 의미인가요? 그렇다면 자바를 배우는게 나을 겁니다. 객체지향 개념은 자바를 통해 배우는것이 더욱 명확하고 쉽습니다. 다중상속을하며, 캡술화가 강제적이지 않은 파이썬보다는요!
아니면 함수적 언어 특성의 교육적 학습을 의미한다면, 어중간한 파이썬보다는 헤스켈이나 ML을 배우라고 권하고 싶군요.

어떤 분이 내부구조란 걸 말씀하셔서 잘못 생각하신것 같습니다만, 제가 여기서 주장하는 언어의 학습 난이도는 머신과 운용체제 구조까지를 의미하는 것이아니라, 프로그램밍 언어의 기본 특성인 파이썬의 객체에 기반한 자료구조 특성 같은 것을 의미한 겁니다.

교육용이나 교과서를 생각하시는 것으로 보아 아마도 학생이시거나 학교에 계신분인 것 같은데 규모있는 프로젝트를 진행하는 실무 개발자의 입장에서 접근하는 시각도 가져볼 필요가 있을 것 같습니다.

nohmad의 이미지

netkid님은 파이썬을 비롯한 많은 고급언어들이 사용하는 추상화가 오히려 기계 내부에서 일어나는 일을 알지 못하게 함으로써 학습에 어려움을 준다고 말씀하셨습니다. 추상화가 끝난 레벨에서 언어를 학습하고 끝나는 것이 아니라 추상화 이면의 내부 동작에 대한 추가적 학습이 요구되기에 추상화가 반드시 쉬운 것은 아니라는 요지였죠.

프로그래머로써 펀더멘틀에 대해 알고자 하는 노력은 충분히 의미 있습니다만, 추상화 역시 추상화 나름대로 의미가 있고 문제해결에 집중할 수 있게 해준다는 장점이 있습니다. 그리고 지나치게 특정 아키텍처에 종속되지 않기 위해서라도 이런 종류의 추상화는 필요하고, 또 프로그래밍 패러다임이 그런 쪽으로 이동하고 있습니다. 파이썬도 일종의 VM이고, 펄의 패롯이나 닷넷의 CLR, 자바의 JVM 등등.

하지만 다른 추상성이 높은 언어들, PHP, Perl에 비해 파이썬이 특별히 어렵다고 말씀하시는 것에 대해서는 대부분 의아해하고 있습니다. 아무리 고쳐 생각해보아도 파이썬은 PHP, Perl 등과 비슷한 레벨에 있어야지 혼자 따로 떨어져 C++보다 어려운 괴물 언어의 위치에 있어야 하는 이유를 모르겠습니다. Perl, PHP, Basic 등도 로우레벨에서 이해하려면 파이썬만큼 어렵지 않을까요? 대체 파이썬이 왜 이들 언어들보다 특별히 어려운지 설명해주시면 고맙게 경청하겠습니다.

PS-1) 제가 파이썬에서 OOP가 쉽다는 것을 설명하기 위해 들었던 예가 (내장객체이므로) 당황스럽다고 하셨는데, 어떻게 순수객체지향언어인 자바는 쉽다고 말씀하실 수 있는지 궁금합니다.

PS-2) 'C' 관련 쓰레드에서 하신, 'C'로 하는 OOP가 OOP를 더 확실히 이해할 수 있다는 말씀은 어떻게 이해하면 좋나요? 말씀대로라면, 구조체에 함수 포인터를 디스패치하는 것이 OOP의 정수인 것으로 이해되는데, 제가 지금까지 OOP에 대해 잘못 알고 있었던 게 아닌가 싶어 설명을 부탁드립니다.

demorgan의 이미지

netkid wrote:
의제를 상당히 잘못 이해하시는 것 같습니다.
어떤 분이 내부구조란 언급을 해서 그렇게 생각할 수도 있겠군요.
님은 파이썬을 배우는데 c보다 쉽다고 하시는 분이 파이썬의 객체기반 자료구조의 개념과, 함수적 개념을 쉽게 이해했을 거라고 단적으로 주장하실 수 있습니까?

이상하군요? c프로그램의 개념에 얽매여있다고 단정하는 이유는 뭐지요?
파이썬은 파이썬 나름대로 c보다 훨씬 발전된의 언어적 개념을 가지고 있습니다.님은 패러다임이라고 하셨군요. 맞나요?
바로 그 개념이 c보다 복잡하다는 겁니다.
아닌가요?

님의 말씀하시는 패러다임이 혹시 교육용 언어로서 패러다임인가요?
파이썬을 언어의 일반적인 공통점인 제어문을 배우는 것 처럼 얕게 배우는 것이 목적이라면 차라리 베이직이 쉬울겁니다. 베이직을 배우는게 나을지 모르죠. 베이직도 교육용으로 나온것이죠!
아니면 객체지향 이론을 쉽게 배우기 좋다는 의미인가요? 그렇다면 자바를 배우는게 나을 겁니다. 객체지향 개념은 자바를 통해 배우는것이 더욱 명확하고 쉽습니다. 다중상속을하며, 캡술화가 강제적이지 않은 파이썬보다는요!
아니면 함수적 언어 특성의 교육적 학습을 의미한다면, 어중간한 파이썬보다는 헤스켈이나 ML을 배우라고 권하고 싶군요.

어떤 분이 내부구조란 걸 말씀하셔서 잘못 생각하신것 같습니다만, 제가 여기서 주장하는 언어의 학습 난이도는 머신과 운용체제 구조까지를 의미하는 것이아니라, 프로그램밍 언어의 기본 특성인 파이썬의 객체에 기반한 자료구조 특성 같은 것을 의미한 겁니다.

교육용이나 교과서를 생각하시는 것으로 보아 아마도 학생이시거나 학교에 계신분인 것 같은데 규모있는 프로젝트를 진행하는 실무 개발자의 입장에서 접근하는 시각도 가져볼 필요가 있을 것 같습니다.

자료구조론은 전산학과 학부 2학년이 전공필수로 듣는 프로그래머의 기본 중의 기본 입니다.
전산 전공 아니더라도 수업을 듣거나, 독학을 하셨거나 어쨌든 자료구조론 책 한 번 보면서
공부해 보신 적이 없으신 분이 현업에서 프로그래밍 하실 리가 없습니다.
학부 전공이 전산이 아니거나, 대학을 안 가신 분이더라도 규모있는 프로젝트를 진행하시는 실무 개발자가
파이썬에 나오는 자료구조 정도를 이해 못하는 말도 안되는 경우는 없을 것으로 믿습니다.

귀도 반 로섬의 인터뷰를 번역한 게 한빛미디어에 있군요.
2001년 2월 및 2002년 6월자 입니다. 한 번 읽어보세요.
http://www.hanbitbook.co.kr/u4-04.htm?num=3
http://www.hanbitbook.co.kr/u4-04.htm?num=47

netkid의 이미지

nohmad wrote:
netkid님은 파이썬을 비롯한 많은 고급언어들이 사용하는 추상화가 오히려 기계 내부에서 일어나는 일을 알지 못하게 함으로써 학습에 어려움을 준다고 말씀하셨습니다.
추상화가 끝난 레벨에서 언어를 학습하고 끝나는 것이 아니라 추상화 이면의 내부 동작에 대한 추가적 학습이 요구되기에 추상화가 반드시 쉬운 것은 아니라는 요지였죠.

그 글에서 언급한 내용은 이것이군요
"뒤로 갈수록 개념 파악이 어려워지더군요. 자바나 C#보다 언어의 추상화(전산용어 아님)가 심해서 그런것 같더군요."
음...! 다른 게시글의 댓글에서 언급한 추상화의 의미가 그 정도까지 까지 해석될 수도 있군요. 자바나 c#과 대등한 언어의 위치에 놓고 보도록 하고, 같은 깊이의 이해를 요구 하면서, 보다 더 추상화 되어 있어 난해 했다는 의미로 생각해 주시면 될 것 같습니다.

nohmad wrote:
추상화 역시 추상화 나름대로 의미가 있고 문제해결에 집중할 수 있게 해준다는 장점이 있습니다.

동의하며, 저도 앞에서 같은 얘기를 한것 같습니다.

nohmad wrote:
하지만 다른 추상성이 높은 언어들, PHP, Perl에 비해 파이썬이 특별히 어렵다고 말씀하시는 것에 대해서는 대부분 의아해하고 있습니다. 아무리 고쳐 생각해보아도 파이썬은 PHP, Perl 등과 비슷한 레벨에 있어야지 혼자 따로 떨어져 C++보다 어려운 괴물 언어의 위치에 있어야 하는 이유를 모르겠습니다. Perl, PHP, Basic 등도 로우레벨에서 이해하려면 파이썬만큼 어렵지 않을까요? 대체 파이썬이 왜 이들 언어들보다 특별히 어려운지 설명해주시면 고맙게 경청하겠습니다.

먼저 각 언어를 나열한 부분에는 제 주관적 견해가 충분히 작용했을 것이라고 생각해주시기 바랍니다. 다른 스크립트 기반 언어들도 충분히 추상화 되어 있기 때문에 파이썬과 같은 문제가 있지않겠느냐는 말씀인것 같습니다. 제 의제의 의도는 추상화 문제를 중점으로 하는 것이 아닌 것으로 이해 해주셨으면 합니다. 파이썬은 추상화되어 있지만 언어자체의 구조가 왠만큼 내부 처리과정을 예상하도록 하기 때문입니다.
제가 파이썬을 보면서 여러 언어들의 스펙트럼 중 파이썬의 위치는 좀 애매한 위치에 있다는 것을 느꼈습니다. basic, js, php, perl(펄도 요즘은 사정이 다른것 같습니다. 예전 상황과 다른 많은 변화가 있었던 것 같습니다.) 등 스크립트 언어에 속하기도 하면서, java, c#(?), c++같은 메임프레임 언어 영역에 포함 되려하는 것 같습니다. 파이썬의 객체지향 특성을 보면서 느낀 것이 자바나 c# 또는 c++같은 언어 처럼 객체들의 상황을 생각하지 않을 수 없게 만드는 것 같습니다(깊이가 있다는 의미 임). 프로젝트에 자바나 c#의 대체를 고려하게 할 정도로 말입니다. 그에 비해 많은 스크립트 언어들은 shell이나, VBS, js 처럼 특정 제한된 부분에 적용할 것을 요구하고, 지원 기능이 제한적이며, 패쇠적인 구조를 가지고 있어 세부적인 사고의 접근을 막고 있습니다.(스크립팅을 하는데 세부적인 부분을 사고할 만큼 복잡하지도 필요치도 않지요.) 일반적인 스크립트 언어는 처음부터 단순화되고 제한된 구조와 개발자들이 그 구조를 활용하는데 만족하도록 설계된 것으로 봅니다. 더 이상 생각할 필요도 여지도 없다는 것이지요. 이런면에서 차이가 있지않나 생각되는군요.
관련성이 떨어지는 얘기이지만, 제가 js를 배울 때 고민을 하게 만드는 것은 js 문법이 아니라, js에서 사용하는 웹브라우저의 내장 객체 구조 였습니다.

nohmad wrote:
PS-1) 제가 파이썬에서 OOP가 쉽다는 것을 설명하기 위해 들었던 예가 (내장객체이므로) 당황스럽다고 하셨는데, 어떻게 순수객체지향언어인 자바는 쉽다고 말씀하실 수 있는지 궁금합니다.

언어의 객체지향을 지원한다라는 것은 객체를 만들 수 있는 클래스, 델리게이트와 같은 객체를 쉽게 생성할 수 있는 것들을 지원한다는 의미로 생각하고 있습니다. 객체를 가져다 사용하는 예는 좀 괴리가 있다고 생각합니다. 그리고 순수객체지향 언어는 사고를의 일관성과 단순성을 유지하기 때문에 자바를 언급한 것입니다.(파이썬의 객체기반 데이터 구조는 자바보다 객체지향성을 더욱 잘 활용하는 면이 있다고 생각이 듭니다.)

nohmad wrote:
PS-2) 'C' 관련 쓰레드에서 하신, 'C'로 하는 OOP가 OOP를 더 확실히 이해할 수 있다는 말씀은 어떻게 이해하면 좋나요? 말씀대로라면, 구조체에 함수 포인터를 디스패치하는 것이 OOP의 정수인 것으로 이해되는데, 제가 지금까지 OOP에 대해 잘못 알고 있었던 게 아닌가 싶어 설명을 부탁드립니다.

맞는 말씀입니다.
많은 분들이 그렇듯이 저도 예전에 그랬고, 처음에는 객체 지향 기법에 대해 많은 분들이 쉽게 와 닿지 않아 한다고 생각합니다. 그래서, 객체지향이 "아! 별개 아니구나" 하고 느낄 수 있는 좋은 방법이 되지 않을까 해서 말씀드린겁니다. 사실 그렇게 까지 해볼 필요성을 느끼는 사람은 별로 없겠지만요!
wish의 이미지

먼저 답글을 다 읽지는 않았습니다. 올리신 글만 보고 글 올립니다.

Quote:

파이썬을 포함한 적어도 기본적 문법 이상 알고 있는 언어들을 비교해본 결과....
제가 내린 결론은 통상적인 기준으로 볼때 파이썬은 어렵다 라고 해야 솔직한것 같습니다. 언어 문법만을 기준으로 학습 난이도를 본다면, vbscprit<php<perl<C<JAVA<C#<C++<Python 정도의 학습난이도를 가지지않을까 생각됩니다.(우측으로 갈수록 어렵움)
개발 효율성에 있어서는,
C<C++<JAVA<C#<Python 이렇게 되지 않을까 싶습니다.

언어 문법적인 측면만을 고려해 학습 난이도를 결정한다는 님의 말씀이 정확하게 무슨 뜻인지는 모르겠지만, 글 그대로 이해해 본다면 문법이 얼마나 쉬운가를 뜻합니다. 즉 문법이 얼마나 쉽게 파악하고 직관적이이며 기계보다 인간에 더 가까운지를 생각해 보아야 합니다.

그런 측면에서 파이썬이 어렵다고 한 것이 이해가 가지 않습니다. 문법 자체는
파이썬 만큼 편한 언어도 드뭅니다. 위의 논의를 읽어보니 쉽게 배울 수 있다는 것과 언어 자체의 내부 작동방식을 배우는 것을 구분해서 생각해야 한다고 하셨습니다만, 님께서 쓰신 글에 언어 문법적인 측면에서라는 표현은 내부 작동방식과는 전혀 다른 말인 것 같습니다.

개발 방식의 효율성, 언어 문법적인 학습 난이도, 언어 인터프리터의 내부 작동방식은 모두 다른 말입니다. 언어는 내부 작동방식을 모르더라도 문법을 정확히 알면 프로그래밍 가능합니다. C의 경우는 lowlevel 적인 측면이 남아있기 때문에 내부구조를 어느정도 알아야 프로그래밍 가능한 것이지만, 고수준의 프로그래밍 언어는 내부구조를 몰라도 프로그래밍 자체는 가능합니다. (물론 씨도 포인터 같은 거 안쓰고 기초적인 프로그래밍만 한다면 내부구조 몰라도 프로그래밍 할 수는 있습니다)

이런 의미에서 언어 내부 구조가 어떻게 돌아가는지 파악하기 힘든 것이 배우기 힘들다와 같은 의미라고 하기에는 어렵다고 생각합니다. 파이썬의 문법은 사람이 이해하기 쉽게 되어 있으므로, 당연히 기계가 그 문법을 어떻게 이해하고 행동할 것인 가를 아는 것은 씨보다 어렵습니다.

Quote:

파이썬이 배우기 어려운 언어인 이유는, 개체지향(기본 데이터 타입까지도 객체로 관리), 함수형 등의 최신기술?을 모두 적용하다보니 그런 것 같습니다.
반면 개발에 효율적인 이유 또한 같은 이유인 것 같습니다.
파이썬이 배우기 쉽고 개발에 효율적이다는 일반적 견해와 다르게 배우기 어렵고 개발에 매우 효율적이다라고 해야 맞다고 생각합니다.

여러분들의 생각은 어떻습니까??

PS: 파이썬을 막 시작했을때 쉽다고 착각하게 되는 원인 중 하나가 처음 접하는 것이 리스트 타입과 같은 변수사용의 막강함 때문인것 같기도 합니다. 그러나 한번에 많은 것을 할 수 있는 결과 중심적 능력은 언어학습을 쉽게 하는 것이 아니라 개발을 쉽게 한다고 봐야 할 겁니다.

한번에 많은 것을 할 수 있는 결과 중심적 능력이 대체 무엇인지 모르겠군요. 언어가 쉽다는 것은 "내가 생각하는 것을 쉽게 표현 할 수 있다"는 뜻 이외에 아무것도 아닙니다. 언어 문법이 쉬운 것이 개발의 효율성을 높이는 것은 당연한 일입니다. 파이썬 인터프리터 자체가 복잡하든 말든 그것은 언어 학습의 용이성을 논의할 때는 언급할 필요 조차 없습니다.

파이썬이 내부적으로 함수를 어떻게 부르고, 클래스를 어떻게 할당하고, 변수의 생성과 소멸을 어떻게 하는지가 아무리 복잡하더라도 배우는 입장에서는 알 필요가 없습니다(물론 효율적이고 더 다양한 일을 하기 위해서는 알아야 합니다).

"파이썬은 배우기 쉬운 언어인가?" 의 답은, 아마도 많은 분들께서,
"네." 라고 대답할 것이 분명합니다.

다만,
"파이썬 언어가 내부적으로 어떻게 작동하는지 파악하기 쉬운 언어인가?"의 답은,
"아니오"일 것이라고 생각합니다.

thedee의 이미지

netkid wrote:
일반적으로 파이썬 측에서는 파이썬이 매우 배우기 쉽고, 개발하기 편한 언어라고 주장합니다. 배우기 쉽다는 의미의 기준은 일반적으로 C를 기준으로 하는 것 같습니다. 국내에서도 파이썬을 전도?하고 계신 분들도 일관되게 파이썬은 쉽다고 주장하더군요.
파이썬을 포함한 적어도 기본적 문법 이상 알고 있는 언어들을 비교해본 결과....
제가 내린 결론은 통상적인 기준으로 볼때 파이썬은 어렵다 라고 해야 솔직한것 같습니다.
언어 문법만을 기준으로 학습 난이도를 본다면, vbscprit<php<perl<C<JAVA<C#<C++<Python 정도의 학습난이도를 가지지않을까 생각됩니다.(우측으로 갈수록 어렵움)
개발 효율성에 있어서는,
C<C++<JAVA<C#<Python 이렇게 되지 않을까 싶습니다.

파이썬이 배우기 어려운 언어인 이유는, 개체지향(기본 데이터 타입까지도 객체로 관리), 함수형 등의 최신기술?을 모두 적용하다보니 그런 것 같습니다.
반면 개발에 효율적인 이유 또한 같은 이유인 것 같습니다.
파이썬이 배우기 쉽고 개발에 효율적이다는 일반적 견해와 다르게 배우기 어렵고 개발에 매우 효율적이다라고 해야 맞다고 생각합니다.

여러분들의 생각은 어떻습니까??

PS: 파이썬을 막 시작했을때 쉽다고 착각하게 되는 원인 중 하나가 처음 접하는 것이 리스트 타입과 같은 변수사용의 막강함 때문인것 같기도 합니다. 그러나 한번에 많은 것을 할 수 있는 결과 중심적 능력은 언어학습을 쉽게 하는 것이 아니라 개발을 쉽게 한다고 봐야 할 겁니다.

말씀하시는 것을 알 것도 같고 모를 것도 같습니다만...^^
님께서 파이썬이 어렵다고 말씀하시는 대신 자바가 어렵다고 말씀
하셨더라면 저는 백프로 님의 말씀에 찬동했을 겁니다.

즉, c++ < Java (학습 난이도)
c++ < Java (개발 효율성)

자바에는 디자인적인 개념이 너무 너무 많이 들어가 있어 개념을
잡기가 힘들죠. 같은 이유로 개발에는 효율성이 있죠. 일단 익히고 나면~
(C++은 다 모르고도 잘 써먹을 수 있고요.)

파이썬의 경우는... 글쎄요, 이해가 잘 가지 않습니다. 언어가 지원하는
패러다임이 너무 풍부해서 배우기 어렵다고 한다면 파이썬이 c++보다
더 징할 수는 없을 듯 합니다만...

음... 그리고 파이썬의 메타 프로그래밍에 대해서 언젠가 들은 적이
있는데, 솔직히 이게 뭘 말하는지 저는 모릅니다... 혹 이런 높은 수준(?)의
개념들도 파이썬이 가배얍게 지원한다는 말씀을 하시는 것이 아닐른지~

siabard의 이미지

netkid wrote:
일반적으로 파이썬 측에서는 파이썬이 매우 배우기 쉽고, 개발하기 편한 언어라고 주장합니다. 배우기 쉽다는 의미의 기준은 일반적으로 C를 기준으로 하는 것 같습니다. 국내에서도 파이썬을 전도?하고 계신 분들도 일관되게 파이썬은 쉽다고 주장하더군요.

배우기 쉽다는 것은 여러가지 면이 있다고 봅니다.

    명료한 문법구조
    문제이외에 프로그래머가 관여할 부분이 적을 것
    인터프리터적인 개발환경
정도로 생각하고 있습니다.

명료한 문법구조야 좋은 프로그래밍 언어로서는 필수적일 것이고, 두번째 부분 같은 경우는 프로그래머가 문제 그자체에 집중하게 해줘야한다는 것이겠죠. 메모리 할당 해제문제같은 것이 가장 일반적일까요?

마지막으로 인터프리터적, 대화적인 개발환경입니다. 개발사이클이 적으면 적을 수록 배우는데는 힘이 덜 들더군요. 8비트 컴에서 베이직을 하다가 처음으로 C를 다루었을 때 가장 당황스러웠던 것은 compile, link작업이 따로 있었다는 겁니다. 베이직에서는 그냥 Run을 실행시키던지, 아니면 간이적으로 테스트할 수 있는 환경이 있었는데 그것이 없었던 컴파일러 환경은 엄청나게 어려웠었죠.

파이썬뿐 아니라 요즘들어 늘어나고있는 Embedding언어나 스크립트형 언어들의 추세가 저렇지 않나 생각해봅니다. 이른바 배우기 쉽다라는 것을 모토로 삼던 많은 언어들이 저런 내용들중 일부를 포함한다고 봅니다.

[/]

새로움을 느끼기에 삶은 즐겁다..
모험가 아돌 크리스틴을 꿈꾸며..
Sia..

u235의 이미지

나열하신 난이도순은 어느정도 맞는것 같습니다.
VBS가 가장 쉬운것 이라는데는 의심의 여지가 없으며 C보다 어려운것도 사실입니다.
그러나 분명 과장된 면이 있으며 제 생각에는 ... < C < Python < JAVA < C++ < JAVA < C# 정도로 보면 무난하지 않나 사료됩니다.

제생각과 크게 다르지 않으신듯 한데 아마도 문법체계가 직관적이지 않으며 창작 자율성을 최대한 제한하고 암기가 필요한 괴상한? 요소들이 많을수록
대체적으로 고난이도로 보는것 같군요.

또한 어떤 프로젝트를 코딩할때 작업 효율성 측면도 반드시 고려돼야할 사안인데
예를들어 C의 경우는 효율성은 저조한 편이지만 반드시 C로서만 구현이 가능한 사례가 많습니다.

흔히 파이썬을 전도하시는분들 왈..
파이썬 =효율성을 강조 하시는데
당장을 어떨지 모르지만 그리 오래가지는 못하리라 확신합니다.
예를들어 구글이 창조한 GO 언어는 지금까지 C로만 가능했던 시스템 HAL 레벨의 낮은 영역에서 스크립트 차원의 높은 영역까지 커버가 가능하며
문법체계도 간략 명료하여 파이선보다 배우기 쉬운데다 구글의 막강한 프레임워크가 지원되고 있어 개발자의 천하통일 가능성도 배제할수 없습니다.

James Gostling

lucie의 이미지

여기서는 이 기능이 지원되는데 저 언어는 저 기능이 지원되지 않기 때문에 좋지 않다, 좋다를 따지는 것도 이상하고...
언어마다 지향점도, 할 수 있는 것도 다른데 어렵다 쉽다를 논하는건 조금 이상하기도 합니다...

mathpia2의 이미지

여러 글들을 쭉 읽었습니다. 아마도 토론을 제안하신 분의 생각은

[Python이라는 언어가, 여러 사람들의 의견처럼 [매우 쉬운 언어]는 아닌 것 같다]
[Python이라는 언어를 잘 활용하기 위해서는 생각보다 많은 지식이 필요하다]

인 것 같습니다. 그런 의미에서 [난이도를 평가해달라]고 제안하신 것 같고요.

저는 1년에 1개씩(혹은 2~3년에 1개씩) 언어를 익히려고 노력하는 평범한 직장인입니다.

올해의 언어가 Python이라 익히기 시작한 지 3개월 정도 됩니다. 개발자가 아닌 일반 사무직이라 언어 학습에 전적으로 올인하기는 어려워서....

1. 초기 언어문법 익히기는 매우 쉽습니다.
> 단순한 Syntax는 익히기가 매우 쉽습니다. 추상화된 언어의 기본이겠지만, 기존에 어떤 언어든 익힌 사전지식이 있다면 매우 쉽게 익힐 수 있습니다.

2. 다양한 라이브러리가 있어, 중급 이상의 난이도가 있는 프로그래밍에도 쉽게 적용이 됩니다.
> 일반적으로 알고리즘을 익히는 단계에서 풀어보는 문자열 다루기, 저장소 처리 등의 기능을 매우 쉽게 처리할 수 있다는 점이 제게는 매력적으로 다가왔습니다.

이런 점에서 저는 Python이 [학습] 및 [실제 적용]에 매우 쉬운 언어라고 생각합니다.
저같은 사무직의 관점에서는 [복잡한 시스템 구현]에 활용하기보다는 [소소한 업무의 자동화]에 사용하기 편한 언어라는 생각이 듭니다.

단, 이 생각은 전업으로 개발을 하지 않는 사람이기에 가능할 것 같습니다. 고수님들의 경우 [복잡한 시스템 구현]에도 편리한 언어라는 생각을 하실 수 있고, 그런 점이 Python이 요즘 관심을 많이 받는 이유가 되기도 하겠죠.

대학교 때 FORTRAN과 BASIC, C와 JAVA를 컴퓨터개론 및 관련과목에서 접해보고, C와 JAVA의 비교에 충격을 먹었던(C는 왜 이리 어려운 거야?) 저로서는, C보다 Python이 더 어렵다는 생각에는 찬성하기 어렵네요.

C는 기본문법을 익힐 경우 컴퓨터의 구조를 알 수 있는 장점이 있는 반면, 사용자가 원하는 기능을 효율적으로 구현하기 위해서는 상당 수준까지 도달해야 하는(메모리 누수 주의라든지, 포인터 사용 주의 등) 문제점이 있습니다만, Python은 기본 문법을 익히고 라이브러리 사용법을 익히는 것만으로도 제가 하는 엑셀자료 정리라든지 기사 스크랩 등의 업무에 바로 활용 가능한 이점이 있습니다.

이런 점에서 저는 Python이 [배우기 쉬운 언어]이며, [활용하기 편한 언어]라고 생각합니다.

PS. 개발자 분들이 보시기에 Python이 어떠한 언어인지 글을 보니 느껴지네요. 어려운 말들도 있지만, 상당한 내공이 느껴지는 글들이 많아, 저로서는 많은 공부가 되었습니다. ^^;