본문 바로가기
SW

커리어 스킬 - 1부 : 소프트웨어 개발자로 입문하기 (1 ~ 4장) (The Complete Software Developer's Career Guide)

by 라꾸스떼(YR) 2019. 12. 16.
반응형

[1장] 이 책의 활용법 (책 발췌)

[이 책의 목적]

[소프트스킬]에서는 경력을 비롯한 소프트웨어 개발자의 생활 전반에 초점을 맞추었다면 이 책에서는 오로지 경력에 집중한다.

 

[이 책의 목표]

소프트웨어 개발자로 입문하기/일자리 구하기/소프트웨어 개발에 대해 알아야 할 것/개발자로 일하기/경력 발전시키기

 

[이 책의 활용법]

특정 부나 특정 장만 읽어도 괜찮다. 이 책은 필요할 때 원하는 부분을 쉽게 찾을 수 있게 기획했다.

 

[반복과 실행]

이 책에 적힌 내용을 실행하지 않는 사람에게 이 책은 아무 도움이 되지 않는다.

자신의 뇌를 자신의 삶에 접목하고 싶은 생각이나 개념에 완전히 잠기게 반복하고 실행한다.

 

[일러두기]

-

[1부] 소프트웨어 개발자로 입문하기

"꿈을 위해 공부하고 계획하고 준비하느라 평생을 보낼 수도 있다. 하지만 일단은 시작해야 한다." - 드루 하우스턴(드롭박스 창업)

 

[2장] 입문하기

[내가 입문한 방법]

코딩 학습  != 소프트웨어 업계 입문

맞다.  코딩은 소프트웨어 업계 일 중 극히 일부이다...

 

[소프트웨어 개발자라는 직업]

다양한 분야의 소프트웨어가 존재한다. 단순한 자동화부터 복잡한 시뮬레이션 등...

하지만 무언가를 자동화 한다는 것은 그 일에 대해 꿰뚫고 있어야 한다는 것이다.

결코 단순한 프로그래밍만은 아니다. 

 

[문제 이해하기]

'소프트웨어 개발은 언제나 해결할 문제를 이해하는 지점에서 시작한다.'

때론 문제를 이해해도 해결하기 어려운 것들이 많다...

 

[설계하기]

사전 설계를 하고 만든 소프트웨어와 아닌 것의 차이는 유지보수를 해보면 안다.

물론 사전 설계를 했다고 다 유지보수가 쉬운 건 아니다...

 

[코드 작성하기]

'훌륭한 코드를 작성하는 데 도움이 될 필독서 두 권 : 스티브 맥코넬-Code Complete & 로버트 마틴-Clean Code'

다음에 읽어봐야지...

 

[테스트하고 배포하기]

코딩을 다 했으면 무작정 배포하지말고 컴파일과 테스트 먼저 한 후에 배포하자...

 

[코드 작성 그 이후]

디버깅할 준비하자... 런타임이 짧은 테스트용 케이스를 잘 만들어 두자...

 

[계획]

'목적지에 도달할 길은 여러가지다. 어떤 길이든 선택하고 꾸준히 나아가는 게 중요하다.'

꾸준함이 제일 지키기 어려운 것 같다...

 

[계획 준비하기]

'인생의 방향을 설정할 때 처음부터 충분한 시간을 들여 철저하게 자신의 생각을 점검해보는 사람은 많지 않다.'

이건 오히려 내 케이스가 이상한 것 같다...ㅋㅋㅋㅋ 특이할 정도...

 

[계획 세우기]

'실천 계획을 세울 차례다. 성취하고자 하는 목표에서 시작해 거꾸로 되짚어오면 손쉽게 계획을 세울 수 있다.

어떤 유형의 소프트웨어 개발자가 되고 싶은지 구체적인 목표를 세워라. 목표는 구체적일수록 좋다. 구체적인 목표를 세울수록 모든 것이 더 쉬워진다.'

언제가는 온전한 인디 게임을 만들어 볼 날이 올 수 있을까...? 이러고 있을 시간에 뭐라도 좀 만들어 봐야하는데...

 

['운동선수'가 되는 게 목표라면]

-

 

[사례 연구]

-

 

[3장] 당신이 배워야 하는 기술

[꼭 배워야 하는 핵심 기술]

-

 

[프로그래밍 언어 한 가지 익히기]

'한 가지 프로그래밍 언어를 꼼꼼히 배우는 데 집중하라. 진짜 자신감을 느끼는 언어가 적어도 하나는 있어야 한다.'

2개 정도 배우고 나면 다른 언어들도 기본적인 문법은 금방 익히게 되는 것 같다. 하지만 어설프게 여러개를 배우지 말고 하나라도 잘하자...

 

[코드를 구조화하는 법]

'코드 구조화란 주석을 줄줄이 달지 않고도 이해하기 쉽도록 코드를 잘 작성하는 것을 가리킨다. 원래는 코드만으로도 의사 전달이 가능 해야한다.

코드 구조화는 소프트웨어 개발의 예술성에 해당하는 영역이긴 하지만 그래도 반드시 신경 써야 하는 부분이다. 대부분의 개발자가 새 코드를 작성하는 일보다 기존 코드를 유지 보수하는 일에 훨씬 더 많은 시간을 쓰기 때문이다. 나중으로 미루지 말고 코딩을 처음 배울 때부터 깔끔하게 잘 작성하는 법을 배워두길 바란다.'

유지보수는 평생 짊어져야 한다. 책임감이 있는 개발자라면... 그러니 지금 당장은 남이 볼 코드가 아니라 하더라도 어디 내놔도 부끄럽지 않을 코드를 작성하자.

 

[객체지향 설계] ⇒ 설계 패턴

-

 

[알고리즘과 데이터 구조]

'까다로운 문제를 풀려면 알고리즘을 다양하게 변형하는 방법을 익혀두는 게 좋다. 데이터 구조, 알고리즘을 제대로 이해하면 어려운 프로그래밍 문제를 쉽고 명쾌하게 풀 수 있다. 배열/벡터/연결 리스트/스택/큐/트리/해시/세트 등'

탑코더, 게일 라크만 맥다월 - 코딩 인터뷰 완전 분석

기본이 되는 알고리즘과 데이터 구조는 필히 익히자.

 

[개발 플랫폼과 관련 기술]

요새는 워낙 크로스플랫폼 관련 기술들이 많아져 그 경계가 많이 무너졌고 개발하기도 쉬워진 것 같다.

그렇게 생각하다보니 내가 크롬북을 사용하고 있는 것일지도...

 

[프레임워크와 스택]

'프레임워크는 특정 플랫폼이나 복수의 플랫폼에서 코드를 개발할 때 사용하는 라이브러리 세트를 가리킨다.

스택은 애플리케이션 하나를 제대로 완성하는 데 함께 쓰이는 기술 세트를 가리킨다. 여기에는 일반적으로 프레임워크도 포함된다.

스택을 알면 애플리케이션 개발이 더 쉬워진다. 스택을 안다는 건 하나의 애플리케이션을 처음부터 끝까지 개발하는 데 필요한 모든 기술을 갖추었다는 뜻이다.'

그렇다. 풀스택 개발자는 유니콘이다. ㅋㅋㅋ

 

[데이터베이스 관련 기본 지식]

'관계형 데이터베이스, 문서 데이터베이스.

데이터베이스 작동 방식, 데이터를 얻기 위해 단순한 쿼리를 수행하는 방법, 데이터 삽입,업데이트, 삭제하는 방법/데이터 세트 결합하는 방법.'

나도 DB에 대해 잘 알지 못한다. 하지만 위와 같은 기초 정도는 알고 있다. 저정도는 개발자의 기본 소양이 아닐까 싶다.

DB 설계나 쿼리 튜닝 같은 것은 전문가에게 맞기자.

 

[소스 제어] ⇒ git

소프트웨어 유지보수에서 있어서 git은 필수다. 제발 제대로 된 commit을 생활화 하자.

git에 대해서도 하루 빨리 정리해서 글을 써야 겠다. 

 

[빌드와 배포] ⇒ DevOps

DevOps. DevOps... DevOps가 만능은 아니다. 우선 현재 환경에서 빌드 후 배포 전, 테스트부터 잘하자.

 

[테스트]

타협할 수 없는 필수사항이다.

 

[디버깅]

'소프트웨어 개발자가 되면 일하는 시간의 90%가 아마 왜 코드가 작동하지 않는지 고민하다가 지나갈 것이다. 테스트 주도 개발 같은 방법론을 쓰면 디버거에 쓰는 시간이 훨씬 줄어들기는 한다. 하지만 무엇을 하든 문제 해결을 위해 얼마나 노력하느냐와 상관없이 자신이나 다른 사람이 작성한 코드를 디버깅할 방법을 배워야만 한다. 효과적으로 해낼 방법을 인내심을 가지고 제대로 배워야 한다.'

공감한다. 따라서 유지보수가 중요하다고 하는것이다.

 

[방법론]

폭포수 개발, 애자일 개발 등 여러 방법론들이 있지만, 개발자의 태도가 더 중요한 것 같다.

 

[부담 내려놓기]

-

 

[4장] 기술을 발전시키는 방법

'소프트웨어 개발자로 일하는 한 기술은 계속 발전시켜야 될 테니까. 마침표를 찍는 것 말고 꾸준히 해 나가는데에 의의를 두라. 발전하겠다는 의지만 있다면 항상 더 나아질 여지가 있다.'

 

[빠르게 배우는 방법 배우기]

10단계 학습법을 추천한다.

 

소프트 스킬 (Soft Skills: The Software Developer's Life Manual) - 3부 : 학습 (27 ~ 28장)

소프트웨어 개발 분야는 항상 변한다. 매일 새로운 기술이 등장하기 때문에 어제 배운 것이 오늘은 무의미해진다. 이렇게 빨리 변하는 분야에서 살아남으려면 학습 능력이 매우 중요하다. 고인물처럼, 기술을 발전..

yrok.tistory.com

[기본 절차]

-

 

[경험을 통한 학습]

-

 

[경험을 통해 학습하는 법]

-

 

[경험을 통한 학습 사례]

-

 

[내가 기술을 가르치는 방법]

'나는 수강생들이 비용 대비 최대의 효과를 거두어 가길 바란다. 그리고 꼭 배우지 않아도 되는 내용이나 독학으로도 익힐 수 있는 내용을 지루하게 가르치고 싶지도 않다. 그보다는 그들에게 당장 가치를 지니는 정보만 알려주고, 그중 특정 세부 주제를 더 자세히 공부할 필요를 느낄 때 활용할 참고 자료를 제공하는데 집중한다.'

가르치는 일을 꽤 경험해보긴 하였지만 매번 강의를 준비할 때마다 고민이 된다. 대상에 따라 자료의 수준이 달라져야 하긴 하지만 그 경계가 늘 고민이 된다. 저자의 조언을 참고해서 다음 강의를 준비해보아야 겠다.

 

[큰 그림:이 기술로 무엇을 할 수 있는가?]

'그 기술로 무엇을 할 수 있는지에 대한 개요부터 가르친다.

프로그래밍 언어를 가르친다면 그 언의 역사와 그 언어가 주로 어떻게 쓰이는지를 간략히 이야기한다. 그리고 바로 그 언어를 구성하는 모든 요소와 특징을 보여준다. 특히 그 언어 고유의 독특한 부분을 보여주는 데 집중한다. 마지막으로 해당 언어에서 일반적으로 사용되는 다양한 라이브러리를 소개하고 그 라이브러리를 어떤 작업에 어느 정도 범위로 쓸 수 있는지 알려준다. 세부적인 부분을 들여다보지 않고 지형 전체를 완벽하게 알려주는 게 핵심이다. 무엇을 모르는지 깨닫는 것이 이번 단계의 목표다.'

 

[시작하는 법]

'진입 장벽이 너무 높으면 책이나 튜토리얼을 보았다고 해도 그렇게 복잡한 일을 직접해볼 엄두가 안난다.

시작하는 법에 먼저 집중하는 방식을 활용하라 - 튜토리얼'

튜토리얼을 잘 만드는 팁은 없을까...?

 

[최고의 효과를 거두기 위해 알아야 할 20퍼센트]

'세상의 거의 모든 일을 20퍼센트의 원인이 80퍼센트의 결과를 생상한다. - 파레토 법칙

ex) 관계형 데이터베이스의 모든 기능을 배우려고 시간을 낭비하기보다 SELECT문을 쓰는 법, 테이블을 조인하는 법 등 핵심적인 20퍼센트를 배우는 데 집중하라.'

 

[전문가가 쓴 글 읽기]

Effective C++ - 스콧마이어스

Effective 시리즈도 정리할 목록에 추가!

 

[연습, 연습, 연습]

기술을 배울땐 무엇보다도 실습, 연습이 중요한 것 같다. 그래서 튜토리얼이 중요한게 아닌가 싶기도 하다.

다음 강의에는 튜토리얼을 많이 준비해보아야겠다.

반응형

댓글