LIFE-LOG/SSAFY

싸피 2주차 회고

HwangJerry 2024. 1. 14. 17:50

2주차부터는 "코딩 맛보기 과정" 느낌으로 흘러간다. 코딩을 처음 시작하는 사람들에게 흥미를 테스트할 수 있는 느낌의 수준으로 진행되기 때문에, 모두 부담없이 진행하였다.
서울캠퍼스 기준으로는 로봇퀘스트, 크리에이터 챌린지 순으로 프로그램을 체험하였다.

로봇퀘스트

 
로봇퀘스트는 "LEGO"에서 공식적으로 지원하는 "LEGO education SPIKE prime"라는 개발 툴을 이용하여 간단하게 임베디드 해커톤을 진행하는 프로그램이다. 지원 언어는 파이썬이며 블록 코딩도 가능은 하다. 싸피에서는 파이썬을 이용하여 간단하게 개발을 진행하였다.
나로써는 파이썬을 사용한 지 오래 되어서 처음에는 어색했지만, 역시 파이썬이다보니 금방 익숙해졌다. 근데 사실상 로봇퀘스트에서 진행하는 코딩은 거의 직진, 후진, 회전, 팔 들기, 팔 내리기 와 같이 단순한 코드들이고, 클리어해야 하는 미션을 제공해주는데 이를 해결하기 위해서는 하드웨어 구성(=레고 조립)이 더 중요했다.
대략 코드들은 아래와 같다. 제시된 코드는 학습을 위해 따라적으며 나열된 코드이고, 우리 팀은 기능별로 모듈화하여 사용했었다. 처음에는 번거로워도, 나중에는 개발 속도가 확실히 빨라졌었다. 그래서 나중에는 개발보다는 레고 조립에 올인하면서 모두가 재밌게 몰입했다. 스타트캠프의 주된 목적이 전반적으로 아이스브레이킹인 것 같은데, 로봇퀘스트는 확실히 친해지기에는 좋았던 프로그램이었다.

hub = PrimeHub()

hub.light_matrix.show_image('HAPPY')

wheels = MotorPair('E', 'F')

wheels.start(speed = 50) // 시작 (속도 설정)

wheels.wait_for_seconds(3) // 3초 동안 직진

wheels.stop() // 정지

arm = Motor('C')

arm.set_default_speed(100) # 모터를 움직이는 속도를 100으로 정하는 메서드

arm.run_to_position(0) # 모터를 0의 위치로 가장 빠른 방향으로 회전하는 메서드

arm.run_for_degrees(-30) # 팔 올라감

arm.run_for_degrees(60) # 팔 내려감

크리에이터 챌린지


크리에이터 챌린지는 '레드브릭'에서 제공하는 툴을 이용하여 간단한 메타버스 게임 개발을 경험해보는 프로그램이었다. "사회 문제 해결을 위한 SW"라는 주제로 게임 개발 미니 해커톤을 하루동안 진행하였다. 자바스크립트 기반의 API가 기본적으로 제공되어, 기본적인 JS 문법을 바탕으로 코드를 구성하여 간단하게 조작에 대한 효과를 구현해둔 채 플레이를 할 수 있게 하였다.
로봇퀘스트가 '임베디드 프로그래밍'의 체체체체체험판 느낌이라면, 크리에이터 챌린지는 '게임 개발'의 체체체체체체ㅔ체체체험판 느낌이다. 과거에 루아스크립트를 이용하여 메이플 월드를 제작해보는 해커톤에 참여했던 경험이 있는데, 이게 이번 개발을 이해하는 데에 도움이 되었다.
아래는 구성했던 코드의 아주아주 일부분이다. 로봇퀘스트나 이거나 둘다 이미 제작사 측에서 추상화를 워낙 잘해둬서 경험하는 것에 어려움은 없었다.

function Start() { // 게임 시작할 때 기본으로 호출되는 메서드 (Main method)
    (async () => {
        const avatar = await REDBRICK.AvatarManager.createDefaultAvatar();
        const camera = WORLD.getObject("MainCamera");
        const followingCamera = avatar.setFollowingCamera(camera);
        avatar.setDefaultController();

        // 사용을 위한 객체 선언
        const board = WORLD.getObject("alibabacloud(42a)");
        const mesh = WORLD.getObject("ICOSAHEDRON(f86)");
        const character = WORLD.getObject("moongcho(8df)");
        const textBtn = GUI.getObject("button_text_large_white_null(008)");

        // mesh에 부딪히면 board가 나타나는 이벤트 구현
        board.kill();

        avatar.onCollide(mesh, () => {
            board.revive();
        })

        // 캐릭터에 부딪히면 점수가 올라가는 이벤트 구현
        let score = 0;
        textBtn.setText(score);
        avatar.onCollide(character, () => {
           score++;
           textBtn.setText(score);
        })
    })();

트랙별 맞춤 교육 overview

수요일부터 금요일까지는 각 트랙에 맞게 교육이 진행된다. 나는 자바 전공반이기 때문에 수요일에는 자바 교육, 목요일에는 프론트엔드 교육, 금요일에는 백엔드 교육을 받았다.
이번에 진행한 교육은 그저 해당 내용들에 대하여 간단하게 맛보기를 진행함으로써 자바라는 언어와 웹 개발이라는 것에 친밀도를 제고하여 나중에 느낄 어려움을 경감시키려는 목적으로 보였다. 나중에 한번 더 알려주실 거라서 간단하게 들으라고 해주셨는데, 다들 열심히 사는 사람들이라 그런지 벌써부터 그 열정들이 느껴졌었다.
 

이게 맞나?

 
그리고 스타트캠프 마지막 날에는 역시나 회식이 이뤄졌다. 이런 거 없으면 섭섭한 한국인의 피가 나를 회식으로 이끌었다. 반마다 반장과 CA(class assistant?)가 존재하는데, 우리 반은 되게 성실하고 좋은 친구들이 이걸 맡아줘서 반을 잘 이끌어준다. 그래서 그런지 회식도 참석율이 매우 좋았고, 다들 많이 친해지는 계기가 되었다.
 

내 생각

이제 드디어 스타트캠프가 끝났다. 그래도 수요일부터는 어느정도 자바나 웹 개발에 대한 내용을 맛보게 되면서 반가움을 느낄 수 있었다. 작년에 치열하게 살았던 것 같은데, 스타트캠프를 했던 2주 동안은 나름 많이 쉰 기분이 든다. 이번 상반기에는 알고리즘에 많이 몰두할 예정이다. 개발을 먼저 접했고, 전공지식과 개발에 좀 치중하여 살았던 탓에 알고리즘 실력이 정말 많이 부족함을 느낀다. (그렇다고 개발을 잘 한다거나 전공 지식이 뛰어나다고 할 수도 없지만...) 꾸준히 기록하고, 꾸준히 성장해보자.