[영국유학] UoB - 컴싸 재학생의 인턴 개발 이야기

2020.07.21

안녕하세요 University of Birmingham에서 Computer Science를 전공하고 있는 13기 김창현입니다.

예전에 버밍엄 대학교를 소개하는 글로 인사를 드렸었는데요, 그 후에 2학년 생활이 너무 바쁜 나머지 학교 생활에 대한 글이 끊겼습니다....ㅜ 정말 힘들었던 2학년이었어요.....

이번에는 학교 생활에 대한 이야기가 아닌 현재 계약직으로 일하고 있는 제가 학교에서 무엇을 배웠고 배운 내용을 어떻게 적용하는지에 대한 이야기를 해보려고 합니다.

저는 현재 UoB에서 2학년을 마치고 방학시간을 이용하여 의료기기 회사에서 '안드로이드 어플 개발'에서 프로젝트를 담당하고 진행하고 있습니다.

제가 담당하고 있는 프로젝트는 다른 선배 개발자분 밑에서 일을 하는 그런 프로젝트가 아닌 회사에서 어플 개발에 대한 외주를 받아서 저 포함 2명이서 진행하고 있는 프로젝트를 from bottom to top까지 이야기 해드려고 하고, 왜 학교에서 열심히 들어야하고 과제를 열심히 해야하는지를 제가 느낀 부분을 통해서 이야기를 시작하려고 합니다.

 

우선 일을 하는 이야기에 앞서 제가 어떻게 공부를 했고 저에 대한 배경을 먼저 소개하는게 좋겠죠? ㅎㅎ

저는 2018년 UoB에 컴싸에 입학하였고 그것이 제가 처음으로 프로그래밍 언어를 접해본 시점입니다.

사실 그 전에 한국에서 대학교 1학년을 다닐때 C언어를 공부해본 경험이 있지만 그 경험과 영국에서 공부할 때의 컴싸의 공부는 하늘과 땅차이 입니다.

한국에서는 언어의 문법을 중점적으로 다루고 문법적으로 틀린 부분을 찾아내는 부분을 집중한다면 영국에서는 그 과정은 이미 바닥에 깔고 가는 부분입니다.

즉, 영국에서는 문법이 맞고 틀리고가 교육의 중점이 아닌거죠.

제가 비록 UoB만 다녔지만 제가 비슷한 학과를 다니는 친구들의 이야기를 들었을 때 다른 영국대학교를 다니는 친구들과 한국에서 대학교를 다니는 친구들과의 코딩에 임하는 자세는 굉장히 다릅니다 (물론 개인적인 경험입니다.)

저는 그러한 교육에서 저의 주력 언어 (Java)를 연습했고, 컴싸에 핵심이라는 수업, 이를 테면, Data Structure & Algorithm, Artificial Intelligence, Team Project 과목을 배웠고 그 과목들이 현재 저에게 엄청난 영향을 주었습니다.

아마 방학동안에 진행될 이 시리즈에서는 학교에서 배웠던 내용을 이야기하고 안드로이드 개발에 대한 기초적인 지식에 대해서 이야기 할 것입니다.

이 글의 주 타겟은 재학생이거나 컴싸진학을 희망하는 후배님들과 이제 막 입학을 앞두고 있는 예비 컴싸학생분들일 겁니다.

그렇기 때문에 이야기들을 시작하기 전에 여러분들이 궁금해 할만한 예상질문들에 대해 답변을 해보겠습니다.

 

- 컴퓨터를 배워본 적이 없고 처음 컴퓨터 언어에 접해보는데 어떤 언어를 배우는 것이 좋을까요

undefined

정답은 없습니다. 여러분 개개인마다 관심분야가 다르고 그 관심분야마다 주로 쓰는 언어들이 전부 다르기 때문에 특정지을 수 없습니다.

대부분 사람들이 파이썬이나 C를 이야기하곤 합니다. 하지만 그 둘의 쓰임새는 전혀 다르고 (쓰임새가 다르다는건 C 언어로 파이썬 프로그램을 개발할 수 없다가 아닙니다),

그 분야마다의 편의성이 서로 다르기 때문에 어떤언어가 뜨고 어떤언어가 쓸모가 없다라고 결정지을 수 없습니다.

가령, 파이썬은 요즘 구글에서 배포하고 있는 tensorflow와 페이스북 AI개발팀이 개발한 Pytorch라는 프레임워크 (나중에 라이브러리와 프레임워크의 개념에 대해 따로 이야기하겠습니다)를 이용하여 Machine Learning Modelling에 초점을 두거나 Data analysis분야에 특화되어 있다면, C 언어는 오래전부터 전자장비의 프로그래밍적 제어에 초점을 두고 있습니다.

독자분들 중에서 전자제어에 관심이 있으시면 C언어가 최고의 언어고 인공지능이나 객체지향(Object-Oriented Programming)에 관심이 있으신 분들은 파이썬이 최고의 언어될 것입니다. 

 

출처: https://en.wikipedia.org/wiki/Comparison_of_deep-learning_software (파이썬 AI 프레임워크)

- 각 언어들마다 초점이 다 다르다고 했는데 구체적으로 어떤지 알고싶습니다. 

undefined

좋습니다. 사실 이런부분이 컴싸를 좀 더 재밌게 배우는 묘미라고 할 수 있습니다. 이 파트에서는 Java, Python, C/C++, JavaScript(JS)에 대해서 알려드리겠습니다.

 

-Java

우선 제 주력 언어입니다. Java는 1995년 James Gosling이라는 캐나다인이 개발한 언어입니다. 그는 당시 썬 마이크로시스템즈 (Sun Microsystems)소속으로 자바를 발표했고 현재 썬 마이크로시스템즈는 Oracle에 인수되었습니다. 자바는 전형적인 객체를 지향하는 언어입니다. 영어로는 Object라고 하는데, 사실 객체지향이라는 말과 Object-oriented라는 언어가 너무 추상적이기 때문에 말로써 설명을 하는것보다 직접해보고 느끼는 것이 제일 좋습니다.

참고: 

https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

(객체지향 언어)

 

Java의 장점:

- 멀티 플랫폼을 지원한다 == Mac OS나 Windows 둘중 하나에서 코드를 써도 Linux를 포함한 모든 플랫폼에서 호환가능하다.

- 전세계 97프로의 기업이 Java를 사용한다. 그만큼 엄청난 파급력과 프로그램적 효율성을 자랑합니다. 

- 구글의 안드로이드 프로그래밍을 가능케 한다. 

statcounter에 의하면 전세계에 유통되고 있는 스마트폰 os 시장의 75%를 안드로이드가 차지하고 있습니다.

출처: https://gs.statcounter.com/os-market-share/mobile/worldwide

나중에 다룰거지만 현재 안드로이드 생태계는 Java에서 Kotlin이라는 언어로 넘어가는 추세입니다. 여튼 아직도 여전히 Java의 영향력은 어마어마합니다.

 

- C/C++언어의 장점:

- 정말 오래된 언어중 하나이다.

이 말인 즉슨, 가장 안정화된 언어라는 말입니다. 1972년에 발표되었고 아직까지도 전자산업쪽에서는 untouchable이라고 합니다. 또한, Java와 Python도 C의 영향을 받아서 만들어진 언어입니다. 

- 다른 언어들에 비해 저급 프로그래밍언어이다

저급 프로그래밍 언어라는 말은 quality를 뜻하는것이 아닙니다. low-level을 칭하는데 다시말해 사람보다는 기계에 좀 더 친숙한 언어다라는 말입니다. 프로그래밍의 메커니즘은 사람이 코드를 쓰고 그 코드를 이해를 기계가 이해를 해야하는 것입니다. 그 이해시키는 과정을 컴파일이라고 하는데, 쉽게 말해 번역과 같은 작업입니다. C 언어는 상대적으로 다른 언어들에 비해 저급 언어에 속하기 때문에 무거운 프로그램도 상대적으로 금방 실행시킬 수 있습니다.

-C++의 후손이 Java이다

Java를 개발한 사람은 C++의 부족한 부분을 보완하고자 만든 언어라고 제작자가 얘기하였었습니다.

 

-Python의 장점:

요즘 대세다

이 말이 모든 것을 포함하고 있다고 생각합니다. 학교에서 거의 모든 AI연구는 파이썬을 이용한다고 생각하시면 됩니다.

대부분의 AI 프레임워크는 파이썬으로 작성이 되었고, 모두가 아는 영국의 스타트기업인 DeepMind사의 AlphaGo도 파이썬으로 작성되었습니다. (많은 사람들이 알파고가 구글에서 release한 걸로 알지만 시작은 영국의 독립적인 회사였고 인수후에 구글의 지원을 받아서 세상에 알려진 회사입니다). 정말 대세여서 그런지 배워야할 내용들이 우후죽순으로 생겨나는 추세입니다.

프로그래밍 언어 추세에 관한 영상: 

https://www.youtube.com/watch?v=Og847HVwRSI

 

- JavaScript (JS):

사실 자바스크립트는 저도 잘 모릅니다.ㅎㅎ 하지만 C, Python, Java와는 조금 결이 다른 언어로 웹프로그래밍에서 1티어를 자랑하는 언어입니다. 여러분이 접속하는 거의 모든 웹사이트가 JS로 만들어졌다고해도 과언이 아닙니다. 이런 웹프로그래밍 언어가 5년전부터 페이스북의 엄청난 지원을 받으면서 어플리케이션 개발에서도 한창 주가를 올리고 있는 중입니다. 

현재 어플개발에서는 Android: Java or Kotlin, iOS: Swift이고 이 언어들은 서로 다른 플랫폼을 지원하지 않습니다. 하지만 그것을 가능케한 것이 구글의 Flutter와 페이스북의 React-native입니다. React-native가 바로 JS를 사용해서 어플을 개발하는 것입니다. 사실 순수하게 JS를 사용하는것이 아니라 React라는 프레임워크를 사용하지만 기본 문법은 JS입니다. 한 언어를 써서 두개의 플랫폼을 지원하는것은 엄청난 장점이지만 release된지 얼마 안된만큼 아직 안정적이지 않다는 평이 많습니다. (특히 React-native 울화통 터집니다). 

 

- 학교에서 구체적으로 어떤 부분이 취업에 필요하다라고 가르치나요?

아뇨, 혼자 찾거나 교수님들의 이야기를 많이 들어야합니다. 이 부분이 굉장히 중요합니다. 교수님들은 항상 이야기합니다. 자기들보다 구글이 더 똑똑하다고... 실제로 Computer Security 과제 ppt에서 대놓고구글에서 찾아서 하라고 할 정도입니다.

undefined

처음에 참 당황 많이 했습니다. 근데 적응이 되더라구요 그래서는 저는 혼자서 배운게 정말 많습니다. 그리고 그 내용들이 지금 일하는데에서 요긴하게 쓰이고 업무흐름을 훨씬 깔끔하고 오류없이 할 수 있게 해줬습니다.

기술적인 이야기가 많았지만 앞으로 컴싸를 공부해야하는 여러분들에게는 좋은 지식이 되었을거라 생각합니다. 저의 3개월간의 개발 이야기는 학교에서 배운 내용과 현재 일하는 있는 부분의 접점들을 주로 다룰 것이고, 더 나아가 안드로이드 개발의 기초적인 부분에 대해 다룰 예정입니다. ㅎㅎ

undefined

로그인


Reset Password 회원 가입하기