#python #anaconda #jupyter-notebook #visual-code #html #css #javascript #http

제목소프트웨어 공학도의 공부법2020-05-30 14:40
작성자

아래 파이선 공부로 고민하는 학우들이 많은 것 같아 올리는 글입니다.


우선 제 소개를 하자면, 외국어고등학교를 졸업하여 경희대학교를 왔습니다.


즉, 학교에서는 프로그래밍은 고사하고 국영수탐외 중심으로 공부만 했다는 의미입니다.


그런 제 입장에서 아래 파이선 공부 고민글을 바탕으로 소프트웨어 공학도의 공부법을 알려드리겠습니다.


1. 대학교를 들어와 파이선을 처음 배우기 시작했다

걱정하실 필요 없습니다. 저는 대학교 들어오기 전까지 컴퓨터 언어는 C, C++, Java만 있는 줄 알았습니다.

중요한 것은 이제부터 4년간 얼마나 기본기를 탄탄하게 하느냐이지, 배경지식은 중요하지 않습니다.

10년 뒤에서 행복하게 본인이 소프트웨어 공학도로서 업계든 학계에서 잘 지내는 것이 중요하지 않겠습니까?

대학교에서 좀 고생하면 어때요, 그게 10년 뒤 본인의 모습만 아니면 되지.


2. for문부터 문제를 푸는데 막히기 시작했다

사실 이러한 부분은 파이선을 더 잘하냐 못하냐의 문제가 아닙니다. 바로 사고방식의 차이입니다.

프로그래머라는 직업은 근본적으로 문제해결을 하는 집단입니다.

이 세계에 존재하는 문제는 너무나도 다양하기 때문에, 각 문제마다 서로 다른 해결 방식이 존재할 수도 있고, 같은 해결 방식이 존재할 수도 있습니다.

그렇기에 이를 인식하고 필요한 곳에 필요한 해결 방법을 적용하는 문제 해결 능력이 매우 중요합니다.

즉, "이 문제는 for문을 써야해~"와 같은 과거 고등학교에서 공부한 유형식 암기 공부와는 매우 다릅니다.


현실에서 문제를 푼다고 생각해보세요.

도서관에 가서 만약 "반지의 제왕" 서적을 찾으려고 한다고 가정합시다.

만약 키오스크도 없고, 사서도 없이, 그저 넓은 방에 매우 거대한 책장 하나에 책이 쭉 있습니다.

그러면 우리는 어떻게 책을 찾아야할까요?


아쉽지만 거대한 책장에 있는 책을 하나 하나 살펴봐야겠군요.

그러면 책장의 가장 왼쪽 위에서부터 오른쪽 아래까지 하나 씩 쭉 훑어야겠습니다.


한 2시간 훑었을까요? 드디어 찾았네요! 49번 행의 24번째 책이었습니다.


그러면 지금 제가 이 문제를 해결하기 위해 실질적으로 "행동"한 부분을 볼까요?

1. 책장에 꽂힌 책을 하나 하나 순서대로 확인한다 (왼쪽위부터 오른쪽아래까지 훑는 과정을 일렬로 본다고 가정)

2. 책 제목이 "반지의 제왕"인지 확인한다

3. 책 제목이 "반지의 제왕"이면 탐색을 중단하고 책을 대출한다.


이걸 그대로 영어로 옮겨볼까요?

1. for all the books in bookshelf, check books from top-left to bottom-right

2. check whether the title matches "The Lord of the Rings"

3. if the title matches, then stop the search, borrow the book.


이걸 좀 더 논리적으로, 쓸데없는 문법적 요소 삭제하고 작성해보겠습니다.

for top-left book to bottom-right book in bookshelf

    if the book's title equals to "The Lord of the Rings"

        borrow the book

        stop search


이걸 그대로 코드로 옮깁니다

for book in library.bookshelf:

    if book.title == "The Lord of the Rings":

        library.borrow(book)

        break


이게 문제 해결입니다.


이런식으로 순서에 따라 문제 해결하는 것을 절차적 프로그래밍이라고도 부릅니다.


3. 주위 사람들을 따라가기에는 아직 부족한 것 같다

상관 없습니다. 지금 당장 남들보다 잘해서 얻는 것이 무엇입니까?

언제나 남들보다 더 잘하거나, 비슷하게 잘할 수는 없는 것입니다.

프로그래머는 경쟁하는 사람들이 아닙니다. 만약 경쟁을 원한다면, 경시대회를 나가는 것이 맞습니다.

프로그래머는 그저 좋은 프로그램을 작성하는게 중요하지, 남들과의 비교가 중요한 업계가 아닙니다.

그렇다고 해서 못해도 괜찮다는 의미는 아니지만, 남들과의 비교는 의미없다는 의미입니다.

그 어느 대학에서 4.0에 가까운 학점을 받는다 하더라도, 나중에 본인이 작성한 프로그램이 버그 투성이고, 성능도 별로면, 그건 실력이 없는 프로그래머입니다.

그 어느 학생이 당신보다 지식이 많고 알고 있는 알고리듬이 더 많다고 하더라도, 그 학생이 작성한 화려하고 기교 넘치는 프로그램이 성능도 안나오고 버그 투성이면 그것도 실력이 없는 프로그래머입니다.


걱정하실 필요 없습니다.

기본기만 잘 갈고 닦으면, 포트폴리오가 빈약해도, 나중에 코딩 면접에서 다 알아줍니다.


물론 코딩 면접까지 가려면 서류는 붙어야하니 그렇다고 학점을 1.0 수준으로 개판치면 안되겠죠? 결국 코딩 실력을 처음 배우는 것도 어찌보면 대학 수업이니...^^


4. 파이썬 실력을 늘리기 위해 어떤 문제를 풀어보고 스스로 어떤 자세를 갖는것이 프로그래밍 공부를 하는데 있어 도움이 되는지 알고싶다

파이썬 실력이 중요한게 아닙니다.


프로그래밍 실력이 중요한 것입니다.


파이썬에 새로운 기능들이 중요한게 아닙니다.


파이썬에서 제공하는 핵심적인, 모든 언어에 통용되며 소프트웨어 공학도에게 통용되는 개념들을 잘 익히셔야합니다.


입출력, 파일입출력, 반복문, 조건문, 형type, 모듈, 리스트, 개체class 등.


옆에 학생이 for 문으로 푸는 문제를 한 줄로 화려하게, 푼다고 기죽을 필요 없습니다. (참고로 회사에서 저렇게 작성하면 뚝배기 깹니다)


프로그래머의 기본은 화려함, 새로운 지식을 많이 알고있음이 아니라,

1. 풀어야할 문제를 잘 인식하고, 풀 수 있는 논리적 사고방식이 존재함 (컴퓨팅적 사고방식)

2. 프로그래머의 핵심적인 문법을 이해하고 사용할 줄 앎 (입출력, 파일입출력, 반복문, 조건문, 형type, 모듈, 리스트, 개체class, 비트 연산, 자료구조, 알고리듬, 네트워킹 등)

3. 로우레벨에 대한 이해 (나중에 객체지향프로그래밍 수업 등에서 C/C++와 같은 언어에서 배우실 겁니다 ^^)

4. 코드의 가독성이 보장됨 (a = 3, one-line for loop과 같이 가독성 떨어지는 코드 짜지 말라는 의미입니다)

5. 필요에 따라 같은 문제에 대해 풀이 방식이 달라짐 (재활용성이 필요할 경우, 성능이 중요할 경우 등)


위와 같은 부분이 중요합니다.


이러한 부분을 공부를 그래서 어떻게 하느냐?

아래는 개인적인 추천입니다.


1. 실제로 프로젝트를 진행해본다. (텀프로젝트. 본인이 문제를 정의하고, 그에 대해 스스로 문제를 해결하는 능력 기름)

2. 모르는 부분이 나올 경우 구글링, 특히 stackoverflow를 애용하자

3. (개인적 강추) KNK C Programming: A Modern Approach라는 책을 읽고 C 언어를 학습해보자. 어차피 객체지향프로그래밍 잘하려면 C 언어의 핵심(포인터, 배열, 형type 등)을 알고 있어야함

4. 인터넷에 존재하는 현업 개발자들이 제작하는 여러 튜토리얼들 참고. (udemy, YouTube 등에 현업자 출신 개발자가 만든 영상들이 있음. 단, 반드시 경력 사항에 현업 개발자여야함. 만약 강사의 경력이 현업 개발자가 아닌, 본인이 만든 강의 만들어 팔아먹은 것 밖에 없다면, 걸러야함. 쓰레기 강의일 확률이 매우 높음)


아래는 제가 실제로 공부한 방법입니다.

http://mobilelab.khu.ac.kr/webpythonbbs/?board_name=PythonBBS&search_field=fn_user_name&search_text=%EC%A3%BC%EB%AF%BC%ED%95%98&vid=1774 


개인적으로 추가적으로 추천하는 인터넷 강좌가 있다면...

경희대 선배의 Unity 강의 https://www.udemy.com/course/retr0-unity/

캐나다에서 오랜 기간동안 AAA급 게임 회사들과 웹 쪽에서도 리드로 활약한 프로그래머의 POCU Academy: https://pocu.academy/ko (유튜브 https://www.youtube.com/channel/UC63J0Q5huHSlbNT3KxvAaHQ)

Suraj Sharma https://www.youtube.com/channel/UC2i39AOpDSlO1Mrn1jQ8Xkg





댓글
이전기출문제2020-05-30
다음step 16실습문제 관련 질문입니다.2020-05-30