티스토리 뷰

수강계기

단순한 이유

2022년 05월 학기에서 COMP1000 - 소프트웨어 공학용 수학 과목과 COMP 2200 - C 언매니지드 프로그래밍을 수강하고 난 뒤에 만족도가 높아서 2022년 9월 학기에서는 COMP2500 - 개체지향 프로그래밍 및 설계 과목을 수강 하게 되었습니다.

↓ COMP 1000 수강후기

https://takim0070.tistory.com/21

 

[POCU 강좌 후기] COMP 1000 - 소프트웨어 공학용 수학

수강계기 COMP1500을 수강하고 나서 실습, 과제가 좋다고 생각이 들었습니다. 그래서 COMP1000(수학), COMP2200(C언어)를 동시에 수강하게 되었습니다. ↓ COMP1500 후기 https://takim0070.tistory.com/20?categ..

takim0070.tistory.com

↓ COMP 2200 수강후기

https://takim0070.tistory.com/22

 

[POCU 강좌 후기] COMP 2200 - C 언매니지드 프로그래밍

수강계기 COMP1500을 수강하고 이번학기에 COMP1000(수학) 과목만 수강하게 되면 9월 학기에 수강할 수 있는게 없어서 무리하게도 COMP2200(C언어)를 수강하게 되었습니다. ↓ COMP1500 후기 https://takim0070.t

takim0070.tistory.com

 

조금 개인적인 이유

학교 다닐때 Java를 중점적으로 배웠습니다. 졸업작품을 할때는 Spring을 사용해서 웹 서비스를 제작 했습니다.

졸업작품을 할 때, 제일 어려웠던게 다형성, 추상화, 캡슐화를 왜 중요한가 였습니다.

 

책에 있거나 교수님이 말씀해주시는 이유들을 외우는데 까지는 문제 없었지만 체득하지는 못했었습니다.

 

그때 당시에는 캡슐화는 외부에서 데이터 조작을 못하는데에 캡슐화가 의의가 있고 추상화는 부끄럽지만 interface를 사용하는 개념으로만 생각했었습니다.

다형성 또한 오버라이딩, 오버로딩 이라고만 단순히 생각했었습니다.

 

POCU 강의 목차를 보고 개체지향의 다수설, 소수설에 대한 이야기를 하는 것과 캡슐화, 추상화, 다형성에 대한 요소에 대해서 직접적으로 이야기 하는 목차를 확인 했습니다.

 

제가 딱 원하는 부분이어서 배우고 싶다는 생각이 강하게 들었습니다.

 

 

이전 강의의 경험

COMP1500(기초) 강의를 들은 이유는 기본기에 대한 생각이 깊어져서 였습니다.

지금 생각해보면 잘 배웠다(8)와 너무 기초적인 부분이라 for문의 문법 이후부터가 괜찮았다(2)라는 소감이었습니다.

 

먼저 안좋은 느낌이었던 for문 이후부터가 괜찮았다는 점은 강의의 대부분이 알고 있던 내용이었다는 점 입니다.

물론 처음 배울때는 가장 중요한 if 조건문과 for, while 루프들의 동작 방식이 익숙해지게 하는 점에서는 도움이 될 것 같았습니다.

그런데 문법적인 부분이 어느정도 숙달된 상태이기 때문에 좋지 않은 느낌을 받았었습니다.

 

그럼에도 불구하고 전반적인 느낌이 좋았던 점은 올바른 자세에 있습니다.

함수의 선조건, 후조건에 대한 이야기 입니다. 함수에서 리턴되는 데이터가 null을 포함한다면 함수명에 OrNull을 붙여주어 함수를 사용하는 사람으로 하여금 인지하게 해주고 매개변수로 null을 포함하여 받는다면 매개변수 명에 OrNull을 붙여서 null이 들어오더라도 처리가 가능함을 알려주는 것을 알았을 때 정말로 제가 많이 부족하다고 느꼈습니다.

그 외에도 좋은 점은 있지만 이만 생략하고 다른 과목 이야기를 해보겠습니다.

 

수학과목을 하면서 예전에 제가 실수를 했던 부분이 떠올랐습니다. 머신비전 업체에서 근무중 이었을 때 인데요.

딥러닝 검사를 진행하고 나면 0 ~ 1 사이의 double 형 데이터가 반환되고 양품, 불량 기준에서 양불 판정하는 공정이었는데요

기준이 0.54라고 했을때 0.54 미만은 양품 0.54 이상은 불량으로 판정하는 구조 였습니다.

근데 double형으로 바로 비교를 했고 그게 문제가 되리라는 점을 한 번도 생각한 적이 없습니다.

구글링 해보니 보통 같은지 확인할때는 EPSILON 보다 작을 경우 같다고 판단하는 등 부동 소수점으로 바로 연산을 회피하는 코드들을 보고 또 한번 부족함을 느꼈었습니다. ( 그 외에도 +0.1 등과 같은 걸 자주 사용 했었습니다 0.1이 검사에 얼마나 치명적인걸 알고 있었음에도 +0.1 연산이 문제가 될수도 있다는 걸 인지 하지 못한게 이불킥 감이었습니다)

수학과목은 이외에도 이산수학의 부족한 부분을 많이 채워 줬습니다. 다만... 기말고사 시즌에 전 직장에서 급하게 인손이 부족하다고하여 베트남 출장을 다녀오면서 시험을 못치긴 했지만 그래도 그것 때문에 수강기간 이후에도 POCU에서 수학과목 추천 도서를 구매하여 문제를 풀고 있습니다.

 

C 과목에서는 포인터를 마스터 했습니다. 더이상 포인터가 두렵지 않습니다.

😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁

이 말 한마디면 충분하지 않을까 합니다.

제가 학생 때 C언어 공부를 포인터 이후 흐지부지 했던걸로 기억합니다. 그 이후에 동적 메모리 할당도 포함해서요

눈에 바로 보이지 않는 메모리 주소 값이 왜 이렇게 어렵게만 느껴졌는지 모르겠습니다.

POCU에서는 실습, 과제로 어렵게 느껴지더라도 체득하게 만들어주고 체득하고 나면 두려움이 사라져서 이해하게 되었습니다.

물론 온라인 강의에서 포인터는 메모리 주소를 저장하는 변수이다라고 엄청나게 반복해 주셔서 이해하기 싫어도 이해했지만 얕게만 알고 또 지나갈 뻔 했지만 실습을 통해서 특히 과제에서... ****str 이런 이중, 삼중, 사중 포인터를 쓰다보니 완연히 이해하게 되더라구요

C 언매니지드 과목도 베트남 출장으로 인해 마지막이 좋지 않았지만 수학과목 기말고사를 치르고 큰일났다는 생각에 미친듯이 공부해서 어느정도 선방은 했었습니다

 

위의 경험으로 인해서 앞으로는 느리더라도 확실하게 해야한다는 점을 여실히 느꼈습니다.

이번 5월에는 제가 너무 조급했습니다. 이제 겨우 기초과목을 끝내고 취업을 하려고 보니 기초 과목에서도 부족하다는 점을 느꼈던 제가 다른 과목을 빠르게 배워야 겠다는 욕심이 앞서서 일을 그르친거 같습니다.

물론 과한 욕심에 과한 열정 및 시간, 노력이 있다면 충분 했겠지만 저는 아니었습니다.

그래도, 부족한 제가 앞으로는 욕심을 부리지 않고 냉정히 할 수 있을까란 물음으로 선택을 해야겠다는 값진 교훈도 얻었습니다.

 

 

POCU 강의 프로세스

실습 및 과제

해당 주에 과제나 실습이 오픈이 되면서 해볼 수 있습니다

과제 명세서에서 이러이러한 것들을 만드세요 라고 알려 줍니다!

 

실습, 과제 하는 방법이라든지 채첨을 받는 방법에 대한 것은

풀코스 지원하시면 안내서가 있기 때문에 무리없이 따라 하실수 있습니다.

 

만약 문서만 보고 따라하기 힘들다면 - 슬랙방

 

슬랙에서 같이 수강하는 다른 학우분들에게 물어 보거나 조교, 직원분들에게 물어보시면 친절히 알려주실 겁니다.

아마 이때는 random에 질문하시면 좋을 거 같습니다

 

 

빌드봇

이렇게 이쁜 빌드 봇이 있습니다. 위와 같이 나오면 실습 2가 통과 된 것입니다.

 

실패한 테스트, 코딩 스타일 위반하면 점수가 깍이고 통과 하지 못합니다.

대신 마감시간 전까지 계속 검사를 받을 수 있습니다!! 🎇🎇

 

실습은 1주에 1개가 나옵니다.

과제는 3주에 1개가 나옵니다.

 

아래와 같이 진행 됩니다.

1주차 - 실습1, 과제1 시작

2주차 - 실습2

3주차 - 실습3, 과제1마감

4주차 - 실습4, 과제2 시작

5주차 - 실습5

6주차 - 실습6, 과제2 마감

7주차 - 중간고사 공부 기간 (실습 및 과제 없음)

8주차 - 중간고사

..............

 

 

실습은 빌드 요청 이후 10분 뒤에 빌드 요청 가능하고 과제는 30분 뒤에 요청 가능 합니다.

ex) 12시 10분에 실습 1 빌드 요청 후 50점이어서 코드 수정 후 12시 20분부터 빌드 요청 가능합니다.

※ 자세한 내용은 풀코스에 안내사항이 있습니다!

 

테스트 케이스에 대한 설명은 위키에도 있고 파란색으로 표시된 링크를 누르면 확인 가능 합니다

코딩 스타일은 POCU에서 제공하는 언어별 코딩 표준을 따르시면 되고 그걸 어기면 빌드봇이 알려 줍니다.

 

 

이건 빌드번호가 999여서 기념으로 캡처 해 두었습니다 😁😁

빌드 번호가 2천번대가 넘어가니까 빌드봇이 울기 시작하네요 😙😙

 

빌드번호 4천번대가 되니까 엉엉 웁니다. 😁😁😁

 

 

중간고사, 기말고사

중간 기말 고사는 웹캠이 필요합니다.

 

신분확인하고 학교 시험 보듯이 시험 치면 됩니다

자세한 것은 시험환경 테스트를 하는데 그걸로 확인 해보세요. 😁

 

POCU의 시험은 어떤 개념을 정확히 알고 있는지 확인 합니다.

그래서 어설프게 알게 되면 1번 문제가 3점짜리 문제일 때, 2점, 1.5점 이런식으로 부분점수를 받을 수 있습니다. 😢😢

 

COMP1500 시험칠 때 가장 놀랬던게 컴파일이 될까요? 런타임 오류가 날까요? 난다면 그 이유를 작성해 주고 안난다면 결과를 입력해 주세요. 라는 질문들이 생소 했습니다.

코드를 눈으로 디버깅하면서 문제가 있는지 체크하고 없다고 생각이 든다면 결과를 적는 형태죠.

 

시험은 정말정말 어려우니 공부를 미리미리 많이 해야 합니다.

안하면 저 처럼 피봅니다...

COMP 2500 - 개체지향 프로그래밍 및 설계 (Java) 강의

강의 내용 

OOP - 개체 지향 프로그래밍

이번 강의는 저한테 많은 도움이 되었습니다. 저한테 의문이 있었습니다.

  • 개체지향 프로그래밍 언어를 왜 쓸까?
  • 다형성이 좋긴한데 어떻게 작동하는 거지?
  • 캡슐화를 꼭 지켜야 하는 이유가 있나?
  • 상속을 굳이 해줘야 하는 건가?

이런 의문들이 많이 해소가 되었습니다. 학교를 다닐때 외부 강사님이 질문을 하신적이 있었는데요.

OOP가 뭐라고 생각하세요? 

- 프로그래밍 언어와 세상의 괴리가 있어서 세상과 비슷하게 접근하는 방식으로써 나온 프로그래밍 언어입니다.

OOP에서 캡슐화, 상속, 다형성, 추상화가 있는데 그게 왜 중요할까요?

- ..... 

이런 적이 있었습니다. OOP의 정의를 제대로 내리지도 못했고 OOP의 중요한 요소들이 무엇을 의미하는지 정의하지 못했었습니다. POCU 강의를 들으면서 개념들을 정의 할 수 있었습니다. (강제로 알 수 밖에 없게 만들어 주셨죠 😙😙)

 

만약 지금 다시 물어 본다면 OOP는 세상의 언어로 만들고자해서 만들었을지도 모르지만, 환경적인 요소도 포함되어 있다고 생각합니다. POCU 강의 중 Java의 역사, OOP가 나오게 된 역사(배경)들을 간략히, 비교적 자주 언급을 해 주셨는데요.

프로그래밍 언어를 컴퓨터 공학 전공자들만 사용하는게 아닌 도구로서 사용을 하려는 사람들이 생겨났고 C나 파스칼이나 어셈블리 같은 문법을 공부하고 그 체계를 공부하기엔 부담되는 사람들이 만들어서 사용하기 시작했기 때문이라 생각합니다. 그리고 닷컴버블 시절에 웹사이트가 많이 생겼는데 거기에 자바 애플릿을 사용하면서 자바가 인기를 얻어 지금의 주류 언어가 되었다고 보입니다.

 

OOP의 4대 요소는 POCU COMP 2500 강의 들으시면 강의로도 알 수 있고, 풀코스를 들으시면 실습, 과제, 시험으로 체득하실 수 있을 겁니다.

자세한 설명은 msdn으로 대신하겠습니다. (제일 좋아하는 개발 문서입니다. 읽기 편하거든요 😙)

https://learn.microsoft.com/ko-kr/dotnet/csharp/fundamentals/tutorials/oop

 

개체 지향 프로그래밍(C#)

C#은 추상화, 캡슐화, 상속, 다형성 등 개체 지향 프로그래밍에 대한 모든 지원을 제공합니다.

learn.microsoft.com

 

다수설, 소수설 (feat. TDD)

포프TV를 영상을 보시거나 라이브 방송을 보신 분들은 포프님이 TDD (애자일도 포함될 거 같습니다) 같은 개발 방법론에 대해 피력하는 영상을 보셨을 겁니다.

 

OOP 과목에서 하나 얻은 건 OOP 개념의 정의와 인터넷에 널려있는 여러 이야기들에서 나만의 잣대를 가지게 해 주었다는 겁니다.

연계되는 것이긴 하지만 C 언매니지드 과목도 배웠기 때문에 포프님 의견을 이해하는데 도움이 되었고 동의 하는 부분도 많습니다. 다만, 과격(?)해지는 부분은 제가 이해하지 못하고 있죠.. 왜냐면 아직 실무 경험이 없기 때문에 그렇습니다😢

 

아마, 업계에서 잘못된 방법론으로 이것만 지키면 프로그램 성능이 좋아집니다. 또는 대기업 취업이 됩니다. 등등의 이야기들 때문인 것 같습니다. 업계를 모르기 때문에 내용을 이해하기는 하지만 감정적으로 공감까지는 하지 못했습니다.

그래도 내용을 들으면서 제가 3년간 있었던 FA(공장 자동화) 업계에서도 이상한 소리로 업계 물을 흐리는 사람들이 많이 있는데 그런 것이라 생각하고 있습니다.

  • 문제 해결이 우선이 아니라 금전적 이익이 먼저인 경우 (의견이 갈릴수 있긴 하지만 심한 경우가 많아서 그렇습니다)
    ex) OK, NG 신호를 주려면 날선 1개만 있으면 되어 1개만 연결 했는데 NG 유형에 따라 다른 신호를 주기를 원해서 OK, NG1, NG2, NG3 이런식으로 2개의 신호가 필요해 날선 1개 더 연결하면 되는거고 할 수도 있는데(여분이 3개나 있는 상황) 이 핑계, 저 핑계 대면서 빼면서 고객사에게 돈을 더 뜯어 낼려고 하는 사람들
  • 문제 발생 시 이상한 주장하는 사람들 (문제의 원인을 어림짐작하고 그것이 맞다고 주장하는 사람들 - 근거는 자신의 나이(업계에 있었던 시간 - 내가 10년차인데..))
  • 나쁜 고인물
    ex)
    PC 결과가 PLC에 응답시간 초과가 발생하는 문제가 있었습니다. (주어진 시간은 1초)
    외주분이 작업을 하고 있었는데요. 현장에 인터넷이 안되는 상황이고 외주분은 현장에 갈 수 없다고해서 제가 프로그램 실행 파일을 받으면 현장에 적용하는 역할을 했습니다. 로그 찍은 걸로 확인하면서 프로그램을 수정하는데 성과가 안나와서(이때도 프로그램은 문제 없는데 현장이 문제다부터 시작해서 CPU가 속도가 느려서 그렇다 등등 핑계는 많았습니다.) 소스코드 공유 해달라고 하니 알수 없는 이유로 계속 거절을 했었습니다. 회사 내부 관리자분께 외주분에게 소스코드 받고 손 때라고 요청 했는데요. (그 과정도 쉽지 않았습니다. 이유는 xx전자 출신이니까 믿고 기다려 보자며 1개월 정도 기다려 주었죠...)
    받고 확인 해보니 멀티스레딩 관련 문제 였습니다. 제가 실력이 그렇게 뛰어나진 않아 시간은 좀 걸리긴 했습니다. 포프tv에서 멀티스레딩 관련 영상 보면서 msdn 확인 해가며 어째저째 응답시간 초과 발생하지 않게는 만들었죠.

이런 느낌으로 이해를 했습니다.

 

OOP에서 말하는 여러 개발 방법론에 대해서는 개발 환경에 맞춰 최선의 선택을 하면 된다가 지금의 저의 생각입니다.

물론 나중에 실무에 접어들면 감정이 실려 이야기를 할 수 있을 것 같습니다.

 

이번 과목은 다수설, 소수설 때문에 꼭 들어보는걸 추천 드립니다.

지금 퇴사 후 웹 백엔드 개발자로 취업 시도하고 있습니다. TDD를 요즘에 기본으로 해야한다. 포트폴리오는 이런 식으로 무조건 작성해야 한다. 이 말들이 관점에 따라서는 맞는 말이 될 수 있는데 취업을 준비하는 입장에서 이런게 준비가 안되어서 그런건가? 해야하나? 저런것들은 어떻게 배우지? 하면서 알아보니 강의 판매나 부트 캠프 같은 곳들에서 그런 이야기를 하는 걸 봤습니다.

 

이게 맞다 틀리다는 아직 모르겠습니다.

두가지 확실한 건 '부자아빠'와 비슷한 점, 방법론은 입사를 했을 때 회사 정책이 그렇다면 우선은 따르고 해보면 그만이여서 지금 고려할 필요는 없다 입니다.

'부자아빠' 로버트 기요사키가 부자가 되기 위해서 이러이러한 것들을 해야한다라고 소개 했지만 비판받았던 것은 기요사키는 '부자아빠'라는 책으로 돈을 많이 벌었다는 점입니다. 물론 부동산 사업을 하면서 배운 것들과 진짜 아빠가 아닌 부자아빠에게서 배운 내용을 책으로 써냈긴 하지만요.

 

지금 저에게 취업이 중요하니 알고리듬과 웹 백엔드 구축하는 것을 저 스스로 만들면서 이것저것 부딪혀 배워나가야 할 것 같습니다. 개발 방법론은 입사를 했을 때 그 회사가 우리는 이런 개발 방법론에 따라 이런식으로 개발 진행 합니다. 라고 한다면 따르면서 이 방법론이 효율적인가를 판단하면 될 것 같습니다.

 

그래서 다수설, 소수설 때문이라도 COMP 2500 꼭 들으세요!!

 

 

과제에 대한 이야기

과제 1

이렇게 까지 애먹이는 POCU 과제는 처음이었습니다. 무엇을 만들어야 하고 무엇을 만들지 말아야 할 지 감이 오지 않았습니다.

과제 1을 하면서 왜 이 과목이 개체지향 프로그래밍 및 '설계' 인지 알 수 있는 과제 였습니다.

 

과제2

제가 Java와 C#을 사용하면서 상속을 너무 잘못 알고 있음을 알게 되었습니다.

 

OOP의 4대 특성인 캡슐화, 상속, 다형성, 추상화에서

캡슐화, 상속, 추상화에 대해서 다루는 과제 였습니다.

 

과제 2를 하면서 어설프게 OOP에 대해서 안다고 생각하고 있음을 알게 되었습니다.

 

과제3

다형성을 활용하는 과제 였습니다.

통과하진 못했죠... 85점 받았습니다.

다른 분들 코드 보면서 제가 왜 통과 못한지 알게 되었습니다. 동일하게 반복되는 건 메서드로 합치고 헷갈리지 않게, 가독성 좋게 만들었으면 저도 충분히 통과 했을텐데 너무 주먹구구식으로 부딪혀서 저도 제 코드가 헷갈리는 경지에 이르러서 통과를 못했다고 생각합니다.

 

과제4

통과는 했지만 이렇게 하는게 옳은 것인가라는 의문이 많이 들었습니다.

항상 POCU 강의 과제4는 기말시험이 있어서 그런지 아니면 과제3까지 많이 깨지면서 배워서 그런지 난이도가 과제3에 비해서 낮다는 느낌을 많이 받았습니다.

 

 

과제를 하면서 든 생각

실습은 1개의 개념을 숙지하는 개념입니다. 과제는 배운 내용들을 응용하는 개념입니다.

 

POCU의 실습은 배운걸 확인하는 차원이라 어려운 것들도 있어도 해결하는데 힘들진 않습니다.

과제는 응용을 해야해서 생각을 많이 해야 합니다. 구글링도 많이 해야하죠.

하지만 COMP 2500은 도저히 감을 못잡았었습니다.

C 언매니지드 과목의 과제는 이게 왜 안되지 하면서 디버깅을 계속해서 힘들었는데 개체지향 프로그래밍 과목은 이걸 어떤식으로 만들어야 하는거지 하면서 '아 맞다 이과목 개체지향 프로그래밍 및 설계' 였지? 라는 생각이 번뜩였습니다.

 

과제는 정말로 설계에 초점이 맞춰져 있어서 제가 잘못된 생각이나 아무 생각없는 상태에서 이러이러한 것들을 클래스화 하면 이런식으로 설계하면 됩니다를 과제를 통해서 배웠습니다. 빌드봇한테 뚜드러 맞으면서요 😓😓😓😓

 

결론

성적

제 성적입니다.

이번에도 통과하지 못했습니다.

왜 저는 시험에서 70점을 넘지 못하는 거죠.. (공부를 제대로 안했던 저를 탓해야죠 😓😓)

저번 과목에서 다짐했었지만 다음은 알고리듬 과목을 들을 예정입니다.

알고리듬 과목은 기필코 높은 점수로 통과 하려고 합니다.😁😁😁

 

느낀점

느낀점을 간략히하면 OOP의 개념 정의, 인터넷과 업계에 있는 여러가지 개발 방법론에 대해서 나만의 잣대와 태도를 가질 수 있게 되었습니다.

 

지금도 취업하려고 이력서를 내고 있는데 잘 안되고 있습니다. 퇴사한지 6개월 째가 되가니 초조해져서 여러 생각 잡 생각이 들었지만(직종 변경하지 말아야 하는지) 웹 사이트 하나 만들어 보려고 합니다. 일단은 무작정 만들어보고 문제가 있으면 수정하면서 기초 지식을 습득해서 업체들에게 매력적인 지원자가 되어 보려고 합니다. 😁😁😁

 

다음 과목은 COMP 3500 알고리듬 과목을 들을 예정입니다. 과목 소개만 일단 봤었는데요.

알고리듬 공부로 제가 잘못하고 있더라구요.

저는 문제풀이 사이트에서 문제를 많이 풀면 자연히 실력 향상이 될거라고 생각했지만 효율적이지 않은 방법 이었습니다.

과목소개에서는 기초 알고리듬을 완벽히 이해하면 거기에 살을 붙여 응용하면 된다고 소개하는 영상을 봤습니다.

댓글