-
2024년 10월 23일 프로그래밍 언어론 공부 1일차프로그래밍 공부 일지 2024. 10. 23. 22:00반응형
프로그래밍 공부를 시작하기에 앞서 기초 지식을 좀 쌓고 싶은 마음에 공부를 시작했다. 2021년에 사놨다가 이제야 제대로 공부를 시작하게 됐다.
프로그래밍을 독학하려 할 때 가장 답답했던 것은 전반적인 구조를 알지 못하는 상태에서 개념도 모르는 상태에서 해야 했다는 것이다. 프로그래밍 언어가 무엇인지, 그리고 더 나아가 무엇을 더 공부해야 하는지, 프로그래밍 언어를 어떻게 어떤 시선으로 다가가야 하는지 알고 싶어서 공부를 시작한다.
이번 공부를 하면서 글로 남기고 싶은 것은 이 공부를 하면서 깨달은 것들을 좀 적어놓고 싶다. 책에 안나와있지만 기억하고 싶은 것들을 남기는 것 위주로 하고 싶다. 책에 나와있는 것 중에서 기억하고 싶은 것들을 남기고 싶기도 하다.
프로그래밍 언어론의 선수과목은 C언어 혹은 C++로 권장한다고 하는데 선수과목이 필수는 아니라고 봤다. 나는 파이썬이랑 자바를 찍먹? 제대로 공부를 못해서 괜찮을까? 싶은데 그래도 제대로 공부하고 싶어서 계속 봤다.
오늘은 프로그래밍 언어 자체에 대한 설명으로 시작했다. 보면서 프로그래밍 언어에 대한 생각이 좀 정리가 됐다. 중국어학 전공이고, 외국어로서의 한국어학을 공부하고 있는 내 입장에서는 자연어가 더 익숙하다. 나뿐만 아니라 모든 사람이 그럴 것이다.
한국어와 중국어도 언어이고, 프로그래밍 언어도 언어인데 어떻게 접근을 해야할까 고민을 해봐야 할 문제라고 생각한다.
프로그래밍 언어는 뭐랄까 사고 과정을 하나하나 다 그려줘야 하는 정확한 언어로 보인다. 우리가 평소에 쓰는 자연어는 말을 할 때 사고 과정을 다 말하지 않고, 어떤 의미를 내포하는 의사표현도 많이 하고, 어떤 생각을 하고 있구나라는 것을 다 드러내지 않지만, 프로그래밍 언어는 그런 것들을 다 설명해 주는 느낌을 받았다. 사고 과정을 정리해서 작성해 주는 언어가 아닐까 싶다. 블로그에 글을 쓰는 것보다 더 상세하고 자세하게 논리를 짜고 표현하는 느낌일까?
프로그래밍 언어의 공통적으로 기계적, 구조적, 가변적이라는 특성을 가진다고 나온다. 전에는 기계적이라는건 엄격한 규칙을 지켜야 한다는 것이고, 구조적은 복잡한 문제가 많으니까 그 문제를 해결하기 위해서 구조적으로 접근해야 돼서 프로그래밍 언어가 구조적이라는 특성을 가졌나 싶다. 가변적인 특성은 기술의 발전으로 사용하는 언어가 지속적으로 변하고, 개발되고 발전되는 특성을 얘기하는 것 같다. 기계적이라는 특성을 나는 그 뭐냐, 컴퓨터 작동 원리가 있으니까, 초기 컴퓨터는 기계식으로 작동했으니까 그런 특성을 가졌나? 라고 생각했었는데, 기계적으로 한다는 것이 정해진 데로 그데로 반복적으로 쭉 한다는 것이니까 그럴 수 밖에 없긴 하겠다.
프로그래밍 언어의 구성 요소는 데이터, 연산, 명령어, 서브프로그램, 타입, 모듈이라고 한다. 사실 그동안 프로그래밍을 독학 해보려고 할 때 궁금했던 것은 사실 데이터 부분이었다. 데이터를 어떻게 저장하고, 저장한 데이터를 어떻게 끌어오고, 끌어온 데이터를 가공해서 사용하고, 어떻게 다시 기존에 저장되었던 데이터 위에 덮어씌우는지 잘 모르겠었다. 명령어야 안 외웠었으니까 할 말이 없고, 타입은 어느 정도 알 것 같다. 써보면 더 알 것 같다. 지금 여기서 가장 큰 문제는 서브프로그램과 모듈이다. 전에 자바 공부를 할 때 클래스나 다른 파일에 코드를 짜고 불러오는 것을 해본 적은 있다. 책을 따라한 게 다였다. 근데 서브프로그램이랑 모듈은 프로그램의 구조를 짜는 데에 필요한 블록 같은 것으로 이해했다. 근데, 서브프로그램과 모듈을 어떻게 만들어야 하는지, 그리고 이것들을 프로그래밍할 때 어떻게 잘 끼워 맞추고 활용하는지 모르겠었다. 그것은 아마도 내가 프로그래밍에 대한, 프로그램의 작동 원리나 흐름에 대한 지식이나 경험이 없어서 그렇지 않았을까?
근데 뒤에 30페이지에 프로그램의 두 가지 측면에서는 '프로그램을 이해하려면 프로그램의 형태 뿐만 아니라 수행 과정도 이해해야 한다'라고 말한다. 수행 과정이라. 알고리즘 같은거 얘기하는 거 같기도 하고. 근데 만약에 내가 수행 과정에 대한 이해도가 높다면 프로그래밍 공부가 힘들지 않았을 수도 있다. 큰 그림을 알면 한 부분씩 지식을 채워나가면 되는 거니까 조급하지 않았을 것 같다.
프로그래밍 언어 공부를 어떻게 해야 하는지 요령같은 것도 말해줬는데 그건 언어전공자라서 좀 편하게 받아들일 수 있었다. 많이 보고, 많이 써보고, 많이 생각하는 것.
내가 중국어 전공자라서 계속 작문을 해보고 읽어보고 말해보고 듣고 하는 것을 많이 경험했고, 그 효과도 알고 있다. 단어나 문법도 직접 활용해봐야 기억에 많이 남는데 그 얘기를 한 것 같다. 근데 그러면 U자형 학습도 적용을 해야할 것 같다. 처음 보면서 공부를 할 땐 이해가 되는 것 같고, 써봐서 알것 같다. 하지만 며칠 지나고 다른 것을 배운 후에 전에 배운 것은 잊어버리거나 기억이 안나고, 나중에 배운 것과 섞이는 등 그런 경험 한 번쯤은 다 있을 것이다. 그것이 외국어 학습에서의 U자형 학습으로 알고 있는데, 이것은 모래성 쌓듯이 계속 복습을 하고, 계속 써보고 생각해봐야 하는 걸까?
안 그래도 전에 프로그래밍 독학을 하다가 그만 둔 것도, 앞의 내용을 많이 까먹어서 공부하는 것 같지가 않았다. 언제 다시하지? 라는 생각도 많이 들었다. 근데 이번에는 전반적인 흐름이라는 틀을 먼저 세우고, 거기에 지식을 채워넣는다면 흘러내려가서 없어지는, 잊는 지식의 량이 많이 줄지 않을까?
오늘은 제1장, 프로그래밍 언어 소개를 공부했다. 앞으로 하루에 한 장씩 공부하려고 한다. 급하게 보면 졸속으로 볼게 뻔하고, 적당량 보면서 본 것들을 정리하고, 생각을 많이 해보는 것이 도움이 될 것이라고 생각한다. 얕고 빠르게가 아니라 느리지만 깊게 공부하고 싶다.
반응형'프로그래밍 공부 일지' 카테고리의 다른 글
2024년 10월 26일 프로그래밍 언어론 공부 4일차 (1) 2024.10.27 2024년 10월 25일 프로그래밍 언어론 공부 3일차 (1) 2024.10.26 2024년 10월 24일 프로그래밍 언어론 공부 2일차 (1) 2024.10.25 저 코드잇으로 공부 시작했어요 (0) 2021.06.24 2021년 3월 9일 어제 플러터 공부하면서 든 생각 (1) 2021.03.10