Check out a free preview of the full Building Awesomer Apps with Angular course:
The "Introducing Application Complexity" Lesson is part of the full, Building Awesomer Apps with Angular course featured in this preview video. Here's what you'd learn in this lesson:

Lukas examines developing Angular applications at a high-level view as large applications are often ill-defined programs and are hard to implement. The major pieces that add to complexity in applications are handling of state, code volume, and flow control.

Get Unlimited Access Now

Transcript from the "Introducing Application Complexity" Lesson

[00:00:00]
>> Lukas Ruebbelke: If we are at, let's say, kind of very local level. So imagine we're sitting in a room here. And this is the current angular perspective that we have. We're going to zoom out and we're going to look it programming as a whole from at a minimum, like an airplane view.

[00:00:23] So we're not going from ground level. Let's step up and just look at applications as a whole from kind of this 10,000-foot view and use this as a context for kind of everything that we're going to cover today and how it actually solves these high-level problems.
>> Lukas Ruebbelke: So how many people here would say that programming is super easy and it comes totally natural, anybody?

[00:01:00] I can say for a fact that learning to program and learning to program well is one of the hardest things that I've ever had to do. And it's something that I just work on over and over. Every day, I'm trying to get better. And whatt's funny is, I'll tell a little story, so I've mentioned Jeff [INAUDIBLE] who's saying who has an amazing course here, and one of my heroes.

[00:01:25] We were at Salt Lake City at a conference, and he's a bit more classically trained. I'm self-taught, and so I happen to know a little bit about a lot of things, where he knows a lot about some very specific things. And so I'm saying, Jeff, what do you do when you're kind of this breadth style learner, where you just know a lot?

[00:01:47] How would you approach that? And he made this comment, he said, well, I'd been programming for ten years before I learned Lisp. And then I realized I didn't know anything. And so you can imagine it just kind of like [SOUND]. It's like if you didn't know anything before Lisp, I haven't even gotten started.

[00:02:10] And so I bring that up to say that programming is very complex. And I think that not only is programming itself complex, but understanding the problems that we're trying to solve, that there are complicated problems that a lot of times the stakeholders they don't actually understand fully what they're building or why.

[00:02:37] And so now trying to build something that really, at the end of the day, isn't really well defined and is changing. And so now we're taking this complexity and adjusting over time. This is why Agile exists, different things, is that it's very, very hard. And I think we can agree that if it was easy, I think everybody would be doing it.

[00:03:04] As it is, I've been doing it for easily 15 years, and I'm still learning all the time. Like it's something that I will pursue for the rest of my life, and I love it.
>> Lukas Ruebbelke: I was talking to Victor Savkin and we're talking about kind of immutability, functional program, different things, he said, hey.

[00:03:26] You should go read this book Out of the Tar Pit by Ben Moseley and Peter Marks. And you can Google it, you get the PDF for free. And I would say definitely read li e the first 20 pages. And towards the end, it was hard for me to follow.

[00:03:42] It didn't really seem applicable. But they made this quote that I really, really like. And that is the biggest problem in development and maintenance of large-scale software systems is complexity. Large systems are hard to understand. And so I totally agree with this. But it begs the question, what is complexity?

[00:04:05] What does he mean or what do they mean here?
>> Lukas Ruebbelke: And I'm not gonna read this whole quote, but they basically define it as kind of three things. Handling of state, being the big one, and out of that, the code volume that comes from handling state and the challenges of communicating that state through your system.

[00:04:31] So flow of control, like when something happens, how do you communicate that to the rest of your system? So we can agree the biggest problem with software, especially as it grows in size, is complexity. And that consists of state, flow control, and code volume.