컴퓨팅 사고와 개발 실력 늘리는 공부

meek·2023년 3월 30일
0

TIL

목록 보기
15/24
post-thumbnail

들어가며

아티클 스터디를 진행하게 되면서 지난 팀프로젝트에서 코치님께 추천받았던 분인 teo님의 글이 벨로그에 올라와서 읽게 되었다(코쓱)

읽으면서 스스로의 객관화에 도움이 되고 방향을 잡기에 좋은 글 같아서 선정하게 되었다!

출처는 이곳 !
👉 https://velog.io/@teo/computational-thinking

개발은 학문이 아니라 운동과도 같은 것이다.

이 글에서는 축구에 비유해 표현을 했는데 축구 교재를 열심히 보고, 축구 경기를 열심히 보지만 실제로 공을 차보지 않으면 실력이 늘지 않는다. 마찬가지로 개발을 처음 할 때에도 실제로 몇 번이라도 하는 것이 훨씬 더 실력 향상에 좋다.

엘리스 트랙을 수강하면서도 가장 많이 공부하고 깊게 공부하는 기간은 프로젝트 기간인걸 생각해보면 99% 수긍할 수 밖에 없는 말이였다.

하지만, 실전만 하는 것은 좋지 않다. 시간을 효율적으로 사용할 수 없으며 안 좋은 습관이나 형태가 만들어질 수 있기 때문에 공부와 훈련이 적절히 병행하는 것이 굉장히 중요하다.

이 이후에는 새롭고 다양한 경험과 학습을 하는 것과 같은 많은 경험과 시야가 굉장히 중요해진다. (+ 협업능력)

도구의 숙련도를 올리는 것과 본질을 이해하는 것은 별개의 것이다.

React나 JavaScript와 같은 언어들을 학습하고 잘하는 것은 도구의 숙련도를 높이는 것이지만 개발을 잘한다고 하는 것은 그와는 다른 본질적인 부분이 있다고 생각한다. 그렇기 때문에 개발의 본질에 대해서도 이해를 하고 잘 하는 것이 중요하다.

많이 알고 있는 것과 잘 하는 것은 또 다른 이야기이다.

1. 컴퓨터적으로 사고하는 개발자되기

컴퓨터적으로 사고한다는 것 은, 문제를 해결하기 위해 필요한 답을 컴퓨터가 효과적으로 수행할 수 있도록 정의하고 그에 대한 답을 기술하는 것이다.

문제를 작은 조각들로 분해 👉 필요한 자료를 표현 👉 일반화하여 해결책을 모델링 👉 알고리즘을 도출 순으로 컴퓨터적인 사고 능력을 향상한다면 당연히 프로그래밍 능력이 높아진다.

따라서 사용자의 요구사항을 데이터의 관점에서 다시 생각하고 작성하는 것이 컴퓨터적인 사고의 출발점이자 기초가 된다.

불을 켜고 끄기 vs isLight = true;

우리는 단순히 불을 켠다, 끈다라고 생각하지만 컴퓨터에게 이해를 시키기 위해서는 "불이 켜져있다"와 "불을 꺼져 있다" 두 가지 상태를 나타내는 논리값인 boolean 값을 사용해 시도해볼 수 있다.

let isLight = false; //불이 꺼져 있는 상태

const turnOnLight = () => {
	isLight = true; // false를 true로 바꾸면서 "불을 켜다"라는 요구사항을 해결
};

const turnOffLight = () {
	isLight = false; // 불을 끌 때는 turnOffLight() 함수를 실행하여 변수를 false로 변경
};

컴퓨터적 사고가 중요한 이유

프로그램을 작성하기 전에 문제를 데이터의 관점에서 인식하고 처리하는 것이 중요하나는 것을 먼저 인지해야 한다.

이러한 관점과 세계를 인지하고 의식적으로 생각하려고 노력한다면 직관력도 키울 수 있고 본질적인 개발 능력을 키우는 데 큰 도움이 된다.

데이터 구조를 활용하기 = 알고리즘 그리고 함수

데이터 구조를 활용하여 원하는 결과를 도출하는 과정을 알고리즘이라고 한다.

const completedTodos = todoList.filter(todo => todo.completed === true);

위에서 사용한 filter 함수는 배열을 입력받아 주어진 조건에 해당하는 요소만들 걸러내어 새로운 배열을 반환하는 알고리즘이다. filter는 실제로는 아래와 같은 과정(=알고리즘)을 가지고 있다.

function filter(array, predicate) {
  const result = [];
  for(let i = 0; i < array.length; i++) {
    if(predicate(array[i])) {
      result.push(array[i]);
    }
  }
  return result;
}

이렇게 한 번 만들어진 filter() 함수는 이제 매번 동일한 과정을 반복적으로 구현할 필요 없이, 다른 곳에서 필요할 때 재사용할 수 있다.

이를 통해 필요한 데이터를 추출하는 과정을 추상화할 수 있게 되었다.

컴퓨터 과학에서 추상화란 무엇일까요?

  • 프로그래밍에서 필요한 부분만 노출시키는 과정. 세부적인 부분을 추상화하여 필요한 부분만 사용자에게 노출시키는 것이 추상화의 핵심원칙

이렇게 요구사항을 더 나은 데이터의 구조와 추상화된 알고리즘을 통해서 생각하는 것 역시 컴퓨터적으로 사고하는 중요한 개념이다.

변수, 타입, 조건, 반복, 함수 - 프로그래밍의 핵심 요소

변수는 값을 저장하는 공간이며, 타입은 변수가 저장할 수 있는 값의 종류를 결정한다. 조건문은 주어진 조건에 따라 프로그램이 다르게 동작하도록 하는 것이며, 반복문은 반복적으로 실행되는 코드를 간단하게 작성할 수 있도록 해준다. 함수는 코드의 재사용성을 높여주는 중요한 개념으로, 입력값을 받아 출력값을 반환하는 기능을 한다.

결국, 컴퓨터적 사고란 사용자의 요구사항을 데이터의 관점에서 바라보고, 변수, 타입, 조건, 반복, 함수 등을 이용하여 데이터를 컴퓨터가 이해할 수 있는 형태로 표현하는 과정이라는 것을 이해하여, 결국 인간의 관점에서 기술된 내용들을 컴퓨터가 이해할 수 있는 형태로 바꾸어 생각하는 것이 컴퓨터적 사고력을 키우는 중요한 과정이라고 할 수 있다.

컴퓨터적으로 사고하기, 어떻게 하면 잘 할 수 있을까?

컴퓨터적 사고는 요구사항을 데이터의 관점으로 이해하고 적잘한 구조와 알고리즘을 선택하고 연결하여, 변수, 타입, 조건, 반복, 함수로 생각하여 표현하는 것을 의미한다. 하지만, 위와 같은 개념을 이해한채로 의식적으로 사고와 훈련을 하는 것이 중요하다!

첫째, 요구사항을 받았을 때 그 요구사항을 데이터 관점에서 나눠서 적어보는 훈련해보기
둘째, 데이터의 구조를 먼저 기술하고 생각하는 연습하기
셋째, 적절한 알고리즘을 선택하는 연습을 해보기
넷째, 기존 데이터의 구조와 알고리즘을 연결하여 새로운 데이터를 도출하는 연습을 해보기

이 방법을 보고 가장 먼저 생각난 방법이 손코딩이였다. 요즘 알고리즘 문제를 꾸준히 풀려고 노력하고 있는데, 막힐 때마다 손코딩으로 하나씩 조건을 알고리즘처럼 채워나가면 해결이 될 때가 종종 있어 은근히 요긴한 방법이였기 때문이였다. 내가 틀린 방법으로 공부를 지속하고 있던게 아니였구나하고 생각이 드는 대목이였다.

코딩 테스트와 실무의 차이

그렇다고 컴퓨터적인 사고를 훈련하기 위해서 코딩 테스트를 중심으로 연습하는 것은 추천하지 않는다. 코딩 테스트는 평가를 위한 도구이기 때문이다. 실무에서는 문제를 해결하기 위한 다양한 요소들을 고려해야 한다. 언어의 특성과 주요한 기능을 연결하고 디자인을 고려하고 일정과 협업, 보안, 유지보수 등 다양한 것을들 고려해야 한다.

그렇기 때문에 결국은 실전처럼 공부하는 것을 가장 추천한다.


2. 개발, 학습 말고 훈련하기

만들고 싶은 목표부터 정하자!

개발은 무언가 유용하거나 재미있거나 하는 가치를 기술을 통해서 만들어내는 것 이기에 만들지 않으면 아무런 의미가 없다. 그래서 개발은 결과를 만들고자 하는 것에 집중을 해야한다.

일단 돌아가는 남의 코드를 가져오자!

바퀴를 다시 발명하지마라! - 추상화를 기억하자.
프로그래밍에서 정말 유명한 격언이다. 이미 만들어진 것을 다시 만들려고 하지 말고 재사용해서 새로운 것, 더 나은 것을 만들어 내는 문화야말고 개발문화의 꽃인 공유문화이다.

남이 만들어 낸 것을 하나하나 다 이해해서 내가 다시 만들려고 하지 말고 필요한 것만 이해하고 사용해서 더 나은 것을 만들고 기여하자.

하지만 정연짱은 아직 공유문화가 완벽하게 적응되지 않았다능-☆ 경쟁사회의 끝인 한국에 살다보니 아직까지는 공유문화에 스며들기가 가끔 어렵다고 느낀다.

끊임없이 반복하고 완성하라.(중꺽마!)

이 과정에서도 역시 중요한건 의식적으로 컴퓨터적으로 사고하고자 하는 생각들이다.

요약

컴퓨터의 관점으로 바라본다는 것은 곧 데이터의 관점으로 세상을 인식하는 것이다.

개발은 의식적으로 훈련을 하는 것이 중요하다. 그렇기에 요구사항을 데이터의 관점으로 인식하면서 이름을 붙이고 타입을 생각하고 구조를 먼저 생각하는 훈련을 해보는 것을 추천한다.

이러한 생각을 바탕으로 하되 언제나 실습을 통해 개발 훈련을 하기를 바란다.

늘 새로운 것을 목표로 남의 코드에서 필요한 것들만 수정하고 결합해서 내것을 만들어 내는 방식을 바탕으로 개발적인 성장을 해 나가자!

profile
hello, world!

0개의 댓글