PHP에서 Java로, 다시 Python으로 — 하나의 언어를 완벽히 숙지하면 벌어지는 일
안녕하세요, 가야태자 @talkit 입니다.
처음 프로그래밍을 시작할 때, 혹은 한창 공부 중일 때 주변에서 이런 말 한 번쯤 들어보셨을 겁니다.
"언어는 도구일 뿐이다. 하나만 완벽하게 하면 다른 언어는 금방 배운다." — 컴퓨터 과학의 거장들 (MIT 할 에이벌슨 교수, 하버드 CS50 데이비드 말란 교수 등)
혹시 이 말을 들으면서 '말은 쉽지, 문법이 아예 다른데 그게 어떻게 가능해?'라며 속으로 의구심을 품은 적 없으신가요? 오늘은 제가 주니어 프로그래머 시절부터 시니어가 된 지금까지, 이 격언을 몸소 체험했던 실제 경험담을 공유해보려고 합니다. 결론부터 말씀드리면, 그 석학들의 말은 진짜였습니다.
1막. 나의 주니어 시절: C, Perl, 그리고 인생 언어 'PHP'
저 역시 주니어 시절에는 개발 생태계에서 살아남기 위해 다양한 언어를 기웃거렸습니다. C 언어도 보고, Perl도 만져보고, PHP도 공부했죠. 그중에서 제가 가장 깊게 파고들고, 스스로 '완벽하게 익혔다'고 느꼈던 인생 첫 언어는 바로 PHP였습니다.
PHP로 웹 서비스를 직접 만들고 데이터베이스를 만지면서, 단순히 문법을 외우는 게 아니라 프로그래밍의 핵심 메커니즘을 온몸으로 깨우쳤습니다.
변수에 값이 어떤 흐름으로 담기는지
조건문과 반복문이 어떻게 제어 흐름을 만드는지
함수를 어떻게 쪼개고 재사용해야 코드가 깔끔해지는지
언어의 껍데기를 넘어 '컴퓨터에게 일을 시키는 구조(Logic)'를 PHP라는 도구를 통해 완전히 마스터한 것이죠.
"PHP의 echo가 Java에서는 뭐였더라?"
시간이 흘러 기술 트렌드와 프로젝트 환경에 따라 Java와 C#으로 언어를 전환해야 하는 시기가 왔습니다. 완전히 새로운 환경이었죠.
그때 제가 구글 검색창에 무엇을 쳤는지 아시나요? 아직도 기억이 나네요. ^^
"PHP echo Java 구현" "Java에서 print는 어떻게 하나요?"
주니어 시절 PHP에서 화면에 텍스트를 출력할 때 늘 쓰던 echo 명령어가 Java에서는 도대체 무엇인지 1:1로 매칭하는 검색이었습니다. 결과는 다들 아시다시피 System.out.println();이었죠. C#으로 넘어갈 때도 마찬가지로 "PHP의 이 기능은 C#에서 어떻게 쓰지?"라며 Console.WriteLine();을 찾아냈습니다.
이 소소한 검색 경험은 제게 아주 큰 깨달음을 주었습니다. 만약 제가 PHP를 대충 수박 겉핥기식으로 배웠다면, Java나 C# 책의 첫 페이지부터 다시 펴고 "변수란 무엇인가..."부터 머리를 싸매고 공부했을 겁니다.
하지만 저는 이미 '화면에 문자열을 출력해야 하는 타이밍과 프로그래밍적 이유'를 완벽히 알고 있었습니다. 단지 Java라는 나라에서는 그걸 어떤 '문법(단어)'으로 표현하는지만 알면 되는 상태였던 것이죠.
2막. 세월이 흘러 Java 전문가가 된 나, Python을 만나다
그로부터 많은 시간이 흘렀습니다. 저는 부단한 노력 끝에 Java 전문가 소리를 들을 만큼 연차가 쌓였고, 시스템의 아키텍처를 고민하는 시니어가 되었습니다.
그런 제게 최근 또 한 번의 변화가 찾아왔습니다. 바로 요즘 가장 핫한 언어 중 하나인 Python을 다루게 된 것입니다. 놀랍게도, 전문가가 된 상태에서도 주니어 시절 PHP에서 Java로 넘어갈 때와 똑같은 메커니즘이 제 머릿속에서 작동하기 시작했습니다. 역사는 반복되더군요.
아무리 경험이 많은 전문가라도 새로운 언어의 구체적인 '문법 단어'까지 태어날 때부터 알 수는 없는 법입니다. 데이터 문자열을 특정 기호 기준으로 쪼개야 하는 상황이 왔을 때, 제 손가락은 자연스럽게 다시 구글로 향했습니다.
"Java split Python 어떻게" "Python string split syntax"
Java 개발자라면 입에 달고 사는 str.split(",")이 Python 나라에서는 어떻게 쓰이는지 매칭하는 작업이었습니다.
// Java의 방식 (엄격한 타입 지정과 배열 반환)
String str = "apple,banana,cherry";
String[] fruits = str.split(",");
# Python의 방식 (직관적인 문법과 리스트 반환)
str = "apple,banana,cherry"
fruits = str.split(",")
검색 결과, 두 언어 모두 문자열을 쪼개는 내부적인 개념은 완벽히 같았습니다. 단지 Java는 엄격하게 타입이 지정된 배열(String[])을 반환하고, Python은 더 직관적인 리스트(List)를 반환하는 등의 언어적 개성만 다를 뿐이었습니다.
주니어와 시니어의 차이: "무엇을 검색해야 하는지 안다"
주니어 시절 echo를 검색할 때와, 시니어가 되어 split을 검색할 때의 결정적인 차이는 "검색의 속도와 정확도"였습니다.
초보자 시절에는 "문자열 쪼개기", "글자 나누는 법"처럼 기능 중심으로 모호하게 검색하느라 시간을 썼다면, 지금은 split이라는 명확한 컴퓨터 과학적 용어(Terminology)를 알고 검색합니다.
내가 구현하고자 하는 로직의 정확한 개념 이름을 아니까, 새로운 언어의 문법을 찾아내는 데 단 3초도 걸리지 않는 것이죠. 하버드나 MIT 교수님들이 말씀하신 "하나의 언어를 완벽히 숙지하라"는 조언의 진짜 가치는 바로 여기에 있습니다.
하나의 언어를 마스터하며 얻은 '개념의 이름표'들이 머릿속에 꽉 차 있으면, 새로운 언어를 배울 때는 그 이름표에 대응하는 그 나라의 단어만 1:1로 매칭하면 끝납니다.
글을 마치며: 지금 흔들리는 모든 개발자들에게
컴퓨터 과학에서는 이를 '튜링 완전성(Turing Completeness)'이라고 합니다. 쉽게 말해, PHP나 Java로 구현할 수 있는 알고리즘은 Python이나 C#으로도 다 구현할 수 있다는 뜻입니다. 알맹이(로직)는 같고 껍데기(문법)만 다를 뿐이죠.
지금 공부하고 있는 언어가 트렌드에서 뒤처지는 것 같아 불안하신가요? 옆자리 동료가 새로운 신생 언어를 공부한다고 해서 조급해하실 필요 전혀 없습니다.
지금 잡고 있는 그 언어로 원하는 기능을 막힘없이 구현할 수 있을 때까지, 내부 구조를 완전히 이해할 때까지 깊게 파보세요. 그 언어 하나를 완벽하게 숙지하고 나면, 훗날 어떤 거대한 새로운 언어를 만나더라도 구글 검색창에 저처럼 유쾌한 질문을 던지며 순식간에 적응하는 여러분을 발견하게 될 것입니다.
생각하는 힘(로직)은 변하지 않으며, 언어는 그것을 표현하는 비서일 뿐이니까요.
가야태자 @talkit 이었습니다. 감사합니다!
🌐 함께 보면 좋은 추천 학습 링크
글에서 언급한 컴퓨터 과학의 본질과 "문제를 해결하는 사고방식"을 기르는 데 도움이 되는 공신력 있는 무료 학습 링크입니다. 블로그 이웃분들도 참고해 보세요!
하버드 대학교 CS50 (edX)하버드 대학교 CS50 (edX)
- 설명: 글에서 언급한 데이비드 말란 교수의 하버드대 컴퓨터 과학 입문 명강의입니다. 특정 언어에 매몰되지 않고 '컴퓨터적 사고(Computational Thinking)'를 기르는 데 최적화되어 있습니다. (무료 청강 가능)
MIT 6.0001 - 파이썬을 이용한 컴퓨터 과학 및 프로그래밍 입문 (MIT OpenCourseWare)MIT 6.0001 - 파이썬을 이용한 컴퓨터 과학 및 프로그래밍 입문 (MIT OpenCourseWare)
- 설명: MIT에서 제공하는 전설적인 코스로, 언어라는 도구를 통해 복잡한 현실의 문제를 어떻게 추상화하고 논리적으로 해결하는지 배울 수 있습니다.
Learn X in Y minutes (y분 만에 X 언어 배우기)Learn X in Y minutes (y분 만에 X 언어 배우기)
- 설명: 하나의 언어를 이미 마스터하신 분들에게 강력 추천하는 사이트입니다. 한 페이지 안에 특정 언어의 핵심 문법을 요약해 두어, 저처럼 "Java의 이 기능이 Python에선 뭐지?" 하고 빠르게 문법만 매칭할 때 최고의 효율을 자랑합니다.

저도 요즘 코딩공부에 빠져들고 있어용...
그런데 손목이 너무 아파요..
웬 클릭이 그렇게 많은지....