본문 바로가기
카테고리 없음

좋은 프로그래머와 프로그래밍

by 계발자jessie 2023. 1. 30.
반응형

최근 개발자라는 직종이 굉장히 유망한 직종으로 떠오르고 있습니다. 때문에 내일 배움 카드를 통해 학원에서 수강하거나 여러 인강을 통해 비전공자 출신의 개발자가 많이 생겨나게 되었습니다. 비전공자 전공자 모두 그냥 개발자는 될 수 있습니다. 하지만 좋은 프로그래머가 되기 위해서는 어떻게 해야 할까요?

 

좋은 프로그래머가 되기 전 먼저 알아야 하는 컴퓨터

컴퓨터가 무엇일까? 라는 질문에 우린 보통 이렇게 대답할 것입니다. 전자우편을 읽고 온라인 쇼핑을 하는 데 사용하며 논문을 쓰거나 사진을 정리하기도 하고 게임으로 많은 시간을 보내고 넷플릭스나 유튜브 같은 서비스로 영상을 보는데 필요한 가전제품이라는 것입니다. 하지만 이러한 정의는 컴퓨터와 소비자 가전제품의 개념이 뒤섞이며 생겨난 잘못된 생각에 가깝습니다. 좀 더 정답에 다가서는 대답은 휴대전화나 음악 플레이어와 같은 하이테크 장난감들이 돌아가게 만드는 두뇌라는 것입니다. 전자우편을 보내거나 게임을 하는 등의 일은 컴퓨터 자체가 아닌 컴퓨터에서 실행되는 프로그램에 의해 가능해지는 것입니다. 여기서 컴퓨터 자체는 갓 태어난 아기와 같은 상태입니다. 컴퓨터 스스로가 할 수 있는 일은 그리 많지 않습니다. 인간과 비교해서 생각해 볼 때 우린 인간을 기루는 기본적인 하드웨어에 관해서는 거의 생각해 본 일이 없습니다. 이는 기본적인 하드웨어가 존재하고 그 위에 작동하는 개인의 개성과 상호작용하는 것이 인간이기 때문입니다. 이는 컴퓨터가 프로그램을 실행하는 것과 같습니다. 간단한 예로 우리가 웹 페이지를 볼 때 컴퓨터만 가지고는 아무런 일을 할 수 없습니다. 컴퓨터에서 실행할 수 있도록 누군가가 작성해서 만들어둔 프로그램이 필요하며 이를 웹 페이지에 보여줄 수 있는 컴퓨터가 필요합니다. 또한 인터넷이 작동할 수 있도록 돕는 컴퓨터가 또 존재해야만 우리는 하나의 웹 페이지를 볼 수 있게 됩니다. 

프로그래머가 하는 컴퓨터 프로그래밍이란 무엇일까

프로그래밍 역시 인간에게 비유해볼 수 있습니다. 인간에게는 기본적으로 주어진 하드웨어가 있습니다. 이 하드웨어가 특정 작업을 수행할 수 있으려면 훈련이 필요합니다. 이러한 훈련을 시켜주는 존재가 바로 선생님입니다. 이를 컴퓨터의 상황에 대입해 보면 선생님의 역할을 하는 프로그래머가 컴퓨터라는 하드웨어에 훈련을 시켜주어 일을 할 수 있게 해 준다고 할 수 있습니다. 컴퓨터를 가르치는 방법을 안다는 것은 굉장히 유용한 것입니다. 특히 컴퓨터 스스로가 어떤 일이 맡겨졌을 때 스스로 행할 방법을 모르는 경우나 그러한 프로그램을 아무도 만들어두지 않은 경우에는 훨씬 더 유용합니다. 인터넷 창을 켤 때마다 무심결에 작성하는 www는 world wide web의 약자입니다. 이 또한 원래 존재했던 것이 아니라 수십 년 전 팀 버너스리라는 사람에 의해 만들어졌고 그는 이러한 공로를 통해 기사로 임명되었습니다. 컴퓨터를 가르치는 일이 복잡하게 느껴질 수도 있지만 사람을 가르치는 일보다는 훨씬 쉽습니다. 우리는 컴퓨터가 어떻게 동작하는지도 알고 있으며 무한의 반복에도 지치지 않습니다. 컴퓨터 프로그래밍은 두 단계로 이루어질 수 있습니다. 첫째, 먼저 우주를 이해합니다. 둘째, 3살짜리 아이에게 이해한 내용을 설명하면 됩니다. 이게 무슨 소리인가 싶겠지만 컴퓨터 프로그램을 만들 때 우리가 이해할 수 없는 일은 컴퓨터에게도 시킬 수 없다는 의미입니다. 즉 컴퓨터 프로그래밍이란 우리가 어떠한 문제를 풀기 위해 알아야 하는 내용을 우선 배운 후 이 내용을 3살짜리 어린아이에게 설명하는 과정입니다. 

좋은 프로그래머란 어떤 사람일까

그렇다면 좋은 프로그래머에게 필요한 것은 무엇일까요? 분석 기술 뿐만 아니라 좋은 비판적 사고를 가져야 합니다. 우리에겐 쉬운 문제뿐 아니라 복잡하고 어려운 문제가 주어질 때가 있습니다. 이러한 복잡한 문제를 해결하기 위해서는 프로그램이 올바른 문제를 정말 제대로 해결하고 있는 것인지 판단할 수 있는 능력이 필요합니다. 이는 굉장히 어려운 능력입니다. 경험이 많은 프로그래머들의 경우 다른 사람의 코드를 보며 "간단한 문제에 정답도 아닌 복잡한 해법이다"라는 주석을 다는 경우가 비일비재하다고 합니다. 고전 판타지에서 마법사는 사물의 진짜 이름을 배워가며 그 사물을 지배하는 힘을 얻어갑니다. 세부 사항을 잊어버린 마법사에겐 항상 화가 미치기도 합니다. 좋은 프로그래머는 이처럼 사물의 핵심을 파악하면서도 세부 사항을 잊어버리지 않는 사람입니다. 또한 숙련된 장인의 예술성을 갖추기도 합니다. 전혀 해독할 수 없는 코드를 보게 될 수도 있고 한눈에 알아볼 수 있는 코드도 있습니다. 제대로 작동함은 물론 다른 사람들이 보기에 쉽게 이해할 수 있고 유지보수하기에도 편한 코드를 작성해야 합니다. 또한 무턱대고 코드를 짜는 것이 아니라 컴퓨터의 작동을 잘 이해해야 합니다. 쉬운 문제는 어떠한 프로그래머도 잘 풀어나갈 수 있습니다. 하지만 얕은 기반 지식을 가지고 있게 되면 추후다음부터 만나게 될 복잡한 문제는 풀어낼 수 없게 됩니다. 

반응형

댓글