Before moving into more in-depth topics, you need to learn some basics. That includes some jargon, websites, and basic concepts. Let’s start with something simple and foundational for the rest of the website: what is computer science? Well, let’s start by saying what computer science is not. Computer science is not synonymous with software development, although they are related. Computer science spans numerous topics, one of which happens to be software development. Someone can be a computer scientist and not be a software developer. It’s rare but possible. Most people study computer science to become software developers, but there are other things you can do with it.
Computer science is a subset of mathematics that pertains to logic, instructions, data, functions, and overall, doing things that a person could do if they have tons of time and resources. Computers do simple things very quickly, and by combining lots of these simple things, we can perform more complex actions. Calling this subject “computer science” is like calling math “calculator science.” A computer is merely the tool for running your code. There really ought to be a better name for the field, but for now, I guess CS has to suffice. Software engineering is a subset of computer science. CS can sometimes be very theory-heavy, whereas software development is more grounded in the real world. There are pros and cons to each. This website covers information about both.
Computer engineering is the field concerned with hardware design, circuit diagrams, printed circuit boards (PCBs), and all that jazz. This website is not about computer engineering. Computer engineering is not the same thing as software engineering.
Software development is the process of, well, developing software. All software uses commands and data to get a computer to do something useful (hopefully). It’s like writing a recipe. If you can write a program to do something once successfully, you can do it any number of times, and you can share it with other people too. Moreover, because computers are very fast when it comes to simple tasks, that means you can write software that can do things many orders of magnitude faster than what you can achieve manually.
Code might be intangible, but the effects it has on our lives is not. Everything runs code in some form or another. Every business relies on code. Many machines you might not think of as being computers in a traditional sense still run code.
So now you know the what of computer science, but how about the who? It’s not entirely necessary, but before getting into computer science, you might as well learn about some historically significant figures. Ada Lovelace was the first programmer, still revered to this day. She worked on Charles Babbage’s analytical machine, a proposed concept machine that was never built, but significant to computer science nonetheless. Unfortunately, she died before she was able to finish her work.
Alan Turing created the concept of a Turing machine, which is the basis for much of modern computing. A Turing machine consists of an infinite tape, like a cassette tape, with positions and values, and a machine which reads the tape and follows instructions from it and can move to different positions on the tape. A programming language that can be used to create a Turing machine is said to be Turing complete. If something isn’t Turing complete, it’s not a fully-fledged programming language. For example, HTML is not Turing complete.
Turing also created something called the Turing test, which is a test to see if a robot can pass for human. Turing is posthumously celebrated for his accomplishments, though he was underappreciated during his life.
John von Neumann created the von Neumann architecture, which outlines the necessities for a working computer and is still used to this day, even on modern hardware. Tim Berners-Lee invented the world wide web. Brian Kernighan helped develop the Unix operating system and the C programming language. More on those topics later though.
Guido van Rossum created the Python programming language, which is easier to use than most other languages. It has lowered the barrier to entry for coding by quite a margin. Compared to languages such as C++, Python is less daunting for beginners. However, it’s not just for beginners – Python gets used in a wide range of professional settings. This contribution has fundamentally changed the programming landscape and who can participate in it. James Gosling created the Java programming language, which is widely used to this day. I’ve personally written many software projects in Java and Python, among other languages.
Grace Hopper was an early computer programmer. Among other things, she coined the term “bug” – the original software bug was an actual insect in a computer, but now “bug” just means poorly-written code that stops things from working correctly. Edsger Dijkstra came up with a famous eponymously-named algorithm. Bjarne Stroustrup created C++, a fast and feature-rich language that isn’t very beginner-friendly.
Brian Fox created Bash, or the Bourne Again Shell. It has become the de facto shell for most Unix-like systems. More on shells in the command line section.
Linus Torvalds created the Linux kernel, which is hugely important and epitomizes the open source model of development. Websites run on Linux servers. Your router runs Linux. Android phones run Linux. Tons of things rely on Linux.
How far we’ve come and where we’re heading
If you look back even 20 years ago, it was like an entirely different world compared to now. Software has come a long way, and so has hardware. Very few people used the internet back then – it was expensive, slow, and not all that useful for the average person just yet. Smartphones weren’t a thing yet, and now they’re ubiquitous and relatively affordable. Computers were very slow, and there weren’t as many useful applications for them either. If you look at how far we’ve come in just this short period, think of how far we’ll advance in the future. What new technological advancements await? I’m guessing that whatever changes the future holds in store will be completely transformative and life-changing. Now is the time to get into tech. Great things await you.
Software is about people
People sometimes treat software as if it’s some cold, lifeless thing that exists in complete isolation. It’s anything but. People make software so others can use it. For people, by people. Software development in a corporate environment gets carried out by large teams of people, broken into smaller groups and led by project managers, team leads, and scrum masters. Software developers have to communicate with one another to get things done. Not counting hobbyist projects or small mobile apps, most software these days is so complicated that no individual can make it all on their own. As such, dealing with people is a big part of software. To be a good developer, you need to be an effective communicator. There are two main sets of skills a software developer needs: people skills and tech skills. Moreover, when you’re learning, study skills are also crucial.
A key aspect of computer science and software development is problem-solving. People use software to solve a problem. However, it’s easier said than done to make it. First, you need to outline the issue clearly, then break it into smaller pieces that are very specific. Programming is a very fastidious process. You also need to account for edge cases and how things can go wrong. What if you’re expecting the user to enter a number, but they decide to type text instead? What if your function takes a string argument, but the caller invokes it with an empty string? What if you make your code try to open a file that you’re not sure exists? Things like that.
Problem-solving can be hard, but the more you practice, the better you get at it. That’s why personal projects are hugely important. They give you additional experiences even outside of school or work.