프로그래머라면 자신을 "컴퓨터 과학자"라고 생각하지 마십시오. 컴퓨터 과학자들은 차세대 컴퓨터를 만드는 사람들이며, 그 중 일부는 올바른 재료 혼합, 축소 및 계산 이론이 도출 될 때까지 여전히 공상 과학 소설입니다. 그들은 파이프 라인의 시작일뿐입니다. 여기에서 현재 소프트웨어를 개발하는 사람들은 "소프트웨어 엔지니어"입니다. 그들은 이론과 도구를 취하고 때로는 실제 이론과 실제 도구를 계층화하여 복잡한 전기 전자 마법사의 힘을 이용하여 우리가 원하는 것을 수행하게합니다. 그것은 "컴퓨터 공학"분야의 하나의 전문화로, 컴퓨터 과학자들의 이론을 취해 하드웨어와 소프트웨어를 실제 최종 사용자 전자 솔루션에 적용합니다.
이것은 비즈니스가 이론을 충족시키는 IMO입니다. 이러한 유형의 경우에, "더 나은 선의 원수가 충분하다"라는 오래된 속담을 쉽게 바꿀 수 있습니다. 자신을 "과학자"대신 "엔지니어"로 간주하고 다른 공학 분야와 병행하여 수행하는 작업을 수행하면 차이점이 완화됩니다.
고객이 토목 / 구조 엔지니어 인 당신에게 와서 다리를 만들라고 요청한다고 가정 해 봅시다. 교량은 20 피트, 자체지지 및 1 톤 운반 하중이 필요하며 정기 유지 보수를 통해 10 년 동안 지속되어야하며 한 달에 2 만 달러를 원합니다. 그것들은 당신의 제약입니다; 최대 값을 초과하지 않으면 서 최소값을 충족하십시오. 그렇게하는 것은 "충분히"좋고 월급을받습니다. 설계 사양과 예산을 몇 배나 크게 초과하는 Golden Gate Bridge를 구축하는 것은 엔지니어링이 좋지 않습니다. 당신은 일반적으로 비용 초과를 먹고 시간 초과에 대한 위약금을 지불하게됩니다. 시간과 재료가 $ 1000에 불과하지만 5 명의 어른의 무게에 맞는 로프 브릿지를 건설하는 것은 좋지 않은 엔지니어링입니다. 좋은 고객 리뷰와 평가를 얻지 못합니다.
소프트웨어로 돌아가서 들어온 파일을 다이제스트하고 정보를 시스템에 저장하기 위해 파일 처리 시스템이 필요한 클라이언트가 있다고 가정합니다. 그들은 일주일 안에 완료하기를 원하며 현재 약 10MB에 달하는 5 개의 파일을 처리해야합니다. 당신의 소중한 이론은 크게 창 밖으로 나옵니다. 귀하의 작업은 일주일 안에 해당 사양을 충족하는 제품을 구축하는 것입니다. 그렇게하면 고객의 비용 예산도 충족시킬 수 있기 때문입니다 (자재는 일반적으로이 크기의 소프트웨어 계약에 대한 버킷의 하락으로 인해). 2 주 동안 10 배의 이득을 얻는 것도 선택 사항은 아니지만 하루에 2 개의 사본을 실행하라는 지시와 함께 처리량의 절반 만 처리 할 수있는 프로그램도 아닙니다.
이것이 프린지 사건이라고 생각한다면, 당신은 틀린 것입니다. 이것은 대부분의 사내 환경입니다. 그 이유는 ROI입니다. 이 초기 프로그램은 많은 비용이 들지 않으므로 매우 빠르게 비용을 지불합니다. 최종 사용자가 더 많은 작업을 수행하거나 더 빠르게 수행해야하는 경우 코드를 리팩토링하고 확장 할 수 있습니다.
이것이 현재 프로그래밍 상태의 주된 이유입니다. 컴퓨팅의 전체 역사에서 나온 가정은 프로그램이 결코 정적 인 것이 아니라는 것입니다. 항상 업그레이드해야하며 결국 교체됩니다. 동시에, 프로그램이 실행되는 컴퓨터의 지속적인 개선으로 이론적 효율성에 대한 관심이 줄어들고 확장 성과 병렬화에 대한 관심이 증가합니다 (N 제곱 시간에 실행되지만 N 코어에서 실행되도록 병렬화 될 수있는 알고리즘). 선형적인 것으로 보이며, 더 효율적인 솔루션을 고안하기 위해 더 많은 하드웨어 비용이 개발자의 비용보다 저렴합니다.
또한 개발자 코드의 모든 줄이 잘못 될 수있는 매우 간단한 신조가 있습니다. 개발자가 글을 적게 쓸수록 글을 쓰는 데 문제가있을 가능성이 줄어 듭니다. 이것은 누군가의 "버그 속도"에 대한 비판이 아닙니다. 간단한 사실 진술입니다. MergeSort를 5 개 언어로 앞뒤로 작성하는 방법을 알고있을 수 있지만 한 줄의 코드에서 하나의 식별자 만 팻 핑거링하면 전체 정렬이 작동하지 않으며 컴파일러가이를 포착하지 못하면 걸릴 수 있습니다. 디버깅하는 데 몇 시간이 걸립니다. 이것을 List.Sort ()와 대조하십시오. 그것은 거기에 있고, 일반적인 경우에는 효율적이며, 가장 좋은 것은 이미 작동합니다.
따라서 현대 플랫폼의 많은 기능과 최신 디자인 방법론이이를 염두에두고 구축되었습니다.
- OOP-관련 데이터와 논리를 객체로 작성하고 해당 객체의 개념이 유효한 곳이면 객체 또는보다 전문화 된 파생물입니다.
- 사전 빌드 된 템플릿-60 % 이상의 우수한 코드는 구문상의 균열이며 프로그램이 화면에 무언가를 표시하도록하는 기본 사항입니다. 이 코드를 표준화하고 자동 생성함으로써 개발자의 작업량을 절반으로 줄여 생산성을 높일 수 있습니다.
- 알고리즘 및 데이터 구조 라이브러리-위와 같이 Stack, Queue, QuickSort 등을 작성하는 방법을 알고있을 수 있지만이 모든 것이 내장 된 코드 라이브러리가있는 경우 왜해야합니까? 웹 사이트가 필요했기 때문에 IIS 또는 Apache를 다시 쓰지 않을 것입니다. 그렇다면 몇 가지 훌륭한 구현이 가능할 때 QuickSort 알고리즘 또는 레드 블랙 트리 개체를 구현하는 이유는 무엇입니까?
- 유창한 인터페이스-같은 줄을 따라 레코드를 필터링하고 정렬하는 알고리즘이있을 수 있습니다. 빠르지 만 읽기 쉽지 않을 것입니다. 주니어 개발자는 이해하기 위해 하루가 걸릴 것입니다. 레코드 객체의 추가 필드를 정렬하는 데 필요한 외과 적 변화는 물론입니다. 대신 Linq와 같은 라이브러리는 매우 추악하고 취성적인 코드를 구성 가능한 메소드 호출로 한 줄 또는 두 줄로 대체하여 객체 목록을 필터링, 정렬, 투사 된 객체로 바꿉니다.