본격적으로 CS 공부에 들어가기 전에 '프로그래밍이란 무엇인가'에 대해 정리해보고자 한다.
컴퓨터 프로그래밍 또는 간단히 프로그래밍 혹은 코딩은
하나 이상의 관련된 추상 알고리즘을 특정한 프로그래밍 언어를 이용해
구체적인 컴퓨터 프로그램으로 구현하는 기술이다.
프로그래밍은 컴퓨터 언어를 이용해 알고리즘의 조합으로 원하는 목적을 달성하는 프로그램을 작성하는 과정을 말한다.
많은 사람들이 프로그래밍을 단순히 코드를 작성하는 것 또는 알고리즘을 작성하는 것으로 생각하곤 한다.
나 또한 프로젝트에 참여하기 전에는 단순 알고리즘 구현 능력만이 코딩 실력의 전부라고 생각하고 있었다.
하지만 프로젝트를 진행해보고, 우테코 프리코스와 최종 코딩테스트에 참여하면서 생각이 바뀌게 되었다.
프로그램을 만들 때 가장 중요한 것은 프로그램을 설계하고 구조를 짜는 것이었다.
프로젝트의 목표와 맞지 않는 구조로 코딩을 시작하게 되면 결국 기능 구현보다 리팩터링에 훨씬 많은 시간을 쓰게 되고, 이는 프로젝트 완성을 크게 늦추는 결과로 이어졌다.
우테코 프리코스를 진행하면서 코드를 작성하기 전 구현할 기능 목록을 정리하고 서투르게나마 MVC 모델에 근거해 설계했더니 원래보다 코딩이 훨씬 편해짐을 느꼈다.
항상 코드를 작성하기 전에 어떤 구조의 코드를 작성할지, 어떤 기능을 하는 함수들을 구현해서 활용할 것인지 정리하자.
프로그램에 적합한 구조로 코드를 작성하고, 재사용성이 높은 함수들을 사용하면 코드는 자연스럽게 깔끔해진다.
공식 문서, 기술 블로그, stackoverflow, ChatGPT 등 알고리즘을 구현할 때 도움받을 수 있는 소스들은 많다.
하지만 만들고 싶은 프로그램의 구조를 설계하는 것은 자신만이 할 수 있는 일이다.
따라서 단순 알고리즘 구현보다는 전체적인 프로그램 설계에 대한 공부를 해야 한다는 생각이 든다.
물론 알고리즘 공부도 게을리하지 않아야 한다.
구조 설계가 미적분이라면, 알고리즘은 사칙연산이다.
결국 모든 프로그램은 알고리즘을 통해 작동한다.
적어도 코딩 테스트 문제를 보자마자 해결 알고리즘이 떠오르는 정도는 되어야 하지 않을까.
본격적으로 CS 공부에 들어가기 전에 '프로그래밍이란 무엇인가'에 대해 정리해보고자 한다.
컴퓨터 프로그래밍 또는 간단히 프로그래밍 혹은 코딩은
하나 이상의 관련된 추상 알고리즘을 특정한 프로그래밍 언어를 이용해
구체적인 컴퓨터 프로그램으로 구현하는 기술이다.
프로그래밍은 컴퓨터 언어를 이용해 알고리즘의 조합으로 원하는 목적을 달성하는 프로그램을 작성하는 과정을 말한다.
많은 사람들이 프로그래밍을 단순히 코드를 작성하는 것 또는 알고리즘을 작성하는 것으로 생각하곤 한다.
나 또한 프로젝트에 참여하기 전에는 단순 알고리즘 구현 능력만이 코딩 실력의 전부라고 생각하고 있었다.
하지만 프로젝트를 진행해보고, 우테코 프리코스와 최종 코딩테스트에 참여하면서 생각이 바뀌게 되었다.
프로그램을 만들 때 가장 중요한 것은 프로그램을 설계하고 구조를 짜는 것이었다.
프로젝트의 목표와 맞지 않는 구조로 코딩을 시작하게 되면 결국 기능 구현보다 리팩터링에 훨씬 많은 시간을 쓰게 되고, 이는 프로젝트 완성을 크게 늦추는 결과로 이어졌다.
우테코 프리코스를 진행하면서 코드를 작성하기 전 구현할 기능 목록을 정리하고 서투르게나마 MVC 모델에 근거해 설계했더니 원래보다 코딩이 훨씬 편해짐을 느꼈다.
항상 코드를 작성하기 전에 어떤 구조의 코드를 작성할지, 어떤 기능을 하는 함수들을 구현해서 활용할 것인지 정리하자.
프로그램에 적합한 구조로 코드를 작성하고, 재사용성이 높은 함수들을 사용하면 코드는 자연스럽게 깔끔해진다.
공식 문서, 기술 블로그, stackoverflow, ChatGPT 등 알고리즘을 구현할 때 도움받을 수 있는 소스들은 많다.
하지만 만들고 싶은 프로그램의 구조를 설계하는 것은 자신만이 할 수 있는 일이다.
따라서 단순 알고리즘 구현보다는 전체적인 프로그램 설계에 대한 공부를 해야 한다는 생각이 든다.
물론 알고리즘 공부도 게을리하지 않아야 한다.
구조 설계가 미적분이라면, 알고리즘은 사칙연산이다.
결국 모든 프로그램은 알고리즘을 통해 작동한다.
적어도 코딩 테스트 문제를 보자마자 해결 알고리즘이 떠오르는 정도는 되어야 하지 않을까.