A Mostly Correct Introduction to Computer Science
Tristan's Notes Week 0
This is my first post to Hashnode so introductions are in order. My name is Tristan Hilbert. I am a Java Developer as of the time of writing this. I have very little work experience but I have always been excited about coding. I remember getting my first desktop at the age of 10. I remember using Scratch and Python 2 back in Elementary School. It took a while for the concepts to click, but since then I have always enjoyed coding.
So, I have gone to writing a low floor introduction to Computer Science, Coding, Logic, and Software Engineering. This is not meant to get into super specifics, but instead be a launching off point for anyone to start learning. What I like about Computer Science, is the amount of open source materials on any subject. I will try to link as I go, and explain concepts without required prerequisite knowledge.
Computer Science: A History
When it comes to Computer Science, I always mention three majorly important historical people. They are my favorites, but there are many more.
I enjoy these folks the most. In my opinion these folks started the efforts that would lead to full blown efforts of modern Computer Science. Ada Lovelace first theorized about programmable mechanical machines. Alan Turing theorized the Turing Machine, a programmable calculation machine. Alonzo Church theorized Lambda Calculus, a programmable calculation formulation. Alan Turing and Alonzo Church had very similar theories by happenstance. Their theories were written differently however, and there was no rapid communication methods like we have today with the internet.
The abstractions these folks created, allow anyone to understand even a modern day computer. The Central Processing Unit is a hardware component on most desktops today. It is their theories put into practice. It takes the form of a tiny square in the computer. It has electronic wires that connect it to power and other devices in the computer. In general a CPU can only do the following:
- Read Instructions
- Load Numbers
- Save Numbers
- Input Numbers
- Output Numbers
By inputting and outputting the numbers, I mean it sends the numbers through the wires to other devices in the computer. Now this is a bit of an exaggeration. The "math" component, for example, stems from anything to performing something elementary, like addition, to performing something college level, like scaling a vector.
But, the question stands: if this is all a computer can do, then why is Computer Science so complex?
The Tower of Babel
Consider This! Someone doesn't know how to make a sandwich. So we teach them:
- Take a knife
- Spread the Peanut Butter
- Spread the Jelly
- Close the creation
- Enjoy your sandwich
While this make sense, we are forgetting a very important detail. The Bread!!! Describing how to do anything verbally or in writing is difficult. Just like making a purpose/program for a machine is difficult. So we added the concept of languages to describe these purposes.
A language or programming language is a set of rules or vocabulary that is created by humans to be translatable to the CPU mentioned above. Just like a person describes a task verbally, a person has to become super specific when writing a program. This is one of the reasons why coding is difficult.
Let's Try It!
I invite the readers to check out the following link.
This is Scratch. Scratch is a platform (a series of programs that work together to provide a service). Scratch is a great way to introduce programming. It contains a "projects editor" which can be used to make any program. I like Scratch because:
- All the possible components are in a list (like a word bank).
- It's drag and drop
- The difficulty of the blocks rank in top to bottom
- It's list of components contain aspects of code that are in other languages.
I want readers to click around and explore the site. See what is offered and play some games!
I will add these Homework snippets for people that are Type A like me. This way you have something to mark your progress and you don't have learn just through my terrible wordplay. My hope is that eventually, I can have readers program their own set of programs they can feel proud of.
Directions: Write Answers to the Following Questions