If you want to learn how to program, there are a few things you need to know.
First and foremost, you need to have a desire to learn to code.
Second, you need to be willing to put in the time and effort it takes to learn a new skill.
Third, you need to be patient – learning how to program can be challenging, but it’s also very rewarding.
Fourth, you need access to good resources.
And lastly, you need a plan.
In this blog post, we will discuss a road map for learning programming from my 25 plus years of a programmer and leading programming teams.
This approach has a focus on doing before learning. No studying theory before starting to write code. I hope this helps you on your programming journey and I create at least one self-taught programmer out of it.
How To Learn Programming
Learn a Programming Language That Allows Scripting
With scripting, you can write basic programs that accomplish small tasks and learn programming fundamentals. You can use scripting to move files to other directories, perform a web request, or create ‘scripts’ to create or process CSV files.
Many programming languages fall into this category, including the current most popular language, Python.
Python is a powerful and popular programming language that can be used for scripting, web development, scientific computing, data analysis, artificial intelligence, and more.
What makes Python unique is that it’s an easy-to-learn language that allows you to do complex things with just a few lines of code.
Plus, Python comes with a large standard library that includes modules for working with dates, files, data structures, algorithms, and more.
I am going to have a very firm opinion here and say if you want to learn how to program, you should learn Python as your first language.
You may fulfill this with other programming languages (PHP, Ruby, Perl), but Python is my recommendation to get you familiar with computer programming basics – variables, data structures, loops, control structures, command-line interfaces, basic syntax adherence, tools, and to start developing your problem-solving skills.
These are the basic structures used by most programming languages. Yes, all these terms make it feel like learning a foreign language and in some ways, it is exactly like a foreign language in that you use it to communicate with the computer instead of a person.
In addition, as mentioned above, Python can take you into many different fields so the time spend learning this programming language is not wasted time.
You can find an online coding course that teaches Python fundamentals.
Practice Using the Command Line
Once you have some coding skills, next is looking at using the command line. While there are a lot of integrated development environments (IDE) or code editors out there and Windows/macOS have made UIs the norm, it will pay off if you know how to run your programs and your basic programming scripts in the command line. Also get good at file maintenance tasks like moving and copying files, renaming them, and deleting them, all with the command line.
The command line provides a lot of functionality that’s not easily accessible in an IDE. In addition, you’ll find you can accomplish some tasks quicker by using the command line for some of your day-to-day tasks.
Using the command line gets you closer to the operating systems. Understanding the system your code is running on helps later on when you start to encounter tricky problems where ‘it runs on my machine’ but it doesn’t on the server.
Plus, it just looks cool to be able to run code and scripts right from the command line. Typing away like a hacker in the films.
Learn Web Development
Everything these days revolves around web applications. Even if you are going to make an embedded program, it’s probably going to have a web page to control it. Web development is creating websites that are accessed through web browsers (Chrome, Edge, Firefox). There’s a set of technical skills you need to have to do web development.
First, you need to understand HTML and CSS.
HTML is the structure of a website – text, blocks, columns, tables, headers, footers, images, and links. CSS is how that looks. You need to understand how to create the basic structures of websites, and how to style them with CSS.
(Example of HTML)
Next, you need to know how these entities might interact with a back-end API, and to do that you will want to pick up some JavaScript. JavaScript is a programming language that lets you write scripts on a web page that can do things like send and receive data from the internet, it can also manipulate what is displayed on the page and change it in real-time for the user.
You will need to learn what Model View Controller is and how modern web frameworks use this pattern.
To learn all of this, I suggest you pick a web framework (Angular, React.js, Vue.js, jQuery). Use it and learn it. Don’t spend too much time thinking about which one to learn. Any of these will give you the skills you need for web development and the best thing is, at least 50% (I made that number up) of what you learn from the web framework applies to the next one you learn.
Learn API Development
If you’ve made it this far in the learning process, congratulations.
An API, or application programming interface, is a set of rules that allow two systems to talk to each other. An API can be as simple as a GET request that returns some data in JSON or XML, or it could be something more complex with authentication and authorization layers.
Usually, APIs allow the caller or client to perform some action in the server.
For example, imagine you want to be able to track your exercise data in both a phone app and on your computer. An API would allow the phone app and computer program to share information, so you can see your progress in both places.
APIs can be used for all sorts of purposes. For example, Facebook has an API that allows developers to create apps that work with Facebook. This means that if you want to create a Facebook app, you don’t have to reinvent the wheel – you can use the existing API to do most of the work for you.
There are lots of APIs out there that allow developers to easily add functionality to their applications.
Some additional examples include Twilio, which provides phone services; Open Weather Map, which provides weather data; and Stripe, which allows people to take credit card payments on websites.
On this learning path, we are going to do the back-end web development in Python, which is great because you don’t need to learn another programming language.
In addition, there are packages out there for Python which help you with API development so you don’t have to reinvent the wheel from the ground up.
Grab Django or Flask and build your APIs.
Learn About Databases
This is probably going to happen about the same time as you start learning web development because web applications with no database to store the data of their users are as rare as hen’s teeth. Even if you are only a front-end web developer, knowing the basics of databases is helpful.
Databases come in many forms but two are currently dominant: SQL and NoSQL.
SQL is how you interact with a relational database.
NoSQL databases are “non-relational” and usually distributed, meaning they’re not stored on one machine like an SQL database would be.
The most popular NoSQL databases are MongoDB and Cassandra. CouchDB is another one that’s often used in hybrid apps (apps that use both a web front-end and a native app).
There’s no real wrong answer when it comes to deciding which database you should learn.
But if you’re not sure, start with SQL because it’s more common and you can always move on to NoSQL later.
Once you’ve chosen your database, there are a few things you need to learn to use it: how to create and insert data, how to query it, and how to update it. Here are some SQL examples. SQL is like a programming language for databases.
Insert Data: how to add data into the database using an insert statement.
Query Data: how to query the database for what you want (i.e. how do I get all of my users?).
Update Data: how to update an entry in the database (i.e. how do I change this blog post’s title).
Indexes: how to create indexes in your database to speed up retrieval of data.
Joins: how to join two tables together so that you can get data from both of them at the same time.
These are just a few of the things you need to learn to use a database. Once you’ve got these down, move on to learning about when you might use each of the different types of databases.
Develop An Understanding Of How the Internet Works
The internet is based on a series of protocols that allow devices to communicate with each other. Understanding how the internet works are critical for understanding how to create responsive web applications.
Server and Client: To understand how the internet works, we need to first understand the concept of a server and client. A server is a computer that responds to requests from clients. A client is a computer that makes requests of servers.
TCP/IP: The protocols that make up the internet are known as TCP/IP (Transmission Control Protocol/Internet Protocol). TCP is a protocol that ensures messages are delivered in the correct order. IP is a protocol that allows devices to communicate with each other.
Domain Name System: The Domain Name System (DNS) is responsible for converting human-readable domain names into machine-readable IP addresses. When you type google.com into your browser, DNS is responsible for translating that into the IP address of Google’s servers.
URLs: URLs (Uniform Resource Locators) are addresses used to identify resources on the internet. A URL consists of three parts: a domain name, a path, and a file name. The domain name identifies the website you are visiting, the path identifies the location of a file on that website, and the file name is the name of that particular file.
Hypertext Transfer Protocol: The Hypertext Transfer Protocol (HTTP) is how information such as HTML documents is transferred over TCP/IP.
Stateless protocols: Stateless protocols operate independently from one another. For example, when you load a web page in your browser, each element on that page is loaded independently from the others. Each image may be loaded by a separate request to the server.
Stateful protocols: Stateful protocols maintain information about how they interact with other protocols. For example, if you are logged into Facebook and start scrolling down the page, Facebook will keep track of how far down the page you have scrolled. This allows the website to load new content without having to reload the entire page.
Web Applications: Web applications are applications that run in a web browser. They are typically written in HTML, CSS, and JavaScript.
Learn Version Control
Eventually, you will need to share code with teammates or people on the internet. The safest way is to use version control. Version control software keeps track of all the changes you make to your code and allows others to access older versions or even work on the same project with you.
There are a few different version control software available, but my personal favorite is Git along with GitHub. They are free, open-source, and easy to use. To start using Git and GitHub, you will need to create an account on GitHub.com. Once you have created your account, open up the Terminal application and enter these commands:
git config –global user.name “your name” git config –global user.email “your email address”
This command will configure Git to use your username and email address for all future commits.
git clone git@github.com:username/repository-name.git
This command will clone the repository you specify into a new folder called “repository-name”.
There’s much more to learning Git and GitHub, but these are the basics that you need to get started.
Learn How Professional Software Development Teams Work
Now we are getting into the software engineering part of the training. Once you move on from scripting and a simple personal project or two, you will need to learn how to tackle more complex projects and for that you will need to know about Waterfall and Agile.
Waterfall is the traditional approach to software development, where each phase of the project is completed before moving on to the next. One downside of Waterfall is that if you discover a problem at a later stage, it could be very difficult and costly to go back and fix it.
Agile is more flexible than Waterfall because projects are broken down into smaller chunks that can be completed in a shorter amount of time. This allows for more flexibility and the ability to adapt to changes as they come up. It also allows for more user feedback as the process moves along. Users typically don’t know what they want or need.
If you want to learn more about Waterfall and Agile, I would recommend reading The Software Development Lifecycle by Microsoft Press. It is an excellent resource for both beginners and experienced developers. Another option is to pick an online course from Udemy.
Also, it is worthwhile to learn how to write user stories. User stories are used by an Agile software developer to describe the intended functionality of a software feature from a user’s perspective.
User Stories follow this format: As a [role], I want [feature] so that [benefit]. For example, as an administrator, I want the ability to add new users so that I can assign them roles in the system.
Now that you have a basic understanding of Waterfall and Agile, you should be able to start working on more complex projects with your team or look to help out with some open-source projects.
Finish a Complex Project
Now that you have all these skills in a few programming languages it is time to put your basic programming skills to the test.
Now I want you to build a complex project. One which is useful and easily understandable to software engineers or managers.
Why? because I want you to have real-world projects done in a programming language that you can show to potential employers that you know possess basic software engineering skills.
My personal favorite is a bug tracker. Everyone in software development knows what this is and how it should work so you won’t have to spend a lot of time explaining what it needs to do, you can get on with your problem-solving skills (talk about roadblocks you encountered and how you solved them) and why you made any design decisions.
You should give them a link to the source code stored in your GitHub repository, which then shows you know about version control.
I have a lot of other project ideas if you think the world has enough bug trackers. Either way, pick something complex enough that you display all of the valuable skills you have picked up and show them you have programming experience before you have programming experience.
Return To Python To Learn Basic Concepts of Programming Languages & Data Structures
Now we are going to return to Python and start learning basic concepts of programming languages and computer science. I want you to start to dig into data structures and what each data structure is doing ‘under the hood’.
Pick a data structure, write code using that data structure, dissect it, dump it to output, change the code, see what is going on behind the scenes, and how your changes affect the data structures.
Learn Design Patterns
You should also start looking into design patterns.
Design patterns are ways to solve problems that come from learning how other programmers have solved the same problem before you.
Design patterns are language agnostic, so do not worry about which pattern is used in what language.
There is a great list of design patterns on Wikipedia.
The two that I want you to focus on right now are:
– Adapter
– Facade
Do not worry about learning all of the design patterns. They are used as tools for solving problems, so you will learn more when you need them later in your career.
Learn Different Languages Or Specialties
At this point, you are starting to get more into where it’s choosing your adventure.
Do you want to continue on your coding journey to be a web developer? Do you want to branch into mobile app development? Maybe data science and machine learning are more your cup of tea? Computer engineering? Embedded Systems? Artificial Intelligence? Mobile apps, virtual reality? The list goes on…
There are different languages available for each of these specialties. Learn to code in one of the popular languages of your choosing and note the differences and similarities to the programming language you already know.
Can you pick out the broad computer science ideas of why the language is different?
At this point don’t be afraid to tackle more complex online courses or video tutorials. Move at your own pace and make sure you pick up the core concepts of the new languages or specialties.
So, Can You Learn Coding By Yourself?
Yes, I believe you can and I hope after reading this road map, learning to code is no longer a huge deal for you. To repeat we want you to:
- Learn a programming language which allows scripting
- Practice using the command line
- Learn web development
- Learn API development
- Learn about databases
- Develop and understanding of how the internet works
- Learn version control
- Learn how professional software development teams operate
- Finish a complex project
- Return to Python to learn data structures
- Learn design patterns
- Learn different languages or specialties
That’s the basics of computer science you need to know. Grab an online course and start programming today!