Wednesday, January 10, 2024

Week 5: Tech Topic Connection and How I Learned How it All Comes Together

 Introduction

    As we delve into the final stretch of our exploration in information technology, it's only fitting to bring our attention to the linchpin that ties together the web of tech concepts we've encountered - programming language. This blog's central goal is to document my journey to unravel the profound connections between programming languages and the fundamental principles of information technology.

    Historical Roots and Operational Mechanisms

    Programming languages are the lifeblood of computers, representing the unbroken lineage of today's advanced machines to yesterday's rudimentary calculators. From the early days of assembly languages to the high-level languages like Java, Python, and SQL, the evolution has seen computing evolve at an exponential rate. Moore's law dictates that the number of transistors in a processor doubles every two years. Originally postulated in 1965, then modified in 1975, it's generally remained true for the last 60 years (Intel, 2023). This has resulted in computers becoming roughly 5,368,709 times more complex than they were in 1965 as of 2023. 

    Understanding the history of computers helps us appreciate how programming languages have developed and function as a natural progression for teaching them from the ground-up, as the earliest forms of programming languages are without exception the simplest and most rudimentary. This allows those just learning the language to begin learning the version of the languages with the least clutter and simplest functions, from which they can simply follow the development of the language itself and learn it feature by feature and function by function.

    The means by which computers operate, including processors, memory, and storage, are the canvas on which programming languages paint their masterpieces. Exploring this relationship reveals the importance of picking both the right hardware and software for the job.

    Hardware Components and Functions

    Programming languages rely heavily on the major hardware components of a computer system. From the Central Processing Unit (CPU) executing instructions to the Random Access Memory (RAM) storing data, every component contributes to the seamless execution of programs written in these languages. The hardware is to the program as the brain is to our learned experiences. The hardware is the equipment actually performing the work, while the program is the instructions themselves. You can't teach your arm to throw a baseball, and without and arm, your brain can't throw the baseball even though it knows how. In order for a program to function, it needs hardware to execute the instructions, and in order to execute the task, the hardware needs the software to tell it what to do. Evaluating this reliance sheds light on the importance of hardware in the development of programs.

    Program Execution and Language Syntax

    How does your chosen tech topic use programming languages, and how are programs executed? These questions delve into the syntax and execution methods of programming languages. From compiled languages like C++ to interpreted languages like Python, each has its own nuances. Understanding this aspect is crucial in becoming proficient in any programming language. Language syntax helps make the functions of a program make sense to our human brains; and by using a compiler, that readable code is converted into machine code, which is the format that the computer can most easily understand. Writing code and executing code is a conversation across language barriers between developer and machine.

    Application Software's Role

    The synergy between programming languages and application software is evident. Whether it's developing software for data analysis, graphic design, or gaming, the role of programming languages in creating application software is pivotal. Each programming language has its strengths and weaknesses, and knowing how to choose the right language for the task is important. For instance, in their upgraded release of Super Mario Sunshine for the Mario 3D All Stars collection, they elected to emulate the Gamecube to run an ISO of the game, and utilized a Lisp script to swap out all of the textures in RAM with high-resolution versions rather than completely porting the game to run natively on the Switch. Another popular program, Grammarly, is written in Lisp because the language excels at running compare-replace functions (Common Lisp, n.d.). Failing to pick the right tool will not only will make the resulting program difficult to develop, but it may limit what it can be made to do or make it more difficult to port to other systems.

    Database Concepts and Management

    Database management is a cornerstone of information technology. How does your chosen tech topic interact with databases? Whether it's through SQL queries or integrating with NoSQL databases, the connection between programming languages and databases is profound. Properly structuring data within a network makes it easy to access and keep track of. With the ever-expanding sea of information in virtually every kind of program, it's incredibly important to properly catalog and store information. Imagine having to manually comb through almost 700GB of data to find a single game file to add to your map. Nothing would ever get done.

    Network Architecture, Management, and Security

    The final layer in our exploration is the intersection of programming languages with network architecture, management, and security. In an interconnected world, understanding how programming languages facilitate communication between devices and the role they play in securing data during transmission is crucial. With programs written in different languages, how do they communicate across networks? How do do we keep important data out of the wrong hands when it's being sent outside of the safeguarded environment of our own computer? It's a topic whose complexity warrants its own career niche within the field of computer science

Conclusion

    In this journey through the intricacies of information technology, I've witnessed how programming languages serve as the bridge between abstract concepts and tangible applications. Their influence extends from the roots of computer history to the forefront of cutting-edge technology, making them a cornerstone of our tech-centric world. As we bid farewell to this class, we step forward into the ocean of programming languages ahead.

References

Common Lisp. (n.d.). Common Lisp. Lisp-lang.org. https://lisp-lang.org/.

Intel. (2023, September 18). Press Kit: Moore's Law. Intel Newsroom. https://www.intel.com/content/www/us/en/newsroom/resources/moores-law.html#gs.2wdihz.

Week 4: Network Security and How I Learned About the Difference Between a Virus and a Worm

 Introduction

    In the digital age, information and system security play a crucial role in safeguarding individuals and organizations from various cyber threats. This paper aims to explain the significance of information and system security and delve into specific types of cyber threats, including those associated with ping commands in networking.

Ping Command Attacks

    Ping commands, commonly used for network diagnostics, can be exploited for malicious purposes. One type of attack facilitated by ping commands is the Ping of Death. This attack involves sending an oversized packet to a target system, causing it to crash or become unresponsive. Additionally, attackers may execute a Distributed Denial of Service (DDoS) attack by flooding a target’s IP address with pings, clogging up their bandwidth and potentially causing the ISP to temporarily cut off their internet access in order to

Computer Security Incidents

Computer viruses are malicious programs used by bad actors to damage or gain illicit access to another’s computer. Computer viruses can be used to steal personal details from infected computers, propagate itself across networks, delete valuable data, or lock the owner out of their system entirely. In 2004, the Mydoom worm (a virus that can run independently of any other programs) caused an estimated $38 billion dollars of damage by infecting millions of computers. The virus spread through infected emails by scanning infected machines for email address books, then sending copies of itself to those addresses. Additionally, the virus hijacks the computer itself to work with other infected machines in what is known as a “botnet” to execute DDoS attacks against various websites and servers. Even today, Mydoom is propagating at the rate of 1.2 billion infected computers a year despite the leaps and bounds made in network security (Gerencer, 2020). To protect against viruses, it’s vitally important to install a reputable antivirus program and ensure that it’s kept up to date with the latest definitions. Keeping the Operating System (OS), as well as all drivers, programs, and apps up to date will help protect against unauthorized access.


    Another type of security incident worth mentioning is called Phishing. Phishing exploits human trust by tricking individuals into revealing sensitive information through deceptive emails or websites by impersonating trustworthy people or organizations. If you’ve ever noticed a suspicious friend request from an obviously fake profile pretending to be one of your family members, you’ve been targeted by a phishing scam. Phishing can lead to identity theft, financial loss, and unauthorized access to personal or organizational data. The best way to protect against these kinds of social engineering attacks is to learn how to recognize them, since they rely on deception to exploit their targets. Look out for claims of suspicious activity or problems with your account that requires you to follow a link (FTC, 2022). Look for generic greetings, urgent calls to action, links to external websites, or an email address that doesn’t originate from the company the sender claims to be representing; Amazon does not use Gmail to communicate with its customers. To protect against malicious links, always type the URL of the legitimate website an email attempts to link you to if you feel the need to verify your account status to avoid falling prey to malicious links. Finally, never open attachments in suspicious emails, as they may contain a virus.

Conclusion

    Understanding the vulnerabilities associated with ping commands and common computer security incidents is essential for developing robust security measures. By implementing these strategies, individuals and organizations can significantly enhance their resistance to cyber threats, thereby safeguarding their information and systems in an ever-evolving digital landscape.

References

Federal Trade Commission. (2022, September). How to Recognize and Avoid Phishing Scams. Federal Trade Commission Consumer Advice. https://consumer.ftc.gov/articles/how-recognize-and-avoid-phishing-scams.
Gerencer, T. (2020, November 04). The Top 10 Worst Computer Viruses in History. HP Tech Takes. https://www.hp.com/us-en/shop/tech-takes/top-ten-worst-computer-viruses-in-history.

Tuesday, January 9, 2024

Week 4: Computers in the Workplace and How I Learned My Job Will Be Taken by an AI

    For this week, I'll be describing computers' role in healthcare. I'm currently a Medical Laboratory Technician for the U.S. Army, and we recently transitioned to a new comprehensive medical record system across the entire Department of Defense (DoD) designed by Cerner called MHS Genesis.

    Computers in healthcare have been vital for a long time, as medical records, patient charts, laboratory results, and more are all stored and transferred digitally these days. Prior to this transition, the DoD used several different programs to conduct different aspects of patient care, which had limited or non-existent communication with each other. The records were also stored locally, so to transfer a Service Member's (SM) medical records when they left for a new duty station, the SM had to hand-carry their physical record with them and deliver it to the Medical records department at their new treatment facility.

    The transition to MHS Genesis changed all of that. It was commissioned to be a unified medical records system where a SM's medical record could be accessed from any DoD facility, regardless of service component or type of facility. It uses an app-based design, where there are still different programs for each kind of clinic, but the apps communicate with one another in a unified sandbox so that a laboratory test ordered in Powerchart (the provider's portal and charting program) can be accessed and logged in the P0630 AppBar (a suite of apps related to various aspects of laboratory services, including records management, reporting, blood banking, and sample transfer to other facilities), and the results entered from the laboratory side can readily be accessed in the patient's chart.

    A lab tech needs to be computer-literate in this day and age because all testing is ordered and resulted through computers. All sample transfers are managed through the computer system, all of the analyzers are computerized and interfaced with this system, and more and more maintenance manuals and Standard Operating Procedures (SOPs) are being digitized to cut down on the space needed to store paper records in the lab.

    With more and more processes being automated within the laboratory by computers, I wouldn't be surprised if the next 10 years see the adoption of AI implementation in the laboratory to perform some tests, such as manual differential review or cancer identification. As early as 2013, a program called BakeryScan was originally designed to quickly differentiate between different pastries and sandwiches sold by a Japanese bakery, and by 2017 the technology was adapted into Cyto-Aiscan to be able to tell the subtle morphological differences in cancerous cells (Somers, 2021). I predict we'll begin to see more of that kind of technology being adapted into the processes to conduct testing that used to require a human technician, and to monitor Quality Control data, completely replacing a full-time data analysis position that currently requires an experienced tech possessing a Bachelors degree.

References


Somers, J. (2021, March 18). The Pastry A.I. That learned to Fight Cancer. The New Yorker. https://www.newyorker.com/tech/annals-of-technology/the-pastry-ai-that-learned-to-fight-cancer.

Wednesday, January 3, 2024

Week 3: Travelling Through a Network and My Experience Calling Home

 

For this week's exercise, I explored using the ping and traceroute commands to explore how data travels through a network. 

Ping

    Beginning the exercise with the ping command, I opened up the Command Prompt and pinged Google.com as the instructions stated. Here are my results:

Ping Google.com.png

    The ping attempt was successful, with no packets lost, a minimum response time of 24ms, a maximum response time of 42ms, and an average response time of 28ms. This makes sense, as Google is one of the largest websites in the world, so its bandwidth would have to be pretty huge and they have a data center conveniently located near me, in Los Angeles California.

    Next, I chose to ping Runescape.com, the website for the MMO I talked about during last week's discussion whose servers are located in the United Kingdom. Finally, I pinged Konami.com, the website of a game publisher based in Japan.

Ping Konami and Runescape.com.png

Runescape.com was a bit slower than Google since it had further to travel, but Konami was far slower than either of them, likely because the packets have to travel not only over a longer distance but through several more network nodes, as I am about to go over.

Traceroute

Next, I executed the traceroute command to gather data on the route that the data takes along the network. First with Google, then Runescape, then finally with Konami.

Tracert Google.com.png

Tracert Runescape.com.png

Tracert Konami.com.png

I noticed that in all three cases, the first attempt timed out, the second had a spotty connection, and then the third onward connected just fine. The ping of each website also seemed to correlate positively to the number of nodes the data packets had to travel between, with Google and Jagex being similar, and Konami's having to travel through three additional nodes to reach the final site. The 'lax' prefix that the server name for Google.com begins with seems to also confirm my suspicions that it connected so quickly because I'm connecting to their Los Angeles data center, which is close by.

I'm sure if anyone here is experienced with network traffic, my traceroute results look a little off. You would be right, because I use a VPN, which passes all of my data through a network client which encrypts my data and obfuscates the IP address of my ISP, home network, and computer. Knowing this, I conducted a test without the VPN on, and I obtained similar results to everyone else here. (Please don't use my post to dox or harass me).

Tracert Konami.com no VPN.png

    I noticed that I immediately connected to my router, which passes the data to my modem, which then connects to my ISP, which then routes my data to a couple more locations before connecting to the series of 5 servers that end in Konami's website, resulting in two fewer hops overall. Based on these results, it seems that my VPN actually does spoof my IP address for both incoming and outgoing network traffic and that I might want to consider looking into replacing my router, as even though I'm connected to it via Ethernet, it's still dropping the ball when it comes to transferring data to my modem, as evidenced by the fact that it's timing out and dropping packets during the first two connections.

Closing thoughts

    Using Pings and Traceroutes to diagnose internet connection issues can help you figure out exactly where in your connection the issue is occurring. Maybe your ISP is experiencing an outage, maybe you need to troubleshoot your router like me, or maybe your modem is on the fritz; where exactly in the traceroute the data fails to transmit can tell you exactly which component of the network is causing the problem. When the connection times out, it may be an issue with your hardware, and when the connection is inconsistent, it can cause packets to be dropped. Sometimes, incorrectly configured network connections can return an error message saying that the connection was refused, meaning that it's not an issue of hardware, but of configuration.

Week 2: Documenting a Day and My Experience Using Microsoft Office

 

Introduction

    In completing the assignment, Documenting a Day, I navigated several software applications, each serving a distinct purpose in capturing, analyzing, and presenting information. These programs form the backbone of a suite called Microsoft 365: Word, Excel, and Powerpoint. These programs are designed to work together seamlessly to provide the user with the tools to record, manipulate, present, and transfer data quickly and easily from one program to another (Ballew, 2023). This reflective essay delves into my experience with these programs, comparing their functions, advantages and disadvantages, and my recommendation for the most suitable application for documenting the day's events.

Word

    Microsoft Word is a versatile word processing tool, proving invaluable for crafting detailed journal entries, essays, reports, and memoranda. Its intuitive interface helped me easily organize my thoughts and put them into words. The ability to control font sizes, line spacing, text colors, indentation, text alignment, and more made creating an easy-to-follow journal entry a breeze. However, the disadvantage lies in its limited capability for numerical data manipulation, making it less ideal for tasks requiring extensive calculations.

Excel

    Microsoft Excel, on the other hand, fills the gap as a powerhouse for percentage calculations and data manipulation. Its formula-driven approach simplified the process of converting the raw data I fed it into a clear picture of how I spent my day. Nevertheless, this application's drawback lies in its relatively rigid formatting options for text, limiting its capacity for expressive presentation.

Powerpoint

    PowerPoint, with its focus on visual representation, excels in developing compelling presentations based on a combination of text and images. Its advantage lies in the ability to create engaging slideshows; incorporating multimedia elements for a dynamic narrative. However, the application might fall short in conveying intricate details found in a journal entry or complex numerical data.

Use Scenarios

    For documenting a day's events, Microsoft Word stands out as the most appropriate application. Its emphasis on text makes it ideal for capturing detailed experiences and reflections, where narrative storytelling is paramount, such as in a personal journal. Word also finds utility in crafting comprehensive reports, essays, and articles. Its flexibility in handling text and seamless integration with other Office applications make it a go-to tool for writing tasks.

    Microsoft Excel, however, is the go-to application for organizing, transforming, and presenting data in a way that is easy to understand. Ideal scenarios to use this program include creating charts to present corporate profits over time, with the ability to easily take raw data sets and create a multitude of charts from them. Conditional formatting can also allow one to keep track of employee training dates by color-coding entries depending on how long it’s been since the date in the cell how soon it will need to be renewed.

    Microsoft Powerpoint is the dominant program for creating engaging slide presentations. Using the large variety of themes that come standard, one can create a presentation to suit nearly any style, boasting images, animations, sounds, and even the ability to embed video links to create seamless multimedia presentations. The newest version of Powerpoint can even listen to your presentation and use AI technology to give you feedback on your pacing, clarity, and word choice (Microsoft, 2023). Presenting a group project in front of an audience would best be done using Powerpoint to create a slide presentation featuring all of the visual aids needed to make the presentation clear and engaging.

Conclusion

    In conclusion, this assignment showcased the distinct functionalities of Microsoft Word, Excel, and PowerPoint. While each application has its merits and drawbacks, Microsoft Word proved to be the optimal choice for this specific task, while the other applications would have proved optimal for others. Its dominance in handling text content makes it a vital tool for documenting personal experiences and reflections. Furthermore, beyond journaling, Microsoft Word's versatility extends to a myriad of scenarios where detailed textual documentation is paramount, Excel excels at data presentation and transformation, and Powerpoint dominates at creating engaging professional presentations.


 

References

Ballew, J. (2023, February 07). A Complete Guide to Microsoft 365 (Formerly Microsoft Office). Lifewire.com. Retrieved from https://www.lifewire.com/microsoft-office-4156573.

Microsoft. (2023). Microsoft Powerpoint Slide Presentation Software. https://www.microsoft.com/en-us/microsoft-365/powerpoint.

Tuesday, January 2, 2024

Week 2: Web Apps and My Critique of Runelite

 

    The app that I'll be reviewing is a third-party client for a game that I have played for a long time, so am quite familiar with. For those that aren't familiar with Runescape, it's a Massively Multiplayer Online (MMO) game created and operated by the British Game company Jagex. In 2014, following a significant overhaul of the game that divided fans, they released an alternate version of the game based on a backup of the servers from 2007 called Old School Runescape. This is the version I play, and for a while now, I've used a third-party client called Runelite to play the game, which Jagex recently began providing official support for in their new game launcher.

Screenshot 2023-11-30 at 9.03.28 PM.png

Screenshot 2023-11-30 at 9.06.36 PM.png

Features

    The major feature of this custom client is the ability to run custom plugins designed to enhance your game experience, such as replacing textures and assets with high-definition versions, animation smoothing, FPS control, helpful overlays to help guide players through quests, help with minigames, or provide additional information on monsters, drop tables, experience rates, and the value of items.Screenshot 2023-11-30 at 9.11.03 PM.png

For instance, the Agility plugin adds an overlay to highlight interactive elements on agility courses (used to train one of the game's many skills) to help make it easier to identify what the player is intended to do, and changes its color if a valuable reward has spawned somewhere along the course.

    All of these plugins are user-created, and available for download directly through the client by selecting the plugin icon in the toolbar in a manner that is intuitive and easy to use. Every plugin that either comes with the client or can be downloaded is ready to use out of the box, being configured by default to run simply by toggling it on in the menu. However, most plugins feature additional customization options that can be accessed through the gear icon next to the plugin name. 

    It's a great plugin, that adds a lot of quality of life features to the base game, like moddable controls, customizable render distance, and even Discord functionality. However, there are several improvements I think would make it even better. New players may find the large list of plugins loaded by default overwhelming. I would reduce the number of plugins loaded by default to just the basics, enhanced graphic options, texture packs, control modification, and the like. Additional plugins for things like minigame overlays, bosses, DPS counters, and tick-manipulation metronomes that the player is unlikely to need until dozens of hours into the game can be left for them to look up later to declutter the plugin menu. Alternatively, I would group similar plugins under subfolders in the menu, letting players quickly find all of the plugins associated with graphics or controls, minigame helpers, quest guides, or bossing and PVP assistants under their respective categories instead of one massive, alphabetically organized list. One other improvement I would suggest is include the option to walk the player through a short tour of the interface when the client is run for the first time to show the player where everything is and what the different icons mean.

I love this client, and I can't imagine going back to playing the game without all of the great ways it improves the experience. I'm happy to see a game company officially recognize and endorse fan-made content for their game, so long as it doesn't violate the spirit of the game or break the rules.

 

References

Jagex. (2023). Jagex Launcher (version 0.29.1) [Application]. Runescape.com. https//www.runescape.com.

Runelite. (2016). Runelite (version 1.10.17.1) [Game Client]. Runelite.net. https://runelite.net/.

Monday, January 1, 2024

Week 1: Programming Languages and My Experience Recreating Snake

 

    Today, I began my first formal foray into the realm of computer programming with an online educational tool called Scratch. Scratch is a simple drag-and-drop block programming tool used to help build a student’s beginning awareness of programming logic. Through reading the course materials, I learned about the several foundational programming languages, machine language, assembly, and our first higher-level programming language: Python. In this initial post I will be relating my first experience with this website, what I learned through my first exposure to the other programming languages, and how these languages might best be used.

My First Experience using Scratch

      My first experience in using the online educational programming platform, Scratch, was an interesting one. I was dropped into the programming environment with very little explanation or example. It began with a basic example program to animate a sprite of a cat to move and play a simple meowing sound once the green flag button was clicked (Scratch, n.d.). However, once I got to exploring the available options for new block instructions, I remembered that one common task programmers use to help learn a new platform is to recreate the classic arcade game ‘Snake’. Once I had a vision of what I wanted my end product to look like, I set about animating a simple circle sprite with the proper controls. I quickly learned that movement commands are dependent on which way the sprite is currently facing, and so as part of any movement commands, I first needed to instruct the sprite to change direction when the corresponding arrow is pressed before moving. Once I could move the dot around the screen, I needed pellets to collect, so I created a new sprite. With this new sprite, I learned that program instructions are tied to the current sprite, and so I needed to create the behavior of this sprite from scratch. Using my current knowledge of how video games typically handle collectibles, I didn’t waste time trying to individually code each pellet as a separate entity, but instead coding my new dot as a spawner, creating and distributing clones of itself across the playing field at random when the game begins and setting a variable called ‘# of balls’ to 10. I then created instructions for the clones to interact with my avatar. When my avatar comes into contact with one of these spawned entities, it’s supposed to disappear with a popping sound and decrease the ‘# of balls’ variable by 1. Additionally, when I press the button to begin the game, I needed them to reset instead of just creating more balls, so I added an instruction telling all cloned balls to despawn once the spacebar is pressed to begin a new game. Once the balls had functionality, I needed to code a win condition for the game; so, I went back to the player sprite to code a win condition specifying that when the ‘# of balls’ variable reaches zero, the game ends and it needs to spawn a word bubble proclaiming ‘You Win!’. I also created an instruction to reset the player to the lower-left-hand corner of the screen when the spacebar is pressed to start a new game.

      One of the key features of the game ‘Snake’ is the behavior associated with the player character. As more balls are collected, more segments are added to the snake, and touching one of these segments with the foremost segment results in a fail-state. I ran into trouble properly coding behavior needed to properly spawn and offset the positions of additional segments and have them follow the main character. Additionally, limitations associated with coding behavior of cloned entities do not allow them to condition behaviors associated with interacting with separate instances of the same sprite. It occurs to me only now as I write this that I might be able to overcome this limitation by creating a third entity solely for the tail segments, so that they can be coded to trigger a fail state when coming into contact with the main sprite. On top of that, the game would always spawn precisely one collectible with no collision, resulting in it being unable to be collected. My theory is that this entity is the original sprite, which is for some reason ignoring its routine following the spawning of other objects. Attempting to instruct this instance of ‘Ball’ to delete itself after spawning the others didn’t work, likely because the instruction for doing so specifies ‘delete this clone’, and the program doesn’t recognize the original entity as a clone. I overcame this limitation by adding a command to the beginning of the spawn routine to ensure it’s shown when it begins, so the clones it spawns are set to be visible, then to hide itself at the end of the routine to avoid leaving behind one uncollectable sphere.

    One final problem I ran into, but was not able to figure out the cause of, was that when spawning in the collectibles, spawning in only ten would often have less than ten spawn, resulting in me having to settle on spawning 13 in order to guarantee enough balls spawn to allow the game to be won.

    During this exercise, I have gotten used to using entities, using instructions and variables to control those entities, and defining basic conditional statements in Scratch. It’s given me an appreciation for the difficulty of game development and whetted my appetite for more. I find myself constantly mulling over the puzzle of how to get these troublesome problems, and instead of exhausting me, they prove to be invigorating, like trying to come up with the answer to a difficult riddle.

This iteration of the game can be found here: https://scratch.mit.edu/projects/931227421/

Machine Language, Assembly, and Python

    Machine Language, the most barebones of programming languages, is the binary language that computers actually communicate in. It is literally the 0’s and 1’s that determine the sequence of transistor switches that physically execute a program. All other programming languages are simply this language, translated into a form that is more easily understood by humans and for readability and troubleshooting purposes (Vahid and Lysecky, 2019, Ch 2.8).

    One step above Machine Language is Assembly, which is a basic textual representation of the instructions given in Machine Language, which needs to be converted by an Assembler before it can be run. Where Machine Language  uses specific bytes to signal what instruction to perform, followed by the exact address in memory to execute to and from, Assembly translates those bytes to instructions that are easier for humans to read and keep track of, and assigns the memory addresses to shorter variables that humans can more easily work with. When the program is complete and ready to run, it’s passed through and assembler program to convert the human-readable program into an executable written in Machine Language which can be run (Vahid and Lysecky, 2019, Ch. 2.9). Prior to higher-level program languages like Fortran in 1957, programs were most commonly written in Assembly, and even after, depending on the application, Assembly was still the go-to language when the task wasn’t well-suited to a high-level language. One such example of relatively modern usage of Assembly is Super Mario World, which was coded in 65c816 Assembly language, a variation of Assembly used to develop for the Super Nintendo (SFC Dev. Wiki, 2021).

    Finally, our first higher-level programming language covered is Python, which uses more complex and sophisticated instructions, each of which can represent a sequence of multiple instructions in Assembly/Machine Language. These kinds of programming languages make it far easier for humans to create complex and sophisticated programs by grouping together instructions to conduct more complex calculations and transformations of data into single commands, making the code far shorter and more readable than its equivalent in Assembly or Machine Language. Before the code can be read by a computer, it needs to be converted to Machine Language using a program called a Compiler, which translates the functions and variables of the high-level language into the expanded series of functions and memory addresses of Machine Language (Vahid and Lysecky, 2019, Ch. 2.10). Python is commonly used for data-processing due to it having many specialized instructions for conducting higher-level data-processing operations (Vahid and Lysecky, 2019, Ch. 2.11).

Ease of Use

 I found Scratch to be the easiest to use, due to its readability, simplicity, and the ability to easily drag and drop instructions to modify the program. However, once I am more familiar with Python and how to use its more complex array of functions, I suspect that I will find that far easier to use overall due to how it simplifies creating multi-step functions under one command. The most difficult to use, unsurprisingly, was Machine Language. Trying to remember what bytes represent which instructions and what memory addresses to store values to was far more cumbersome, even in the basic exercises in the textbook, than in the equivalent exercises for Assembly. Assembly was sort of a mid-point between Python and Machine Language for ease-of-use.

 Conclusion

 In conclusion, my first experience with coding using Scratch was overwhelmingly positive. I experienced several challenges in just this first attempt, but finding ways to overcome them has left me feeling this profound sense of accomplishment and an eagerness to tackle another. Reading about different programming languages in this week’s assigned chapters has taught me a lot about how programming has come to be what it is, and I am very eager to learn more about using Assembly, Python, and the other high-level programming languages. I intend to iterate on my efforts this week, and hopefully have a fully functional version of ‘Snake’ running in Scratch for people to play soon.


 

References

Scratch. (n.d.). https://scratch.mit.edu/.

SFC Development Wiki. (2021, January 27). ASM Tutorial Part 1. https://wiki.superfamicom.org/asm-tutorial-part-1

Vahid, F., & Lysecky, S. (2019). Computing technology for all. zyBooks

CPT 307: Newbie to Newbie Week 5

Demystifying Algorithmic Design and Data Structures for Beginners When starting your journey in programming, understanding how to effectivel...