Cards you may also be interested in
프로그래밍이나 해볼까? 할때 읽어 보면 좋을 글
안녕하세요, 여러분. 저는 최근 네이버, 카카오, 라인, 쿠팡, 배달의 민족 중 한곳에 입사확정을 받았습니다. 이 글은 제가 어떻게 프로그래밍을 시작했고, 입사확정까지 어떠한 일들을 했으며, 혹시라도 프로그래밍에 조금이나마 관심을 가지고 계신 분들에게 정보를 드리기 위해서 작성되었습니다. 다소 주관적이고 편협하더라도 이해해주시기 바랍니다. 언제나 수정 요청이나 생산적 비판은 환영입니다. 제가 프로그래밍을 업으로 삼아야겠다고 생각한 것은 정확히 1년 전입니다. 하지만, 프로그래밍을 만난것은 아마 2년 전일것입니다. 내가 프로그래밍을 좋아하는 지 알아보기: 2년 전 세상의 모든 미디어가 AI어쩌구 저쩌구 빅데이터 어쩌구 저쩌구로 도배된적이 있습니다. 유튜브를 자주 보던 저는 포프 킴이라는 사람의 유튜브를 우연히 보게되고 정기적으로 보게 되었습니다. 이분의 책이 있다는 것을 알게 되었고, 이 책을 통해서 내가 프로그래밍을 좋아하는지 아닌지를 알게 되었습니다. 정말로 즐겁게 읽었고, 실습도 정말 재밌게 했습니다. 아직도 그 때의 분위기나 상황이 생생히 기억날 정도로 좋았습니다. 그 후에 잘 다니던 해외영업 직을 그만두고, 생명정보학이라는 학문을 배우러 대학원 유학을 갑니다. 생명정보학은 한마디로 표현하자면, 생명체들이 만드는 정보들을 전부 모아서 특정 컴퓨터 기술을 통해 새로운 사실들을 발견하는 학문입니다. 제가 갔을때는 인공지능을 통해서 문제를 푸는 시도를 하고 있었습니다. 제 전공이 화생공이었기 때문에 생명정보학을 통해서 컴퓨터를 하는것이 좋겠다고 생각하여 들어갔지만, 생각보다 컴퓨터를 사용하는 일이 적고, 데이터를 분석하는 일이 많아서 응용통계학이나 수학을 위주로 공부하게 되었습니다. 그때 배운 수학이 공부할때 너무나 큰 도움이 된것은 사실입니다. 이때 저는 SW엔지니어링을 좋아한다는것을 알게되었습니다. 수학적으로 무언가를 증명하는 것 보다. 무언가 만들고 활용하는 것에 관심이 많아서, 유학 도중 컴공 학부과목을 청강하고 결국 중퇴를 하고 귀국하게 됩니다. 본격적인 프로그래밍 공부법: 저는 개인적으로 프로그래밍에서 가장 중요한 언어는 영어라고 생각합니다. 옛날에 제가 아이엘츠 7.0을 받고서 도탁스에 영어 공부법을 올린적이 있는데 제가 글을 정리하다보니 지워 버렸습니다. 언젠간 다시 올려보도록 하겠습니다. 영어가 기본이라고 생각합니다. 그 이유는 한국 커뮤니티가 요즘은 상당히 좋아졌다고 하지만서도, 아직은 상당히 부족합니다. 잘못된 정보들이 전달되는 것이 많고, 깊게 공부하려면 결국 원서를 보게되는것이 현실입니다. 물론, 한국 서적중에서도 외국 서적들보다 좋은 책들이 많습니다. (특히, 자바, 스프링 관련해서는 그런것 같습니다.) 당장, 영어를 못하시더라도 충분히 연습하시고 꾸준히 준비하는 것이 프로그래머로서 너무나 중요한것 같습니다. 유데미(Udemy)강의를 들을 수 있는 정도면 충분해 보입니다. 아 또 이분이 등장해버렸네요... 이제 본격적인 프로그래밍 공부를 알아 보겠습니다. 대충 제가 보니 두가지 유형이 있는것 같습니다. 국비와 독학, 국비는 학원, Saffy, 우테코, 42Seoul, 부스트코스, 카카오브레인 등을 전부 포함해서 지칭하겠습니다. 독학은 말 그대로 혼자 공부하는 것을 말합니다. 저는 개인적으로 독학을 추천합니다. 독학하는 방법을 알아가는 것이 길게 볼때 더 큰 이득이라고 생각해서입니다. 저 국비로 통칭된 것들 중에는 분명히 독학을 장려하는 프로그램도 있을것입니다. 그런 곳에 들어가서 경제적인 어려움을 해결하는 것도 좋아보입니다. 보통 월 100만원 정도의 교육비?가 나옵니다. 저도 그렇게 생활비를 충당했습니다. 국비로 정했으면 커리큘럼을 따라가면 됩니다. (근데, 네카라쿠배가 목표라면 비추이고, 스타트업이나 SI가 목표라면 추천합니다.) 독학에서는 무엇을 공부해야 하나: https://okky.kr/article/314296 저는 해당 글을 믿었습니다. 저 글 밑에 네이버의 CTO 송창현 센터장님, NHN 기술 임원 등등이 직접 댓글을 다셨습니다. 해당 댓글들의 요지는 신입을 뽑을때, 프레임워크나 툴들을 잘다룰 줄 아는것이 크게 플러스가 되지 않는다는 말입니다. 또, 학벌이나 스펙, 영어점수등은 전혀 고려하지 않는 다는것입니다. 저 분들이 말씀하시는 기본기는 결국, 대학교 컴공에서 배우는 것들입니다. 대표적으로 자료구조와 알고리즘, 운영체제, 네트워크, 데이터베이스 등이 될것입니다. 저는 운이 좋게도 해당 글을 일찍 발견했고 믿고 공부를 시작했습니다. 많은 대학교 홈페이지(MIT, Stanford, 서울대, 카이스트, 등)을 돌아다니면서 해당 과목의 전공서들을 비교했습니다. 그 결과는 이렇습니다. 자료구조 알고리즘: CLRS로 유명합니다. 해당 책을 이용한 MIT강의에 자막이 달려 나오더라고요. 추천드립니다. 운영체제: 너무나 유명한 책이고 인프런이란 곳에서 공룡책 강의가 무료로 풀려있으니 이해가 안되면 강의를 먼저보고 보시는것을 추천드립니다. 공룡책이 부담스러우시면 위의 책도 너무 좋습니다. 추천드립니다. 네트워크: 이 분야는 책이 워낙 많더라고요 그냥 가장 좋아보이는 것인 이책을 사서 봤습니다. 빠르게 정리할때는 이책이 좋습니다. 데이터베이스: 딱히 열심히 공부하지 않았지만, 기본서는 읽었습니다.  별로 좋지는 않았습니다. 조금 쉽습니다. 저도 db는 약해서, mysql을 제대로 공부하려고 합니다. 그 외에 코딩테스트나 Java를 배우기 위해서 구매했던 책들이 엄청나게 많습니다. Cracking the coding Interview 자바의 정석 자바 ORM 표준 JPA 프로그래밍 인프런의 김영한님 강의 전부 토비의 스프링도 샀는데 너무 오래되고 지루해서 미루고 있습니다. 이펙티브 자바 이 외에도 조영호님의 객체지향의 사실과 오해, 오브젝트 등등 을 포함한 서적들을 읽었습니다. 여기까지가 제가 본 서적 정리입니다. 코딩테스트 준비: 네카라쿠배를 목표로 한다면, 혹은 어느정도 이상의 기업을 목표로 한다면, 무조건 넘어야할 산입니다. 코테를 못치면 면접의 기회도 주어지지 않기 때문에 1번으로 준비해야합니다. 못해도 하루에 3문제는 풀어야합니다. 너무나 유명한 사이트들을 추천하겠습니다. https://www.acmicpc.net/ 삼성 기출로 유명한 백준입니다. https://leetcode.com/ 리트코드 해외기업 문제와 면접에서 물어보는 알고리즘 문제들을 풀어볼 수 있는 곳입니다. https://programmers.co.kr/ 카카오 기출 문제를 풀 수 있고, 대부분의 기업들이 해당 홈페이지를 통해 코테를 치룹니다. 익숙해질 필요가 있습니다. 저는 개인적으로 백준에서 500문제 (플레티넘 2입니다. 백준 중급강의 강추입니다!) 리트코드 250문제 (면접에서 엄청난 도움이 되었습니다.) 프로그래머스 100문제(카카오 기출과 환경에 익숙해지기 위해서 풀었습니다.) 이 정도가 되시면, 왠만한 기업의 코테는 뚫을정도의 실력이 되실겁니다. 컨디션 난조면 떨어질 수 도 있습니다. 면접: 기술면접은 위에서 기본과목을 잘 준비했기 때문에 깃허브에 면접질문 모아놓것들을 빠르게 훑으면서 공부하면, 기술면접같은 경우 통과하는데 무리가 없을 것입니다. 다만, 인성면접은 저도 잘 모르겠습니다. 축하합니다. 네카라쿠배에 도전하실 준비가 되어 있습니다. 공부법: 저는 11개월간 하루에 12~15시간을 공부에 쏟았고 주말에도 쉬지 않았습니다. 공부법은 뽀모도르 공부법을 사용했고, 구글타이머를 사용해서 20분 공부하고, 10분간 예능이나 드라마를 보며 쉬는 방식으로 했습니다. 가장 효율적이었고 스트레스도 적었습니다. 사담: 솔직히 말씀드리면, 정말 프로그래밍을 좋아하셔야 하루에 12~15시간을 온전히 쓰실 수 있습니다. Hello Coding - 포프킴 책을 한번 해보시고, 본인에게 맞는지 아닌지 판단해주세요. 한 4시간이면 아마 전부 하실 수 있을겁니다. 그러고 해당 경험이 정말 재밌고 신나셨다면 당첨입니다. 지루하게 긴글 읽어주셔서 감사합니다 깜빡했습니다. 제가 존경하는 분중에 한분인 홍정모님의 모든 강의를 추천합니다. 이번에 파이썬 강의 내신다고 하니까 그것도 강추드립니다!! 킹갓제너럴 정모홍 화이팅입니다! 아 그리고 저는 백앤드 개발을 지망했습니다. 프로그래밍에도 상당히 다양한 분야가 있습니다. 하지만, 해당 내용들은 대부분의 개발자들에게 공통되는 부분만 적었습니다.(Java나 Spring만 무시해주세요.) 출처: 도탁스
우리가 바라는 리더의 품격
예일대의 심리학자 어빙 재니스에 의하면, 집단사고는 집단의 구성원들이 합리적인 결정을 할 수 없도록 만드는 왜곡된 사고방식이며, 응집력이 강한 집단에서 구성원들이 어떤 현실 문제에 대한 판단을 내릴 때 만장일치를 이루려고 하는 사고의 경향 때문에 생겨난다고 한다. 사람들은 자기들의 집단이 천하무적이라는 착각과 극단적인 낙관주의를 품는 경향이 있으며, 이런 생각에 방해가 되는 것들은 쉽게 무시해버린다.  또 자신들의 도덕성에 대해 지나치게 확신을 품은 나머지 어떤 목표를 이루는 수단의 부도덕성에 대해 심각하게 여기지 않는다. 그러다 보니 경쟁집단이나 적대 집단을 약해 빠진 겁쟁이, 또는 사악한 무리로 여기는 고정관념을 품는 수가 많다. 그렇게 되면 토론은 물건너가고 목소리가 큰 일부의 주장에 집단 전체가 휩쓸리게 된다. 다른 구성원이 제기하는 반론을 쉽게 묵살하고, 의혹이 있어도 그것을 억눌러서 순응시키려 하며, 의식하지 못하는 사이에 그들의 시각에 위배되는 정보를 숨기는 경우도 생긴다. 집단사고 외에도 지나치게 경직된 상하관계와 위계질서, 그리고 폐쇄적인 전문가집단의 노출 불안 등이 조직 내에서 논쟁이 일어나지 못하도록 가로막는다. 관료적이고 억압적인 분위기에서는 논쟁과 분명한 의사 전달이 방해받기 때문에, 명백한 위험을 앞에 두 고도 하급자가 상급자에게 그 사실을 제대로 전달하기가 어렵다. 학연, 지연, 혈연 등의 특정 인맥을 중시하는 경우 집단사고의 위험에 빠지기 쉽다. 대체로 동일한 환경에서 성장한 사람들은 비슷한 사고방식을 가지고 연줄과 위계질서로 얽혀 있기 때문에 자유로운 토론을 하기가 힘들다. 아무리 엄중한 위계질서라고 해도 사실과 진리를 가로막아서는 안 된다. 또 비전문가들이 상식적으로 쉽게 받아들이지 못하는 전문가들의 오랜 통념은 다시 검증받아야 한다. 그런데 그런 일들이 현실에서는 쉽지 않은 것이 사실이다. 조직, 집단, 사회의 결집된 다수가 한 방향의 생각을 갖고 있을 때, 구성원 모두의 개별적인 생각들이 다 모인 것이라기보다는 한두 명 또는 몇몇 사람의 생각에 대다수가 별생각 없이 동조한 결과인 경우가 많다. 왜 그럴까? 누군가 목소리가 큰 사람, 권위가 있는 사람, 많이 알고 있을 것 같은 사람이 의견을 내면 거기에 동조하려고 한다. 사람들은 인지적으로 게으른 데다가 권위 또는 상식에 대해 의문을 제기하는 것은 많은 노력과 위험 감수가 필요하다. 그래서 기회가 있을 때마다 인지적 노력을 덜하고 절약하려는 것이다. 집단사고에 반대되는 것이 ‘집단 지성(collective intellectual)’ 이다. 집단 지성은 다수 개체들이 서로 협력을 통해 얻게 되는 집단의 지적 능력을 말한다. 집단 지성은 한 사람의 능력보다 훨씬 뛰어난 능력을 발휘할 수 있지만, 때로는 적극적인 몇몇에 의해 방향성이 결정되고, 사회적 분란을 초래하며, 비전문가들이 결정함으로써 신뢰성에 의심을 받을 수 있다. 이때 중요한 것은 사람들이 한쪽으로 쏠리지 않고, 자신만의 생각으로 의견을 내는 것이다. 즉 다양성, 독립성, 분산화가 지켜지지 않으면, 집단 지성이 아니라 집단사고로 흘러가기 쉽다. 집단 지성과 집단사고를 가르는 핵심에는 반대의견을 어떻게 다루느냐의 문제가 있다. 반대의견을 무시하고 억압하면 다양한 의견이 검토되지 못하고 쉽게 집단사고의 함정에 빠진다. 반대 의견을 개진할 기회가 주어지더라도 깊은 수준에서 검토되지 못하면 의사 결정의 실패를 빠르게 인식하고 유연하게 대응할 수는 있으나, 의사 결정 자체를 바꾸거나 사전적으로 실패를 방지하기는 어렵다. 따라서 반대의견을 폭넓게 청취할 뿐만 아니라 기존 의견과 비교하면서 깊은 수준에서 검토하여 통합하고 창조적인 대안을 창출하려는 노력이 필요하다. 현실 세계에서 반대의견이라 함은 추상적이고 중립적인 아이디어가 아니라 구체적인 사람의 발화에 해당한다. 결국 사람에 대한 이해와 존중의 자세가 집단 지성을 끌어내는 원동력이다. 그래서 리더의 역할이 중요하다. 만일 리더가 처음부터 확고한 자신의 입장을 피력하고 다른 의견을 무시하는 태도를 보이거나 지나치게 단결력과 유대감을 강조하면, 구성원들이 보유한 많은 유익한 정보들이 표현될 수 있는 여지를 없애버린다. 집단 지성을 이끌어 내기 위해서는 타인을 존중하고 이해하며 개방적인 리더의 품격이 무엇보다 중요하다. 또 외부 전문가를 포함한 다양한 구성원의 존재를 소중한 자산으로 여겨야 한다. 그리고 부서의 기능과 개인의 전문성에 의존해서 특정 의견만을 청취하고 지시와 이행으로 이를 밀어붙이는 방식이 아니라, 기업 내 아이디어의 흐름을 원활하게 하는 동적인 조직 운영 방식을 활용해야 한다.