저는 대학에서 전산을 전공하지 않았기 때문에 미국에서 소프트웨어 엔지니어로 취업 준비를 하면서 개인적으로 따로 프로그래밍 공부를 하고 전산학 공부를 해야 했습니다. 소프트웨어 엔지니어로 테크니컬 인터뷰를 보는데 필수적인 알고리즘을 수강하지도 않았고 데이터 구조론은 거의 10년 전에 들은 것이라서 머리 속에 남아 있는 것이 거의 없었습니다. 그리고 외도해서 경영학 공부를 한다고 프로그램 세계와는 거의 4년 정도 떨어져 있다보니 제가 다시 소프트웨어 프로그래밍을 할 수 있을지도 의문이 들었습니다.
아무튼 되든 안되든 예일에 와서 전산학 수업을 들으면서 프로그래밍을 다시 시작해보게 되었습니다. 사람의 뇌라는 것이 참 신기한 것 같습니다. 손을 놓은지 4년이나 지났는데 이상하게 예전에 배웠던 것들이 조금씩 기억이 나고 시간은 좀 걸리지만 책을 찾아보면서 프로그래밍을 다시 할 수 있다는 것을 깨닫게 되었습니다. 사실 이와 비슷한 경험을 한 것은 몇가지 있습니다. 고등학교와 대학교 때 농구를 좋아해서 농구장에서 시간을 많이 보냈는데 거의 5년이 지나서 다시 농구를 해보니 체력은 딸리지만 몸이 기억해서 그 때 자주 쓰던 여러가지 동작들을 할 수가 있었습니다. 예전에 탁구를 좋아해서 학교에서 탁구 수업을 듣고 또 탁구장을 몇 개월동안 다니면서 열심히 배웠습니다. 미국에 와서 탁구 칠 일이 없어 몇 년동안 탁구를 치질 않았는데 2년 전인가 회사에서 탁구 대회가 열렸는데 한명씩 제치다 보니 우승까지 할 수 있었습니다. 그때 느낀 것이 몇 년동안 탁구를 치질 않아도 몸이 예전에 연습한 것을 기억하고 있는 것을 알 수 있었습니다.
이런 일련의 경험들은 저에게 삶에 대한 태도를 다시 일깨워 주게 됩니다. 지금 하는 것이 재미가 있고 또 열심히 한다면 나중에 반드시 도움이 되리라는 것입니다. 중간에 다른 많은 일들이 생겨서 중단할 수도 있지만 지금 흘린 땀들은 나중에 다시 이 일에 도전하게 되면 처음 도전하는 것보다 훨씬 빠르게 성장하고 또 다음 단계로 올라갈 수 있게 해주리라고 믿습니다.
저는 월요일에서 금요일은 거의 매일을 프로그래밍 코드를 보면서 삽니다. 하지만 예전에 배웠던 C/C++, Java 등의 문법과 제가 따로 공부했던 알고리즘, 데이터 구조를 다 기억하고 있냐고 물어보시면 제 답은 NO입니다. 매일 쓰는 프로그래밍 언어가 아니다보니 예전에 공부했던 것을 대부분 잊어버렸고, 지금 제일 많이 쓰는 어셈블리어와 C언어도 제가 자주 쓰는 부분이 아니면 책을 다시 찾아봐야 합니다. 그리고 지금은 다른 일을 찾는 것이 아니니 그것을 따로 공부할 이유도 없어서 예전 잡 인터뷰 때 달달 외웠던 지식들은 거의 사라지고 희미하게 남아있습니다.
하지만 한가지 믿는 것은 그 때 열심히 노력하고 공부했으니 분명히 다시 공부한다면 그 때 보다 훨씬 빠르게 이해하고 다시 그 레벨로 올라갈 수 있으리라고 생각합니다. 운동을 안 하게 되면 근육은 약해지지만 다시 꾸준히 예전에 하던 운동을 하게 되면 금방 익숙해지고 빠르게 예전 레벨로 올라갈 수 있는 것처럼요.
아무튼 여기에 몇가지 제가 전산학 및 프로그래밍을 공부했던 책과 유용한 링크들을 올려놓으려 합니다. 제가 좋아하는 책은 우선 두껍지 않고 그림이 많은 책입니다. 컴퓨터 관련 책이 두꺼운 경우가 많은데 이것을 다 읽고 이해하려면 시간이 무한대로 들어가고 읽는 사람도 많이 지치게 됩니다. 그리고 사실 그 모든 내용이 다 필요하지도 않습니다. 제일 좋은 책은 이해하기 쉽게 그리고 간단하게 기본 이론을 정리해 주는 책입니다. 기본이 바로 선다면 나머지 관심 분야는 자신이 인터넷이나 다른 책을 통해서 찾아보면 됩니다.
어느 정도 프로그래밍 기본이 되어 있지만 미국에서 소프트웨어 엔지니어로 취업하시려고 하시면 반드시 원서로 관련 프로그래밍 언어를 다시 공부해 보시기 바랍니다. 개념을 알고 있다고 해도 이것을 영어로 표현하는 것은 다른 영역의 문제입니다.
여기 있는 책의 사진을 클릭하시면 아마존에서 더 많은 설명과 리뷰를 보실 수 있습니다.
1. C 프로그래밍
C Programming in Easy Steps, Mike McGrath, 4th Edition, In Easy Steps
: 이 책은 C언어를 다시 공부하면서 아마존에서 찾게 된 책입니다. 책도 얇고 그림이 많아서 C언어의 전체적이고 기본적인 문법을 정리해 볼 필요가 있을 때 이 책은 부담없이 읽을 수 있는 좋은 책인 것 같습니다. 저도 이 책을 읽고 C언어를 복습하고 잊고 있었던 많은 부분들에 대한 기억을 되살리게 되었습니다. C++를 공부하기 전에 C를 잘 정리해 볼 수 있는 좋은 책입니다.
2. C++ 프로그래밍
C++ Programming in Easy Steps, Mike McGrath, 4th Edition, In Easy Steps
: 이 책도 얇고 그림이 많아서 부담없이 C++에 대해서 공부할 수 있는 책입니다. 위의 C언어 책과 같이 같은 저자가 썼는데 그림도 많고 이해하기 쉽게 잘 만든 책입니다. 제가 생각하는 좋은 책은 핵심을 간단하게 그리고 이해하기 쉽게 쓴 책입니다. 두꺼운 책은 먼지만 쌓입니다.
Explorer C++: http://zoo.cs.yale.edu/classes/cs427/2012a/chapters.html
: 이 책은 Ebook이고 Alice E. Fischer이라는 뉴헤이븐 대학 교수님이 쓴 책입니다. 예일에서 Object Objected Programming 수업을 들을 때 썼던 책인데 조금 어렵지만 상당히 잘 만든 책입니다. 이 책을 공부하면서 C++ 문법과 객체지향 개념에 대해서 잘 공부할 수 있어서 잡 인터뷰에 많은 도움을 받았던 책입니다. 양이 적지는 않지만 한 학기 정도 계획을 세우고 읽는다면 객체 지향 프로그래밍을 하는데 많은 도움을 줄 수 있을 것입니다. 그리고 프로그래밍을 하면서 많이 헷갈릴 수 있는 parameter passing, l-value & r-value, static class, copy constructor, derivation, inheritance, polymorphism, virtual function 등 꼭 필요한 지식들을 잘 이해할 수 있을 것입니다.
3. Data Structure & Algorithm
Data Structures and Algorithms Made Easy: Data Structure and Algorithmic Puzzles, Second Edition
: 전산을 학교에서 전공했다면 교과서를 통해서 전산학의 핵심인 데이터구조와 알고리즘을 공부했겠지만 학부 때 전산학 전공자가 아니라면 그 과목들을 따로 공부하기가 정말 난감합니다. 원서로 된 교과서를 들고 처음부터 끝까지 본다는 것은 공부를 오랫동안 해왔던 저로서도 사실 너무 힘든 일입니다. 그것보다는 쉽게 그리고 핵심을 잘 정리해 놓은 이 책을 보는 것이 낫지 않을까 생각해봅니다. 아마존의 리뷰를 보더라도 이 책이 얼마나 잘 씌여졌는지 알 수 있습니다. 이 책을 통해서 데이터구조와 알고리즘을 정리해 보시기 바랍니다.
4. Programming Interview
제 개인적 의견으로는 다음 두 책만 충분히 공부하고 다 풀어보아도 프로그래밍 인터뷰 준비는 80% 준비된다고 생각합니다. 일반적인 IT기업의 프로그래밍 인터뷰의 많은 문제들이 이 책의 범위에서 나오고 또 조금 더 변형되어서 나오는 것 같습니다.
Programming Interviews Exposed: Secrets to Landing Your Next Job
Cracking the Coding Interview: 150 Programming Questions and Solutions
위의 책들을 열심히 파셔서 프로그래밍 인터뷰에서 좋은 성과를 얻으셨으면 합니다. 추후 괜찮은 책들을 계속 업데이트 하겠습니다.
학교에서 정보시스템학과에서 전공 중입니다. 아무것도 모르는 1학년이기도 하구요… 관심 있으셨던 MIS 학과입니다. http://www.hanyang.ac.kr/code_html/H3HADE/indexA1.html
저희 학과의 커리큘럼입니다.
전 매니지먼트보단 전산 쪽에 더 관심이 갑니다.
저는 문과였기 때문에 수학적으로 부족한 게 많습니다. 후에 공부를 위해 어떤 수학을 공부해야할까요? 학과 커리큘럼에 있는 것만 해도 충분할 지가 궁금합니다.
그리고 영어가 많이 부족해 영어로 진행되는 수업과 원서가 버겁게 느껴집니다. 번역본과 한글책을 따로 사서 시험을 준비했지만 더이상 그러기가 싫기도 합니다. 1학년을 마친 뒤 1년 휴학을 할 생각입니다. 토플 공부도 하며 주된 목표는 CS에 대한 전반적 이해도 상승입니다. 컴퓨터구조와 시스템, 네트워크, 웹, 앱, 데이터구조와 알고리즘, 데이터베이스 를 1년안에 하고 싶습니다. 너무 큰 욕심일까요? 커리큘럼에 나와있다시피 c와 c++언어는 한글책으로 공부를 했고 책에 있는 문제 푸는 정도의 수준입니다. 누군가와 프로젝트를 해본 경험은 없습니다. 데이터구조와 알고리즘은 영어수업과 원서의 두꺼움에 압도돼 공부를 잘 하지 않았습니다… 부끄럽습니다. 어렵기도 했구요. 데이터베이스는 그저 그런 공부를 해왔습니다. 1년의 휴학 동안 추천해주신 데이터구조 알고리즘 원서를 구입할 생각입니다. 기존의 교재는 너무 무섭습니다… 데이터베이스는 기존 원서교재를 그대로 사용할 생각이구요. 하지만 아직 배우지 않은 앞서 말한 시스템이나 네트워크 등등의 분야도 원서로 공부할지 고민이 됩니다. 1년이란 시간 동안 저 과목들을 한글책 또는 번역본으로 공부하는 게 나을 지 아니면 시스템/네트워크 책을 1년동안 붙잡고 있는 한이 있더라도 원서 읽는 능력을 배양시키는 게 좋을지 모르겠습니다.
뭐라고 호칭해야 될지 몰라 글쓴이로 하겠습니다.
글쓴이님도? 이상하니 그냥 이승훈님으로 하겠습니다.
승훈님도 영어수업과 원서교재로 공부하셨을텐데 학부 성적을 잘 받으셨다는 걸 보면 그런 면에서 저처럼 힘든 점은 없으셨던 것 같아 부럽습니다… 수능에서 영어 만점을 받은 건 정말 아무 도움도 안됩니다. 거북이같은 독해속도와 저질해석으로 인해 그 두꺼운 전공서적이 힘에 부칩니다. 헌글로 해도 어려운 걸 되지도 않는 영어로 하고 있으니…
한글 책을 공부한뒤 복학 후 학부 생활 중 원서로 다시 공부하기 보단 처음부터 오래 걸리더라도 원서로 공부하는 습관을 들이는게 나을까요? 1년이란 길다면 긴 시간이 두 세권정도의 책을 보는 것으로 끝날까봐 불안하기도 합니다…
외국에서 성공하신 뒤 어쩌면 관심 없을 수 있는 국내 소프트웨어엔지니어들을 위해 이런 글로 또 댓글에 답변해주시며 힘 써주시는 걸 보며 많이 느꼈습니다. 그 도전정신과 봉사정신을 닮고싶습니다. 하지만 제가 그런 재능이 있을지 의문입니다… 열심히 하겠지만 어디까지 해낼 수 있을지 두려움 먼저 앞섭니다…
안녕하세요. 나중에 전산쪽으로 일하시는 것에 관심이 있으시다면 전산을 복수전공하실 것을 권합니다. 전공중에 겹치는 것이 많아서 그래도 상대적으로 짧은 시간 안에 하실 수 있지 않을까 생각합니다. MIS라는 것은 경영학과 전산 사이에서 걸쳐 있는 학문입니다. 어쩌면 두 개의 시너지 효과를 낼 수도 있겠지만 어느 것도 깊게 배우지 않아 이것도 저것도 아닌 전공이 될 가능성도 높습니다. 나중에 소프트웨어 엔지니어로 일할 생각이시면 전산이라는 기본 학문을 전공하시는 것이 더욱 많은 도움이 될 것 같습니다.
저도 고등학교 1학년 때 원서를 보기 시작했었는데 약 한달 정도 보다가 도저히 못 보겠더군요. 카이스트 입학을 하고 나서는 싫어도 거의 대부분의 수업이 영어 원서를 써서 그것을 볼 수 밖에 없었습니다. 번역본과 한글책이 같이 있는 것을 보시면 조금 더 도움이 되겠지만 아무래도 한글책에 의존도가 생기지 않을까 생각합니다. 원서를 보는 것이 힘들지만 1년이 지나고 2년이 지나고 할 때마다 조금씩 나아집니다. 나중에 미국에서 일할 생각이 있으시면 분명 몇 년동안 그렇게 노력하셔야 할 것입니다. 그리고 대부분의 스펙과 최신 정보들이 영어로 나오는 지금에는 영어를 잘 하지 못하면 많은 발전을 기대하기 힘들게 됩니다. 저도 미국에서 살고 미국 사람들과 일하고 있지만 영어 읽기는 여전히 한글보다 느리고 어려운 부분도 많습니다. 부단히 노력하셔야 합니다. 영어가 모국어가 아닌 이상은 그 방법 밖에는 없는 것 같습니다.
CS에 전반적 이해를 하시려면 제가 가장 추천하는 것은 데이터 구조와 알고리즘입니다. 그 두 개만 잘해도 대부분의 미국 소프트웨어 엔지니어 입사 테크니컬 인터뷰를 통과할 수 있습니다. 데이터베이스, 네트워크 등등은 기본만 배우시고 특별하게 그쪽으로 가실 것이 아니면 기본 지식만 아시면 됩니다. 번역본은 가능한 보지 마시고 한국 사람이 쓴 괜찮은 기본서가 있으면 그것을 보시고 기본 지식을 잡으시기 바랍니다. 그리고 원서를 시작하시기 바랍니다. 저도 원서를 한번 본다고 이해를 못했습니다. 학교 다닐 때는 보통 시험 치기 전에 7번 이상씩 읽었습니다.
저도 학부 시절에 원서로 공부하느라 힘든 것들이 많았습니다. 이해가 안되고 번역본도 없어서 수십번을 읽었는데 이해가 안되어서 다른 원서를 도서관에서 4-5권씩 빌려서 공부했던 기억도 있습니다. 제 학부 성적은 4학년 시작하기 전까지 2.6이었습니다. 그래서 5학년까지 1년 더 다니고 3.5까지 만들어서 유학 갔습니다. 그러면서 재수강도 많이 했었고 하루 3-4시간씩 자면서 공부했었습니다.
저도 전공에서 좋은 학점 받기가 힘들어서 고민하다가 한 것이 학기가 시작하기 전에 원서를 한번 다 보고 들어가는 것이었습니다. 물론 방학 때 그렇게 하는 것이 힘들지만 그렇게 하니 학기가 훨씬 수월하고 알차게 보낼 수 있었습니다. 아무튼 많은 노력을 하셔야 합니다. 학교 다닐 때 동기들에 비해 저는 그렇게 머리가 뛰어난 편이 아니었습니다. 그래서 누구보다 노력을 많이 했습니다. 저는 중학교 때 2시간씩 자면서 공부했습니다. 고등학교 때는 밤 12시까지 공부하고 기숙사에 들어와서 또 공부했습니다. 대학교 때는 새벽까지 도서관에서 살았습니다. 그런 노력이 있었기에 여기까지 오지 않았을까 생각합니다.
영어 원서… 저는 한 문장이 이해 안되면 수백번을 읽고 생각하고 다른 책도 찾아봤습니다. 그렇게 되자면 포기해야 되는 것도 많고 시간도 엄청 많이 듭니다. 하지만 이루고자 하는 것이 있으시면 노력하십시오. 점점 익숙해지고 쉬워질 것입니다.
좋은 감사합니다. 컴퓨터 구조도 중요한 과목 중 하나겠지요?
컴퓨터 구조도 중요한 과목입니다. 특히 지금 제가 하고 있는 일(펌웨어, 바이오스)에서는 필수적인 과목이죠. 하지만 일반적인 소프트웨어 엔지니어가 되기 위해 인터뷰를 보는 과정에서는 데이터구조와 알고리즘에 비해서는 중요도가 많이 떨어집니다. 전산학을 전공하셨으면 컴퓨터 구조 과목은 수강하셨으리라고 생각되지만 소프트웨어 엔지니어가 되기 위한 인터뷰에서는 특정 분야(하드웨어, 펌웨어, 시스템 소프트웨어 분야 등)를 제외하고는 이 과목과 관련된 질문이 많이 나오지는 않았습니다.