At its core, software development is about creating and managing complex systems.
기본적으로 소프트웨어 개발은 복잡한 시스템을 만들고 관리하는 것입니다.
In the early days of computing, programs were relatively simple. At most, they perhaps could calculate a parabolic trajectory or factorize numbers. The very first computer program, designed in 1843 by Ada Lovelace, calculated a sequence of Bernoulli numbers. A hundred years after that, during the Second World War, electronic computers were invented to break encryption codes. As the possibilities of the new invention started to be explored, more and more complex operations and systems were designed. Tools like compilers and high-level languages multiplied the number of possibilities and the rapid advancement of hardware allowed more and more operations to be performed. This quickly created a need to manage the growing complexity and apply consistent engineering principles to the creation of software.
컴퓨팅 초기에는 프로그램이 비교적 간단했습니다. 기껏해야 그들은 포물선 궤적을 계산하거나 숫자를 인수분해할 수 있습니다. 맨 처음 Ada Lovelace가 1843년에 설계한 컴퓨터 프로그램은 베르누이 수. 그로부터 100년 후, 제2차 세계 대전 중에, 전자 컴퓨터는 암호화 코드를 해독하기 위해 발명되었습니다. 가능성으로 새로운 발명에 대한 탐구가 시작되었고, 점점 더 복잡한 작업과 시스템을 설계했습니다. 컴파일러 및 고급 언어와 같은 도구는 가능성의 수와 하드웨어의 급속한 발전은 더 많은 것을 허용하고 더 많은 작업을 수행해야 합니다. 이로 인해 빠르게 성장하는 복잡성을 줄이고 일관된 엔지니어링 원칙을 소프트웨어 생성에 적용합니다.
More than 50 years after the birth of the computing industry, the software tools at our disposal are incredibly varied and powerful. We stand on the shoulders of giants to build our own software. We can quickly add a lot of functionalities with relatively little effort, either leveraging high-level languages and APIs or using out-of-the- box modules and packages. With this great power comes the great responsibility of managing the explosion of complexity that it produces.
컴퓨팅 산업이 탄생한 지 50년이 넘는 시간 동안 우리의 처리는 매우 다양하고 강력합니다. 우리는 거인의 어깨 위에 서 있다. 우리 자신의 소프트웨어를 구축합니다. 상대적으로 많은 기능을 빠르게 추가할 수 있습니다. 고수준 언어와 API를 활용하거나 외부에서 사용하는 약간의 노력 상자 모듈 및 패키지. 이 큰 힘에는 큰 책임이 따른다. 생성하는 복잡성의 폭발을 관리합니다.
In the most simple terms, software architecture defines the structure of a software system. This architecture can develop organically, usually in the early stages of a project, but after system growth and a few change requests, the need to think carefully about the architecture becomes more and more important. As the system becomes bigger, the structure becomes more difficult to change, which affects future efforts. It's easier to make changes following the structure rather than against the structure.
가장 간단한 용어로 소프트웨어 아키텍처는 소프트웨어의 구조를 정의합니다. 체계. 이 아키텍처는 일반적으로 초기 단계에서 유기적으로 발전할 수 있습니다. 그러나 시스템 성장과 몇 가지 변경 요청 후에 아키텍처에 대한 주의가 점점 더 중요해지고 있습니다. 시스템으로 크기가 커질수록 구조 변경이 어려워져 미래에 영향을 미칩니다. 노력. 구조에 따라 변경하는 것보다 구조에 따라 변경하는 것이 더 쉽습니다. 구조.
At the core of software architecture, then, is taking a look at the big picture: to focus on where the system is going to be in the future, to be able to materialize this view, but also to help the present situation. The usual choice between short-term wins and long-term operation is very important in development, and its most common outcome is the creation of technical debt. Software architecture deals mostly with long-term implications.
따라서 소프트웨어 아키텍처의 핵심은 큰 그림을 보는 것입니다. 시스템이 미래에 어디로 갈 것인지에 대해, 이 견해를 구체화할 수 있도록, 현재 상황을 돕기도 합니다. 단기 승리 사이의 일반적인 선택 장기 운영은 개발에서 매우 중요하며 가장 일반적입니다. 결과는 기술 부채의 생성입니다. 소프트웨어 아키텍처는 주로 장기적인 의미.
The considerations for software architecture can be quite numerous and there needs to be a balance between them. Some examples may include: