대부분의 문제는 복잡하며 명확하지 않을 수도 있다. 따라서 문제(요구사랑)를 명확히 이해하는 것이 우선 되어야 하며 복잡함을 단순하게 분해
decomposition
하고 자료를 정리하고 구분modeling
해야 하며 순서에 맞게 행위를 배열해야 한다.
(...중략) 컴퓨터와 사람은 사고, 인지의 방식이 다르다. 따라서 컴퓨터의 관점에서 문제를 사고computational thinking
해야 한다. 여기에는 논리적, 수학적 사고가 필요하며, 해결 과제를 작은 단위로 분해하고 패턴화해서 추출하며, 프로그래밍 내에서 사용될 모든 개념은 평가 가능하도록 정의해야 한다.
코플릿을 풀면서 매번 느끼는 일이지만 문제를 쪼개는 것은 중요하다.
단순한 문제라도 최대한 쪼갤 수 있을 때 까지 쪼개면 문제 풀이가 수월하다는 것을 안다. 하지만 문제점은 쪼갤 대로 쪼갰다고 생각하고 문제 풀이에 들어가고 레퍼런스를 확인하면 더 쪼갤 수 있다는 것. 그리고 방향성이 맞지 않을 때도 있었다. 그럴 땐 내 능력의 한계를 느낄 수 밖에 없다.
아마 발전하려면 문제를 더 쪼개고 쪼개는 연습을 해야할 것 같다.
(...생략) 프로그래밍은 프로그래밍 언어를 사용해 컴퓨터에게 실행을 요구하는 일종의 커뮤니케이션이다. 프로그래밍 언어는 구문
syntax
과 의미semantics
의 조합으로 표현된다.
프로그래밍 학습은 일반적으로 프로그래밍 언어의 문법을 배우는 것부터 시작한다. (...중략) 문법을 잘 안다고 해서 언어를 잘한다고 말할 수는 없다. 언어를 잘하려면 화자의 말이나 문장을 정확히 이해한 후, 문맥에 따른 적절한 어휘 선택, 그리고 순차적으로 결론을 향해 나아가는 문장 구성이 필요하다. 즉, 문법에 맞는 문장을 구성하는 것은 물론 의미를 가지고 있어야 언어의 역할을 충실히 수행할 수 있다.(...중략) 결국 문제 해결 능력을 통해 만들어낸 해결 방안은 프로그래밍 언어의 문법을 사용해 표현한다. 즉, 작성된 코드는 해결 방안의 구체적 구현물이다. 그리고 이것은 프로그래밍 언어의 문법에 부합하는 것은 물론이고 수행하고자 하는 바를 정확히 수행하는 것, 즉 요구사항이 실현(문제가 해결) 되어야 의미가 있다.
어떤 언어를 배우더라도 문법을 잘한다고 그 언어를 잘한다고 할 수는 없다는 말에 공감한다. 가장 기초가 되는 단어를 알아야 하고, 단어와 문법을 통해 화자가 말하는 바를 잘 알아듣고 파악해야 한다. 프로그래밍으로 연관 지으면 주어지는 요소 (단어) 를 알아야 하고, 요소와 해당 문법을 조합하여 문제 풀이에 잘 연관지어 문제를 해결해야 한다. 그렇기에 기초가 가장 중요하다고 생각하며 이 책을 차근차근 읽어나가려고 하는 이유가 바로 그 기초 때문이다.
(...생략) 대부분의 프로그래밍 언어는
변수와 값
,키워드
,연산자
,표현식과 문
,조건문
과반복문
에 의한흐름제어
,함수
, 그리고 자료구조인객체
,배열
등과 같은 문법을 제공한다. 프로그래밍 언어가 제공하는 문법을 적절히 사용하여 변수를 통해 값을 저장하고 참조하며 연산자로 값을 연산, 평가하고 조건문과 반복문에 의한 흐름제어로 코드의 실행순서를 제어하고 함수로 재사용 가능한 문의 집합을 만들며 객체, 배열 등으로 자료를 구조화한다. 결국 프로그래밍은 요구사항의 집합을 분석해서 적절한 자료구조와 함수의 집합으로 변환한 후, 그 흐름을 제어하는 것이다.