ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PS 튜토리얼 2부 2편
    ProblemSolving Tutorial/공통 2020. 7. 1. 04:08

    하! 정말 오랜만에 포스팅을 하게 됐습니다 ㅠ

    그동안 준비해야하는 것들이 많아서 시간이

    안 났었어요! 하지만 시간이 없다는 건 핑계! 라는건

    진! 리! 아니겠습니까?? :) 

    아무튼! 오늘의 포스팅을 시작해보겠습니다!

     

    이번 주제는 2부 프로그래밍 언어! 2편인데요.

    1편에서는 주로 어떤 언어들을 사용하며

    각 언어들의 특징들은 간단히 정리해보았어요.

     

    이번 2편에서는 이제 우리가 프로그래밍 언어를 공부함에 있어서

    무엇을 공부해야 하는지에 앞서 왜! Problem Solving(이하 PS)를

    공부해야 하는지를 말씀드리도록! 하겠습니다.

     

    만약, 프로그래밍 언어를 처음 공부하시거나

    프로그램을 처음 공부하시는 분들은 아마 많이들

    혼란스러워하실 거예요. 도대체 뭘 공부해야 하는 거냐?

    C언어? 포인터? 뭔데?? for문? if문? 함수? 클래스? 객체?

    JAVA? Python? 도대체 뭐냐고?? 뭐가 이렇게 중구난방인 거냐?!

     

    아마도 그래서 대부분 많이들 검색을 하고 책도 찾아보고

    코딩도 따라 해 보고~

    이 책 저 책 가리지 않고 읽어보고

    학원도 다녀보실 거예요~

     

    그런데도 뭔가 하고 있는 것 같지도 않고

    이해도 안 가고 배웠는데도 모르겠고~

    사실 뭐가 뭔지 이해가 안 가는 건 어쩌면 당연한 것일 수도 있지만

    (뭐든 초심자가 무언가를 이해한다는 건 어렵잖아요^^)

    그래도 뭔가 하고 있고 있다는 느낌은 있어야 할 텐데!

    코딩을 해놓아도 책을 봐도~~ 공허한 느낌!

     

    저는 이걸 해결해주는 게 바로 이 Problem Sovling이라고 봐요.

     

    제가 생각하는 Problem Solving은 헬스에서 3대 운동이라고 생각해요.

    요즘은 워낙에 헬스가 대중 화대서 누구나 아실 거라고 생각해요 ㅎ

    벤치프레스/데드리프트/스쾃! 이 운동 누구나 중요한 거 아실 거고

    누구나 헬스장에 가면 이걸 하려고 하죠?? 그러실 거라 믿겠습니다 ㅎ

     

    아무튼! 이런 운동은 대근육을 자극하는 복합관절운동으로 한 동작으로

    여러 가지의 근육을 자극하고 여러 근육들의 연계를 조율할 수 있게 해 주는데요.

     

    처음 3대 운동을 할 때 근육 하나하나를 느끼려고 하지 않아요.

    그냥 자세만 따라 하는 거죠. 하면서 자세도 잡아보고! 무게를 조금씩 늘리며

    근육을 조율하는 방법을 익혀나가는 거죠. 그리고 근육이 성장하고 나서는

    더 세부적인 운동들을 늘려나가는 거죠.

     

    PS도 마찬가지예요. 그냥 문제를 풀기만 하면 거기서 미세하게 느낄 수 있는 것들이 있어요.

    이런 반복되는 작은 느낌들이 코딩! 프로그래밍에서의 대근육이에요.

    뭔가 자잘한데 반복되고 실력이 조금씩 쌓이는 느낌들이 있는데 그게 바로!

    프로그래밍의 기본이고 실력이 되는 것들이에요.

    뭔가 중구난방인듯하고 정말 별것 아닌 것들 같아 보이지만 노노!

    그런데 이런 작은 문제의 단위들이 사실 일반적으로 코딩만으로는 느낄 수 없는 부분들이 많아요.

    단순히 코드를 따라 해 보거나 누군가가 작성한 코드를 집접 타이핑해보기

    혹은 읽고 이해해보기. 이런 작업들로써는 느낄 수 없는 기본기들을

    PS에서는 느낄 수 있는 부분이 정말 많아요.

     

    엄청나게 복잡한 코드를 읽고 이해하거나

    멋진 기능을 구현한 코드를 읽고 이해해보거나

    멋진 어플을 구현해놓은 오픈소스 코드를 보고

    따라 만들어보기!

    뭔가 되게 멋져 보이지만! 실속은 전혀 없다고

    저는 적어도 생각해요.

    왜냐하면 큰 근육들이 아닌 작은 근육들이니!

    해봐야! 근육의 성장은 미비하며 작은 근육들

    끼리의 협응력도 떨어지는 거예요!

     

    물론 위의 학습은 돈을 벌려는 목적에서는

    굉장히 알맞은 방법이라고 할 수 있겠지만

    기본적인 자신의 코딩의 능력 향상에는 도움이

    되지 않는다고 자신 있게 말할 수 있을 것 같아요.

     

    코딩능력은 크게 두 가지로 볼 수 있는데요.

    하나는 코드의 구조를 잡는 능력인데요. 이런 건 함수형 프로그래밍

    객체지향 등등을 공부하고 시스템 설계의 많은 패턴들을 하나씩

    배워나가야지만이 제대로 능력이 배양이 되어요. 즉, 이런 능력은

    쉽게 증가하지 않는다는 거예요. 코딩을 많이 해본 사람들만이 할 수 있는 거죠!

    그래서 처음부터 하기는 힘들것들이에요.

    예를 들자면 우사인 볼트처럼 뛰고 싶다고 당장 우사인 볼트에게 가서

    배운다고 우사인볼트처럼 될 수 있을까요?

    메시처럼 축구하고 싶다고 메시에게 배운다고 될까요?

    그랬으면 세상에 돈으로 안 되는 게 없겠죠!ㅎ

    시작하는 사람들은 기본적으로 뛰어야 하는 거겠죠?

     

    코딩능력의 두 번째! 는 데이터 변환/탐색이에요.

    문자 형식을 숫자 형식으로 숫자를 문자로 문자를 바이너리로

    바이너리를 문자로 바이너리를 숫자로!

    자료구조의 변환, 정렬의 변환, 기준의 변환 등등

    어떻게 보면 단순히 순서를 바꾸거나 형태를 바꾸는 것일 뿐이지만

    이게 진짜 프로그래밍의 기본기이자 코드의 대부분을 차지하는 부분이죠!

    보통은 코딩이 해킹이 엄청 멋 지작 업이고 엄청난 것으로

    생각을 하지는데 사실 이런 시 신한 작업인 거죠.

    그럼 왜 도대체 멋진 거고 대단한 게 될 수 있는 걸까요??

    이유는 간단해요. 효율을 높여주니까요.

    멋진 코드는 코드를 읽는 사람의 가독성을 높여주고

    더 빠르게 처리할 수 있도록 해 주고

    더 짧은 코드로도 표현이 가능하도록 해 주고

    더 적은 공간을 사용해도 되도록 만들어 주니기 때문에

    멋지고 대단해지는 거예요.

     

    위의 단락에서 핵심이 나왔죠??

    코딩의 기본은 단순한 변환이에요. 이 변환 시도한다면

    그 모든 코딩은 코딩의 기본을 지향한다고 볼 수 있겠죠.

    그리고 그 변환을 효율적으로 시도하는 것

    더 적은 공간을 사용해보려는 시도

    더 짧은 코드로 시도해보려는 시도

    이것들이 바로! 코딩의 기본을 탄탄히 쌓아주는 것들이에요.

     

    이러한 모든 시도들을 자연스럽게 해 볼 수 있는 게

    바로 PS라고 할 수 있어요. 어려운 문제가 아니라도 상관없어요.

    쉬운 문제라도 괜찮아요. 쉬운문제라도 우리는 간단한 변형들을 해나갈 수 있어요.

    포인터가 필요하냐고요? 클래스가 뭔지 알아야 하냐고요?

    아니요. 어떤 언어로 하던. 우리는 변수/상수/if/for/while/각 언어의 print함수만 안다면

    어떤 언어로도 우리는 PS를 도전할 수 있어요.

    이것들로 작은 변형들을 만드는 방법들이 시도하고

    또 그것들의 효율을 올리는 작업을 시도하고 능률을 올려나가는

    트레이닝을 해나갈 수 있어요.

    마치 헬스에서 아무것도 모르고 벤치프레스봉을 들고 해 보면서

    자세만 따라 해 보고 적응되면 무게를 조금씩 늘려나가는 것처럼요.

    마치 축구를 전혀 모르지만 그냥 그라운드위로 올라가 이리저리 뛰어다니면서

    같이 즐기는 것처럼요.

     

    이제 어느 정도 이 PS가 컴퓨터 사이언스에서 어떤 위치인지 감을 잡으셨나요?

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

Designed by Tistory.