- When you start programming
- You don't know anything: principles, patterns, libraries, frameworks, terminology
- And because of that you write everything from scrath yourself
- Years laters you figure out that all your "cool ideas", "algorithms", another "frameworks" and "problems" have been already solved in some cases tens of years ago.
- Or you have been searching but had no idea how it is called.
So the hardest part, which is not related to programming only, is to know that something already exists and all the terminology.
As a professional you never know everything, you only must know where to find.