I'm a novice programmer, And I'm trying to build a large scalable software, so a new features could be added easily in the future.

What's guide or book do you recommend to me for building a scalable and maintainable software ?

Should I always use design patterns with software architecture like 3-tire ?