이전에 컴퓨터 공학 관련 수업을 들은 것을 계기로 꼭 프로그래밍, 코딩을 배워보고 싶다는 생각을 했었습니다. 컴퓨터 관련 진로를 정한 학생들도 있을텐데, 아래 제가 수집한 아티클을 정리한 글이 도움이 되기를 진심으로 바랍니다.
컴퓨터 프로그래밍의 개념
컴퓨터 프로그래밍 또는 코딩은 컴퓨터가 작업을 수행하기 위해 따를 수 있는 프로그램이라는 명령어 시퀀스를 구성하는 것입니다. 이 명령어는 하나 이상의 프로그래밍 언어로 코드를 작성하여 절차의 단계별 사양인 알고리즘을 설계하고 구현하는 것을 포함합니다.
프로그래머는 일반적으로 중앙 처리 장치에서 직접 실행하는 기계 코드보다 사람이 더 쉽게 이해할 수 있는 *고급 프로그래밍 언어를 사용합니다.
*여기서 고급 프로그래밍 언어, High level programming language는 단순히 급이 높고 낮음을 이야기 하는 것이 아닌 기계와 가까운 언어일수록 Low level에 가깝다는 표현을 씁니다. Low levl language로는 어셈블리어, 머신코드(기계어)가 있습니다.
숙련된 프로그래밍에는 일반적으로 응용 영역에 대한 지식, 프로그래밍 언어 및 일반 코드 라이브러리에 대한 세부 정보, 특수 알고리즘, 형식 논리 등 여러 주제에 대한 전문 지식이 필요합니다.
프로그래밍과 관련된 보조 작업에는 요구 사항 분석, 테스트, 디버깅(문제 조사 및 수정), 빌드 시스템 구현, 프로그램의 기계 코드와 같은 파생 아티팩트 관리 등이 포함됩니다. 이러한 작업은 때때로 프로그래밍으로 간주되지만, 프로그래밍, 구현 및 코딩이라는 용어는 코드 자체의 작성 및 편집을 위해 사용되는 대규모 전체 프로세스에 사용되는 경우가 많습니다. 때때로 소프트웨어 개발은 특히 공식적인 방법을 사용하거나 엔지니어링 설계 프로세스를 따르는 경우 소프트웨어 엔지니어링이라고도 합니다.
프로그래밍의 역사
프로그래밍 가능한 장치는 수세기 동안 존재해 왔습니다. 9세기 초 페르시아의 바누 무사 형제가 프로그래밍 가능한 음악 순서기를 발명했는데, 그는 구상한 장치에서 자동화된 기계식 플루트 연주자를 설명했습니다. 1206년 아랍의 엔지니어 알자자리는 음악 기계식 오토마톤을 페그와 캠을 통해 다양한 리듬과 드럼 패턴을 연주할 수 있는 프로그래밍 가능한 드럼 머신을 발명했습니다. 1801년, 자카드 직조기는 구멍이 뚫린 일련의 페이스트보드 카드인 '프로그램'을 변경하여 완전히 다른 직조를 만들 수 있었습니다.
암호 해독 알고리즘도 수세기 동안 존재해 왔습니다. 9세기 아랍 수학자 알 킨디는 암호화된 암호 해독을 위한 암호 알고리즘을 암호 메시지 해독에 관한 원고에서 설명했습니다. 그는 최초의 암호 해독 알고리즘인 주파수 분석에 의한 암호 분석에 대한 최초의 설명을 제공했습니다.
최초의 컴퓨터 프로그램은 일반적으로 수학자 에이다 러브레이스가 찰스 배비지의 분석 엔진으로 수행하기 위해 베르누이 수열을 계산하는 알고리즘을 발표한 1843년으로 거슬러 올라갑니다. 그러나 찰스 배비지는 1837년에 분석 엔진을 위한 프로그램을 직접 작성했습니다.
1880년대에 허먼 홀러리스는 데이터를 기계로 읽을 수 있는 형태로 저장하는 개념을 발명했습니다. 나중에 1906년형 I 태뷸레이터에 추가된 제어판(플러그 보드)을 통해 서로 다른 작업에 맞게 프로그래밍할 수 있었고, 1940년대 후반에는 최초의 전자 컴퓨터와 마찬가지로 IBM 602 및 IBM 604와 같은 단위 기록 장비가 제어판에 의해 유사한 방식으로 프로그래밍되었습니다. 그러나 1949년에 도입된 저장 프로그램 컴퓨터의 개념으로 프로그램과 데이터는 모두 컴퓨터 메모리에 동일한 방식으로 저장되고 조작되었습니다.
기계어
머신 코드는 초기 프로그램의 언어로, 특정 머신의 명령어 집합에 바이너리 표기법으로 작성되는 경우가 많았습니다. 프로그래머가 텍스트 형식(예: ADD X, TOTAL)으로 명령어를 지정할 수 있는 어셈블리 언어가 곧 개발되었으며, 각 연산 코드의 약어와 주소 지정을 위한 의미 있는 이름이 추가되었습니다. 그러나 어셈블리 언어는 머신 언어에 대한 다른 표기법에 불과하기 때문에 명령어 집합이 다른 두 컴퓨터도 어셈블리 언어가 다릅니다.
컴파일 언어
고급 언어는 프로그램 개발 과정을 더 간단하고 이해하기 쉬우며 기본 하드웨어에 덜 얽매이게 만들었습니다. 최초의 컴파일러 관련 도구인 A-0 시스템은 1952년 그레이스 호퍼가 개발했으며, 그는 '컴파일러'라는 용어를 만들기도 했습니다. 기능적으로 구현된 최초의 널리 사용되는 고급 언어인 FORTRAN은 1957년에 출시되었고, 기타 많은 언어, 특히 상업용 데이터 처리를 목표로 하는 COBOL과 컴퓨터 연구를 위한 Lisp가 곧 개발되었습니다.
이러한 컴파일된 언어를 사용하면 프로그래머는 구문론적으로 더 풍부하고 코드를 추상화할 수 있는 용어로 프로그램을 작성할 수 있으므로 컴파일 선언과 휴리스틱을 통해 다양한 기계 명령어 세트를 쉽게 타겟팅할 수 있습니다. 컴파일러는 컴퓨터의 힘을 활용하여 프로그래머가 인픽스 표기법을 사용하여 공식을 입력하여 계산을 지정할 수 있도록 함으로써 프로그래밍을 더 쉽게 만들었습니다.
현대의 프로그래밍
개발에 대한 접근 방식이 무엇이든, 최종 프로그램은 몇 가지 기본 속성을 충족해야 합니다. 다음 속성은 가장 중요한 속성 중 하나입니다.
신뢰성
프로그램의 결과가 정확한 빈도. 이는 알고리즘의 개념적 정확성과 리소스 관리의 실수(예: 버퍼 오버플로 및 레이스 조건) 및 논리 오류(예: 0으로 나누거나 1개 이상의 오류)와 같은 프로그래밍 오류의 최소화에 따라 달라집니다.
견고성: 프로그램이 오류(버그가 아닌)로 인한 문제를 얼마나 잘 예측하는지. 여기에는 부정확하거나 부적절하거나 손상된 데이터, 메모리, 운영 체제 서비스, 네트워크 연결과 같은 필요한 리소스의 가용성, 사용자 오류, 예기치 않은 정전과 같은 상황이 포함됩니다.
유용성
프로그램의 인체공학적 특성: 사람이 의도한 목적이나 경우에 따라 예상치 못한 목적으로 프로그램을 쉽게 사용할 수 있습니다. 이러한 문제는 다른 문제와 관계없이 프로그램의 성공을 거두거나 깨뜨릴 수 있습니다. 여기에는 프로그램 사용자 인터페이스의 명확성, 직관성, 응집력 및 완전성을 향상시키는 광범위한 텍스트, 그래픽 및 때로는 하드웨어 요소가 포함됩니다.
휴대성: 프로그램의 소스 코드를 컴파일/해석하고 실행할 수 있는 컴퓨터 하드웨어 및 운영 체제 플랫폼의 범위입니다. 이는 하드웨어 및 운영 체제 리소스, 하드웨어 및 운영 체제의 예상 동작, 소스 코드 언어에 대한 플랫폼별 컴파일러(및 때때로 라이브러리)의 가용성 등 여러 플랫폼에서 제공하는 프로그래밍 시설의 차이에 따라 달라집니다.
유지보수 가능성
현재 또는 미래의 개발자가 프로그램을 수정하여 개선하거나 버그와 보안 허점을 맞춤화, 수정하거나 새로운 환경에 적응할 수 있는 용이성입니다. 초기 개발 과정에서 모범 사례가 이러한 점에서 차이를 만듭니다. 이러한 품질은 최종 사용자에게 직접적으로 명확하지는 않지만 장기적으로 프로그램의 운명에 큰 영향을 미칠 수 있습니다.
효율성/성능
프로그램이 소비하는 시스템 리소스(프로세서 시간, 메모리 공간, 디스크와 같은 느린 장치, 네트워크 대역폭 및 어느 정도는 사용자 상호 작용)를 측정합니다. 여기에는 임시 파일 정리 및 메모리 유출 제거와 같은 리소스의 신중한 관리도 포함됩니다. 이는 종종 선택한 프로그래밍 언어의 그늘 아래서 논의됩니다. 이 언어는 성능에 확실히 영향을 미치지만, 파이썬과 같은 느린 언어라도 인간의 관점에서 즉시 프로그램을 실행할 수 있습니다. 시스템을 병목시키는 프로그램의 경우 속도, 리소스 사용 및 성능도 중요하지만 프로그래머 시간을 효율적으로 사용하는 것도 중요하며 비용과 관련이 있습니다: 더 많은 하드웨어가 더 저렴할 수 있습니다.
정리하는 글
다소 장황할 수 있으나 컴퓨터 프로그래밍을 업으로 삼는 프로그래머, 더 나아가 소프트웨어 엔지니어를 꿈꾸는 학생들에게 도움이 되는 글이길 진심으로 바랍니다. 감사합니다.
'교육 > 아티클 정리' 카테고리의 다른 글
컴퓨터 과학에 대하여 - 2 (11) | 2024.11.09 |
---|---|
컴퓨터 과학에 대하여 - 1 (14) | 2024.11.09 |
화학공학에 대해서 (12) | 2024.11.09 |