Why software development is for you
I don’t want anyone to think that they’re not qualified to get into software development. There are some misconceptions about prerequisites or level of ability. It’s true that some colleges won’t accept people unless they have a certain GPA, and CS course requirements generally involve you taking some math classes, but you don’t have to be a genius to get into software development. New programmers invariably make mistakes, but that’s okay. Messing up is a part of learning. Everyone fails now and then, especially when it comes to coding.
You don’t need to be a computer science savant to code sufficiently well. All you need is an inquisitive mind and a little determination. In all likelihood, you might make a lot of small to medium-sized programs rather than big ones, but it’s still very empowering to be able to write software that does exactly what you need it to. As an independent developer/learner, you make very narrow use-case software. However, when you join an organization, you will be working on a tiny piece of a big and multi-faceted program, the complexity of which is too much for any single person to develop by themselves. So you’ll most likely end up working in a team unless you want to be a freelancer or entrepreneur.
There are definitely some negative stereotypes about people who study computer science. Some might think they need to be bespectacled introverts to be developers. That’s not true at all. If you’re like that, that’s fine too, but you don’t have to be a certain way in order to get into this field. People from all different backgrounds are becoming software developers these days, each bringing something different to the table.
Don’t let anyone discourage you. You can be a software developer if you want, just as long as you have basic reading, writing, and arithmetic skills. As long as you put in the effort to learn, I know just about anyone can do it. Motivation and attitude are vital for learning software development, so make sure you have an optimistic outlook about it.
You also don’t need to be in a purely software-related role to benefit from being able to write software, even if it’s simple. Combining expertise from a different field with software can be useful, as there can be industry-specific needs. Fintech, for example, combines finance with software development. There are many other fields where it’s good to know how to code in addition to something else. It helps you stand out.
Software development can be both practical and fun. You can save time by writing programs to automate routine computer tasks for you. You can also make fun or silly apps rather than very serious ones. It’s not all about work and no-fun-allowed education.
There’s a misconception that you need to be a math genius in order to code. That’s not true. If you know how to solve something like 2x + 5 = 25, then you’re good. Higher math is often required to get a computer science degree, but in order to just develop software, you really don’t need to know much other than basic arithmetic and maybe a little algebra here and there, but nothing too advanced. I’ve taken classes that covered calculus, discrete structures, Boolean algebra, etc. And some computer science students take classes like differential equations, Bayes statistics, combinatorics, calculus II, and more. But you actually don’t need to know any of that for coding.
Transition in attitude from consumer to creator
I used to think of programs as things to use. Things to merely download and install. Websites were these things that magically existed somewhere. But now, after studying IT and computer science, as well as teaching myself many things on my own, I’ve come to see software as something you can create. I think that a lot of modern devices, especially phones and tablets, are more geared towards media consumption rather than creation. This recent shift is a tragedy because past generations were growing up with computers that had programming manuals, and although my generation grew up with computers that didn’t come with any compilers or IDEs built-in, you always had the option to download and install them. Coding on Android or iOS isn’t really a thing. I think they will only be serious platforms when they have proper support for development tools instead of social media, games, and single-purpose consumer-oriented apps. But I digress.
Computers are empowering because they allow people to make great things. That said, cloud and mobile are, in many ways, reversing this idea. Don’t get me wrong – I’m all for learning cloud and mobile tech to develop for them – but there are some severe drawbacks in treating the user as a consumer and a renter who never owns or creates anything.
What’s the best programming language to learn?
CSS and HTML are also useful to learn, though they aren’t programming languages per se. This website goes over general concepts rather than being all-in with just one language or another, but you may notice my bias towards these particular languages.
In addition to programming languages, you will need to know how to use Linux, git, and server platforms like Django, Node, Apache, ASP.NET, or Rails. The only web server that this website covers in Apache, but it’s good to know what else is out there.
If you want to do mobile app development, you should learn Swift and Kotlin, or perhaps Objective-C and Java, though Swift and Kotlin are where the future is. iOS development used to be done in Objective-C, but now Apple decided to shift to Swift instead. Similarly, Android development used to be primarily Java-based, but now you can also make Android apps in Kotlin.
You don’t need to learn every language out there, but don’t just learn a single programming language and nothing else.
Start with Python. It’s the easiest to learn. This website will have you learning to code with Python, as well as other languages.
Software to download
Here are some things you might want to download at some point. Don’t do it now. And only download something if it’s relevant to what you’re learning. For links to the sites for downloading the programs mentioned here, see Appendix G.
If you want to learn web development, try Visual Studio Code. If you want to learn Python, download PyCharm and Python 3. If you want to make Android apps, use Java or Kotlin and Android Studio. Don’t download something unless you’re going to use it.
Windows users will absolutely need to download Git Bash. You will also need MinGW for compiler-related stuff that might come standard with Linux or macOS. The problem with Windows is that it doesn’t come with a lot of important developer-centric stuff by default, whereas Linux and macOS do. But you can just install it and then you’ll have similar functionality on Windows. It just takes a little more time to get everything set up initially. I used Linux for many years (Ubuntu and then Debian) before switching to a MacBook, and more recently I switched back to Windows with a Windows 10 laptop and a custom-built desktop. My workflow on all these OSes is very similar, just as long as I have a Bash shell and some IDEs.
If you want to do general Java programming, your options are either Eclipse or IntelliJ. I prefer IntelliJ, which is made by JetBrains – the same company behind PyCharm, which is a prominent Python IDE with robust features. Xcode is the Mac-only editor for making iOS and macOS programs. I’ve used it before but I don’t recommend it unless you’re really into iOS/macOS stuff.
For PHP, you can use PHPStorm or Eclipse. For C or C++, you can use CLion or Eclipse. Both PHPStorm and CLion are from JetBrains, a company that makes excellent IDEs and dev tools. PHPStorm and CLion are free for students but costs money otherwise. Eclipse is free for everyone.
BlueJ is a beginner-friendly Java editor intended for educational uses rather than professional software development. It’s easier to use and doesn’t have as many features compared to other Java IDEs such as IntelliJ. BlueJ’s simplicity makes it easier for beginners to understand, but more experienced programmers will dislike it due to its lack of depth.
Virtualbox is useful if you want to have local virtual machines. Let’s say you’re on Windows and want to use Linux or vice versa. You can create a virtual machine in something like Virtualbox to run multiple OSes simultaneously.
If you want to try using Linux, I recommend Ubuntu, Lubuntu, Debian, or Mint. There’s also an offensive security distro called Kali Linux, which is used for learning about security. Another good security-related distro is Parrot OS. However, neither Kali nor Parrot are good as a “daily driver” OS. If you have a slow computer, Lubuntu might be a good choice for you. It means Lightweight Ubuntu.
If you just want to get right into coding and don’t care about your OS as much, then just use whatever you currently have installed on your computer. All of the coding examples in this website can be done on macOS, Linux, or Windows.
If you don’t have a computer and can only use a mobile device such as a phone or tablet, your options for programming-related software will be severely limited. But there is hope: you can use a web-based editor (such as IDEOne or Tutorialspoint), which will let you write and run code in a browser, with no need to install anything. It’s much more cumbersome than dedicated desktop-based IDEs, but if web-based apps are your only option, it’s better than nothing. Here are links to the web-based editors: https://www.tutorialspoint.com/codingground.htm
But you should really only use a web-based editor if you are on a mobile device, or if you’re on a public computer, such as a library computer, where you’re not allowed to install software. If you have your own desktop or laptop computer, you should install “real” tools instead. It’s much better.
F-Droid is an alternative Android app store with free and open source apps. This can be useful if you’re on an Android device that doesn’t have support for Google Play, such as an Amazon Kindle Fire, which only has the awful Amazon app store, which severely limits what your device can do. Within F-Droid (or even the Google Play store), you can use Termux, which is a terminal emulator for Android. It contains a lot of different things, and even a package manager that lets you download more stuff. You can run Python or some shell commands this way on an Android phone, but it’s not as good as using a computer to learn and use Python.
If you have a very slow computer, you might want to check out the very lightweight Geany editor, which uses fewer resources than other editors I mentioned. However, it is just a text editor, not a fully-fledged IDE. So you will need to use it with separate compilers and whatnot.
If that seemed a little overwhelming, don’t worry. It’s just a cursory glance at some of the software you might want to use later on, but you can feel free to ignore most or all of it, at least for now. Don’t spread yourself too thinly, so don’t just jump right in and try to be an expert at all of that stuff, but be aware that it’s out there.
One thing to consider is that you shouldn’t start using tons of new things all at once. Whether it’s websites, programs, or programming languages, do a little at a time. Eventually, you will have a long list of skills and preferred resources, but don’t overwhelm yourself with too much all at once. Keep it slow and steady. But at least now you will have heard of a lot of these things, and you might come across books or people that mention them. You can do something like google the sites or programs, look at their website or go to the Wikipedia page about them to get a feel for what it’s about, without actually starting to use it just yet.
You don’t have to memorize absolutely everything
Some people might find this statement to be controversial, but it’s okay to use Google, Stack Overflow (a programming help site), official documentation, books, or even Reddit when you need help. Just don’t overdo it. Use documentation as a reference, and only visit help sites if you can’t figure something out yourself after trying it on your own first. But make sure you don’t use it as a crutch, where you get in the habit of googling something before even trying to solve it yourself. And it’s generally not a good idea to just copy and paste code examples from the internet. They could be inefficient, wrong, malicious, or even copyrighted. Make sure you know what the code does after looking up a problem. And make sure you understand the individual parts, rather than using multiple lines of code that you only what what the entirety of it does, without fully understanding what each part in it does. So use resources, but try to not be 100% dependent on them.
This idea is a stark contrast to what you’ll see in academia, where you’re often discouraged from using outside resources or just flat out not allowed to use them at all, such as for an assignment or test. Some professors will say that asking your classmates for help is cheating, but in a workplace setting, you can ask your coworkers for help if need be. In the real world, people really can look up official documentation pages for a programming language or library, and they don’t have to memorize everything. A professional software developer doesn’t need a photographic memory, but they do need to know how to quickly look something up, and they do need to know at least the basics of coding.
I’m sure most people who are new to software development have wondered at some point or another: what do you even need to code? Well, all you need is a computer, and it doesn’t even need to be a good one. I’d personally recommend at least a dual-core processor, maybe 4-8GB of RAM, at least a few gigabytes of free disk space. For more information about computer requirements, see the Additional Resources section.
You really need to read the code examples in this website
There are many code examples in this website that illustrate various programming concepts. These are important for the sake of learning. Someone who reviewed this website before I published it said they liked the plain English writing sections, but basically glossed over the code parts. That’s not a good way to read this website. Even if it’s hard, you need to spend time looking at the code. The code examples might be harder to read than the simple writing like in this paragraph, but it is vital for your education. Don’t skip them!
Congratulations on completing section 1!
This website is a like a textbook and a self-paced class. You’re doing great! Completing this section means you’re now familiar with background and introductory concepts of coding.