본문으로 바로가기

📚 프로그래밍에 대한 나의 생각

category 글쓰기 2024. 11. 10. 04:51
728x90

✅ 프로그래밍에 대한 나의 생각을 정리해보고자 한다. 

 

프로그래밍이나 개발을 해보지 않았던 사람들, 다시 말하자면 비전공자들에게는 프로그래밍이 매우 어려운 것이라고 인식되는 것 같다. 실제로도 그렇다고 생각한다. 프로그래밍은 매우 어려운 것이라고 생각이 된다. 프로그래밍 혹은 개발을 어디까지로 놓고 보느냐에따라 다르긴 하겠지만, 기본적으로 프로그램을 잘 개발하는 것은 매우 어려운 일이다. 사람의 마음을 잘 읽어서 의도에 맞게 설계해야 하고, 그 설계에 적절한 어떻게 보면 최적의 기술을 적용해야 현업 사람들에게 만족스러운 평가를 받을 수 있다. 경우에 따라서는 최신기술로 적용해야 만족스러워 하는 경우도 있다. 

 

영어회화 공부하는 방법을 고민하면서 프로그래밍 언어도 영어와 같은 언어라는 생각이다. 사람이 필요하다고 생각한 것들을 좀 더 편리하고 빠르게 사용하기위한 것이 프로그래밍이고 그 프로그래밍을 하려면 컴퓨터와 소통하는 언어가 필요한데 그 소통하는 언어가 프로그래밍 언어이다. 그래서 영어는 외국사람과 대화하는 언어라면 프로그래밍 언어는 컴퓨터와 대화하는 언어다.  

 

프로그래밍 언어도 기본적으로 소통하기위한 것이고 그러기 위해서는 내가 어떤 것을 구현하려고 하는지를 명확하게 최대한 자세하게 아는 것이 중요하다고 생각한다. 그러기 위해서는 질문을 잘 해야한다. 질문을 계속해서 내가 궁금한게 사라질때까지 질문을 해야한다. 조금이라도 의심이 들면 현업에게 이야기를 해서 궁금증을 해소해야한다. 그래야 요구했던 프로그램이 잘 만들어질 수 있다.

 

그런데 기본적으로 프로그램을 만드는 개발자들은 논리적인 사고를 위주로 하기 때문에 현업에서의 비즈니스 의도를 이해하기보다 기술적으로 완벽하고 최신기술을 적용하는데 관심이 많기 때문에 기능적으로만 옳고, 비즈니스적으로 옳지 않은 경우도 발생한다. 그래서 보통은 의사소통에 문제가 생기고, 갈등이 생기게 된다. 

 

기본적으로 프로그램을 만드는 이유는 현업, 다시말해 그 프로그램을 필요로하는 사람의 의도를 잘 파악해야 한다. 그 사람의 의도를 마음을 파악했다면 그것을 구현하는 언어는 최신언어가 아니어도 되며, 최신기술이 아니어도 된다. 그런데 종종 프로그래머 혹은 개발자들의 경우에는 자신이 프로그램의 주인인것처럼 생각하며 요구한 사람이 의도한대로 구현하지 않기도 한다. 소프트웨어 개발을 하는 사람들이 생각해야 할 것은 프로그래머 혹은 개발자는 다른 사람의 이야기를 듣고 그것을 구현해주는 사람이기 때문에 자신이 원하는 걸 만드는 사람이 아니다. 다른 사람이 원하는 걸 그 사람이 100% 혹은 그 이상 만족하도록 만들어주는 사람이다. 그래서 프로그래머의 능력중에 잘 듣고 프로그램 구현을 요청한 사람의 의도를 파악하는게 중요하다.

 

그리고 프로그램 개발할 때 알아야 할 것이 하나 있다. 프로그램은 사람이 핵심이라는 것이다. 

프로그램 개발을 요청하는 사람, 필요로 하는 것도 사람이고,

프로그램을 실제로 개발하는 것도 사람이고,

프로그램을 사용하는 것도 사람이다. 

 

그래서 소통이 매우 매우 중요하며, 커뮤니케이션 능력이 프로그래머에게 매우 필요한 자질중에 하나라고 생각한다. 커뮤니케이션을 잘한다는 건 상대방의 이야기를 잘 들어서 의도를 파악하고 내가 이해한대로 정리해서 말을해서 그 지점이 같은 곳을 바라보는 것이라고 생각한다. 그럴려면 지속적으로 궁금한 것들을 물어봐야 하고, 내가 이해한게 맞는지를 끊임없이 확인해야 한다. 그런게 귀찮고 힘들수 있겠지만 그렇게 해서 그 사람과 나의 생각을 맞춰가야 프로그램이 의도한대로 잘 만들어질 수 있다. 

 

그리고 프로그래밍을 구현할 때 사용하는 언어는 영어에 문법이 있는 것처럼 일정한 규칙과 패턴이 존재한다. 그런 기본적인 패턴들은 익숙해질때가 지속적인 연습이 필요한 것 같다. 그렇게 프로그래밍 언어를 사용하는 방법을 익히고 나면 내가 어떤 프로그램을 왜 만들어야하는지를 생각하는 것이다. 보통 프로그래밍 강의를 하는 것들은 보면 무작정 코딩을 시작하는데 그러기전에 먼저 자신이 뭘 만들건지, 그걸 왜 만드는 건지를 명확하게 정리를 해놓을 필요가 있다. 그릭고 그것들을 흐름대로 잘 정리를 해놓은후에 순서도나 시퀀스 다이어그램을 그려놓고 그것대로 프로그래밍의 규칙이나 패턴을 적용해서 만들면 그것이 프로그램이 되는 것이다.

 

내가 알기로 이렇게 프로그래밍을 구현하는 학원이 박OO 전산학원이라는 곳이라고 하는데, 실제로 가보진 못했지만 그곳의 후기들을 들어보면 프로그래밍먼저 시작하지 않는다고 한다. 프로그래밍 구현을 하기전에 A4지에다가 어떤걸 구현할지에 대한 걸 먼저 적어본다고 한다. 

 

그래서 혹시라도 프로그래밍을 해보려고 하거나 조기교육으로 프로그래밍을 해보려고 프로그래밍 언어를 시작하기보다 자신의 생각을 잘 정리하는 방법을 연습하는게 낫지않나 하는 생각이다. 기본적으로 자신의 생각을 잘 정리할 수 없으면 어차피 프로그램도 잘 짤 수가 없다. 어떤 사람의 경우에는 프로그래밍이 어려운 이유가 '뭘 구현할지를 몰라서' 라고 이야기하는 사람도 있다. 보통 교육센터나 학원에서 처음 시작할 때 이런 부분들이 생기는 것 같은데, 프로그래밍 도구를 먼저 켜는 것이 아니라 내가 뭘 구현할지를 먼저 생각하고 그것을 글로 먼저 정리를 해놓고 흐름도도 그려보고 이런저런 경우에 어떻게 처리할지를 미리 다 체크를 해봐야 한다. 프로그래밍 언어의 규칙을 몰라도 그런 내용들은 내가 잘 생각하면 정리할 수 있다. 

 

그렇게 필요한 내용들을 정리해서 컴퓨터가 알아들을 수 있도록 작성하면 프로그램은 돌아가게 된다. 하지만 프로그램을 구현하게되면 항상 내가 예상하지 못한 오류들이 발생하게된다. 그럴경우에도 프로그램은 동작을 해야하기때문에 프로래밍을 구현하는 것이 "내가 예상하지 못한 경우가 발생해도 프로그램을 동작하게 만드는 것"이라고 한다는 이야기를 들었다. 이 말이 맞는 것 같다. 내가 구현하려고 하는 것으로 구현하기전에 프로그램 흐름상에서 문제가 발생해도 오류가 생기지 먼저 생각을 해놓고 그것대로 코딩을 하는 것이 프로그래밍이라고 생각한다. 

 

그래서 나는 프로그래밍 조기교육보다는 오히려 자기 스스로 생각을 해서 자기 생각을 잘 정리하는 습관을 들여놓으면 프로그래밍은 패턴과 문법, 규칙을 배우고 연습하다보면 늘 수 있다는 생각이다. 자신의 생각을 잘 정리하지 못하면 프로그램으로 만들어도 그 프로그램이 오작동을 하기 쉽다. 결국에 그래서 보면 생각하고 글을쓰는게 사람에게 무엇을 하든 필요한 능력이 아닌가 생각이 든다. 그래서 독서가 중요하다는 생각이 더 든다. 

 

그래서 내가 생각하는 프로그래밍은 문제를 해결하는 도구이다. 내가 어떤 문제를 해결하고 싶을 때 그 문제를 잘 정리를 하고 해결할 방법을 프로그래밍 언어를 통해 구현을 해서 해결하는 것, 그것이 프로그래밍인 것 같다. 동작하는 방식으로 볼때는 내가 예상하지 못한 어떤 오류가 발생하더라도 프로그램은 동작하도록 만드는 것 같다. 

 

그리하여 인생에서도 수많은 문제들이 발생하지만 그 문제를 해결하기 위해서는 먼저 문제를 인식하고 잘 정의를 하고서 그것을 해결할 방법을 먼저 정리를 해야한다고 본다. 그런 연습을 하는데 프로그래밍이 도움이 된다고 생각하고, 황농문 박사님이 이야기하신 '슬로 싱킹'처럼 천천히 마음편한 상태에서 어떤 한가지 주제만 생각해서 그 문제를 해결해 내려면 프로그래밍같이 결과를 바로 확인하고 수정할 수 있는 도구로 연습하는게 도움이 되는게 아닌가 생각해본다. 

 

인공지능이 프로그래밍을 구현해준다고 하더라도, 회사에서 빠르게 생산성을 높여서 구현해야 하는 프로그램이 아니라면, 프로그래밍은 자신 생각하는 바를 미리 잘 정리를 해서 컴퓨터로 구현할 수 있게 코딩을 하는 연습이 사람의 본성, 생각하는 능력과 문제해결력을 키우는데 도움이 된다고 생각한다. 그냥 단순히 어떤 기능을 개발하는게 아니라 해결해야하는 문제를 발견하고 인식해서 그 문제를 해결하는게 프로그래밍이 아닌가하는 생각이다. 

 

그러기위해서 개발자에게 필요한 능력은 일단 '듣기'와 '소통 능력'이라고 생각한다. 자신이 얼마나 기술적으로 뛰어난지는 업무의 난이도에따라 필요할 수도 있겠으나 대부분의 경우에는 '듣기'와 '소통 능력'이 다른 사람들에게 인정받고, 프로그램을 요청한 사람들에게 기대이상의 만족도를 주기위해서 꼭 필요한 능력이라고 개인적으로 생각한다. 

 

내가 생각할 때 프로그래밍은 소통의 도구이자, 문제해결 방법을 연습하는 도구가 아닌가 하는 생각이 들어서 몇자 적어본다. 


얼음돌(ice stone)
블로그 이미지 jangwook 님의 블로그
VISITOR 오늘 / 전체