목차
소프트웨어(software)라는 단어의 사전적 의미는 다들 알다시피 하드웨어(hardware)의 반대말이다. 하드웨어처럼 눈에 보이는 물리적인 형태가 없기 때문에 소프트웨어라고 불리게 되었다.
좀 더 명확한 정의를 찾고자 구글에서 'what is software'라고 검색해보니.. 역시 똑똑한 구글은 소프트웨어의 정의라는 검색어의 의미를 제대로 이해하고 다음과 같은 결과를 내놓았다. 여러분도 한번 검색해 보길 바란다. 더 많은 결과가 나올 것이다.
A computer program, which provides the instructions which enable the computer hardware to work. System software, such as Windows or MacOS, operate the machine itself, and applications software, such as spreadsheet or word processing programs, provide specific functionality.
www.getnetwise.org/glossary.php
Computer programs; instructions that make hardware work. Two main types of software are system software (operating systems), which control the workings of the computer, and applications, such as word processing programs, spreadsheets, and databases.
www.microsoft.com/office/newtosite/glossary.asp
Sets of instructions or data that tell a computer what to do. Software is often divided into two categories: system software, which includes the operating system (e.g., Windows 95, MacOS) and all utilities that enable the computer to function; and applications software, which includes programs that perform specific tasks (e.g., word processors, spreadsheets, and databases).
iet.ucdavis.edu/glossary/
위 내용들에서 공통점을 찾아보면 소프트웨어는 명령어(instruction)의 집합이고, 하드웨어를 제어(control)하는 것이라고 한다. 이런 정의를 통해 우리가 보통 이해하는 하드웨어라는 것은 결국 외부에서 명령을 입력하기 전에는 아무것도 못하는 깡통이라는 것을 이해할 수 있다.
실제로 최초의 하드웨어들에게 어떤 동작을 지시하기 위해서는 사람들이 기계 속을 돌아다니면서 수만개의 스위치를 끄거나, 켜야 했다. (정확히 사실이다!) 빌게이츠가 고등학교 다니던 시절에 미국에서 팔리던 교육용 컴퓨터는 외부에 십여개의 스위치가 달려 있어서.. 이 스위치를 조작해서 컴퓨터에 명령을 입력해야 했다. 간단한 기능을 실험해보려고 해도, 한두시간 쯤은 스위치를 내렸다 올렸다 하면서 명령들을 입력해야 했으며, 더욱 처참한 것은 전원이 나가면 입력한 명령이 모두 지워졌다는 점이다. (그럼에도 불구하고 기계의 동작을 매번 다르게 제어할 수 있기 때문에 초기 개발자들은 매우 고무되었었다.)
컴퓨터에게 복잡한 작업을 시킨다는 것은 정말 불편한 일이 아닐 수 없기에 명령어들을 일일이 스위치를 이용해서 입력하지 않고, 사람이 이해할 수 있는 기호(symbol)들을 이용해서 종이에 작성하고, 종이에 작성한 문서를 카드에 천공(구멍을 내는 겁니다) 했다가 쌓아두고 한꺼번에 실행하는 방식이 고안되었다. (이런 비슷한 경험을 여러분은 고등학교 때 많이 했죠. 객관식 시험에서 사용하는 OMR 카드와 비슷한 것이다.)
실제로 80년도까지 쓰이던 방식이었고, 자기 테이프, 자기디스크 등의 새로운 영구 기억 매체가 나오면서 컴퓨터가 실행해야할 명령들을 모아서 저장해둔 후에 반복적으로 꺼내쓸 수 있게 되었다. 명령어들을 외부 저장장치 내에 저장해두고, 반복 수행하거나, 수정해서 쓸 수 있게된 시점부터 컴퓨터의 능력은 비약적으로 향상되기 시작했으니, 인간이 좀더 많은 명령을 컴퓨터에게 지시할 수 있게 되었기 때문이다. 정리하자면 컴퓨터 소프트웨어는 컴퓨터가 처리해야할 명령의 집합이다. 컴퓨터의 실행명령은 0과 1의 조합으로된 데이터를 구성되어 있기에 컴퓨터 소프트웨어는 결국 0,1의 무수한 나열이기도 하다.
기본적으로 소프트웨어는 아주 단순한 숫자의 반복이다. 그런데, 어떻게 소프트웨어는 우주선을 제어하고, 인간과 체스를 겨루고, 화려한 그래픽과 게임들을 가능하게 하는 것일까? 그것은 소프트웨어가 인간의 의지 혹은 생각을 대행하고 있기 때문이다. 소프트웨어가 만들어지기 위해서는 컴퓨터가 수행해야할 복잡할 기능들을 계획하고, 설계하며, 명령 하나 하나를 입력하는 과정이 필수적이다. 프로그래머는 소프트웨어가 만들어지기 위해서 무수한 명령어들을 배워야 하며, 그 명령어들을 조합하고, 작성하며, 테스트 하는 것이다. 소프트웨어는 언뜻 보기에 단순하면서도 대단한 기능을 처리하는 것처럼 여겨진다. 하지만 그속에는 보이지 않는 복잡함과 인간의 노력, 그리고 고뇌가 스며들어 있는 것이다.
좀 더 명확한 정의를 찾고자 구글에서 'what is software'라고 검색해보니.. 역시 똑똑한 구글은 소프트웨어의 정의라는 검색어의 의미를 제대로 이해하고 다음과 같은 결과를 내놓았다. 여러분도 한번 검색해 보길 바란다. 더 많은 결과가 나올 것이다.
A computer program, which provides the instructions which enable the computer hardware to work. System software, such as Windows or MacOS, operate the machine itself, and applications software, such as spreadsheet or word processing programs, provide specific functionality.
www.getnetwise.org/glossary.php
Computer programs; instructions that make hardware work. Two main types of software are system software (operating systems), which control the workings of the computer, and applications, such as word processing programs, spreadsheets, and databases.
www.microsoft.com/office/newtosite/glossary.asp
Sets of instructions or data that tell a computer what to do. Software is often divided into two categories: system software, which includes the operating system (e.g., Windows 95, MacOS) and all utilities that enable the computer to function; and applications software, which includes programs that perform specific tasks (e.g., word processors, spreadsheets, and databases).
iet.ucdavis.edu/glossary/
위 내용들에서 공통점을 찾아보면 소프트웨어는 명령어(instruction)의 집합이고, 하드웨어를 제어(control)하는 것이라고 한다. 이런 정의를 통해 우리가 보통 이해하는 하드웨어라는 것은 결국 외부에서 명령을 입력하기 전에는 아무것도 못하는 깡통이라는 것을 이해할 수 있다.
실제로 최초의 하드웨어들에게 어떤 동작을 지시하기 위해서는 사람들이 기계 속을 돌아다니면서 수만개의 스위치를 끄거나, 켜야 했다. (정확히 사실이다!) 빌게이츠가 고등학교 다니던 시절에 미국에서 팔리던 교육용 컴퓨터는 외부에 십여개의 스위치가 달려 있어서.. 이 스위치를 조작해서 컴퓨터에 명령을 입력해야 했다. 간단한 기능을 실험해보려고 해도, 한두시간 쯤은 스위치를 내렸다 올렸다 하면서 명령들을 입력해야 했으며, 더욱 처참한 것은 전원이 나가면 입력한 명령이 모두 지워졌다는 점이다. (그럼에도 불구하고 기계의 동작을 매번 다르게 제어할 수 있기 때문에 초기 개발자들은 매우 고무되었었다.)
컴퓨터에게 복잡한 작업을 시킨다는 것은 정말 불편한 일이 아닐 수 없기에 명령어들을 일일이 스위치를 이용해서 입력하지 않고, 사람이 이해할 수 있는 기호(symbol)들을 이용해서 종이에 작성하고, 종이에 작성한 문서를 카드에 천공(구멍을 내는 겁니다) 했다가 쌓아두고 한꺼번에 실행하는 방식이 고안되었다. (이런 비슷한 경험을 여러분은 고등학교 때 많이 했죠. 객관식 시험에서 사용하는 OMR 카드와 비슷한 것이다.)
실제로 80년도까지 쓰이던 방식이었고, 자기 테이프, 자기디스크 등의 새로운 영구 기억 매체가 나오면서 컴퓨터가 실행해야할 명령들을 모아서 저장해둔 후에 반복적으로 꺼내쓸 수 있게 되었다. 명령어들을 외부 저장장치 내에 저장해두고, 반복 수행하거나, 수정해서 쓸 수 있게된 시점부터 컴퓨터의 능력은 비약적으로 향상되기 시작했으니, 인간이 좀더 많은 명령을 컴퓨터에게 지시할 수 있게 되었기 때문이다. 정리하자면 컴퓨터 소프트웨어는 컴퓨터가 처리해야할 명령의 집합이다. 컴퓨터의 실행명령은 0과 1의 조합으로된 데이터를 구성되어 있기에 컴퓨터 소프트웨어는 결국 0,1의 무수한 나열이기도 하다.
기본적으로 소프트웨어는 아주 단순한 숫자의 반복이다. 그런데, 어떻게 소프트웨어는 우주선을 제어하고, 인간과 체스를 겨루고, 화려한 그래픽과 게임들을 가능하게 하는 것일까? 그것은 소프트웨어가 인간의 의지 혹은 생각을 대행하고 있기 때문이다. 소프트웨어가 만들어지기 위해서는 컴퓨터가 수행해야할 복잡할 기능들을 계획하고, 설계하며, 명령 하나 하나를 입력하는 과정이 필수적이다. 프로그래머는 소프트웨어가 만들어지기 위해서 무수한 명령어들을 배워야 하며, 그 명령어들을 조합하고, 작성하며, 테스트 하는 것이다. 소프트웨어는 언뜻 보기에 단순하면서도 대단한 기능을 처리하는 것처럼 여겨진다. 하지만 그속에는 보이지 않는 복잡함과 인간의 노력, 그리고 고뇌가 스며들어 있는 것이다.
본문내용
설명해 보자. 우리는 소설을 배우는 학생이 처음부터 대작 소설을 작성하는 것은 매우 어렵고 실패할 확률이 높다는 것을 쉽게 알 수 있다. 짧은 글을 쓰는 과정에서도 다양한 단어 표현, 어투, 그리고 이야기의 기승전결과 같은 서술 구조 등 많은 점들을 고려해야 하기 때문에 짧은 글을 쓰는 연습을 거쳐, 점차 긴 글들을 작성해야 하는 것이다.
프로그램 작성을 배우는 것도 이와 다를 것이 없다. 갓 C 언어의 문법과 기초 이론을 배웠다고 해서 게임 프로그램 제작을 시도하는 것은 작문의 기초를 배운 학생이 단편 영화 시나리오에 도전하는 것과 같다고 하겠다. (그럼에도 불구하고, 거의 모든 IT 초보자들은 이런 무모한 도전에 많은 시간을 허비한다.)
물론, 남들이 작성한 프로그램들을 분석하고 이해하는 것은 지루하고 어쩌면, 시간의 낭비로 까지 여겨질 것이다. 하지만, 우리는 늘상 남들이 작성한 신문, 남들이 만든 소설, 그리고 영화나 만화를 소비하고 있지 않은가? 단지, 재미 있기 때문에...? 아니다. 우리는 그속에서 대화하는 법, 설득하는 법, 다양한 의사전달 표현들을 배우고 있다.
남들이 만든 프로그램 속에서 내가 지금까지 모르던 문법, 색다른 코드, 신선한 아이디어를 얻을 수 있다라고 생각해보자. 조금은 덜 지겨운 일이 될 것이다. 또한, 남들과 대화하기 위해 최신 연예 소식이나, 영화 줄거리를 알아야 하는 것처럼 최신 개발 동향 등을 이해하기 위해서도 남들이 만든 프로그램을 종종 들여다 보는 습관을 들여야 한다.
'모방은 창조의 어머니'라는 말도 있다. 누구가 처음부터 탁월한 프로그래머가 될수는 없다. 현존하는 최고의 개발자들의 노하우를 분석하고, 자신의 것으로 소화한 후에 그 위에 나만의 신기술을 추가함으로써 여러분은 앞서가는 프로그래머가 될 수 있는 것이다.
일찌기 '만유인력의 법칙'을 발견한 아이작 뉴턴은 자신을 일컬어 거인의 어깨에 앉았기에 멀리 볼 수 있었던 작은 아이라고 했. 그가 말한 거인은 아리스토텔레스, 갈릴레이와 같은 자신보다 앞서 자연을 이해하고자 애쓴 수많은 선배 과학자들을 표현하는 말이다.
마지막으로, 다양한 도구를 다룰 줄 알아야 한다. 빠르게 변모하는 소프트웨어 업계에서 프로그래머들이 가진 가장 중요한 자산은 시간이라고 할 수 있다. 아무리 멋진 아이디어를 가지고 있다해도, 개발하는데 몇년씩 걸린다면, 그 사이에 이미 다른 사람이 유사한 제품을 세상에 내놓고 말 것니다.
그렇게 때문에 노력도 중요하지만 좋은 프로그램을 빠른 시간에 개발할 수 있는 능력도 중요한 자질이다.
그런데, 사람이 자신의 생각을 키보드로 입력할 수 있는 속도는 절대적인 한계가 있으며, 완벽하게 코드를 작성할 수 있는 사람도 거의 없다. 다행스럽게도 이러한 문제를 해결해 줄 수 있는 강력한 도구들이 이미 많이 나와 있으며, 개발자가 작성한 코드의 문제점, 잘못된 표기법을 고쳐주면서 심지어 소스를 자동으로 생성해주는 프로그램들까지 나와 있다.
정리하자면,좋은 프로그램을 작성하기 위해서는 많이 작성하고, 많이 모방하고 많이 고민해야 한다.
프로그램 작성을 배우는 것도 이와 다를 것이 없다. 갓 C 언어의 문법과 기초 이론을 배웠다고 해서 게임 프로그램 제작을 시도하는 것은 작문의 기초를 배운 학생이 단편 영화 시나리오에 도전하는 것과 같다고 하겠다. (그럼에도 불구하고, 거의 모든 IT 초보자들은 이런 무모한 도전에 많은 시간을 허비한다.)
물론, 남들이 작성한 프로그램들을 분석하고 이해하는 것은 지루하고 어쩌면, 시간의 낭비로 까지 여겨질 것이다. 하지만, 우리는 늘상 남들이 작성한 신문, 남들이 만든 소설, 그리고 영화나 만화를 소비하고 있지 않은가? 단지, 재미 있기 때문에...? 아니다. 우리는 그속에서 대화하는 법, 설득하는 법, 다양한 의사전달 표현들을 배우고 있다.
남들이 만든 프로그램 속에서 내가 지금까지 모르던 문법, 색다른 코드, 신선한 아이디어를 얻을 수 있다라고 생각해보자. 조금은 덜 지겨운 일이 될 것이다. 또한, 남들과 대화하기 위해 최신 연예 소식이나, 영화 줄거리를 알아야 하는 것처럼 최신 개발 동향 등을 이해하기 위해서도 남들이 만든 프로그램을 종종 들여다 보는 습관을 들여야 한다.
'모방은 창조의 어머니'라는 말도 있다. 누구가 처음부터 탁월한 프로그래머가 될수는 없다. 현존하는 최고의 개발자들의 노하우를 분석하고, 자신의 것으로 소화한 후에 그 위에 나만의 신기술을 추가함으로써 여러분은 앞서가는 프로그래머가 될 수 있는 것이다.
일찌기 '만유인력의 법칙'을 발견한 아이작 뉴턴은 자신을 일컬어 거인의 어깨에 앉았기에 멀리 볼 수 있었던 작은 아이라고 했. 그가 말한 거인은 아리스토텔레스, 갈릴레이와 같은 자신보다 앞서 자연을 이해하고자 애쓴 수많은 선배 과학자들을 표현하는 말이다.
마지막으로, 다양한 도구를 다룰 줄 알아야 한다. 빠르게 변모하는 소프트웨어 업계에서 프로그래머들이 가진 가장 중요한 자산은 시간이라고 할 수 있다. 아무리 멋진 아이디어를 가지고 있다해도, 개발하는데 몇년씩 걸린다면, 그 사이에 이미 다른 사람이 유사한 제품을 세상에 내놓고 말 것니다.
그렇게 때문에 노력도 중요하지만 좋은 프로그램을 빠른 시간에 개발할 수 있는 능력도 중요한 자질이다.
그런데, 사람이 자신의 생각을 키보드로 입력할 수 있는 속도는 절대적인 한계가 있으며, 완벽하게 코드를 작성할 수 있는 사람도 거의 없다. 다행스럽게도 이러한 문제를 해결해 줄 수 있는 강력한 도구들이 이미 많이 나와 있으며, 개발자가 작성한 코드의 문제점, 잘못된 표기법을 고쳐주면서 심지어 소스를 자동으로 생성해주는 프로그램들까지 나와 있다.
정리하자면,좋은 프로그램을 작성하기 위해서는 많이 작성하고, 많이 모방하고 많이 고민해야 한다.
추천자료
- 발달 심리학 - 발달 연구의 출발점은 신생아들이 세상에서 생활하기 위해서 필요한 것들이 무...
- (A+) 한국사회문제 - 한국에서 정부가 보는 빈곤의 원인은 무엇인지 조사하고, 이를 개인들의...
- 자본주의 시장의 확대, 세계화와 더불어 국가의 역할은 어떻게 변하고 있는지와 우리사회의 ...
- [한국사회문제A형]한국 사회에서 어떤 사회문제 지역이나 공동체가 주체가 되어 해결하고자 ...
- [가족복지론] 사회적 변화와 가족의 변화 - 자신이 경험했던 가족은 어떤지 그리고 사회적 변...
- 가족복지론 - 본인(자신)이 경험했던 가족은 어떤지 그리고 사회적 변화에 어떻게 영향을 미...
- [외국어로서의 한국어학개론] Q. 한국어의 음운변화 현상중 음절의 끝소리 규칙이란, 끝소리...
- [성 사랑 사회 B형] 한국 사회에서 가정이나 일터 등 일상적인 공간에서 성폭력이나 성희롱이...
- 인간의 역사는 불평등의 역사라 해도 과언이 아니다. 현대사회에서 사회 불평등을 어떻게 해...
- (성, 사랑, 사회 D형) 한국 사회에서 이주 여성들이 겪는 어려움은 무엇이며, 이들의 경험을...
- 성,사랑,사회 D형)한국 사회에서 이주 여성들이 겪는 어려움은 무엇이며, 이들의 경험을 통해...
- (방통대 성사랑사회4B) 한국 사회에서 가정이나 일터 등 일상적인 공간에서 성폭력이나 성희...
- [성사랑사회 D형] 한국 사회에서 이주 여성들이 겪는 어려움은 무엇이며, 이들의 경험을 통해...
- [성 사랑 사회 D형] 한국 사회에서 이주 여성들이 겪는 어려움은 무엇이며 이들의 경험을 통...
소개글