들어가며
최근에 들어 "백준" 온라인 알고리즘 문제 풀이 사이트를 통해 프로그래밍 문제 해결력을 기르기 위해
꾸준히 문제풀이를 진행하고 있었다.
백준 문제를 풀어보며 생긴 의문점이 있었고,
이를 해소시켜준 "포스팅" 덕에 이번 포스팅으로 생긴 의문점을 정의하고, 어떻게 해소가 되었는지 기록 & 정리하기 위한 포스팅이다.
해당 포스팅은 다음 포스팅에 영감을 얻고,
개인적으로 느낀점과 깨달음을 기록한 포스팅입니다.
백준 문제를 해결하는 이유
대부분의 컴퓨터 공학을 수료한 학생들과 "개발자"가 되기 위해 노력하는 사람들은
"백준" 사이트에서 알고리즘 문제를 매일 매일 꾸준히 푼다.
문제를 푸는 이유는 "개발자"가 되기 위해서다.
# 흔히 착각하는 "개발자" 의미
그러면, "개발자"란 무엇일까?
나를 비롯한 대부분의 학생들은 "백준" 문제를 잘 푸는 사람들을 실력있는 개발자라고 정의한다.
그렇다. 백준을 잘 풀면, 실력있는 개발자라고 불릴 수 있다.
하지만, 실력만 있는 개발자는 "현업"의 프로젝트에 참가하여도 제대로 따라가지 못할 가능성이 크다라는 게 현실이다.
현업의 프로젝트는 대규모로 작업되는 것이 많고, 따라서 협업하여 작업을 진행하는 것이 일반적이다.
그래서, 실력있는 개발 수준은 현업의 프로젝트를 수월하게 해주는 수단으로써 작용되지,
프로젝트의 수준을 초월적으로 극대화 시켜주진 않는다.
# "개발자" 의미
그럼, 사회에서 요구하는 & 혁신적인 "개발자"란 무엇일까?
컴퓨터적 사고로 문제를 구조화하고, 논리적이며 순차적으로 해결할 수 있도록 커다란 문제를 작게 쪼개어 분석하고
해체하고, 지금의 문제가 과거에 해결된 문제들과 어떻게 연결되거나 연관이 되어있는지 패턴을 이해하고,
문제 해결과 전혀 무관한 절차나 과정은 무시하거나 제외하고, 문제를 빠르고 효과적으로 해결할 수 있는 방법이나
공식을 개발하거나 정의하는 알고리즘을 개발하는 일련의 체계화되고 구조화되며 순차적이며 몇 개의 대안 중에서 하나를 선택하는 시나리오적 사고방식을 알아야한다.
정리하면, "개발자"가 되기 위해선,
문제를 수식화, 구조화, 패턴화, 알고리즘 개발, 시나리오 개발, 최적화 능력, 창의력 관점으로 분석할 수 있어야 되며
이러한 것들을 토대로 컴퓨터가 이해하는 프로그래밍으로 프로세스를 설계하는 능력을 길러야 한다는 점이다.
그러고, 협업 능력을 토대로 자신이 문제에 대해서 관찰하고 해결한 것들을 함께하는 팀원들에게
표현할 수 있는 역량을 겸비해야 한다.
# "개발자"에게 알고리즘 문제 의미
사회 & 현업에서 일상의 "문제"를 정의하고
컴퓨터적 사고로 문제를 구조화하고, 수식화, 패턴화, 알고리즘 개발, 시나리오 개발, 최적화 능력, 창의력 관점으로
문제를 해결할 여러 솔루션을 제시하는 역량을 기르기 위해서 필요하다.
정리해서, "알고리즘 문제"를 푸는 행위에 대한 '필요성'을 제대로 정의하여
실제로 응용할 수 있는 사람이 되기 위해 노력해야 한다는 점이다.
현업 프로세스
현업에서 진행되는 프로세스는 다음과 같다.
사회가 원하고 있는 사용자들의 필요성 (needs) 을 파악하고,
그에 따른 솔루션을 계획하고,
실행될 수 있게 프로그래밍 혹은 행위 (상업)을 시행한다.
따라서, 실행된 솔루션을 토대로 사회에 원하는 사용자들의 needs를 부합시켜
사람들의 만족도를 높힌다.
정리하면, 컴퓨팅 사고력 (프로그래밍 역량)은
현업에서 진행되는 프로세스 과정 중 일부 부분으로 작용된다는 사실을 살펴볼 수 있다.
다시 말해, 프로그래밍 역량은 단체에서 특정한 목표와 목적을 이루는 하나의 수단일 뿐이다라는 사실을 인지할 필요가 있다.
컴퓨팅 사고력 발전의 방향성
컴퓨팅 사고력을 기르기 위한 노력으론 어떤 것이 필요할까?
하나씩 알아보자.
# 문제 정의 & 분석 & 구조 & 수식 & 해결
우선, 도출된 문제를 올바르게 정의 해야한다.
그러고, 정의된 문제를 분석하고 구조화 & 수식화를 진행한다.
마지막으로 프로그래밍 언어를 통해, 구체화된 문제를 코드로 구현한다.
# 여러 솔루션 생각하기 (시나리오 개발)
하나의 문제상황에 대해 여러 솔루션을 생각해보는 것이다.
여러 솔루션을 계획함으로, 최적의 솔루션을 찾도록 도움을 줄 수 있다.
# 최적의 솔루션 생각하기
문제를 해결할 단체 (팀)에서 추구하는 목표와 목적의 가치를 높혀주는 솔루션을 선택하는 것이다.
흔히, 사용자들의 만족도를 높히는 방향으로 솔루션을 채택한다.
나아가, 사용자의 만족도뿐만 아니라, 비즈니스 모델을 토대로 실행 후 가치가 가장 높은 것을
채택하여 진행해보는 것이다.
알고리즘 문제의 한계 & 극복 방법
일반적으로 알고리즘 문제를 해결하며 이러한 프로세스(컴퓨팅 사고력을 길러보는 경험)까지 경험해보기는 한계가 있다.
알고리즘 문제는 사이트에서 제공하는 "문제"에 대해서만 해결하기에
단순 문제상황에서만 고립된 채 사고할 수 밖에 없다.
# 극복 방법
따라서, 알고리즘 문제를 토대로 역량을 기르기 위해 하나의 "문제"를 접하더라도
최대한 여러 솔루션들을 계획해보고, 최적의 솔루션은 무엇인지 판가름해보는 연습을 해보자.
단순 문제상황에서만 고립된 채로 문제 해결하기에, 여러 솔루션을 제시하는 것에 필요성을 못느낄 수 있다.
하지만, 위에서 제시한 현업 프로세스에 따르면 하나의 문제에 "여러 솔루션"을 제시하고
시나리오적 개발로써 단체 & 기업 목표의 최적 솔루션을 찾아서 적용한다는 사실에 근거해 이렇게 학습하는 방법은
반드시 시너지를 발휘할 것임이 틀림없다.
정리하면, 많은 알고리즘 문제를 해결하려고 많은 시간을 들이지 않고,
하나의 문제라도 여러 솔루션을 계획하며 접한 알고리즘 문제를 최적의 솔루션으로
해결해보는 연습을 하자.
마치며
이전부터 "알고리즘" 문제 해결에 대한 필요성을 느끼지 못했던 나로부터
이 글을 작성한 후, 내겐 알고리즘 문제 해결의 필요성을 충족시켜주게 되었다.
"구름톤"을 지원하기 전엔, 알고리즘에 대한 전문역량 학습의 필요성을 느끼지 못했지만,
"구름톤"에 불합격해보는 경험을 토대로, 전문역량 학습의 필요성을 깨닫고,
데이터 분석 & 인공지능 & 알고리즘 역량에 대한 학습을 정의하기 시작했다.
그리고, 오늘 이 글을 작성하는 순간으로 전문 역량인 알고리즘 문제 해결학습에 대한 필요성을
이 글을 기반으로 정의할 수 있었다. 이 글을 가이드라인으로 삶고
알고리즘 문제해결 경험을 많이 해보고 "컴퓨팅 사고력"을 발전시킬 수 있도록 꾸준히 노력을 가해볼 것이다.
"내가 정의한 컴퓨팅 사고력 발전을 위해 꾸준히 노력하며,
나만의 컴퓨팅 사고력 발전을 위한 학습 방식을 정의하는 순간까지 열심히 노력할 것이다."
'💭 경험&생각' 카테고리의 다른 글
[경험] 미국 주식투자를 시작하다 (2) | 2023.08.11 |
---|---|
[생각] 입대 전 정리 (0) | 2023.04.24 |
[생각] 데이터 분석의 필요성 & 학습 방향성 (0) | 2023.03.23 |
[경험] 구름톤 5기 불합격.. (2) | 2023.03.20 |
[경험] AWSKRUG 스타트업 소모임 "덕업 일치를 넘어서" (0) | 2023.03.10 |