////
Search
Duplicate
⚰️

개발을 배워야 한다

기술 vs. 개발

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

개발 능력을 길러야 하는 이유

기술, 개발, 컴퓨터 공학에는 어떤 상관관계가 있을까?
컴퓨터 공학은 기술과 개발의 근간이 되는 지식을 알려주고 개발 능력은 컴퓨터 공학 지식과 기술을 연결해 주는 역할을 한다.

스프링과 JPA는 기술이다

스프링과 JPA는 기술이다. 그러므로 스프링과 JPA를 공부하는 것은 동심원 가장 바깥에 있는 기술을 학습하는 것이고 이로 인해 소프트웨어 개발의 전반적인 이해도가 깊어질 것이라 할 순 없다.
우리는 기술을 암기하는 데 집중할 것이 아니라 설계나 개발 역량 같은 좀 더 추상적이고 보편적으로 활용될 수 있는 지식을 학습하는 것이 더 중요하다.