Bytesize: 2 Accidental discoveries that changed programming
Tags: watercooler, java, todayilearned, testing
Published: 2021-04-30 20:55:24

Bytesize is our 5-minute infusion of developer history, speculation, or otherwise fun knowledge that you can enjoy during a work or study break. 

When you set off to become a developer, you probably dreamed of working on self-driving cars, artificial intelligence, world-changing apps, or any number of other amazing products. However, there's a lot of learning and beginner developer work you need to do before you can get there. This can be draining and can make you lose sight of what got you excited to be a developer in the first place.

When knee-deep in a tough concept or a product function that's fighting back, Bytesize is here every week to give you 5-minutes to shake it off and let your imagination fly once more.

<br>
<h4><b> Never miss Educative content again </b></h4>
 
Sign up for our free, bi-monthly newsletter to receive the latest in tech news and trends, right in your inbox.
 
<b> [Learn more about our Newsletter
](https://www.educative.io/blog/blog-newsletter-annoucement) </b>

<br>

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bc1g3zask47c94k4xqr8.PNG)

<br>
 
<a name="chaos"></a>
 
## Chaos Engineering
Chaos Engineering is a form of stress testing that intentionally breaks your system or components under certain stresses to determine potential outages, locate weakness, and improve resiliency. Chaos Engineering is now used across large-scale tech companies to catch unpredictable situations, traffic levels, or unexpected race conditions.

While gaining prominence now, it was famously invented by accident by Netflix in 2011. Between 2008 and 2011, Netflix was looking for a replacement for their on-premise server after a critical and unexpected error. 
Teams analyzed every part of the system trying to understand how the failure had occurred, why it had affected so much, and how they could prevent it in the future. Afterward, many engineers found that they had a much better understanding of the system they'd be using for years.

They settled on an AWS distributed cloud architecture with many interworking components. The switch solved the major error they had encountered but introduced a new level of complexity that they had to explore.

To learn more, the team considered how much they had learned about their system trying to troubleshoot the on-premises just a few years prior. They decided to create a program called **Chaos Monkey** that would randomly shut down components of the system.
Chaos Monkey allowed them to test if the services they were building were robust and resilient enough to deal with the unexpected errors that result from such large-scale products. 

The practice would become known as "Chaos Engineering" and Chaos Monkey was released as open-source software in 2012. It has since gained traction as an essential process for proactively correcting distributed, at-scale systems.

From one critical error, Netflix was able to realize both the need for more resilient systems and found that frequent failure aversion was the key to truly understanding their system. They may not have intended it, but that one system failure in 2008 managed to lead developers down a whole new path of testing.

<br>

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/suzxt2jya8hebyxa48n1.PNG)

<br>
 
<a name="java"></a>
 
## Java for web development

To understand this discovery we have to understand the state of computer science when Java was created.
 
In the late 1980s and early 1990s, there was a large boom in computer science innovations when many started to recognize the varied applications of computers. One innovator named Patrick Naughton at Sun Microsystems was particularly interested in cross-device communication using a computer. The dream was to make what we'd now call a smart remote to control multiple appliances in your home with the same device.
 
Both C and C++ were prevalent at the time but had a severe problem with cross-device code. Each compiler at the time would compile code to machine code only usable by the device it was compiled on. In other words, a C++ project compiled on a Macintosh computer couldn't be used by another type of device.
 
They needed a new programming language that could work on many devices, so the team created Oak, which would eventually become Java. Oak was different from other languages of its time because it compiled, not into machine code, but into an intermediate language called bytecode. Any device with a bytecode interpreter could then translate this into its own machine code and run the program.
 
Unfortunately, the original remote device failed to interest customers because most homes only had a handful of devices at that time. It was decided that there was little need for cross-device code and the project was scrapped.
 
However, in 1993 the first Mosaic browser was released and the World Wide Web began to take off. Suddenly, there was a network that connected devices of all types, and the need for cross-device code skyrocketed. Sun Co-founder, Bill Joy, realized that Oak's bytecode was a perfect fit for sending programs to the many devices on the web. The project was quickly adapted to suit the web and by 1995 Naughton had produced **HotJava**, a bytecode interpreter compatible with any browser. 
 
Using Java and HotJava, developers could produce a program and release it to any web-capable device without having to consider which devices would access it. Java is still used in web development today to create enterprise-scale dynamic web applications with Java Enterprise Edition (JEE) and JavaServer Pages (JSP). 

It's amazing to think that this language with cross-device properties seemingly tailor-made for web development was created before the web even existed -- to run a simple remote control!
It just goes to show that no matter how mundane the project seems, you might discover the next world-changing technology.

<br>

### Continue reading about these discoveries

- [Chaos Engineering 101: principles, process, and examples](https://www.educative.io/blog/chaos-engineering-process-principles)
- [What are Distributed Systems? A quick introduction](https://www.educative.io/blog/distributed-systems-considerations-tradeoffs)
- [Learn Java from scratch with these easy steps](https://www.educative.io/blog/learn-java-from-scratch)