본문 바로가기

Contents/Lectures

컴퓨팅 사고, 프로그래머-개발자처럼 사고하기에 대한 고찰

개발자를 준비하면서 문제 해결 능력, 컴퓨팅 사고라는 말을 자주 듣긴 했지만, 조금 뜬구름 잡는 이야기 같았습니다.
많은 사람들이 이를 강조하지만, 실제로 이 개념들이 어떻게 적용되는지 잘 와닿지 않을 때가 많았습니다.
하지만 조금씩 컴퓨팅 사고란 무엇인지 학습하고 경험을 쌓으면서,
문제 해결 능력과 컴퓨팅 사고가 단순히 이론이 아니라 실무에 깊이 관련된 중요한 스킬이라는 것을 깨닫게 되었습니다.

 

컴퓨팅 사고는 단순히 코드를 작성하는 것을 넘어서 문제를 명확히 정의하고, 이를 해결하기 위한 최적의 방법을 찾는 과정입니다. 
개발자로서 다양한 문제를 만날 때, 이를 단계적으로 분해하고 최적화된 솔루션을 찾는 능력이 필수적입니다. 
이러한 사고 과정은 우리가 일상에서 마주치는 작은 문제들부터 복잡한 시스템 설계까지 폭넓게 적용될 수 있습니다. 
문제 해결 능력 역시 단순한 기술 이상의 것이며, 코딩 과정에서 자연스럽게 습득하게 되는 중요한 자산입니다.

 

이번 포스트에서는 이러한 능력을 기르기 위해 어떻게 해야하는지 구체적인 접근 방식을 위 영상들을 바탕으로 정리해 보았습니다.


 




 


기초 단계

  1. 문제 해결 중심 사고
    • 문제 이해 및 해결 집중: 코드는 문제 해결을 위한 도구이므로, 문제를 깊이 이해하고 해결책에 집중합니다.
    • 입력과 출력 명확화: 문제의 입력과 원하는 출력을 명확히 정의하여 문제의 범위를 설정합니다.
  2. 문제 분해 및 단계적 접근
    • 문제 분해: 큰 문제를 더 작은 하위 문제로 나누어 해결하기 쉽게 만듭니다.
    • 단계별 해결: 작은 부분부터 하나씩 해결하여 전체 문제를 완성합니다.
  3. 일반화된 솔루션 설계
    • 보편적 해결책 모색: 특정 상황이 아닌, 다양한 경우에 적용 가능한 일반적인 솔루션을 찾습니다.
    • 예외적인 상황 고려: 예상치 못한 입력이나 상황도 처리할 수 있도록 설계합니다.
  4. 코딩 전 철저한 계획
    • 계획 수립: 코딩 전에 문제를 분석하고 솔루션을 설계합니다.
    • 아이디어 시각화: 다이어그램, 흐름도, 의사 코드 등을 사용해 솔루션을 구체화합니다.
    • 도구와 기술 선택: 필요한 프로그래밍 언어나 라이브러리, 알고리즘을 결정합니다.
  5. 실습과 경험 축적
    • 프로젝트 진행: 작은 프로젝트부터 시작해 점차 복잡한 프로젝트로 확장합니다.
    • 코딩 연습: 다양한 문제를 풀어보고 코드를 직접 작성해 봅니다.
    • 디버깅 능력 향상: 오류와 버그를 수정하며 문제 해결 능력을 키웁니다.
  6. 피드백 수용 및 지속적인 개선
    • 코드 리뷰 참여: 다른 사람의 피드백을 받아 코드를 개선합니다.
    • 커뮤니티 활동: 개발자 커뮤니티에서 지식과 경험을 공유하며 성장합니다.

심화 단계

  1. 알고리즘적 사고와 효율성 고려
    • 명확한 절차 수립: 문제 해결을 위한 단계별 절차를 작성합니다.
    • 효율성 추구: 시간과 공간 복잡도를 고려해 효율적인 알고리즘을 선택합니다.
  2. 추상화와 패턴 인식 활용
    • 추상화: 불필요한 세부사항을 제거하고 핵심 개념에 집중합니다.
    • 패턴 인식: 유사한 문제에서 패턴을 찾아내어 이를 적용합니다.
  3. 컴퓨팅 사고력 강화
    • 핵심 개념 학습: 알고리즘, 데이터 구조 등 컴퓨터 과학의 핵심 개념을 이해합니다.
    • 다양한 분야에 적용: 일상 생활의 문제 해결에도 컴퓨팅 사고력을 활용합니다.
  4. 지속적인 학습과 성장
    • 새로운 기술 습득: 프로그래밍 언어, 프레임워크, 도구 등을 지속적으로 학습합니다.
    • 업계 동향 파악: 최신 기술과 개발 방법론을 따라가며 지식을 업데이트합니다.
  5. 협업 및 의사소통 능력 개발
    • 팀워크 향상: 다른 개발자와 협업하여 협력적인 문제 해결 능력을 기릅니다.
    • 명확한 의사소통: 자신의 아이디어나 문제를 명확하게 표현하고 다른 사람의 의견을 경청합니다.
  6. 효율적인 코딩 습관 형성
    • 코드 가독성 유지: 명확하고 일관된 코딩 스타일을 유지하여 코드의 이해와 유지보수를 용이하게 합니다.
    • 재사용 가능한 코드 작성: 모듈화와 함수화를 통해 코드의 재사용성을 높입니다.
    • 기능 구현 후 최적화: 초기에는 기능 구현에 집중하고 이후에 필요에 따라 최적화합니다.

 

위 내용을 정리하면서 하나의 사례가 떠올랐습니다. 
제퍼슨 기념관의 대리석 부식 문제는 복잡한 문제를 해결하는 데 있어서 컴퓨팅 사고가 어떻게 적용될 수 있는지 잘 보여줍니다. 
기념관의 대리석이 부식되는 원인을 분석하기 위해 초기에는 여러 가설을 세우고 이를 테스트하며 문제를 분석했습니다. 
이 과정에서 문제의 핵심 원인이 밝혀졌는데, 바로 조명으로 인해 벌레들이 끌려오고, 
이 벌레들이 기념관을 오염시켜 대리석을 부식시키고 있었던 것입니다.
해결책으로 조명 시간을 조정하여 벌레들을 줄였고, 그 결과 대리석 부식을 막을 수 있었습니다.
이 과정은 문제를 단계적으로 분석하고 핵심 원인을 추상화하며, 일반적인 해결책을 찾는 컴퓨팅 사고와 매우 유사합니다.
문제 해결을 위한 끈기와 여러 시도는 결국 효과적인 결과를 가져왔습니다.
이 사례를 통해 우리는 컴퓨팅 사고의 본질, 즉 문제를 추상화하고, 논리적 단계로 해결 방안을 마련하는 것이 얼마나 중요한지 다시 한 번 깨달을 수 있습니다.

 

그리고 지속적인 연습과 경험은 개발자로 성장하는 데 있어 잊어서는 안될 가장 중요한 요소입니다.
반복적인 문제 해결과 솔루션 설계 과정을 통해 컴퓨팅 사고력을 기르며, 점차 더 나은 개발자가 될 수 있습니다.
기초부터 심화 단계까지 실천해 나가면서 문제 해결 능력과 효율적인 사고 방식을 갖춘 개발자로 성장할 수 있을 것입니다.