1. helloworld가 뭔지 모른다.

2. helloworld정도만 해봤거나, 이다음꺼 조금만 해봤다.


위의 1, 2에 해당되면서

막연히 코딩이 해보고 싶다고 생각해서 정보글을 찾으러왔거나

코딩을 시작해보고 싶지만 어떤걸, 얼마나, 어디서 해야할지 너무 막막한 뉴비들을 위해서 작성한 게시글임.

채널에 종종 보이더라고


따라서 언어, 패턴, 알고리즘, 프레임워크, 라이브러리등에 대해서 알고 이것들의 심화과정을 진행하는 사람들은 이 게시글을 읽을 필요가 전혀없음.


뉴비들도 이해하기 쉬운 보통의 개발 프로세스는 다음과 같은 같은 과정을 통해서 진행 돼

해당 과정의 상세내용이 궁금하다면, 해당 과정을 클릭해줘.

참고로 1번의 상세내용의 경우 나도 어디서 옛날에 퍼온건데 출처는 기억안나..기억나면 댓글로 달아둘게

1. '무엇'을 만들까?


▶소프트웨어 개발자 종류를 구분 하는 기준


◎ 플랫폼 기준

1) 윈도우 소프트웨어 개발자

윈도우 환경에서 실행 되고 데이터 처리를 하는 소프트웨어를 개발 하는 개발자 입니다.  연관된 기술들은 아래와 같습니다.

- 화면 및 데이터 처리: C# Winform, C# WPF, JAVA SWING, Win32API, Delphi, Visual Basic, Python QT GUI, Power Builder(IDE, PowerScript를 사용함.)

- RDBMS: Oracle, MSSQL, MariaDB

- Grid Component: Chart FX, DevExpress, C1 Component

 

2) 웹 소프트웨어 개발자

웹 환경에서 실행 되고 데이터 처리를 하는 소프트웨어를 개발 하는 개발자이다. 연관된 기술들은 아래와 같습니다.

- Front-End(Client) 언어(화면 및 데이터 처리): HTML, HTML5, CSS, Javascript, JSON(JavaScript Object Notation), AJAX(Asynchronous Javascript And XML)

- Front-End(Client) Framework:  VueJs, React, Angular, Jquery, Semantic-UI


- Back-End(Server) 언어 : nginx, JSP/Servlet, PHP, , Python(Django)

- Back-End(Server) Framework: ASP.NET(C#), Node.js(JavaScript), Django(Python), Spring(Java), Laravel(PHP), Rails(Ruby)

- Back-End(Server) Tech : JSP, Servlet



- 웹 서버(Web Server): IIS(Internet Information Services), Apache Tomcat, Apache


- RDBMS: Oracle, MSSQL, MariaDB


- Grid Component: Chart FX, DevExpress, ComponentOne

 

3) 모바일 앱 개발자

모바일 앱 환경에서 실행 되고 데이터 처리를 하는 소프트웨어를 개발 하는 개발자입니다.

연관된 기술들은 아래와 같습니다.

 - 안드로이드: Java, Kotlin(코틀린) 2개 중에 1개만 하면 됨

 - iOS: Objective-C(오브젝티브-C), Swift(스위프트) 2개 중에 1개만 만 하면 됨

       맥 컴퓨터, 맥 북이 있어야 개발 환경을 구축 할 수 있다.

 

4) 시스템 소프트웨어(임베디드) 개발자

IoT 환경(소형 기계, 센서 등) 실행 되고 데이터 처리를 하는 소프트웨어를 개발 하는 개발자다.

하드웨어 제어, 운영체제, 소량 네트워크(LPWAN, LPWA 등) 기능을 구현 한다.

연관된 기술들은 아래와 같습니다.

 - 윈도우 화면 및 데이터 처리: Win32API, Visual C++.NET, Delphi, C++QT

 - Console 화면 및 데이터 처리: Assembly language, C, C++


5) 게임 소프트웨어 개발자

게임 환경에서 환경 실행되고 데이터 처리를 하는 소프트웨어를 개발하는 개발자입니다. 

연관된 기술들은 아래와 같습니다.

- 유니티(Unity) 환경: C# 언어, 유니티 엔진

- 언리얼 환경 :  UnrealScript(언리얼 5이후 C++기반 스크립트로 대체), 언리얼 엔진

- 기타 콘솔(게임기) 환경: win32api, Direct X 프로그래밍, Open GL등

 


◎업무환경 개선 소프트웨어 기준

1) 네트워크 소프트웨어 개발자

네트워크 환경에서 실행 되고 데이터 처리를 하는 소프트웨어를 개발 하는 개발자입니다.

순수 네트워크 기능만 개발 합니다. 연관된 기술들은 아래와 같습니다.

- 윈도우 화면 및 데이터 처리: C#, TCP/IP Socket, C# Serial Bus, Java Socket, Delphi Socket, Win32API WinSock, Visual C++.NET WinSock

- Console 화면 및 데이터 처리: C Socket, C++ Socket, C# TCP/IP Socket, C# Serial Bus, Java Socket

- 솔루션: Zero MQ(Message Queue), IBM MQ(Message Queue), Apache Active MQ(Message Queue), Rabbit MQ(Message Queue)

 

2) 데이터 베이스 소프트웨어 개발자

데이터 베이스 환경 실행 되고 데이터 처리를 하는 소프트웨어를 개발 하는 개발자입니다.

연관된 기술들은 아래와 같다.

- 윈도우 화면 및 데이터 처리: Power Builder, C# Winform, C# WPF, C# ADO.NET 기능 사용, JAVA SWING 에 JDBC 기능 사용, Delphi DataBase Component

- RDBMS: Oracle, MSSQL, MariaDB

- BigData: Python, R, MongoDB

 

3) 솔루션(제품) 소프트웨어 개발자

여러 시스템 환경에서 문제 해결 상황을 찾아서 제품화하여 데이터 처리를 하는 소프트웨어를 개발하는 개발자입니다.

실행 환경이라는 제약이 없이 여러가지의 분야에 관련된 언어를 공부해야 합니다.

다른 솔루션(제품) 소프트웨어를 개발하려면 기업 업무를 처리하는 ERP 솔루션 개발, 

제조 생산 업무를 처리는 MES 솔루션 개발, 기타 V3, 알집, 알약, 엑셀, 파워포인트 같은 솔루션을 개발할 수가 있습니다.


4) 공통업무 소프트웨어 개발자(SI)

공통 업무즉, 회계, 뮬류, 인사, 노무. 빌링, 인증등의 폭넓은 공통업무에 대한 소프트웨어를 개발하는 사람을 통칭합니다.

고액 연봉 받는 소프트웨어 개발자 분류 하나 입니다. 단, 업계 특성상 모든 사람이 고액 연봉을 받지는 않습니다.(대우와 처지에대해서는 Si업계 검색)

여러가지 모듈이나 데이터 흐름을 공통적인 부분을 찾아서 체계화 시켜야 하는 개발 업무입니다.

개발 경험도 많아야 하고, 많은 업무를 알아야 하고, 그에 관련된 IT지식과 코딩(Coding) 스킬도 겸비 해야 합니다.


5)AI(인공지능) 소프트웨어 개발자

고액 연봉 받는 소프트웨어 개발자 분류하나 이다. 하지만 공부 할게 한두 가지가 아닙니다.

연관된기술들은 아래와 같다.

 - 인공지능 기본이론: Deep Learning(심층 학습), Machine Learning(기계 학습)

 - 컴퓨터언어: Python Basic, Python Library 다루기

 - 수학: 통계학, 선형대수학

 - 인공지능 Library: 파이토치(PyTorch), 텐서플로(Tensorflow), 케라스(Keras)

 - 컴퓨터 공학 지식: 소프트웨어 공학, 알고리즘, 자료구조


6)블록체인(Block Chain) 개발자

금융보안 세부적인 분야 이면서 블록체인(Block Chain)기술을 활용할 수 있도록 

소프트웨어를 설계하고 개발하는 개발자입니다.


그외로 업무로 블록체인(Block Chain)기술 이용하여 가상 암호 화폐를 개발 하여 

실제 생활에 사용 할수 있도록 대중화를 하는 일도 합니다.

다들 아시다시피 대표적인 가상화폐가 '비트코인(Bitcoin), 이더리움(Ethereum)'같은 코인입니다.


비트코인(Bitcoin)개발자는 '사토시 나카모토'입니다.

이더리움(Ethereum)개발자는 '비탈릭 부테린'입니다.


연관된 기술들은 아래와 같습니다.

 - 컴퓨터관련 지식 : 프로그래밍 언어, 네트워크, 데이터베이스,서버, 디지털보안, 자료구조, 알고리즘 등

 - 프로그래밍 언어 : C++, GO, JavaScript, Solidity

 - 암호화 지식:  대칭키(비공개키): DES, 3DES, AES, SEED, HIGHT, IDEA, RC5, ARIA

                         비대칭키(공개키): Diffie-Hellman 키 교환, DSS, ElGamal, ECC, RSA 

 - 금융경제의 흐름과 동향 파악을 하는 역량



7)SAP ABAP 소프트웨어 개발자

아마도 개발자 중에서도 최고의 연봉을 받는 개발자가 아닐까 합니다.

3년차 프리랜서 개발자가 월천 이상을 번다고 하니 합니다.

그만큼 들어기가 힘들고 진입장벽이 높다는 뜻입니다.


독일 회사인 SAP에서 개발한 ERP 솔루션이 있습니다.

그것을 SAP ERP라고 부른다.

ERP 솔루션이다 보니 업무 환경에 맞게 커스터마이징(Customizing) 수정을 해야합니다.

그 수정을 하려면 언어가 필요하다. 

그 언어가 바로 ABAP(Advanced Business Application Programming)입니다.

그래서 ABAP 개발자라고 부릅니다.


연관된 기술들은 아래와 같습니다.

 - Netweaver를 설치 해서 공부하기

 - SAP 교육 센터에서 700만원이 넘는 교육을 받아야 합니다.

 - SAP ABAP Certification을 취득 한다.

 - 필요하다면 각 모듈(FI, PP, MM등) Certification을 취득합니다.

1-1 사설

 너가 어떤것을 만드는 개발자가 되겠어! 라고 정했더라도

 1번에서 써져있는 모든 언어를 꼭 다 배우고, 완전 마스터해서 능숙하게 해야하는 건 아냐.

 보통은 대부분의 언어에서 공통적으로 지원하는 동일한 개념들이 많아. 따라서 우선적으로 1개 언어를 처음부터 끝까지 배운 상태에서 다른 언어를 배우는건 난이도가 처음 배울때보다 많이 내려가는 편이야.(보통 이것을 언어의 횡이동은 쉽다고 표현해)

 그래서 우선적으로 특정 언어를 어느정도 수준까지 올린 후에 다른 언어를 배우라고 권하는 편이야.



2. '어떤' 언어-프레임워크로 만들까?


 완전 쌩 뉴비 기준에서 추천하는 언어는 파이썬, JS-TS, 자바, C정도야. 모든 언어에 대해서 쓸순 없기때문에 해당언어를 중점으로만 설명할게.


 나는 보통 '언어'를 배울때 프로그래머스 입문강좌를 매우 추천하는 편이야. 다음과 같은 이점들이 있기 때문인데

1. 프로그래머스는 환경구축을 하지않아도 되서, 접근성이 좋다.

즉, 로컬환경 구축중 오류가 생겼을때, 뉴비는 이게 뭔지 당최 알수가 없어서 입구컷당하는 문제가 덜해.

2. 시키는 것만 빠르게 하면 된다.

3. 무료다.


따라서 다음 강좌들을 추천해

1. 파이썬

https://school.programmers.co.kr/learn/courses/2/2-%EB%AC%B4%EB%A3%8C-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%85%EB%AC%B8

2. 자바 스크립트

https://school.programmers.co.kr/learn/courses/3/3-hello-javascript-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%9E%85%EB%AC%B8

3. C

https://school.programmers.co.kr/learn/courses/28/28-%EB%82%98%EB%8F%84-%EC%BD%94%EB%94%A9-c%EC%96%B8%EC%96%B4

////

https://edu.goorm.io/learn/lecture/201/%ED%95%9C-%EB%88%88%EC%97%90-%EB%81%9D%EB%82%B4%EB%8A%94-C%EC%96%B8%EC%96%B4-%EA%B8%B0%EC%B4%88

4. 자바

https://school.programmers.co.kr/learn/courses/5/5-%EB%AC%B4%EB%A3%8C-%EC%9E%90%EB%B0%94-%EC%9E%85%EB%AC%B8


Q. 앗 근데, 2중포문, 포문+if문, while문에서 너무 어려워서 막혔어요 ㅠㅠㅠ 어떻게해야할까?

A. https://studio.code.org/s/course3

애기들이 코딩뇌를 기를때 쓰는 사이트야.

난 응애가 아니라고? 어쩔수없어.

21번까지 하루면 다 푸니까 싹 풀어보길바래. 사이트가 영어라 당황스러울수도 있는데, 그냥 크롬으로 구글번역돌려놓고 하면돼.


위의 것을 다 끝냈다면 코딩 심화학습을 해야할텐데. 이경우 알고리즘 문제를 푸는것을 추천해.

1. 백준(단계별풀이 13번(브루트포스)까지)

https://www.acmicpc.net/step

2. 프로그래머스(1. 입문자 코테입문까지만, 2. 취직준비 코딩테스트 고득점 Kit 출제빈도 높음 전부)

https://school.programmers.co.kr/learn/challenges/beginner?order=acceptance_desc



 이후 언어와 기초 알고리즘까지 배웠다면 1번을 참고해서 실제 제품을 만들때 쓰이는 프레임워크들을 학습하길 바래.

 웹 기준으로 볼때 python은 fastApi, 장고 등을 쓰고

 JAVA는 타임리프, 스프링, 스프링부트 등등을 써.

 JS는 리액트, 뷰나 express를 쓰고.

 다만 무조건 하나의 언어를 쓰진않아. 상황이나 요구사항에 따라 적절하게 섞어쓰면돼.

 나같은 경우에는 프론트는 리액트나 뷰를 써서 제작하지만

백엔드같은 경우에느 스프링부트 fastApi, express등등 내가 속한 회사에 따라서 다르게 써.


웹기준으로 프레임워크 강좌를 추천하자면

1. 자바(스프링부트)

https://wikidocs.net/book/7601

2. JS(리액트)

https://react.vlpt.us/



3. '결과물'을 어떻게 배포-서비스할까

 3번까지 왔을땐 이젠 더이상 뉴비가 아니니까 aws, gcp(프리티어는 공짜라), docker, 젠킨스 등등을 쓴다고만 말해둘게.

참고로 배포라는게 크게 별건 아니라서 서버에 올리는 애들도 있지만, 그냥 github에 올리고 그링크만 보내는 애들도 많아. 물론 이경우에 README.md파일에 적절한 설명을 써두긴 해야겠지?

 만약 알고리즘까지 어느정도했는데도 이후가 너무 막막하다면, 국비나 이런 외부교육가서 수업듣는 것도 추천해. 2번의 알고리즘까지 다 풀었는데 못따라가서 손놓고 그런 일은 없을꺼야.