시스템 프로그래밍 웹 프로그래머 라이브러리/플랫폼/프레임워크/코어 프로그래밍 분산 어플리케이션 프로그래밍 프로그래밍 과학
시스템 프로그래밍은 특정한 도구가 아닌 프로그래밍 "과학" 이라고 볼 수 있다. 특정한 플랫폼에 매이지 않는다.     아래처럼 하면 된다:  운영 체제가 어떻게 설치되는지 알아본다. 한 PC에 다른 운영체제들을 어떻게 설치할 수 있는지 배운다. (선택 사항이지만 추천한다). 한 개 이상의 운영체제를 설치한다. 시스템에 어떤 도움을 주는 패키지도 설치하지 않는다. 대신에 운영체제가 제공하는 기능들을 사용한다. )  다른 플랫폼/시스템에 대한 어셈블리 언어도 추후에 배우게 될 것이다.  기준 템플릿 라이브러리에 특별히 관심을 기울인다. (STL) 그리고 아마 능동적인 템플릿 라이브러리 (ATL)에도 관심을 기울이면 좋다.     유닉스를 기반으로 하는 운영 체제를 선택했다면 더 쉬울 것이다. 추후에 매우 잘 작업하게 될 시스템을 이해한다. 처음은 작은 시스템 유틸리티를 만든다. 이것은 아래와 같은 사항에 유용한다 :  본인의 시스템에 이미 있는 작은 툴을 재생산할 때 다른 운영체제에서 사용 가능한 유틸리티들을 본인의 운영체제로 옮길 때 첫번째로 배울 언어가 문제가 되는 것은 이 때 뿐이다. C++ 이나 C#이 아닌 ANSI C 를 먼저 배운다. Java 도 D 아닌 C. 그리고 나서 C++을 배운다. 처음에 배우는 언어를 C 로 한정시키고 C 만 공부한다. C 만 배우는 이유는 시스템 프로그래밍은 프로그래머가 다음 개념들에 익숙해야할 필요가 있기 때문이다:  진짜 컴필레이션 통채로의 소스코드 저급(언어) 객체 결과물 파일들 이진법들을 연결하는 것 저급 머신 언어/어셈블리 프로그래밍. C언어는 위장된, 비교적 어셈블리를 배우기 쉬운 언어라고 일컬어진다. C는 또한 원할 때 언제든지 어셈블리 언어 코드를 코드 내에 삽입하는 것을 지원한다. 그리고 이것은 어셈블리처럼 절차적이다. 웹 어플리케이션은 인터넷 아키텍쳐 위에서 일할 수 있도록 디자인된 소프트웨어이다. 다시 말하자면, 어플리케이션이 파이어 폭스 혹은 인터넷 익스플로러와 같은 웹브라우저를 통해서 접근한다는 뜻이다. 인터넷 아키텍쳐위에 지어진다는 것이 인터넷에 꼭 적극적으로 연결이 되어있어야 할 필요가 있다는 것은 아니다. 웹 어플리케이션은 다음과 같은 표준 웹 기술에 기반해서 쓰여진다.   HTTP FTP POP3 SMTP TCP IP HTML XML Coldfusion ASP JSP PHP ASP.NET (우클릭 하고 소스 보기를 하거나 F12를 누른다.) 많은 양의 웹사이트를 보는 것이 아니고 웹사이트의 종류/내용의 다양성을 살펴본다. 일반적으로, 아래 웹사이트들 중 종류별로 한 개씩은 방문해야 한다.   회사 웹사이트 ( 비영리/조직 혹은 정부조직이 아닌 상업적 목적의 회사 ) 웹 인덱싱 엔진들 ( 검색 엔진, 메타 검색 사이트, 특수 검색 엔진, 디렉토리) 데이터 마이닝 웹사이트 개인 웹사이트 정보 전달형/ 백과사전형 사이트 (위키, 데이터시트, 기술적인 명시, 블로그와 저널, 메뉴얼이 나열 되어있는 디렉토리, 뉴스와 뉴스 에이전시 사이트, 전화번호부 등.) 소셜 웹사이트 ( 소셜 포털, 북마크 웹사이트, 노트 테이킹 웹사이트 ) 집단지성 웹사이트 ( 위에서 언급한 위키들과 블로그들 포함) 예를 들면 브레인스토밍 다이어그램과 마이크로소프트 비지오가 있다. 웹 다이어그램, 사이트 맵, 그리고 구조를 만들 수 있는 네이게이션에 대한 컨셉을 잡는 것을 말한다. (Crash Course) 그래픽을 수정할 수 있는 소프트웨어를 하나 이상 배운다. (선택사항이지만 매우 추천하는 바이다) 아래의 것들을 의미한다.  기본 웹서이스 프로토콜 (HTTP, FTP, SMTP, and POP3 or IMAP4) 웹서버 소프트웨어 ( 되도록이면 계속 일하게 될 플랫폼을 위한 것 ) 웹 브라우징 소프트웨어. 이메일 서버와 클라이언트 소프트웨어 HTML을 편집하는대로 바로 수정되는 소프트웨어 패키지 "What You See Is What You Get (WYSIWYG)"를 가지고 작업하기를 원하게 될 것이다.   대부분의 유저들은 자바스크립트를 배우고 어떤 사람들은 VB스크립트를 배우는데 이는 많은 브라우저에서 쓰이지는 않는다. 고객 입장의 스크립팅 언어에 익숙해지지 않으면 다음 단계로 넘어가지 않는다. 하나의 서버 소프트웨어를 사용하기로 결정했다면, 해당 소프트웨어를 지원하는 언어를 배운다.   코어 프로그래머들은 단지 다른 프로그래머들이 사용할 수 있도록 프로그램 어플리케이션을 프로그램 코드로 바꾸는 심화 단계의 프로그래머들이다.  대부분의 라이브러리 개발자들은 한 개 혹은 두 개 모두 사용한다. 수업을 듣는다. 더 많은 프로그래밍 패러다임과 언어들을 다룰 줄 알게 될 수록, 라이브러리/패키지 프로그래머로서 좀 더 성공할 수 있다.   항상 가능한한 표준화된 코드를 사용하려고 노력한다. 라이브러리/패키지 프로그래머가 되기 위한 초기 단계에서 매우 중요한 작업니다. 유닛 컨버전, 중급 과학 연산 패키지와 같은 간단한 패키지에서 시작한다. 대학생이라면 프로그래밍 수업 외에서 공식이나 과학적 논리를 라이브러리로 만들어본다. 첫째로 이진법들/실행 가능한 것들의 패키지를 다운받는다. 사용해보고 이것들의 강점과 약점을 파악한다. 이것이 끝나면 소스를 다운로드하고 이것이 어떻게 만들어졌는지 알아본다. 이 라이브러리들의 전체 혹은 부분을 다시 작성해서 만들어본다. 처음에는 코드를 본 뒤 짜보고 나중에는 코드를 보기 전에 짜본다. 마지막 단계로는, 그 라이브러리들을 어떻게 개선할 수 있을지 생각해보고 적용시켜본다. 대게, 라이브러리/패키지 프로그래머들은 모든 문제를 재귀적으로 혹은 되풀이 하도록 생각하는 경향이 있다. 각각의 문제를 작은 문제들 혹은 반복되는 문제들의 총합이라고 생각하라(단순 작업들의 연속). 문제의 범위를 줄여서 생각하고 작은 범위들을 쌓아올려서 전체를 만드는 것이다. 라이브러리/패키지 프로그래머들은 일반화하는 경향이 있다. 다시 말하자면, 단순하고 구체적인 문제와 직면했을 때, 이를 좀 더 일반적인 범주로 생각하고 그 일반적인 문제를 해결함으로서 작은 문제들은 자동으로 해결될 수 있도록 하는 것이다. Distributed application 많은 사람들이 분산 프로그래밍은 배우기 가장 어려운 코스라고 말한다. 컴퓨터 및 커뮤니케이션 기술에 대한 다양한 지식이 요구된다. 시스템과 하드웨어에 대한 빠른 소개를 듣는다. 이 과정은 선택 사항이지만, 네트워크 토폴로지를 이해하는데에 있어서는 매우 유용한 과정이다.  분산 프로그래밍 어플리케이션을 시작하기 전에 Open Systems Interconnection (OSI) 모델, 이더넷, IP, TCP, UDP과 HTTP에 대한 이해가 필요하다.  윈도우를 기반으로 하는 프로그래밍은, 윈도우 스크립팅 호스트와 작동한다. 리눅스를 기반으로 하는 프로그래밍은 배쉬 스크립트와 펄로 충분하다. 자바스크립트는 아래의 이유들 때문에 두 개 플랫폼 모두에 강력히 추천하는 바이다:  어떤 운영 체제도 지원한다.(윈도우 스크립팅 호스트는 자바스크립트를 초기 설정으로 하고 있고, 대부분의 리눅스는 자바스크립팅 콘솔 을 지원하는 패키지를 갖추고 있다). 배우기 쉽다고 여겨진다. 두번째 언어를 선택하는 데에 있어서(C, C++, C#, Java 그리고 J# 는 모두 ALGOL 에서 나온 구문을 사용한다) ALGOL에서 나온 구문을 사용하여 다른 언어를 배울 때 익숙하다. 자바스크립트를 배움으로서, 부가 효과로 고객입장의 웹페이지를 스크립팅 하는데 익숙해질 수 있다! 추후에는 본인의 스크립팅 언어에 따라 이를 지원하는 고도의 프로그래밍 기술을 사용할 수 있다. 모든 스크립팅 언어들은 어느정도 레벨까지는 절차적 프로그래밍의 성향을 가지고 있다. 이를 하는데에 필요한 것들을 배운다. 간단한 커뮤니케이션이면 충분할 것이다. 파이썬과 같은 멀티-패러다임 언어이면 좋다. 두 번째 언어에 대한 간단한 소개를 들어본다. 자바는 많은 이유로 개발자들로부터 두번째 언어로 선택된다. 하지만, C# 도 해당 분야에서 빠르게 인지도를 얻고 있다. Java 와 C#은 다음의 이유로 선호되고 있다.  이들은 객체지향적 프로그래밍으로 자세한 구현으로부터 프로그래머를 보호해준다. Oop를 따라서 개발하면 모듈화 되어서 그걸 사용하는 프로그래머들은 세세한 코드 내용을 몰라도 된다. (코드 유닛, 컴파일 되어있음, 특정 업무를 수행하고 다른 프로그램에서 사용될 수 있음). 사건(이벤트) 기반 프로그래밍을 지원하고, OO와 절차적 프로그래밍도 어느정도까지 지원한다. 언어가 만들어진 프레임워크가 자연스럽게 배포되었다. (자바의 경우에). 이미 만들어져있는 레디메이드 패키지들을 오픈 소스로서 혹은 프레임 빌트인 패키지로 사용할 수 있다. 프로그래머들이 다른 사람의 작업 위에 본인이 작업을 할 때 한 결 편리하다. 특히 네트워킹을 서포트 하는 측면에 있어서. 도출되는 결과(아웃풋)나 윈도우 디자인과 기술 그리고 유저 인터페이스에 관련된 요소들이 관심을 덜 기울인다. 책, 온라인 튜토리얼 혹은 아카데믹 코스등 여러가지 방법을 사용해서 공부할 수 있다. 분산 어플리케이션의 아키텍쳐와 이에 대한 이해는 꼭 필요하다.  적어도 모두 다 어떤 개념인 지 정도는 익히는 것을 추천한다.대부분의 분산 어플리케이션 프로그래머들은 한 개 혹은 두 개의 프로그래밍 언어를 익히는 데에 그치지 않고 각 운영체제 별로 최소 한 개의 언어정도는 배워놓는다. 왜냐하면 본인의 어플리케이션이 "배포"되기를 원한다면, 최소한 가장 많이 쓰이는 운영체제들에서는 다 작동될 수 있어야 하기 때문이다.  공통 객체 요청 브로커 아키텍쳐 (CORBA) 단순 객체 접근 프로토콜Simple Object Access Protocol (SOAP) 비동기적(동시에 작동하지 않고 차례로 작동하는) JavaScript and XML (AJAX) 분산된 구성 객체 모델(DCOM) .NET Remoting XML Web Services 프로그래밍 과학자는 매우 심화된 과정을 연구하는 프로그래머이다. 어플리케이션 개발 대신 암호화, 프로그래밍 언어 그리고 데이터 마이닝 알고리즘 등의 컴퓨팅 기술을 개발한다. 학문적인 연구와 헌신없이는 이 레벨에 도달할 수 없다. 아래의 방법으로 행할 수 있다.   실제 학위를 취득한다(항상 그래야만 하는 것은 아니고 프로그래밍 과학자들이 보통 컴퓨터 과학 학위를 가지고 있지는 않다). 위와 같은 학위를 취득하는 과정의 커리큘럼, 수업의 목차들을 살펴본다. 해당 수업들을 독학하거나 각자의 코스로 나누어서 수강한다. 이는 이론적으로는 실현될 수 있지만, 추천하는 방법은 다음과 같다. 더 구체적일수록 더 좋다. 개인의 선호도에 따라 다르지만 가장 주요한 분야들의 리스트들은 다음과 같다:  알고리즘 디자인 (검색, 분류, 암호화, 복호화 그리고 의사소통에서의 에러 발견 등) 프로그래밍 언어/컴파일러 디자인/최적화 인공지능분야( 패턴 인식, 음성 인식, 자연 언어 프로세싱, 신경 네트워크들) 로봇 공학 과학적 프로그래밍 슈퍼 컴퓨터 컴퓨터 기반 디자인/모델링(CAD/CAM) 가상 현실 컴퓨터 그래픽(컴퓨터 그래픽은 종종 그래픽 디자 혹은 그래픽 유저 디자인과 혼동된다. 컴퓨터 그래픽은 컴퓨터 시스템 내에서 그래픽을 어떻게 조작하고 보여줄 지에 대해서 연구하는 학문이다.) 석사 혹은 박사를 하고싶을 수도 있다. 
시스템 프로그래밍이 수반하는 것들을 이해한다. 데스크탑 어플리케이션 프로그래머의 첫 세번째 단계를 따른다. 선형 대수학의 기초 수업을 듣는다. 미적분 수업을 듣는다. 논리/ 혹은 이산수학 수업을 듣는다. 다른 bare 운영체제들을 살펴본다. 컴퓨터 하드웨어 아키텍쳐에 대한 (혹은 대안으로 책을 읽어본다. 다른 컴퓨터 하드웨어 플랫폼에 대한 이해를 발전시킨다. 하드웨어 플랫폼/ 선택한 운영체제에 대한 어셈블리 언어에 익숙해질 수 있는 소개를 듣는다. 절차적 프로그래밍의 개념과 함께 ANSI C 와 C++ 언어를 듣는다. 선택한 플랫폼에서 C/C++ 기준 라이브러리를 이해하고 실행한다. 본인의 특정 플랫품 상에서 C 와 친숙한 것들을 이해할 수 있을 온라인 상의 리소스들, 책 그리고 수업들을 찾아본다. C 와 C++로 심화된 코드를 만들고 연습해본다. 더 심화된 어셈블리를 배운다. 운영 체제 디자인 수업을 듣는다. 본인이 선택한 특정 플랫폼에 대한 서류를 찾아서 읽어본다. 얻어진 지식을 사용해본다. 가장 도움이 되는 언어부터 순서대로 배운다. 웹 프로그래밍이 어떤 것을 수반하는지 인지한다. 다양한 웹사이트들이 어떻게 생겼는지 검색해본다. 적어도 한 개의 브레인스토밍 방법을 배우고 그것을 고안할 수 있을 소프트웨어를 배운다. 웹사이트 구조를 짜는 것에 익숙해진다. 개괄적이고 짧은 시간에 많은 것을 집중적으로 배울 수 있는 그래픽 디자인 수업을 듣는다. 인터넷 구조의 기본을 배운다. HTML과 CSS 언어를 배운다. XSL와 XPath와 같은 XML과 XML 관련 기술을 배운다(선택사항이지만 추천한다). HTML에 익숙해질 때까지는 단순하고 정적인 웹사이트를 만든다. 고객 입장에서 쓸 수 있는 언어를 배운다. 이렇게 배운 언어를 익숙하게 사용하도록 연습하고 해당 언어만 사용하여도 필요한 것을 짤 수 있도록 한다. 서버 입장에서 사용하는 프로그래밍 언어를 적어도 하나 배운다. 서버 측면에서의 프로그래밍 언어를 배웠다면 파일럿 프로젝트를 만들어본다. 본인의 웹사이트를 만들고 온라인에서 이를 시험해본다. 코어 프로그래밍이 무엇인지 안다. 재사용이 가능한 컴포넌트/패키지들을 짜는 것을 지원하는 프로그래밍 언어를 모른다면, 배운다. UML 과 ORM의 심화 수업을 듣는다. 소프트웨어 엔지니어링 최소한 모듈러, 컴포넌트-기반의, 객체 지향적인 그리고 사건 주도적인 프로그래밍 테크닉과 그 개념을 익힌다. 다른 운영체제들을 익히고 그 운영체제가 지원하는 프로그래밍 프레임워크를 배운다. 플랫폼과 독립적인 프레임워크의 프로그래밍 언어과 기술을 배우는데 노력을 집중한다. 만약 지금까지 배운 프로그래밍 언어들이 ANSI/ISO/IEEE/W3C 표준 버전들을 가지고 있다면, 그 기준에 통달한다. 간단하고, 이미 작성된 특히 오픈소스인 라이브러리를 따라해보려고 노력한다. 본인의 프로그래밍 분야에서 오픈 소스 패키지를 찾아본다. 프로그래머들에게 배포하고 사용되기 위해 사용되는 다양한 접근방식들을 배운다. 분산 어플리케이션 프로그래밍을 시도해본다. telephony 헙스, 스위치, 라우터와 같은 네트워킹 하드웨어 아키텍쳐와 기기들에 익숙해진다. 네트워킹 프로토콜과 기본사항들에 대한 수업을 듣는다. XML 언어를 배우고 이에 익숙해진다. 쉘 스크립팅 언어를 배우기 시작한다. 처음에 고른 언어를 사용할 때 절차적 프로그래밍만을 사용한다. 머신끼리 커뮤니케이션하기 위해서는 학습한 스크립팅언어를 사용한다. 데스크탑 스크립팅/ 프로그래밍 언어로 넘어간다. 언어의 핵심 특징에 좀 더 집중한다. 분산 어플리케이션 디자인과 아키텍쳐에 대한 수업을 듣는다. 서비스된 컴포넌트를 만드는 법과 services 선택한 프로그래밍 언어를 사용하는 법을 배운다. 다음 기술 중 하나 이상을 배운다. 프로그래밍 과학자가 무엇을 하는지 알아본다. 4년간의 컴퓨터 과학 학위정도의 과학적 지식을 쌓는다. 전문화하고자 하는 분야를 선택한다. 학위를 한 단계 더 취득하는 것을 고려해본다. 선택한 프로그래밍언어와 연관된 기술과 프로그래밍에 대해서 배운다.
https://www.wikihow.com/Become-a-Programmer https://www.wikihow.com/Become-a-Programmer https://www.wikihow.com/Become-a-Programmer https://www.wikihow.com/Become-a-Programmer https://www.wikihow.com/Become-a-Programmer
System Programming Web Programming Library/Platform/Framework/Core Programming Distributed Applications Programming Programming Science