Phew, That's a big question! Fortunately, it's a simpler answer than it used to be. Most software if composed of application code that runs on some type of infrastructure. You've probably heard someone referring to "The Cloud". Basically, your software, no matter if it's a website, a mobile app or a video game on Xbox, PC or Playstation needs a 'home' that it runs on. That home is often a computer (usually quite a few computers) designed to let your audience access and interact with your technology.
In today's day-and-age, the "Cloud" is where most software lives. Major cloud computer providers like Amazon's AWS, Google's GCP & Microsoft's Azure are available for new developers to get started for a low cost often even free!
You'll also need an IDE (integrated development environment) where you can physically write your code on your personal computer. I prefer using VSCode, it's totally free and incredibly common! Many of the world's best software developers use it.
Another key component for creating your own software is a source code repository. While you don't technically NEED one, every developer in the world uses one to manage changes in their code (like when they make updates, fix bugs, publish new versions etc). GitHub is the most popular source code repository in the world and it's free to get started. Along with manages changes, Github does a lot of other things like help you get your code from your IDE and deliver it (in a build) to wherever your software is running.
When it comes to 'code' itself, its perhaps easiest to separate that into 3 distinct parts. Your front end (i.e. the graphical interface), your application code (i.e. back end) where some of the decisions and processing are made and your data layer (think data base where you'll store information for later use).
Often, we call this your 'stack' which refers to the combinations of technologies you've selected to plan, build, deploy and operate your technology.
Bottom line, there is are a LOT of components and that can be pretty intimidating. I'd suggest the easiest way to get started it to select a platform like Amazon of Microsoft. They have great student resources, along with that GitHub has an awesome student pack that gives you access to professional tools and the materials to learn them all.
Before you know, you'll be on your way to building your own software!
- a computer to develop your software on (called programming/coding)
- a computer to run the final application (does not have to be the one you coded on)
- a programming language with a compiler to generate the application/program
Then, as others mention, there are frameworks and tools to help you code, generate code for you so you do not have to worry about certain parts of the software.
First, you need to be familiar with coding, which means, take a programming language and start learning it. There are many of them, all with different level and some more complex to start with than others. Also, some programming languages come with better programming interface and libraries for certain type of applications than others, so the type of application you want to write may guide the language you want to use. If you have no to few experience in software development, I would recommend Python.
Then you start writing code. Well, to help, like it has already been mentioned, there are integrated development environments that can help you with syntax and helping you writing your code without to remember every name and parameters of the functions you already wrote. And I do agree the Visual Studio Code (VSCode) is pretty nice: 100% free to use and is supported on both Linux/Unix and Windows as long as your Operating System supports frames/windows, And it does support Python.
Then start with simple projects, do not be too ambitious to start with. If it was easy to write games, there would be games everywhere. It's not that simple. So start with no graphical interface but the terminal. Start with program that for example:
- takes input and mirrors it
- takes input and computes something out of it. like a dice roller
Once these become trivial to write, improve the complexity and so on.
Then start thinking about your game and the first question you want to answer is: Where is this game going to run?
- on a game server like kongregate.com
- on a smart phone where the game is downloaded from the cloud then played locally
because depending on your target, you may need special software to develop the game and build it for your target. These software are usually called SDK (software development kit) and are dedicated to a specific machine.
Since not all machines talk the same language, and not all operating systems have the same format, you need to generate your application/game for a target. So you need these SDK for every target you want to run on. Linux and Windows have different compilers or interpreters.
Then, these SDK may have technology specific you need to learn. Then you write code, generate your application, test, find problems ... repeat until you are satisfied.
Once you are, you may need some source control so you can control the version of your source. That's where source control software come handy. Github/git is free and can be very helpful but there are others.
If you are writing any application to be run on other's platform (like a game to run on phone), make sure you are not violating patents and/or copyrights (especially copyrights). This can cost you a lot if you are caught.
I hope that helped
You don't need much to create your own software. But it depends a lot on what you want to do. So your question ended up being too broad. It may even be enough to just have access to the web. There are sites nowadays where you can write your code and see the results immediately. See https://codepen.io/ for example.
For other types of software you need to install compilers, to transform the code as you type it into a ready to run version. In that case, you'll likely need a computer with the compiler for the language you're writing the software in plus some type of editor where you type the code. You may also need something to test on. For example, if you're writing a website, you'd want to have a browser to look at the result.
A great starting point if you have no exposure starting out, is writing very simple programs that run on the command line. These could be as simple as a program that accepts keyboard input, and depending on what keys you press, prints different text out on the screen.
But, nowadays, it doesn't even have to be that involved. There are many pieces of software for generating software, based on your requirements. These are often called "WYSIWIG" software programs (what you see is what you get). In the case of Video Games, there are tools like Game Maker studio, that allow you to focus on the creative aspects of making a game, while worrying less about coding the actual software.
Joe recommends the following next steps: