시스템의 복잡성 증가는 끊임없는 압박과 궁극적으로 치명적인 영향을 미칩니다. 나이든 프로그래머라면 저에게도 실망 스럽습니다.
저는 40 년 넘게 프로그래밍을 해왔고 50-100 개의 다른 언어 나 방언으로 코드를 작성했으며 5-10 명의 전문가가되었습니다. 내가 너무 많은 것을 주장 할 수있는 이유는 대부분 같은 언어 일 뿐이고 비틀기 때문입니다. 조정은 복잡성을 추가하여 모든 언어를 조금 다르게 만듭니다.
수집, 변환, 정렬 및 검색, 인코딩 / 디코딩, 형식 / 파싱, 버퍼 및 문자열, 산술, 메모리, I / O와 같은 알고리즘을 셀 수없이 여러 번 구현했습니다. 모든 새로운 구현은 복잡성이 더해집니다. 왜냐하면 모든 것이 조금씩 다르기 때문입니다.
나는 웹 프레임 워크와 모바일 앱의 높은 공중 그네 예술가들이 만들어 낸 마법이 어떻게 짧은 시간에 그렇게 아름다운 무언가를 생산할 수 있는지 궁금합니다. 그런 다음 나는 그들이 모르는 정도, 데이터, 통신, 테스트 또는 스레드에 대해 얼마나 많이 알아야하는지 또는 그들이하는 일이 유용하기 전에 무엇이든 알고 있습니다.
나는 4 세대 언어 시대에 나의 기술을 배웠다. 거기서 우리는 소프트웨어 작성의 점점 더 많은 부분을 점진적으로 포착하기 위해 더 높은 수준의 더 높은 수준의 언어를 생산할 것이라고 믿었다. 정확히 어떻게 나타 났습니까?
마이크로 소프트와 IBM은 dBase / Foxpro와 심지어 델파이도 말을하지 않고 Windows와 OS / 2 용 앱을 작성하기 위해 C로 돌아가서 그 아이디어를 없애 버렸다. 그런 다음 웹은 HTML, CSS 및 JavaScript / DOM과 같은 최고의 어셈블리 언어 트리오로 다시 수행했습니다. 거기에서 내리막 길이 다되었습니다. 항상 더 많은 언어와 더 많은 라이브러리와 더 많은 프레임 워크와 더 복잡한.
우리는 다르게 행동해야한다는 것을 알고 있습니다. HTML을 작성하지 않아도되는 CoffeeScript와 Dart, Less와 Sass, 템플릿에 대해 알고 있습니다. 우리는 알고 있고 어쨌든 그렇게합니다. 우리는 누수가있는 추상화로 가득 찬 프레임 워크를 가지고 있으며, 신비한 주문을 배우는 소수의 선택된 사람들이 어떤 놀라운 일을 할 수 있는지 알고 있지만, 우리와 우리의 프로그램은 과거의 결정에 갇혀 있습니다. 변경하거나 다시 시작하기에는 너무 복잡합니다.
그 결과 복잡해야하기 때문에 쉬워야하는 것은 쉽지 않으며, 가능해야하는 것은 거의 불가능합니다. 기존 코드 기반에서 새로운 기능을 구현하기 위해 변경하는 비용을 추정 할 수 있으며 자신이 옳다는 확신을 가질 수 있습니다. 추정 할 수는 있지만 정당화하거나 설명 할 수는 없습니다. 너무 복잡합니다.
마지막 질문에 대한 답변으로, 나는 젊은 프로그래머에게 가능한 한 레이어 케이크에서 시작하여 필요와 욕구가 자극을 줄 때 하위 레이어로 뛰어들 것을 강력히 권합니다. 루프가 없거나 분기가 적거나 명시 적 인 상태가 아닌 언어를 선호합니다. 리스프와 하스켈이 떠 오릅니다. 실제로 커뮤니티는 항상 C # / Java, Ruby, Javascript, Python 및 SQL로 마무리합니다.
마지막 단어 : 복잡성은 궁극적 인 적입니다! 이길 때 인생은 간단 해집니다.