기타/컴퓨터공학

Paul Hsieh의 프로그래머란 무엇인가?

바로이순간 2020. 2. 10. 06:54

프로그래밍의 세계에 처음 발을 디딘 당신, 프로그램에 관심을 가졌거나

지금은 프로그래머가 아니지만 프로그래머가 될려는 의도를 가진 당신에

게 프로그래머가 된다는 것이 무엇인가를 이해하는데 도움을 줄 몇가지를

이야기 해보고자 한다.


장인(匠人)

----------

프로그래머는 컴퓨터가 어떻게 동작하는지에 대한 어느정도의 이해를 가

지고 있다. 프로그래머들은 보통 사물들의 세세한 것을 파고들어 이것들

을 (매뉴얼의) 사용법을 벗어난 수준에서 이해하려는 태도를 가지고 있다.


[근본적인 동작원리를 이해하려는 욕구를 가졌다고 해석된다. 시계를 분

해 조립해 보았다든지, 도대체 원리가 어떻게 되는 것일까 하고 고민하고

파고 들려는 태도를 말한다. 컴퓨터에 대해서도 마찬가지 태도를 가지는

것을 뜻한다. -역자 주-]


나트나 볼트 나무 또는 스크류드라이버 같은 것들을 사용하는 대신에 프로

그래머들의 도구는 순수한 논리, 프로토콜에 대한 이해, 그리고 상당한 정

도의 계산력(산술적 능력)이 되겠다.


설계자

------

크게 보아서 컴퓨터 프로그램들을 이루는 명령어들은 상위레벨의 설계의

부속품이다. 하위수준의 컴퓨터의 기능들은 그들 만으로는 쓸모가 없다.

유용한 프로그램을 만들기 위해서는 그 기능(함수)들을 잘 짜맞추어야

하는 것이다.


[설계자의 능력이 바로 이와같이 작은 것을 짜맞추어서 큰것을 만드는 능력

이라고 하겠다. 혹은 큰것을 작은것으로 쪼개서 실제로 큰것을 만들어 내는

능력이라고도 볼 수 있겠다. -역자 주-]


문제 해결자

-----------

보통 프로그램의 구성품(컴포넌트)들은 어떤종류의 기술적인 문제를 해결

하기 위하여 개발된 것이다. 프로그래머의 문제 해결능력은 그들의 전체적인

유능함을 지배하는 경우가 많다.


탐정

----

우리들 인간들이 가지는 문제는 우리들이 저지르는 가장 조그만 실수라도

항상 100%  정확한 컴퓨터에게 여러 종류의 문제를 일으킨다는 것이다.

이들 실수(오류)는 보통 버그라고 알려져 있는 프로그래밍 결함으로 그들

자신을 들어낸다. 프로그래머에게 커다란 문제는 어떤 사람의 프로그램에도

필연적으로 생겨나는 어려운 버그들은 보통 그들의 특징이 명백하지도 않고

단지 최종결과에서 부차적인 효과로서만 그 모습을 드러낸다는 점이다.

이때문에 프로그래머들은 이들 문제들을 수색해내기 위해서 탐정이 되어야

만 하는 것이다.


이것(탐정이 되는것)과 좋은 문제 해결자가 되는것은 서로 손을 맞잡아야

되는 것이다. 예들 들어보면, 프로그래머가 프로그램 속에 보고(피드백)나

감시(모니터링)를 위한 빌트인된 많은 부분을 가지도록 설계하였다면 이는

버그를 사냥하기위한 유효성을 향해 먼길을 가야할 것이다.


[버그를 잡으려고 너무 많은 것을 찍어 본다면 도대체 무엇을 보아야 하는

지 모를 정도로 출력이 많아서 실제로 원인을 추적해 내가는데 많은 어려

움이 있을수 있다는 뜻이다. 따라서 버그를 추적해 나가는 과정도 일종의

문제해결 과정이라고 볼수 있고 경우, 경우에 따라서 다른 방법을 사용해서

효과적으로 원인을 밝힐 수 있어야 한다는 뜻이다. -역자 주-]


기술자(혹은 예술가)

-------------------

이것은 프로그래머가 되려는 자의 선택적 특징이다(만약 당신이 마이크로

소프트를 위해서 일한다면 더욱 그러하다.) 자주 프로그래머들은 매우 어

려운 문제나 또는 보통 문제로서 너무 복잡한 해결책을 가지는 문제들과

마주 대하게 된다. 좋은 프로그래머는 창조적이려고 노력한다, 그리고

어려운 문제를 해결하는 혁신적인 아이디어나 접근방법을 찾아내려고 노력

하는 것이다.


[창조적인 예술의 경지에 이른 기술자, 혹은 새로운 길을 찾아내는 혁신

가를 뜻한다.  단지 문제해결에만 만족하지 않고 새로운 접근방법을 찾아

내려는 사람, 혁신적인 아이디어를 추구하는 프로그래머도 있다는 뜻이며

모든 프로그래머가 이런 특성을 가지고 있는 것은 아니라는 의미가 있다.

특히 마이크로소프트 사의 프로그래머들은 이런 특징이 필요없다는 말을

하는 것으로 보여 비꼬는 의미가 있다고 해석된다. -역자 주-]


[원문]


What is a Programmer?      by Paul Hsieh

 

In case you are very new to the world of programming, just interested or

intend to be one and you are not now, then here are some of the things

to help you understand what it is to be a programmer:


Craftsman

-----------

A programmer has a certain level of understanding about how a computer

works. Programmers are usually people who delve into the details about

things, and have aptitude for understanding these things usually with

less an all the instructions.


Rather than using nuts, bolts, wood, or a screwdriver, a programmers

tools are in pure logic, an understanding of protocals, and a fair

degree of proficiency with arithmetic.


Designer

----------

When taken as a whole the instructions that make computer programs are

usually part of a high level design. The low level functions of computers

are, by themselves, not usable. It is how they are put together that com-

poses a useful program.


Problem Solver

----------------

Ordinarily program components are developed to solve some sort of techni-

cal problem. A programmers problem solving ability will often dictate

their overall effectiveness.


Detective

----------

The problem with us humans, is that even the littlest mistakes can cause

all sorts of problems for computers which are essentially 100% accurate all

the time. These mistakes manifest themselves in programming glitches common-

ly known as bugs. The big problem for programmers is that tougher bugs that

inevitably crop up in anyones programming are usually not obvious about

their nature, and only show up as side effects in the final results.

Here the programmer must be a detective in order ferret out these problems.


This goes hand in hand with being a good problem solver. For example, when

a programmer designs something with a lot of built in feedback or monitoring

mechanism, this can go a long way towards their effectiveness in hunting

down bugs.


Artist

------

This is an optional trait to being a programmer (especially if you work for

Microsoft.) Often a programmer will be faced with a very difficult problem

or a problem with a solution that just seems too complex. A good programmer

will try to be creative, and always try to can come up with an innovative

idea or approach to solving difficult problems.