Image of Free Extract: Preface & Introduction


Table of Contents

This post is a free chapter extract from the Coding Essentials Guidebook for Developers. If you get value out of it, support us by purchasing it here. Subscribe with your email address if you'd like to stay up to date with new content from Initial Commit.


If you picked up this book, you have probably been curious about learning to code for some time. But it's one thing to tell yourself to start learning something and another thing altogether to actually start doing it. It doesn't help that the terms "software development", "programming", and "coding" can sound pretty intimidating. The word code suggests a degree of secrecy. It implies a language that a select few speak while most remain ignorant. "Software development" and "programming" can sound dense and inaccessible. In fact, these three terms - software development, programming, coding - all generally mean one thing: "Making a computer do something for you." That's better - not so scary after all.

My personal story with learning to code is far from unique. I am a mostly self-taught programmer who started coding as a hobby. I don't have a computer science degree. My interest was piqued by creating rudimentary video games as a young teen. Years of learning from books, summer camps, online tutorials, and a couple of college courses bolstered that interest. Now I work as an independent software developer and consultant, specializing in web and mobile application development, as well as data analytics. Throughout my journey, I have gained insight into some of the key topics that define this field. In hindsight, these are now clear to me. But it can be extremely hard for beginners to know which topics to start learning and how to go about learning them.

Most programming books cover a single topic in depth - usually a specific programming language or tool. This is fine and dandy, but it can overload a beginner with information. Reading an entire book per topic also takes ages and the content is usually fairly dry, which can make learning slow and painful. I've found that learning in this way also leaves large gaps in understanding of how the different pieces of the puzzle fit together.

The purpose of this book is to teach you a condensed version of the essential topics you'll need to know as a software developer and to connect the dots between them. This book is by no means an exhaustive guide to this material, but the information it provides will arm you with the knowledge and confidence to contribute to existing software projects or even to start one of your own. Understanding this material will also dramatically speed up the learning curve of other programming languages, tools, and topics going forward.


This book is organized into an approachable set of chapters that each address a core concept, programming language, or key tool related to software development. The book starts off with three chapters that answer some basic questions about computers, programming languages, and the Internet. This will provide some context for the rest of the book. We'll start by examining basic computer architecture and how computers handle data. Next, we take a look at what programming languages are and how they operate. Then we'll discuss how the Internet works, including clients, servers, requests, responses, and browsers.

The next eleven chapters are more practical in nature and form the meat of this book. We start by learning about the Command Line. This topic provides a natural introduction to coding. The Command Line allows users to perform most of the actions that are typically done with mouse clicks, but in a text-based way that promotes using the keyboard to issue commands instead of the mouse. Once you feel confident issuing commands through the Command Line, like browsing through your files and folders, copying/moving files around, and running other programs, jumping into coding will be a lot less intimidating.

Our second step will be to learn the basics of a Command Line text editor named Vim. This will further build up our confidence using programs that don't have graphical user interfaces. Next, coding time! Well, sort of... We'll start by learning the basics of HTML, which is fairly simple and will provide some insight into how web pages are built. Next, we cover the basics of CSS - Cascading Style Sheets - which will enable us to decorate and style our web pages. Now the coding really begins with an introduction to JavaScript - the programming language that was built for the web.

At this point, we veer away from the Internet and explore a couple of other programming languages. The reason for this is to expose the reader to some similarities and differences between programming languages. We'll cover the basics of Python, a high-level language that is easy to learn and is one of the most popular languages in use today. Next, we jump into Java - a slightly lower-level language that requires a bit more work from the programmer, but runs faster than Python and JavaScript. In general, many concepts carry over between programming languages, but the syntax (the "grammar" rules that define how the code is written) differs. Some languages are better suited to particular tasks and projects. I feel that learning a combination of JavaScript, Python, and Java provides a solid foundation that allows beginners to get started on a wide variety of projects.

Upon reaching this point, we'll know how to write some code, but we'll need a way to keep track of our code files as they change over time. We'll also need a convenient way to collaborate with other developers. Programmers do this using Version Control Systems, or VCS. We'll focus on a tool called Git, which is the most popular VCS in use today.

What if we want the programs we write to store some data for reuse in the future? This is where databases come in. We'll cover databases and SQL (Structured Query Language), which is the main programming language used to interact with databases.

Next, we lean back towards the Internet by learning about Web Frameworks and the Model-View-Controller (MVC) design pattern. These tools and concepts take some of the coding burdens off of developers, so web applications can be released faster and with fewer headaches. By "coding burdens" we mean the need to write repetitive, redundant code that performs a basic function common to many (or all) Web applications.

We'll close out the book with a discussion on Package Managers. Most code projects rely on existing code libraries to add in some desired functionality. These are called packages or dependencies. As we add more dependencies to our projects and as those dependencies are updated over time, managing them manually becomes unruly. Package managers are tools that help us conveniently manage our project dependencies.

This book strives to introduce each of these topics in an accessible way and explain how they fit together. Without further ado, let's begin.

Next Steps

If you're interested in learning more about the basics of coding, programming, and software development, check out our Coding Essentials Guidebook for Developers, where we cover the essential languages, concepts, and tools that you'll need to become a professional developer.

Thanks and happy coding! We hope you enjoyed this article. If you have any questions or comments, feel free to reach out to

Final Notes