기술 vs. 개발
•
개발자는 개발을 알아야 한다. 당연하게 들리겠지만 핵심을 관통하는 말이다.
•
요즘의 개발자들은 도구에 집중하고 있다. 많은 사람들이 겉으로 보기에 훌륭해 보이는 기술의 사용법을 익히는 데 급급하다.
•
어떻게 문제를 해결할 것인가에 초점을 맞추지 않고 이 도구를 문제에 어떻게 끼워넣을 것인가에 초점을 맞추고 있다는 의미다.
•
저자가 개발을 공부하고 있다는 사람에게 무슨 공부를 하고 있냐고 물어본다면 흔히들 다음과 같은 것들을 공부하고 있다고 답변한다.
1.
특정 라이브러리
•
웹 프론트엔드 개발자라면 리액트, 뷰, 앵귤러
•
웹 백엔드 개발자라면 스프링, JPA
•
게임 개발자라면 언리얼 엔진
•
인공지능에 관심이 있다면 텐서플로, 파이토치
2.
최신 프로그래밍 언어
•
JVM 언어인 코틀린
•
함수형 프로그래밍 언어인 엘릭서나 하스켈
•
자바스크립트의 상위 집합인 타입스크립트
•
다중 패러다임 언어로 알려진 러스트
3.
인프라 기술
•
쿠버네티스, 도커
•
카프카, 엘라스틱서치, 레디스, 몽고DB
4.
컴퓨터 공학
•
3대 전공 과목인 알고리즘, 자료구조, 운영체제
•
선택 과목으로 네트워크, 시스템 프로그래밍, 데이터베이스
•
이처럼 특정한 영역을 공부하는 것을 두고 개발을 공부하고 있다고 할 수 있을까?
•
이러한 이유로 저자는 스프링 같은 기술의 사용법을 학습하기 보다 제대로 된 개발 능력을 갖추는 것이 먼저라고 생각한다. 그리고 문제를 소프트웨어로 해결할 수 있는 능력이 더 중요하다고 한다.
•
그래서 도대체 개발자라면 어떤 것을 공부해야 할까? 개발자가 개발자로서 실질적인 성장을 하고 싶다면 기술을 공부하는 것도, 컴퓨터 공학을 공부하는 것도 아닌 개발을 먼저 공부해야 한다.
◦
개발을 공부한다는 것은 다음과 같은 키워드들을 공부한다는 의미와 같다.
▪
OOP: TDD, DDD, EDP들은 결국 돌고 돌아 OOP다. 객체지향을 제대로 이해하고 있어야 협업이 가능하고 유지보수가 가능한 좋은 코드를 작성할 수 있다.
▪
테스트: 테스트는 유지보수 가능한 시스템을 만들기 위한 가장 확실한 방법이며 그 자체로 시스템적인 해결책이다.
▪
아키텍처: 아키텍처는 코드의 전체 구조와 상호작용을 설계하는 것을 의미한다. 잘 설계된 아키텍처는 유지보수와 확장성을 보장하며 대규모 시스템에서도 안정적으로 동작할 수 있다.
개발 능력을 길러야 하는 이유
•
기술, 개발, 컴퓨터 공학에는 어떤 상관관계가 있을까?
•
컴퓨터 공학은 기술과 개발의 근간이 되는 지식을 알려주고 개발 능력은 컴퓨터 공학 지식과 기술을 연결해 주는 역할을 한다.
스프링과 JPA는 기술이다
•
스프링과 JPA는 기술이다. 그러므로 스프링과 JPA를 공부하는 것은 동심원 가장 바깥에 있는 기술을 학습하는 것이고 이로 인해 소프트웨어 개발의 전반적인 이해도가 깊어질 것이라 할 순 없다.
•
우리는 기술을 암기하는 데 집중할 것이 아니라 설계나 개발 역량 같은 좀 더 추상적이고 보편적으로 활용될 수 있는 지식을 학습하는 것이 더 중요하다.