This article makes a fundamental analysis of the applications development life-cycle, identifies the main contradiction of software development, and suggests a solution.
I started learning programming back in 2006 when my older brother had his informatics class. Back in those days, in an average Ukrainian school, they were learning programming on Pascal, running the “IDE” in DOS mode on Windows XP. I quickly understood the syntax and started solving easy tasks, like finding a square of rectangles, or length of hypotenuses. The pattern was pretty simple: you ask for the input data, do a calculation and print the result.
Later, when I switched to PHP to build simple websites, I started learning new concepts: loops, functions, arrays, and eventually classes. That was about the time when PHP5 was released and it brought a new killer feature — support of OOP.
For every concept, I remember the confusion like “why does someone want that?”, “why is this for?”. Why do we need arrays, if we can define multiple variables? Why do we need functions if we can write inline?