일을 하며 느낀 개발 능력에 대한 욕망(?)
나는 제조업에서 응용소프트웨어를 개발하는 일을 하고 있다.
의공학을 전공하고 개발을 진행하려다보니 내 역량이 부족하다는 것을 느꼈고 또한 스스로도 개발에 대한 역량을 늘리고 싶었다.
어떻게 하면 개발이라는 역량을 올릴 수 있을까 여러 다른 주니어 개발자의 회고 및 후기를 보았다.
많은 글들에서 개발에 대한 공부의 기본은 알고리즘과 배운 것을 이해한 정리라는 글들을 많이 보게 되었다.
동시에 위와 같은 것들을 github를 이용해 기록으로 남기는 TIL (Today I Learned)라는 개발자들 사이의 운동(?)같은 것이 동기부여에서도 도움이 많이 된다고 하였다.
그래서 이를 해보기로 했다!
즉, 알고리즘 기본으로 공부하면서 이따금씩 배운 것을 TIL에 하나하나씩 기록하기로 했다.
Code war를 고르다!
여러 알고리즘 또는 코드 관련 사이트가 있었지만 나는 code war를 선택하였다.
이것을 선택한 이유는 문제들이 이야기를 가지고 있어서 재미있어 보였고 영어로 문제를 풀어보는 것이 무언가(?) 매력있었기 때문이다.
또한 레벨(kyu)같은 것이 있는데 뭔가 승부욕을 자극하는 것도 재미있어 보였다.
그럼 하나하나 어떻게 사용하는 것인지 어떠한 매력이 있는지 알아보자.
Code war에 가입하기
code war는 간단한 코드 테스트를 통과해야지 처음에 sign up을 할 수 있다.
아래의 그림은 code war의 처음 페이지이다.
오른쪽에 모니터처럼 보이는 화면안에 여러 언어들이 있는 것을 볼 수 있다.
프로그래밍 언어를 선택하면 아까 말했던 코딩 테스트를 할 수 있다.
코딩 테스트라고 해서 약간 겁을 먹었지만 굉장히 간단한 문제임을 알 수 있다.
이 간단한 문제를 summit하여 해결하면 sign up을 할 수 있다.
sign up을 할 때에는 관심있는 프로그래밍 언어를 선택할 수 있다. (이는 나중에 수정이 가능하다)
code war 참전 해보기!
sign up을 하고 나면 처음 보이는 페이지에서 바로 추려진 문제를 볼 수 있다
나는 C++을 관심 프로그래밍 언어로 선택하고 문제를 주로 풀었다.
왼쪽에는 프로그래밍 언어와 문제의 속성을 나타내는 tag를 볼 수 있다.
문제의 속성 tag는 위의 예시처럼 연습과 반복도 있고 알고리즘 관련, 퍼즐같은 문제, 수학 문제, 논리 문제 등등 속성을 골라서 train할 수 있게 되어있다.
자신이 재미있을 것 같은 항목을 선택하여 연습할 수 있는 것이 code war의 장점 중 하나인 것 같다.
train을 통해 code war에 참전하거나 skip을 눌러 다른 문제로 참전할 수도 있다.
오른쪽 화면 부분에는 문제의 제목과 간단한 설명이 적혀있다.
여기서 8 kyu는 문제의 난이도를 나타내는데 1 kyu로 갈수록 어려운 난이도이다.
오른쪽 화면의 가장 끝에는 나의 프로필과 함께 나의 레벨을 볼 수 있다.
1 kyu가 가장 높은 레벨이며 8 kyu가 가장 낮은 레벨이다.
당연히 처음 시작하면 8 kyu부터 시작한다.
나는 설명을 위해 jumping number라는 문제에 참전해보았다.
문제를 선택하면 아래와 같은 화면을 볼 수 있다.
화면의 왼쪽을 보면 문제에 대한 자세한 설명을 볼 수 있다.
문제에 대한 자세한 설명과 예제 그리고 관련 문제가 있다면 그 문제에 대한 링크, 관련 지식에 대한 링크 등등이 적혀있다.
기본 문제 설명 옆부분에는 OUTPUT이라는 것이 있는데 이는 문제해결을 위해 작성한 코드를 동작시켰을 때 결과들을 볼 수 있다.
오른쪽 화면은 상단 먼저 C++ 및 개발 환경에 대한 부분을 볼 수 있다.
그 밑은 문제를 풀기위한 함수 및 코드를 작성하는 부분이 있고, 그 아래에는 SAMPLE TESTS라는 부분이 있는데 여기서 문제를 해결하기 위해 작성된 코드를 테스트할 수 있다.
복잡하게 되어 있지만 code war에서 작성한 코드를 간단히 테스트하기 위한 양식(?)같은 코드들이 적혀있다.
그 아래로 여러 버튼들이 있다.
가장 오른쪽의 ATTEMPT 버튼은 문제 해결을 위한 코드를 테스트하여 통과 여부를 알려준다.
통과하면 녹색 버튼(SUMMIT FINAL)으로 바뀌며 작성한 코드를 code war에 제출할 수 있다.
바로 왼쪽은 RUN SAMPLE TESTS 버튼으로 코드를 sample tests의 내용을 테스트할 수 있는 버튼이며, 여기서 문제에 대하여 사용자가 생각한 여러 상황들을 테스트해 볼 수 있다.
다음은 DISCUSS 버튼으로 문제 해결이 어려울 때 여러 사용자들이 토론할 글들 및 자료를 볼 수 있다.
문제 해결이 어렵거나 문제 내용이 이해되지 않을 때 참고하면 좋으며 직접 질문을 올릴 수도 있다.
그 왼쪽은 UNLOCK SOLUTION으로 문제가 도저히 해결되지 않을 때, 다른 사람이 문제를 해결하고 제출한 코드를 볼 수 있다.
다른 사람들이 작성한 여러 코드들을 볼 수 있다는 것이 장점이지만, 마구 잡이로 사용하면 rank같은 것이 하락하는 것 같다.
가장 오른쪽 버튼은 SKIP으로 문제를 풀지 않고 다른 문제로 넘어갈 수 있는 버튼이다.
코드 작성 없이 문제를 그냥 풀어보았다.
당연히 왼쪽 부분의 OUTPUT에서 여러 에러들을 볼 수 있다.
문제를 틀리게 풀고 RUN SAMPLE TESTS를 하면 아래와 같은 결과를 볼 수 있다.
왼쪽의 OUTPUT이 이전과는 다르게 디테일하게 바뀐 것을 볼 수 있다.
문제에 대한 여러 상황을 보여주고 작성된 코드로 통과한 상황과 통과하지 못한 상황에 대한 설명을 보여준다.
어떤 입력에 대하여 문제가 발생했는지는 없고 내가 작성한 코드의 결과와 정답에 대한 결과를 비교하여 틀렸다는 것만을 보여준다.
이게 code war의 장점이자 단점인 부분이라고 생각한다.
장점이라면 여러 상황들, 예외들을 직접 하나하나 생각해가며 코드를 작성한다는 부분에서 테스트 주도의 코드 작성이 가능하다는 부분이다.
단점은 디테일한 입력과 출력이 없다보니 전혀 이 예외를 찾지 못하면 남들이 풀어낸 코드를 보아도 어떤 부분을 놓쳐서 해결하지 못했는지 알 수 없다는 것이 문제이다.
코드를 문제를 해결할 수 있게 작성 후 RUN SAMPLE TESTS를 동작시켜 보았다.
또 다르게 풀어보면 아래와 같은 출력을 볼 수 있다.
오른쪽 화면에 SAMPLE TESTS에 대한 여러 상황에 대한 문제를 모두 잘 해결한 것을 볼 수 있다.
이제는 ATTEMPT를 통해 이 code war를 끝내보자.
문제를 완전히 해결하여 ATTEMPT가 SUMMIT FINAL로 바뀐 것을 볼 수 있다.
SUMMIT FINAL을 하면 다른 사람들의 코드들을 볼 수 있고 비교해 볼 수 있다.
또 해결한 문제에 대한 평가를 할 수 있으며 이 지표는 나중에 다른 누군가가 문제를 선택할 때 기준이 될 수 있다.
문제의 설명이 애매하여 코드 작성 및 해결을 위한 방법 구상보다 문제의 이해에 더 많은 시간을 쏟는 경우도 있는데 이런 경우 문제의 만족도를 적게주어 다른 사용자가 고생할 것을 덜어줄 수도 있다.
아래에는 다른 사람의 코드를 보며 평가하거나 댓글을 남길 수 있다.
알고리즘 관련 문제들 경우 사용자마다 독특한 방법으로 많이 푸는데 질문을 올려 궁금증을 해결할 수도 있다.
문제를 해결하고 이렇게 평가를 진행하면 사용자의 레벨을 올릴 수 있는 포인트가 주어진다.
code war의 여러 기능 살펴보기
먼저 화면의 오른쪽 상단에 프로필이 항상있는데 이를 클릭하여 내가 해결한 문제 및 레벨, 다음 레벨까지 남은 것 등등을 볼 수 있다.
오른쪽에 붉은색 code war 무늬에 마우스를 올리면 문제를 검색할 수 있는 창을 볼 수 있다.
Kata 부분을 누르면 아래와 같은 화면을 볼 수 있다.
Kata를 선택하면 여러 문제를 편하게 검색할 수 있는 화면을 볼 수 있다.
어떤 언어의 문제를 선택할 것인지, 난이도는 어떻게 되는지 등등 내가 필요한 부분을 train하기 위한 동시에 재미있어 보이는 문제를 해결하기 위한 문제를 골라서 풀 수 있다.
그래서 code war로 TIL를 해본 느낌?
약 50문제 (6 kyu ~ 8kyu) 정도를 풀어보면서 느낀 것은 알고리즘 문제라기 보다는 주어진 어떤 상황의 문제를 코드로 해결해보는 것에 가까운 사이트였다.
처음 프로그래밍 언어 문법을 모두 익힌 사람이 익숙하게 언어를 다루고 싶다면 code war를 통해 train하면 좋을 것 같다.
재미있는 다양한 문제를 풀어보는게 가장 큰 장점이다.
흥미를 가지며 풀 수 있다는 것은 동기부여 입장에서 매우 좋다.
레벨 시스템도 이전에 이야기한 바와 같이 동기부여에 많은 도움을 주었다.
아쉬운 부분은 아무래도 문제의 설명이 부족할 때, 문제를 잘못 이해할 때, 코드 작성을 한기보다는 이상한 곳에서 해매는 것이 단점이다.
또 약간 억지로 문제를 만들 것도 있는데, 그런 문제들은 재미도 없고 억지로 불편하게 예외 코드를 작성한다는 느낌이 강했다.
그럼에도 불구하고 추천하는 이유는 테스트 주도 및 여러 상황을 고려한 코드 작성의 습관을 들일 때 좋은 것 같다.
code war는 다양한 문제 상황을 해결하기 위한 코드를 작성해야 하는데, 입력과 출력을 명확하게 볼 수 있는 구조가 아니다.
따라서 처음에 어떻게 상황을 보고 테스트할 것인지 시나리오를 세워 문제를 풀어나갈 것인지 많은 생각을 하고 접근하지 않으면 생각보다 쉽게 해결되지 않았다.
익숙해지고 싶은 언어가 있다면 code war를 다시 해보겠지만 나는 이제 알고리즘을 집중적으로 볼 수 있는 플랫폼으로 바꾸어 보려고 한다.
'Study > IT & Computer' 카테고리의 다른 글
CPU architecture(아키텍처) (0) | 2023.02.16 |
---|---|
.NET과 .NET framework (0) | 2023.01.25 |
Framework(프레임워크) (0) | 2023.01.25 |
[MS Office] 파워포인트 사용 시 마지막 영어 단어 자동 삭제 현상 해결법 (1) | 2022.07.04 |
Visual studio 2012 & 2010에서 Nuget 사용을 위한 update 와 PM console 사용법 (0) | 2020.02.20 |