Catalog
concept#Architecture#Software Engineering#Platform#Security

Programming Language

An abstract system for expressing instructions to computers that provides syntax, semantics, and abstractions.

A programming language is a formal system for expressing algorithms and data structures, enabling developers to write precise instructions for computers.
Established
Medium

Classification

  • Medium
  • Technical
  • Technical
  • Intermediate

Technical context

CI/CD pipeline (Jenkins, GitHub Actions)Package and dependency managersMonitoring and observability tools

Principles & goals

Clarity over clevernessChoose according to domain and operational requirementsConsider tooling, ecosystem and maintainability
Build
Domain, Team

Use cases & scenarios

Compromises

  • Wrong choice increases maintenance effort and cost
  • Insufficient tooling leads to slower development
  • Performance bottlenecks due to unsuitable runtime models
  • Decide based on concrete measurements and prototypes
  • Validate tooling and tests before broad adoption
  • Check ecosystem governance and licenses

I/O & resources

  • Functional and non-functional requirements
  • Team skills and learning capacity
  • Operational environment and target platform
  • Chosen language and rationale
  • Toolchain and library list
  • Proof-of-concept or migration plan

Description

A programming language is a formal system for expressing algorithms and data structures, enabling developers to write precise instructions for computers. It defines syntax, semantics, and abstractions, influencing performance, maintainability, and tooling. Language choice affects architectural decisions, development cost, and team capabilities.

  • Enables explicit modeling of problems
  • Influences runtime behavior and resource usage
  • Determines available ecosystem and tooling support

  • No universal language for all requirements
  • Legacy dependencies can hinder migration
  • Language choice can affect talent availability

  • Time-to-Market

    Time until a feature reaches production, influenced by language and tooling.

  • Runtime latency

    Measurement of response times of critical paths under real load.

  • Defect density

    Number of defects per lines of code or module, influenced by type system and testability.

Web API in Go

Go was chosen for simple concurrency models and fast compilation, suitable for scalable microservices.

Data analysis with Python

Python provides extensive libraries for statistics and ML and enables rapid prototyping.

Real-time control in C

C enables fine-grained resource control and is widely used in embedded systems.

1

Collect and evaluate requirements

2

Identify candidates and build prototypes

3

Set up toolchain, tests and CI

4

Organize training and knowledge transfer

5

Perform incremental migration or rollout

⚠️ Technical debt & bottlenecks

  • Outdated dependencies due to long-term use of a language
  • Growing spaghetti code bases with unclear typing concepts
  • Partial migrations that increase interface complexity
Interoperability with existing systemsRuntime performanceBuild and tooling complexity
  • Using a dynamic language for hard real-time requirements
  • Skipping tests due to familiarity with the language
  • Selecting a language without considering existing libraries
  • Underestimating required training effort
  • Overlooking license or compliance constraints
  • Lack of long-term maintenance for the toolchain
Language fundamentals (syntax, paradigms)Tooling knowledge (debugger, build tools)Ability for performance analysis
Performance requirementsMaintainability and readabilityAvailable libraries and ecosystem
  • Platform and hardware constraints
  • Regulatory requirements (e.g., safety/cert)
  • Existing legacy dependencies