본문 바로가기
코드잇 대학생 코딩캠프

[2월 22일] 코드잇 대학생 코딩캠프 5일차 기록

by manywisdom 2021. 2. 22.

컴퓨터 개론 - 토픽3 : 프로그래머의 세계 이해하기

□ 오늘의 학습내용

 컴퓨터 사이언스의 기본기 

   - 컴퓨터 사이언스의 기본과목 

      (1) 객체지향프로그래밍 

      (2) 알고리즘 

      (3) 자료구조

   -  그외 기본바탕이 되어줄 과목

º 컴퓨터 구조, 운영체제, 컴파일러, 웹개발, 데이터베이스, 네트워크 

 

 

② 소프트웨어 공학 

   (1) 소프트웨어 공학이란 

º 소프트웨어로 제품 및 서비스를 만드는 데 있어 일련의 과정인 '기획-디자인-개발' 과 같은 전반적인 프로세스를 다루는 분야. 기획부터, 제작 및 개발, 테스트, 출시, 유지/보수까지의 모든 프로세스를 포함한다. 

   (2) 프로세스 관리 

º 기획자, 개발자, 마케터들의 협업방식

1) 폭포수 방식 : 각 단계를 완벽히 완료하고 다음단계로 넘어가는 방식

2) 애자일 방식 : 수정사항을 바로바로 반영하기 위해, 전체 프로그램을 빠르게 한방에 만들고 수정하며 진행하는 방식이다. 실제 동작하는 소프트웨어로 확인하면서 기획, 디자인 내용이 반영되었는지 빠르게 확인이 가능하다. 즉, 프로그램을 직접 만들면서 각 분야가 소통하는 방식. 기능이 많은 서비스를 개발할 때 유리한 방식이다. 

   (3) 테스트 프로세스 

º 버그 : 컴퓨터에 에러가 났을 때를 이르는 말

º 개발단계에서 발견하지 못했거나, 특정하게 발생하는 문제를 고치기 위해, test 단계를 따로 분리하기도 한다. 

º 이슈 (issue) : 얼마나 시급한지, 담당자는 누구인지, 빼먹은 버그가 있는지, 잘 고쳐졌는지 등 버그에 대한 정보를 기입해 놓은 것을 이르는 말. 이슈의 상태를 open, In-progress, Resolved, Closed, Reopen 이라는 용어로 구분짓는다. 각 이슈의 상태에 관리 담당자를 지정해주어서 기업 조직 내에 test 부서를 따로 만들기도 한다. 그러나 이슈가 너무 많거나 처리에 있어 노선이 엉킬 때를 대비해 '프로젝트 매니저' 라는 관리자가 있는 경우도 있다. 

 

③ 버전관리

º 버전관리의 필요성

 - 프로그래밍을 하면, 수정사항이 반드시 생기길 마련인데, 여러 사람이 함께 작업하다보면 수정이력이나 프로그램의 버전관리늘 하는 것이 매우 어렵다. 코드 전체를 계속 복사본으로 생성하게 되면 용량도 많아지고, 에러가 발생하게 되면 확인해야할 파일들도 너무 많아지게 된다. 그래서 버전관리가 필요하다!

º Git 

 - 버전관리를 위한 소프트웨어

 - 코드에 수정이 생기면, 바뀐 코드의 수정사항에 대한 정보만 새로 저장하는 방식으로 파일을 관리한다. 누가 수정했고, 어떤 변경사항이 있었는지, 왜 수정했는지 등을 기록한다. 

 - git의 장점 : 우리가 접하는 서비스나 제품은 조금씩 변형된 버전들이 있는데 (ex : 넷플릭스의 구독 서비스 : 라이트, 스탠다드, 프리미엄) 이럴 때 git을 활용하면 하나의 공통 코드가 있고, 필요 목적에 따라 origianl code를 기반으로 기능을 추가하고 수정하면 된다. (Branch) 더불어 git은 실행 기기별로 버전을 만들기도 한다. 

º github : git을 이용해 코드를 저장하는 온라인 저장공간

 

 

④ 개발자들의 필수 프로그램 & 많이 쓰는 프로그램 

      (1) IDE : 통합개발환경 : 개발자들이 코딩할 때 도움이 되는 기능들을 모아둔 프로그램 

      (2) 프로젝트 관리 툴 : Jira, Trello, Asana, Confluence

      (3) 메신저 : slack, skype, handi

      (4) 디자인 협업 : Sketch 

 

⑤ 프로그래밍을 하면서 (라이브러리, 프레임워크, 프로그램언어 등을 선택할 때) 좋은 선택을 하는 방법 

      (1) 활발한 기술을 고르자 : stackoverflow, Quora , 블로그 등의 개발관련 커뮤니티를 살펴보자. 많이 언급되고 관련 글이 많은 것이 활발한 기술이다. 

      (2) 인정받는 기술을 고르자 : stackshare 사이트에서, 주요 기업들이 주로 활용하는 기술정보들이 무엇이 있는지 파악하자. 여러 회사들이 주로 사용하는 언어, 프레임워크, 라이브러리, 기술 등을 알 수 있다. 더불어 다양한 자료를 찾아보며 블로그 등을 통해 훌륭한 개발자들의 지식들을 참고해보자

      (3) 유망한 기술을 고르자 : 개발자의 실력과 별개로, 시간과 산업의 흐름에 따라 기술의 입지가 변한다. 따라서 it의 큰 흐름을 잘 파악하는 것이 중요하다. Gartner 같은 자료를 항시 참고해보자

 

 

(+) 프로그래머에게 영어는 필수다. 읽기능력과 쓰기능력이 중요하기 때문에, 특히 읽기능력에 관해선 빠르고 정확히 영어를 읽을 수 있는 능력을 기르는게 좋다. 앞서 소개한 stackflow 등의 사이트를 통해 자주 코딩관련 언어들을 접해보며 익히는 것이 좋다. 

     

 

 공부하면서 느낀 점들

  정말 코드잇 대학코딩캠프 활동에 도전하길 잘했다는 생각이 든다. (활동 추천해준 인스타 알고리즘에 감사할 따름ㅠㅠ) 컴퓨터 공학을 배워야겠다고 생각한건, 데이터 과학의 중심 지식 분야 중 하나로 자리하기 때문이었다. 필요하다고 하니까, 컴퓨터 공학에 대한 이해도 없이, 학습의 목적성도 없이 뛰어든 것이다. 그래서 수강신청 할 때 정말 많이 헤맸고 무엇에 필요하고, 활용되는 지식인지도 모른채 맹목적으로 관련 과목들을 배웠었다.

  그러나 이런 문제에 대해서 오늘 배운 토픽을 통해 거의 절반 이상은 해결책을 찾은 것 같다..! 우선 개발자들은 어떤 과정으로 일을하고, 사고하는지 그리고 하나의 소프트웨어 서비스나 상품이 출시되기까지 기획자, 마케터, 개발자, 디자이너들 간에 어떠한 협업과정이 발생하는지 알게 되었다. 코드잇 데이터 과학 입문 관련 코스를 들어봐야 정확히 알겠지만, 일단 지금으로서 추측하기로는, 데이터 과학은 기획과 개발 전반에 걸쳐서 각 분야에 도움을 주고 있는 것 같다. 니즈파악이나 마케팅 관련해서는 기획단계에 데이터 분석이 들어가고, 머신러닝이나 인공지능 (모델링, 추천시스템, 이미지 추출 등등등...) 관련해서는 개발단계에 관여하는 흐름인 것 같다. (정확하진 않음..^&^ 열심히 공부하쟈..^^) 나중에 it 기업으로 취업하게 되면, 이런 소프트웨어 공학에 대한 전반적인 이해를 하고있는 것 자체만으로도 업무나 협업에 큰 도움을 줄 수 있겠구나라는 생각이 들었다. 오늘 배우고 깨달은 내용을 바탕으로 앞으로 수강할 부전공, 복수전공 과목들에 대해, 컴퓨터 사이언스 기본 과목+소프트웨어 공학 내용을 바탕으로 계획을 세워볼 것이다!  (3학년이니까 아직 늦지 않았당!!)

  다음으로 익히 들어왔고, 배우고자 마음만 먹었었던, git에 대해 명확히 알게 되었다. IDE나 stackoverflow도 많이 봐왔던 단어들이었는데, 그 정체가 무엇인지 오늘 확실하게 알고가게 되어 뿌듯하다. 어떤 기술에 초점을 두어 배워야 하고, 왜 배워야 하고, 어떤 방식으로 프로그래밍 실력을 쌓아야 하는지 등 꿀팁들을 많이 배워가서 좋다. 

  무언가를 배우면서 이렇게나 흥미롭게 느껴졌던 적이 오랜만 인 것 같다. 띄엄띄엄 알고 있던 지식들이 차근차근 정리되는 기분도 들고, 학습의 방향성을 올바르게 잡아가는 느낌도 든다. 내일도 많이 배우길!