In programming and computer science in general, there is a concept called abstraction. Abstraction ensures that users are far removed from what's happening "under the hood." A simple example should help illustrate the concept.
Think about the mobile phone you use every day to communicate with your friends and loved ones. You want to make and receive calls, use text messaging, check your Facebook/Twitter accounts and perhaps take some photos. As a user, you use the manufacturer's user interface to access the phone's basic features, but you probably don't know or care how to repair your phone or write software for it.
A phone technician, on the other hand, needs a different type of interface at a lower level of abstraction. She needs to know how the components work together so she can repair phones that aren't working. Software engineers must understand how the software subsystems interoperate and must also concern themselves with the Operating System and software development tools. That, too, is at another lower abstraction level.
A similar analysis applies to computers. The user uses computers to listen to music, send emails, play games, and more. They interact with the applications that make these tasks possible without any knowledge of the low-level details.
Being a programmer is often perceived as difficult. It really isn't. It does, however, require a particular temperament: patience, persistence, focus, logic, detail-oriented, etc. When a programmer understands and adopts this temperament, their work becomes less frustrating, more fun, and rewarding.
Perception of a task's difficulty is often inversely proportional to the patience of the person attempting it. If you're patient with yourself and willing to take the time to work through the exercises and apply the concepts, you'll soon develop the temperament you need. Before you realize what's happening, you'll find yourself solving problems with code.
A shift in thinking must take place for most people. That will come with practice. Once it happens, your progress will accelerate. That will, in turn, help you develop the ability to think deeply about any programming problem. Most programmers find that being able to think deeply about problems is satisfying, engaging, and a rewarding perk of programming!
Launch School's teaching philosophy centers around Mastery Based Learning, which means, among other things, that we introduce students to a new topic only when they have mastered the concepts needed to understand that topic. Learning the basic grammar of a programming language and solving computational problems with that language is a complex skill in its own right. You don't want to spend time learning peripheral information until you have the background and experience to solve programming problems with code.
Testing is crucial to writing good code; however, we don't believe that an "introduction to programming" book is the best place to cover it. Testing is a technique that is best learned after you've faced the problems that it attempts to solve. You need to have written sufficiently large programs to grasp that context. We cover testing extensively in our Core Curriculum.
Reading about programming and writing a program aren't the same. If you read this entire book without ever writing a line of code, you may understand, intellectually, how to code, but you won't know how to do it. If someone asks you to solve a problem with a computer program, you won't be able to complete the task.
There is a "muscle memory" aspect to programming that books and courses often overlook. With the vast amount of information that a programmer must remember, practicing some skills until they become automatic is unquestionably crucial. It doesn't require much effort; it happens naturally through repetition and practice. You can learn with your fingers, and, when you do, you free up your brain to focus on higher-level abstractions.
If you want a real shot at learning how to code, you should do every exercise in this book. If you want to learn a musical instrument, you must practice your scales on that instrument and develop proficiency before you can play the instrument well.
Think of the exercises as though you are a musician practicing musical scales and writing a program as playing the instrument. Use the exercises to practice and cement the basics into your fingers. The more you practice, the more coding becomes second nature and subconscious, and that helps you learn to program.
This book's target audience is the beginner. In the world of computer programming, there is an enormous amount of information to learn; it isn't possible to learn it all. We recognize that, and intentionally avoid topics that aren't beneficial to the beginner. Trust these omissions; we've had some experience with teaching, and know how easy it is to get lost "down the rabbit hole" looking for information on unimportant topics. Instead, stay focused. You'll progress at a much faster rate if you do.
That about covers it. Get ready to build the skills you need to become a computer programmer. Don't worry; we'll be here to coach you along the way. Buckle up and enjoy the ride!