Gergő Pintér, PhD
gergo.pinter@uni-corvinus.hu
| week | date | lecture | practical class |
|---|---|---|---|
| 1 | 2026-09-16 | intro, software architecture | project assignment |
| 2 | 2026-09-23 | SDLC, scrum, kanban | informal R.A. |
| 3 | 2026-09-30 | requirements analysis, user story mapping | formal R.A., workshop |
| 4 | 2026-10-07 | UML, C4 | project workshop |
| 5 | 2026-10-14 | design patterns | project workshop |
| 6 | 2026-10-21 | interfaces, implementation planning | req. analysis demo |
| 7 | 2026-10-28 | school holiday | |
| 8 | 2026-11-04 | wireframing, clean code | project workshop |
| 9 | 2026-11-11 | code quality, code review | project workshop |
| 10 | 2026-11-18 | testing, legacy code | project workshop |
| 11 | 2026-11-25 | CI, automatization, devops | project workshop |
| 12 | 2026-12-02 | summary | project workshop |
| 13 | 2026-12-09 | midterm | design demo |
| week | date | lecture | practical class |
|---|---|---|---|
| 1 | 2026-09-16 | intro, software architecture | project assignment |
| 2 | 2026-09-23 | SDLC, scrum, kanban | informal R.A. |
| 3 | 2026-09-30 | requirements analysis, user story mapping | formal R.A., workshop |
| 4 | 2026-10-07 | UML, C4 | project workshop |
| 5 | 2026-10-14 | design patterns | project workshop |
| 6 | 2026-10-21 | interfaces, implementation planning | req. analysis demo |
| 7 | 2026-10-28 | school holiday |
| week | date | lecture | practical class |
|---|---|---|---|
| 8 | 2026-11-04 | wireframing, clean code | project workshop |
| 9 | 2026-11-11 | code quality, code review | project workshop |
| 10 | 2026-11-18 | testing, legacy code | project workshop |
| 11 | 2026-11-25 | CI, automatization, devops | project workshop |
| 12 | 2026-12-02 | summary | project workshop |
| 13 | 2026-12-09 | midterm | design demo |
round(requirements analysis (35%) + design (35%) + midterm (30%))
| score | grade |
|---|---|
| 0-29 | 1 |
| 30-34 | 2 |
| 35-39 | 3 |
| 40-44 | 4 |
| 45-50 | 5 |

A computer program is a sequence or set of instructions in a programming language for a computer to execute. It is one component of software, which also includes documentation and other intangible components.
ISO/IEC 2382:2015 via Wikipedia [1]
There is a metaphor saying that a program is like a recipe.
The computer follows the instructions of a program as the cook follows the instruction in a recipe.
Consequently programming is like creating a recipe.
Software development is about translating a problem into a solution that a computer can understand and automatically resolve. Preferably in a secure and scalable way.
– Frederick Vanbrabant
expectation: AI’s going to make it so much faster
Every software developer knows that you can’t make projects go faster just by typing faster. If that were the case we would all be taking typing lessons.
source/reading: I don’t think AI will make your processes go faster by Frederick Vanbrabant
which can get performing a requirement analysis
What software developers have been begging for since the beginning of the profession: Receiving a detailed outline of the problem and what the end result should look like.
From today, painting is dead.
– Paul Delaroche, French painter
readings: From Today, Software Engineering is Dead by Russell Jennings
maintenance?
a software does not have to obey the laws of physics
based on Software Architecture Metaphors by Lisa Stähli [2]
Software rot (or software entropy) is the degradation, deterioration, or loss of the use or performance of software over time [3].
dormant rot: the software in question is not changed, but as the environment evolves, it eventually becomes dysfunctional
Muni metro’s control software is still loaded from floppy disks [4]
active rot
based on Software Architecture Metaphors by Lisa Stähli [2]
based on Software Architecture Metaphors by Lisa Stähli [2]
software is often measured by the source lines of code
A line of code (LOC) is any line of text in a code that is not a comment or blank line.
software is often measured by the source lines of code
| app | version | LOC (million) |
|---|---|---|
| Vanilla Music Player for Android | 1.3.2 | 0.048 |
| VLC for Android | 3.6.5 | 0.265 |
| Telegram for Android (messaging app) | 11.14.1 | 6.6 |
| GCC (compiler) | 15.1 | 15 |
| Firefox (web browser) | 142 | 45 |
| Windows [5] | 10 | 50 |
| Linux (kernel) | 6.16 | 40 |
further read about size of software by Christopher McFadden
number of lines of code is increasing
infographic about codebase growth
because we want
more and more functionality
24 million lines of code – operational and support – needed for the F-35 to be fully operational; when the program started, the estimated number of lines of code required was closer to 15 million
– Robert N. Charette, F-35 Program Continues to Struggle with Software [6]
source: www.folklore.org by Andy Hertzfeld | CC-BY-NC
Quickdraw: 2D graphics library
if we wish to count lines of code, we should not regard them as “lines produced” but as “lines spent”
E. W. Dijkstra EWD 1036
Every line of code written comes at a price: maintenance. To avoid paying for a lot of code, we build reusable software. The problem with code re-use is that it gets in the way of changing your mind later on.
We don’t add stuff “just because we can”. We need to have a damn good reason for it.
A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away.
– Antoine de Saint-Exupéry (29 June 1900 – 31 July 1944)
Every program attempts to expand until it can read mail. Those programs which cannot so expand are replaced by ones which can.
– Jamie Zawinski
further reading: Simplicity
by Joel Spolsky,
Users
Only Care About 20% of Your Application by Ibrahim Diallo
Linux Torvalds: despite not really having any single thing that stands out… 5.8 looks to be one of our biggest releases of all time
a more technical read: Why Linux’s biggest ever kernel release is really no big deal
based on Simon Mutch’s Version Control materials
In practice, everything that has been created manually should be put in version control, including programs, original field observations, and the source files for papers.
– Best Practices for Scientific Computing; Wilson et al. 2012 (arXiv:1210.0530)
this presentation is under version control as well
The current level of software complexity is not manageable without allowing many people to work on the same code base, and the separation of the development versions from the production one.
later on the course: the types and operation of version control systems
if you want to deliver product fast, and the developer time is expensive, reuse components
is it possible to decrease the dependency stack?
choose your dependencies wisely
which is actually an architecture decision
| 1 | 2 | 3 | 4 | 5 | 6 |
| 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 |
| 31 | 32 | 33 | 34 | 35 | 36 |
| 37 | 38 | 39 | 40 | 41 | 42 |
| 1 | 7 | 13 | 19 | 25 | 31 | 37 |
| 2 | 8 | 14 | 20 | 26 | 32 | 38 |
| 3 | 9 | 15 | 21 | 27 | 33 | 39 |
| 4 | 10 | 16 | 22 | 28 | 34 | 40 |
| 5 | 11 | 17 | 23 | 29 | 35 | 41 |
| 6 | 12 | 18 | 24 | 30 | 36 | 42 |
import pandas as pd
def transpose_with_pandas(path: str) -> pd.DataFrame:
df = pd.read_excel(path)
return df.transpose()8 dependencies: numpy, pandas, python-dateutil, pytz, six, tzdata, et-xmlfile, openpyxl
import numpy as np
from openpyxl import load_workbook
def transpose_without_pandas(path: str) -> np.ndarray:
wb = load_workbook(filename=path, read_only=True)
arr = np.array(
[[cell for cell in row] for row in wb.active.iter_rows(values_only=True)]
)
return np.transpose(arr)3 dependencies: numpy, et-xmlfile, openpyxl
from openpyxl import load_workbook
def transpose_without_numpy(path: str) -> list:
wb = load_workbook(filename=path, read_only=True)
sheet = wb["Sheet1"]
mx = []
for row in sheet.iter_rows(values_only=True):
mx.append(list(row))
# https://stackoverflow.com/a/6473724/4737417
return list(map(list, zip(*mx)))2 dependencies: et-xmlfile, openpyxl
dependencies are used only to open an XLSX spreadsheet, the transposition is achieved only using the standard library
not trivial to understand the
list(map(list, zip(*mx))),
read the explanation at Stack
Overflow
trade-off between
advice: you don’t want to reimplement datetime / timezone handling
Mythical man month: 10 lines per developer day [12]
Redis is composed of 100k lines of code, I wrote at least 70k of that in 10 years. […] assuming I work 22 days every month for 11 months:
70000/(221110) = ~29 LOC / day
Which is not too far from 10 […], so the Mythical Man Month book is indeed quite accurate.
– Salvatore “antirez” Sanfilippo, creator of the Redis in-memory database
| years of coding | avg. lines per day | lines per year |
|---|---|---|
| 1-5 | 100 | 25,000 |
| 5-10 | 80 | 20,000 |
| 10-15 | 60 | 15,000 |
| 15-20 | 40 | 10,000 |
| 20+ | 20 | 5,000 |
estimation by the Linux Foundation [14]
Linux 6.16 (released 2025-08-07) has about 40 million LOC
| years of coding | avg. lines per day | lines per year |
|---|---|---|
| 1-5 | 100 | 25,000 |
| 5-10 | 80 | 20,000 |
| 10-15 | 60 | 15,000 |
| 15-20 | 40 | 10,000 |
| 20+ | 20 | 5,000 |
source: The Cathedral, the Bazaar, and the Winchester Mystery House by Drew Breunig
implementation costs are changing
practically decreasing
There are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we do not know. But there are also unknown unknowns – there are things we do not know we don’t know.
– Donald Rumsfeld (13th & 21st United States Secretary of Defense)
| complexity class | known | unknown | knowns | unknowns |
|---|---|---|---|---|
| simple | ✓ | x | ✓ | x |
| complicated | ✓ | x | ✓ | ✓ |
| complex | x | ✓ | ✓ | x |
| chaotic | x | ✓ | x | ✓ |
source: [15]
from Michael Bykovski’s essay [15]
Stacey matrix [17]
“Architecture” is a term that lots of people try to define, with little agreement. There are two common elements: One is the highest-level breakdown of a system into its parts; the other, decisions that are hard to change.
– Martin Fowler - Patterns of Enterprise Application Architecture
In most successful software projects, the expert developers working on that project have a shared understanding of the system design. This shared understanding is called ‘architecture’. This understanding includes how the system is divided into components and how the components interact through interfaces. These components are usually composed of smaller components, but the architecture only includes the components and interfaces that are understood by all the developers.
Ralph Johnson, XP mailing list
All architecture is design but not all design is architecture. Architecture represents the significant design decisions that shape a system, where significant is measured by cost of change.
– Grady Booch
# Title
## Status
What is the status, such as proposed, accepted,
rejected, deprecated, superseded, etc.?
## Context
What is the issue that we're seeing that is
motivating this decision or change?
## Decision
What is the change that we're proposing and/or doing?
## Consequences
What becomes easier or more difficult to do
because of this change?ADR template by Michael Nygard from Documenting architecture decisions
topologies, for example
based on: Introduction to Software Architecture
Architecture is the decisions that you wish you could get right early in a project.
– Ralph Johnson
to do that, you need to know all the unknowns, so you need requirements analysis, and learning the new/unknown technology
Compromise is neither good nor bad, it’s something we do every day. It’s decision making. Prioritizing. Deciding that one thing is more important than another. It’s finding the right balance between two competing desires.
Which compromises you make — that’s what matters. Choosing the right compromises is what defines good design.
There are two ways of constructing a software design:
One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.
The first method is far more difficult.
– C.A.R. Hoare [19]
see KISS philosophy…