Introduction

My only regret is that I didn’t start coding sooner in life. I put it off because I told myself I wasn’t smart enough for this stuff. But that kind of attitude is self-defeating. You’ll be surprised at how doable coding really is. Nobody learns to code overnight, but it’s worth the time it takes to learn it. Keep in mind that nobody starts out being an expert, but the more time you invest in it, the easier it gets.

Hello! Thank you for choosing to learn with Free Coding Tutorials. This website was originally a book project, but instead of publishing it as a book, it was converted into a website instead, with articles instead of chapters and sub-chapters. But the writing is the same.

If you want to skip the introduction and get right into coding concepts, click here.

Follow along as I share tips and insights about my personal experiences in academia, portfolio projects, work, programming, and more. This website is a compendium of software-related topics and it’s for people who are either thinking about getting into software development or want to learn more about the field. Maybe you want to study computer science, or perhaps you’re a non-traditional learner who wants to learn on your own. In either case, this is the site for you.

Software development can be a challenging field to get into, at least at first. There’s so much to learn, and there are lots of choices. It involves lots of studying. It’s not quick or easy by any means, but this site aims to introduce you to the subject and help you figure out whether or not this is the right path for you. Many people in college drop out or at least change majors because the subject matter can be brutal at times. Many people become interested in tech because of the promises of high salaries, but it’s not easy to get your foot in the door. Books such as this also can be useful as supplementary learning when you’re studying computer science classes because it will give you a list of additional things to learn to help you flesh out your resume more, which will make you a more appealing candidate for prospective employers. It might also shed light on topics you haven’t studied just yet, at least if you’re in undergrad. But you don’t have to be a college student to learn about computer science. But even on its own, this book can be used in lieu of a traditional introductory textbook.

The content found within this site does not just focus solely on technical programming tutorial material, though it does feature some in-depth coding chapters. There’s a deluge of computer science topics out there which can make it hard to figure out where to start. You can go down the rabbit hole of useless trivia while completely ignoring critical concepts you didn’t even know to exist. I carefully curated the content in this book to ensure you don’t waste time on frivolous things.

This site is a steppingstone into software development. It not only covers fundamental coding concepts, but also lists topics and resources that you should explore on your own, such as websites, online courses, programming languages, tools, computer science concepts, and more. You will notice a lot of topics mentioned in this book, some of which might not be interesting or might not apply to the career/education path you want to take. But the great thing about software development is that you can specialize in a sub-field rather than trying to do everything. Some people are web developers while others specialize in security. You might prefer the CS sub-field called human-computer interaction. Or maybe you’ll get into machine learning. It’s good to be at least aware of the different subjects even if you don’t choose to pursue them too deeply.

You don’t have to be pursuing programming professionally to get something out of reading the content on this site. It’s also suitable for people who want to pick it up as a hobby. Software development means different things to different people, and that’s perfectly fine. Modern technology is changing rapidly, and it can be hard to stay on top of things, and this book will hopefully make that process a little easier for you. Part of tech-savviness isn’t just rote memorization; it also requires the ability to learn new things.

I wrote this site’s content during my participation in the #100daysofcode challenge, where people program for at least one hour per day for 100 days straight. I didn’t come up with it; I just participated in it. You can start whenever. It’s not on some set schedule. It’s mostly centered around Twitter and GitHub, but there’s also a Discord server, and you can do other things to connect with people during this time. Or you can partake in the #100daysofcode challenge entirely on your own. The important part is sticking to it, no matter how you choose to go about doing it. It’s like NaNoWriMo but for coding. And I guess I should clarify that I started writing this book for #100daysofcode but it took me longer than 100 days to finish writing, editing, and publishing it.

This challenge isn’t just for beginners, but for everyone – anyone from complete beginners to seasoned veterans. I highly encourage you to participate in #100daysofcode too. During each day, I did more programming and wrote about what I did for personal projects, as well as writing essays about intriguing topics relevant to technology, programming, work, or education. These are all related to trying to get into software development. I invite you to read my journey and follow along yourself – committing to 100 days of coding to improve your skills and build up a better portfolio. Your voyage will be unique. I am just here to guide you. Even reading this site can count for the one hour per day during the first part of your own #100daysofcode journey.

I split this book into 16 sections, which were originally chapters in a book, but are now sections with multiple articles each. Treat this website like an online course or e-book rather than a typical website.

Section 1 (Introduction) gives background information for the subject by explaining basic concepts, mentioning important people in computer science, and software to download. It also covers technical requirements for the device you’ll be programming on.

When you click on a section, you will see a list of links to specific sub-sections, which have the text to read for that topic. A section is like a chapter in a book, and a sub-section is like a specific topic within a chapter.

Section 2 (Basic CS Concepts) covers basic programming concepts in a general way, not specific to any particular programming language. Section 3, Intermediate CS Topics, covers intermediate programming concepts, again, not particular to any given language. Sections 2-3 are intended to help ease you into the more coding-heavy chapters that follow.

Sections 4-6 (Java, Python, and C++) are very in-depth programming chapters that will teach you how to program in three widely-used programming languages. It’s good to get an overview of fundamental concepts in sections 2-3 before getting right into it.

Section 7 (Command Line) covers how to use the command line and shell scripting, and section 8 (GitHub and Project Management) goes over Git and GitHub, as well as project management. Being able to use a terminal and a version control system is very important for software developers. Programming languages aren’t the only things you need to learn.

Section 9 (Web Development Basics) is a general overview of web development. Section 10 (Front-End Development) builds on section 9 and covers specific details about writing HTML, CSS, and JavaScript for front-end web development. Front-end code is what a user sees in their browser, and back-end development is what runs on a web server. Sections 11 (SQL and Databases) and 12 (Apache and PHP) go over back-end web development. Section 11 is about databases and SQL queries, and section 12 teaches the reader about PHP, and how you can use PHP with a database.

Section 13 is about security. If you make an app or website, you need to know about common types of attacks and security mistakes, and how to keep things secure. Some people make a career out of specializing in security and nothing else.

Section 14, Advanced and Miscellaneous, covers advanced topics that are really only good to know once you have the basics down, which is why it’s after the introductory Java/Python/C++ chapters. Data structures and algorithms are useful in any programming language. Virtualization is important for servers, especially useful for web developers to know about. Networking is also important, as offline-only applications are very limited. Cloud isn’t the focus of this book, but there’s a section in section 13 about cloud-related topics. Lastly, there’s a section of miscellaneous topics which can be interesting to know about.

Section 15 covers the topic of personal projects, which are essential for anyone who wants to become a software developer. They look great on a resume. The section covers the reasoning behind making personal projects, where to host them, and some good ideas for your first apps.

Section 16 is the last chapter in the website, and it recaps what you’ve learned, and also gives you ideas for what to do after you’ve finished reading this book. Reading this book is just the beginning of your journey as a software developer.

There is a 17th section, Additional Resources, which were originally appendices in the book, but are now lists of extra stuff that some people might find useful, like computer hardware requirements, additional topics to learn, books to read, and other supplementary material. However, the 17th section is optional.

One thing I’d like to point out is that this website (which is basically an online book), while seemingly long, is really more like a bunch of short books put together. The introductory Java textbook I used in college was 1,344 pages long! And that only covered object-oriented programming and Java, not all of the other programming languages and topics covered in this book.

Don’t think of this website as like a single long programming book. It’s a short introductory computer science book, a short Java book, a short Python book, a short C++ book, a short Git/GitHub book, a short Bash/command line book, a short front-end web book (HTML/CSS/JavaScript), a short SQL book, a short PHP book, a short information security book, and a short data structures and algorithms book. When you think of it that way, around 700 pages for 11 short books combined into one doesn’t seem that long. I’m combining years of education and coding experience into this project. If software development was so simple that it could all be covered in a single short 200 page book, it wouldn’t be as high-paying as it is now. There are certainly shorter resources out there, but they don’t cover anywhere near as many languages or concepts as this book.

How to Read This Website

There are a few things you need to know about how this book is formatted.

Every now and then, you will see bold terms like this:

Term to know – and this is the definition of the term.

These are important terms you should be aware of. You might even want to make flash cards for them, though that’s not entirely necessary.

Headings

Headings are bigger than body text. They denote sub-sections within a chapter.

Code Examples

There is a lot of code in this book (which you’re encouraged to use on your own computer), and it’s formatted like so:

int x = 0;
do {
    System.out.println("How's it going?");
    x++;
} while (x <= 5);

When code or command line tools, such as int x = 2 or vim are mentioned within text, rather than on separate lines, they will be formatted like this.

Pacing yourself

For sections 5-12, I recommend spending at least one week per chapter, as those are the code-heavy sections. This is a book in website form. A little bit of learning every single day is better than trying to cram in a ton of stuff all at once. Treat this website like a textbook and a self-paced college course, not a novel. Any book or video that promises that you can learn to code in an extremely short amount of time is lying to you. The more time you give yourself to learn this material, the easier it gets. It's only difficult if you tell yourself that you have to figure it out all in a very brief amount of time.

It’s true that there are shorter books out there that say they will “teach you how to code,” but when a book is very short, they must be only covering a small number of topics, which won’t be enough for you to be a fully-fledged software developer. Be skeptical of books that say that you can learn in a short amount of time, or learn to code and be a software developer only after reading a very small amount of material. The unfortunate truth of the matter that many people don’t want to accept is that it takes time to become a software developer. I believe in you and know you can do it, but you can’t do it in a ridiculously fast amount of time.

You can read a novel from cover to cover with no breaks, but this is not a novel. This is a dense textbook. Not only do you need to pace yourself with it, learning a little bit per day rather than trying to learn everything all at once, but you also really need to follow along with the code examples. Reading about code only does so much. That’s why this website has tons of code examples that you can write and run for yourself.

Even if you take one week per section for every section in this website, that’s still super fast compared to studying computer science in college. At one week per section, and 16 chapters in the section, that’s about a single college semester worth of studying, except that this book has material from many different classes from many years of college classes, all combined into a single website.

Compared to other coding books, this one has a longer background introduction. This book only gets really heavy into code examples (which you can follow along with) starting at section 4. This is because the first sections are supposed to give you better background knowledge, giving more context to what you’re learning. Some books jump straight into coding without the background introduction. If you’d rather have that kind of education, then I guess you can skip to section 4. But I don’t really recommend it unless you’re too impatient to read parts 1-3.

Studying in a world of infinite distractions

Some people claim that it was harder to learn software development in the past because there were fewer learning resources readily available. But at the same time, there were fewer things to distract you. My advice for studying is to sign out of social media apps, or at least disable push notifications so that your phone and computer don't constantly nag you and demand your time for time-wasting apps.

Here are some ways to disable notifications in different OSes:

Windows: Settings -> System -> Focus Assist -> Alarms Only

macOS: System Preferences -> Notifications -> Do Not Disturb

iOS: Settings -> Do Not Disturb -> Do Not Disturb

Android: Settings -> Apps & notifications -> Notifications -> On the lock screen -> Don't show notifications at all

Ubuntu: Settings -> Notifications -> Turn Notification Popups and Lock Screen Notifications off

← Previous | Next →

Introduction Topic List

Main Topic List

Leave a Reply

Your email address will not be published. Required fields are marked *