Future of a Computer Science Student

I was digging through some old documents on my main machine and came across a little extra credit submission I did while I was doing my C.S. degree.

The question in class asked if a Top-Down or Bottom-Up approach is more productive in the C.S. education world.

I thought I’d share:

The approach we took in this class seems to be something that a non-Computer Science major would take. Everyone that goes to college will be using a computer in some form or another. The extent of their computer use will most likely be dependent on how they grew up, where they grew up and what they are studying. For example, a student in Farm Studies will still use a computer to write papers, but her or she would not be using it as extensively as say a Biology major that has some analysis program to utilize. This brings me to myself and Computer Science students. We obviously use computers and we learn how they work, so we use them inherently more than any other major in college. But, this is a misconception, most of our classes are actually about how computers work; the fundamental science. We could learn about this stuff without even initializing an operating system. We must know how binary works, then how circuits bring them together, then how that code utilizes these circuits by means of manipulating the hardware. It makes sense to learn this bottom-up approach if we had more time on our hands. For me, I learned how computers work by going back and forth between these two approaches without even knowing these approaches existed. I essentially looked at them separately. I would watch YouTube videos on how electricity worked, how software code worked, how binary worked, learn about different OS code; then over time I have developed an understanding of abstraction in the computer model. If it was up to me and had no prior knowledge, I’d use the top-down approach and think this will be more prevalent in the future.

If a kid is interested in computer science and wants to enroll in a computer science program at College X, then we must assume that he or she only knows how to use the computer. [I will be using “he” and I am still implying a girl as well] He might not know anything about binary. He might not know what programming language his operating system uses. So I think that a top-down approach would work out better for those kids with the minimum CS knowledge. If we begin by taking apart programs that he is familiar with at a user level, then he can dissect them. “Oh…so that’s how that works!” Similar to a medical student learning about anatomy. They don’t learn about the chemical make-up of a red blood cell first. They might, I have no idea, but to me they wouldn’t. They’d first look at the body as a whole and learn what systems it has then take those apart. This was how my high school health class went. Then if more interest ensues from their, kids can learn how each system works and what each system is made up; in essence, going to medical school. From there they focus on a certain medical field and fix those issues (i.e. urology, podiatry, etc.)

I see the trend in computer science being this: 1) Learn as a kid to enjoy the computer, 2) take it apart and learn the overall way it works, 3) learn what each subsystem is made up, 4) learn how each subsystem talks to each other, 4) learn how each subsystem works at a code level, and 5) learn how each ingredient of the subsystem works (binary, circuits, code, etc.). With all this fundamental knowledge, we can then go on to bigger things like cloud computing architecture, system administration, software engineering, quantum computing (double majors with Physics apply here!), and so on. Computer science is going to change as the computer itself will, but the fundamentals will not, so learning the fundamentals as quickly and efficiency as possible will make the most sense. That is a reason why the top-down approach will work.

My Linux Life Journey

linux home key
Tux home key.
Growing up I was always the go to in my family for computer related issues. From the time that I can remember, I always pointed out the obvious to my parents; and then a little later in life, I became the ultimate “Googler” from it’s very infancy. Today, I happily help my Grandma fix and maintain her computer from the malware and viruses that plague the Web. I even once went as far as editing registry files for about two hours in order to avoid a system restore. She had some malware on her machine that would disallow any anti-virus program from even completing a scan.

I remember when my family bought our very first personal computer (commonly known as the PC). It was a sluggish Acer desktop hooked up to a trial dial-up AOL subscription for a short time until switching over to something even cheaper (I believe it was NetZero but perhaps whatever the precursor to SBC Global was). Anyways, I can instinctively recall helping my parents figure out all the unintuitive GUI-based quirks of the early web browser and Microsoft Windows 95 file explorer system. I recall pointing out the obvious things like the “X” to exit a program or the refresh button if a browser was stuck buffering. Those are common sense things today, but when nobody knew computers and searching for something on the Web took a solid 5 to 10 minutes, intuition and luck served well for the everyday PC user.

I had always switched out my personal software for open-source alternatives; well, why not the entire operating system? The more I learned about computer science, the more Linux made sense, and vice versa.

As I continued through my childhood I developed many different interests and hobbies. Like most boys, I enjoyed playing sports and video games. But I also had a knack for music and computers. I was involved in choir from early childhood until college (I would love to get involved as an adult again, but that is a different thought for another time). I never did get involved in any coding or computer science at an early age. That is just something that was not as common in the early 1990s. Only typing was part of the required curriculum at school and any computer club seemed isolated to only the really gifted children. It was tough to get involved. So, without knowing any binary coding concepts, I just grokked my way through the GUI environment of many iterations of Microsoft Windows. I would even eventually get into the habit of replacing many proprietary Microsoft-based programs with open-source alternatives. The main reasoning of such activity was to improve the speed of the machine, but later on I learned the importance of the privacy and freedom reasons. I maintained a very healthy machine with frequent defragmentation sessions and up to date anti-virus software. I even made sure the registry was well organized and kept my temporary files at a bare minimum. I always considered myself an advanced PC user at the time. I remember coming across a word during that time in my early years of replacing software with open-source alternatives: Linux, but never gave it a second thought until many years later.

Deciding what I wanted to study in college was no easy feat. I had a talented singing voice so naturally tried out for many universities for their music programs in hope to become a Choral Director; however, that just didn’t pan out as it maintained to be a hobby and never seemed like a true passion to me. I considered teaching to be my gut instinction, so ended up at Illinois State University, but never figured out what to teach so that didn’t stay around long. I searched for possible jobs after college and thought to myself that: demand, ease, and monetary incentives would be the perfect ingredients for a career. So, naive to say, I chose Marketing as my major and just never changed it through my undergrad studies. I learned a lot, didn’t care for much of it. To be honest, the more I learned about marketing, the less I found it interesting. After graduating with a degree in said major, I took many interviews, but they all seemed like glorified sales gigs and that just isn’t me. I ended up taking a “temporary” job as a waiter at a restaurant to pay for my personal bills and lived at home for the time being until I could figure out something else.

Then it dawned on me. Computers. I have always been good with computers. I was also well above average in math and science. So, what the heck, let’s give that a shot. I have always understood computers from a user perspective, maybe I could understand how they truly tick. So I read as much as I could on the Web. I watched countless YouTube videos, read tons of articles on subreddit and was enjoying the journey. I came across words that seemed familiar from before: Linux, networking, Cisco, terminal, visualization, computer science, programming, Java, PHP. You get the point. But I didn’t know how to put it all together and keep myself organized with it all.

So, I decided to pursue a second degree in Computer Science. Instead of going for a second bachelors, I went all in and did some prerequisites at my community college in order to pursue a Masters. I chose classes that would behoove a career in Systems Administration, concentrating a lot on networking, operating systems and system programming. I just recently graduated magna cum laude from University of Illinois-Springfield, which was the curriculum I ultimately chose to pursue. They had a nice online program that I could fit tightly into my schedule. (I hope to have a more detailed post on that journey in the upcoming months).

I had purchased a new laptop for myself after graduating from college. I just needed that hardware upgrade. I had used the same Toshiba Satellite laptop all four years of college and the CPU on that thing was just not keeping up with new software and all the Google Chrome threads that I concurrently ran. So I went out and bought an Asus U43F laptop. I absolutely loved. It ran the new Microsoft Windows 7 and everything was fantastic. I replaced all my Windows programs, even found a nice little utility to help me out when I did frequent system restores to keep it clean, which was Ninite. That was until the BSODs (Blue Screen of Deaths). They would appear out of nowhere. I could not figure out how to fix them. Based on initial research, it appeared to be some sort of Swap space error, but who knows, “DDL Hell” could have been a culprit as well. I tried numerous system restores, kept my memory footprint at a minimum, but nothing. That did nothing. Until one day….

…. I got in.

Tron

I believe it was just after my first computer programming language course: Visual Basic or maybe it was Java. I just woke up, downloaded an ISO of Linux Mint, installed it completely over my Windows, and never looked back. Not only was my U43F laptop seemingly five to ten times faster at everything it computed, I didn’t have one BSOD or any other hardware issue ever again on my U43F.

I also have to thank the fine folks over at Jupiter Broadcasting through this journey. I stumbled upon the now former Linux Action Show through my Googling of “Linux” and that gave me a lot of insight into the community and technology. The entire staff over at JB is wonderful people and everyone that has any interest at all in technology, security, politics, Linux should check out their shows.

I have since bought a new System76 machine (the seemingly discontinued Ratel Pro, which I had originally wanted to a detailed review on but since it is no longer available for purchase that seems a bit moot. Let me just say that it is insanely awesome), and I have chose to use Ubuntu MATE as my distro of choice for the time being, but that U43F is still strongly running Linux Mint to this day. I had always switched out my personal software for open-source alternatives; well, why not the entire operating system? The more I learned about computer science, the more Linux made sense, and vice versa.

screenshot
Just showing off the sweet sweet specs of my System76 Ratel Pro.

That brings me to today. I am currently a happy Web Developer working on a Tier 2 Support team and aspiring to work closer to the servers one day as a Systems Engineer, Ops, Admin, or whatever title you want to give it. I follow the Linux community very closely and consider it all to be a passion of mine and my true calling. I am currently studying for my Linux Foundation System Administration and Engineering certificates, which I intend on taking towards the end of this year. I also have many Linux-based projects that I intend on completing including: setting up Linux From Scratch to running Rasberry Pi web servers. I am also interested in looking more into NixOS.

Thank you for reading if you made it this far and please let me know if you ever have any questions related to Computer Science or Linux. Leave a comment below. I would gladly help out where I can and I still have an interest in teaching so it scratches that itch. I hope to someday provide my own tutorials as e-books or videos or something, so stay tuned.

Until next time.

Cheers,
Craig

Why Linux?

TL;DR: Because it is fun. Because it is innovative. Because it is open.

Before we answer “Why Linux?”, we should look at what Linux is, where it came from, and what it is not.

Linux is the kernel that makes up an operating system. A kernel is basically an ingredient that is included in the operating system and is not the operating system itself. When you hear somebody say that something runs Linux, they are typically referring to the entire thing, but technically that is just the kernel portion.

Think of the kernel as the mediator between the hardware and the rest of the software on your computer.

The kernel is a computer program that is the core of a computer’s operating system, with complete control over everything in the system. It is the first program loaded on start-up. It handles the rest of start-up as well as input/output requests from software, translating them into data-processing instructions for the central processing unit. It handles memory and peripherals like keyboards, monitors, printers, and speakers. –Wikipedia

For example, modern day Microsoft Windows’ versions run the Windows NT kernel and Apple’s macOS, iOS, tvOS, and watchOS run the XNU kernel. XNU is an abbreviation for “X is Not Unix”. Ubuntu, which is a popular Linux-based distro, uses the Linux kernel. Google’s Android and ChromeOS currently use the Linux kernel. You should now understand that a kernel is a part of an operating system.

Linux

Look around. The Linux kernel can be found everywhere and you are probably using it in a computer based product without even knowing it. Linux can be found in things like: cars, electric displays, phones, DIY tech projects, personal computers, web servers, watches, and even toasters.

The Story

Linux came from a Finnish student named Linus Torvalds in 1991. To make a long-story short, he essentially wrote it because he did not want to use Windows or pay for any other Unix operating system at the time. He used the motivation of learning and having fun to write a new kernel essentially from scratch. He used the educational MINIX to develop his kernel on. He made his new kernel available for free and the rest is history.

The story of Linus and his Linux is very well read in the book titled Just For Fun: The Story of an Accidental Revolutionary, by David Diamond and Linus Torvalds. I highly recommend this book! Used print copies can be found fairly inexpensive on Amazon.

Why?

To provide an awesome operating system for our computers.

Education for one: Linux is a great way to learn Computer Science related skills and theory because all the code is open-sourced, which can be viewed over at Kernel.org. Linux is used in many institutional curricula.

The operating system should be well organized, utilize memory efficiently, and give the control necessary to run on most hardware. I believe that an operating system is meant to get the most out of the hardware. To me, the OS is more important than the hardware. I can grab an old laptop and throw a Linux distribution on there and get it up and running. At this point in time, my current operating system criteria belongs to the Linux-based ones.

The open-source aspect allows companies to use Linux and customize it to their needs. The NASDAQ stock system uses Gentoo for their operating system, which is Linux-based. Nearly all of the super computers in the world use Linux-based operating systems. And, a good majority of servers that run websites use Linux-based systems.

Both companies and communities of users have adopted the Linux kernel in order to build their own desktop operating systems for anybody to use for free! Ubuntu, by Canonical, is a popular company driven example. Arch Linux is a well-known community project. They combine the Linux kernel with other environmental based software to make an operating system. Thousands of them exist, which may seem daunting at first to pick one, but they are all outlined quite well over at DistroWatch.com.

Besides the technology itself, Linux also has a very innovative and creative community. Sure, sometimes things may get heated and people cannot agree on things (i.e. systemd vs traditional init). But, at the end of the day, we are all interested in one common goal: to provide an awesome operating system for our computers. We use Linux to make all types of computing devices.

The Desktop

Using a personal computer is all about use case and availability. Windows may be better for gaming. Mac may be better for graphic design. But, the reason you would use Linux may be different than from the reason I do. Linux can be customized for any of your own needs and plenty of Linux-based distributions exist out there so you don’t have to do any of the work if you don’t want to. You just need to be sure to update and upgrade, which can easily be automated. I just recommend finding the well maintained projects so you can assure yourself that stability and security are two of that particular distro’s goals.

I am currently running a spin of Ubuntu MATE 16.04 on my daily driver. Ubuntu being the upstream distribution it is based on and MATE being the desktop environmental software on top of it. I highly recommend it for both beginners and more advanced users alike! They have a great community and the Project Lead, Martin Wimpress, is very involved and passionate.

Continued Learning

Below are some resources that I have found very helpful:

Future articles will include lists and descriptions of Linux-based operating systems for your needs, detailed reviews on distributions I like to use, application reviews, hardware reviews, opinions on current tech, and tutorials on how to get up and running.

Comments and feedback always welcome below.

Remember to always enjoy your operating system and help others.

Cheers,
Craig

Why start a blog?

I know, I should be making a vlog like all the cool kids; but I think this is a better medium for journaling my thoughts on the Web.

Web Development and Linux are my two main computer oriented specialties and they really do go hand in hand as a lot of web servers run Linux, so if either of those interest you; then you may be in the right place. The former being my day job and the latter more of a hobby and passion currently. Most of my discussion here will likely fall into those broad subjects. However, both those topics encompass a wide range of specialties within themselves so that is why I decided to keep a very open-ended technology blog. I hope it finds my niche along the way and future blogs will be more specific in order for me to fine tune my own technological niche.

I intend on using this blog as a means of brain dumping my thoughts and ideas in hope to keep my mind organized; while simultaneously showcasing my work, helping others learn, inspiring others to learn about tech, creating new tech-related work for myself, and finding out what I am truly good at.

Code Tag

I will maintain appropriate categories and tags. “Normal user” tags will signify things that apply to everyone, and “Nerd user” tags will be used for more advanced and not so user-friendly topics that dig deep into the details.

I honestly believe the best way to learn new things is to teach others what you know already, which in turn will open up new learning possibilities to the teacher and reinforce preexisting knowledge.

I look forward to sharing more.

Below I have outlined a quick list of what I envision writing about:

  • Documenting personal projects
  • Computer hardware reviews
  • Software application reviews
  • Thoughts on coding techniques and tutorials
  • Why Linux?
  • Linux series for beginners to novice
  • How a Computer Works series
  • How to set up a website from scratch.
  • Game development hobby
  • DIY tech projects

Always feel free to leave a comment below.

Cheers,
Craig