This is a Twitter thread I posted, converted to a blog post because it's SO long. A history of computers and a computer science degree in one piece of content.
1/n "Computer" used to be a job-title before it was a machine. Described those who performed calculations to compute things like planetary positions. All day long, just do some maths. Inventors wanted to automate this to make the process less error-prone and faster.
2/n Leonardo da Vinci (yes, the artist) made drawings of a gear-driven calculator but never built any.
3/n In 1642, Blaise Pascal invested Pascaline at the age of 19. It was a gear-driven calculator that could only perform addition. But not many were sold due to expensive cost of manufacturing, and not being able to produce precise gears at the time led to errors.
4/n In 1801, Joseph Jacquard invented a loom that could weave the fabric based upon a pattern read from punched wooden cards held together in a long row.
5/n Based on the pattern in the wooden card, the loom would create a fabric weave of a certain pattern
6/n To display it's power, Joseph Jacquard punched 10,000 cards and programmed the loom to weave a portrait of himself using black and white silk (this is MAD)
7/n This invention put many loom workers out of work 👀 👀 Angry groups of people smashed his looms and even attacked him a few times. He survived.
8/n In 1822, Charles Babbage got funding from the British government to build the 'Difference Engine' - a machine the size of a room to compute tables of numbers. Ten years passed, and the machine was nowhere close to complete and the funding dried up.
9/n Babbage moved on to building the 'Analytic Engine' - a device as large as a house, powered by six steam engines, and being programmable and general purpose using Jacquard's idea of punched cards.
10/n He realized punched cards could be used as storage. His Analytic Engine was divided into two main parts - the Store and the Mill. In modern computers, they're equivalent to the RAM and the CPU. The analytic engine, however, also included another groundbreaking idea.
11/n He added conditional statements to the device. Based on the punched card, the device could change the path of the program based on a condition detected during runtime.
12/n Babbage befriended Ada Byron (later Ada Lovelace) who was fascinated by his ideas. She wrote a series of 'notes' - detailed sequences of instructions for Babbage's machine.
13/n The device remained unbuilt due to the British Government not being willing to fund another project by Babbage, but Ada Lovelace came to be recognized in history as the first ever computer programmer.
14/n In 1890, the US government offered a prize for someone to create a computation device, to solve challenges around performing population census with the increasing population. Herman Hollerith won the prize as he adopted the idea of punched cards for computation.
15/n His invention, the Hollerith Desk, had a card reader along with a gear mechanism like the Pascaline to display the results of computation on dials (like speedometers).
16/n So far, punched cards had been a read-only operation. Hollerith's breakthrough was the insight that he could convert them to read-write operations. Punching new cards based on the reading of other cards.
17/n This would allow for complex computations to happen, ones too hard to punch all the cards for beforehand manually to calculate the final result. He was successful, and went on to build the Tabulating Machine Company, which eventually became International Business Machines.
18/n Today, that company is known as IBM.
19/n IBM grew massively and punch cards became common. Your bills would come home with a punch card in which you punched holes and returned back with your payment. These cards had your name, age, address, etc. This would be recorded using computation machines.
20/n By World War 2, physicists could write equations around how wind, gravity, velocity etc would affect trajectory of missiles and shells. But solving these equations by hand was painful and time consuming.
21/n The US government wanted to invest in schemes to automate this type of computation. In 1944, Harvard and IBM partnered to create the Harvard Mark 1 computer to solve this - the first programmable digital computer.
22/n The machine was MASSIVE - 5 tons, 8 feet tall, 51 feet long, run by a 5 horsepower motor. It ran nonstop for 15 years.
23/n The Mark 1 used a paper tape instead of punched cards. So instead of wooden cards, you could feed a role of punched paper into it, and it would perform the computations.
24/n Grace Hopper, a primary programmer for the Mark 1, found the first computer bug. It was a dead moth whose wings were blocking the reading of holes in the paper tape - a literal computer bug. Hopper is credited for creating the term 'debugging'.
25/n In 1953, Grace Hopper invented the first high-level language - Flow-matic. 👀 This went on to become COBOL. A high-level language however is useless without a compiler, so she also created the world's first compiler.
26/n Computers at the time were VERY expensive because they were all built by hand and GIGANTIC. See photo for reference. In comparison, this computer was outperformed by the Apple 1 in 1976 which sold for only $500 with the advent of micro-electronics.
27/n In 1959, the IBM Stretch computer needed 33 feet of length to store 150,000 transistors. Today, the Apple M1 silicon chip contains over 14 billion (14,000,000,000) transistors in the size of your thumb.
28/n Over the next couple of decades, lots of task-specific computers were built by various countries for use in war and decoding enemy messages. In 1965, the work of Konrad Zuse was released in English (he was German), which included important breakthroughs.
29/n Zuse's 3rd machine - the Z3 - was built by him in 1941. It was probably the first general-purpose, programmable digital computer. These machines were unknown outside Germany at the time and did not influence the path of computation elsewhere.
30/n But their architecture is identical to what we still use today. An arithmetic unit for calculations, a memory unit for storage, a control unit for supervising tasks, and input and output devices to connect to the outside world.
31/n Even after all this, the forefather of today's digital computers is a title usually given to ENIAC - the Electronic Numerical Integrator and Calculator. ENIAC was built at the University of Pennsylvania around 1945 by two professors funded by the US government.
32/n Their goal was to replace all the "computers" - the job title, not the machines. They filled a 20x40 ft room with a machine weighing 30 tons to do some multiplication. To reprogram the ENIAC, you had to flip settings on an array of 3000 switches and rearrange wires.
33/n Up until this point, computers were being built as one-off machines. Soon after, general purpose machines started being built which could be manufactured and sold en masse.
34/n In 1970s mainframe computers became common. These were large machines that could be interacted with through terminals in different places. A terminal would be a typewriter which could transmit your keystrokes to the mainframe and print out the response.
35/n University students back then bought blank paper cards one foot at a time from the bookstore, and punched program statements on it. They would feed this to their terminal, go out for dinner, and come back hoping the computer has a response for them.
36/n Times changed fast though, and by the 1990's each university student would have their own computer - the personal computer (PC).
37/n This transformation was the result of the invention of the microprocessor. The first microprocessor was developed by Intel in 1971 - the Intel 4004. It consisted of 2300 transistors and had a speed of 108 kHz (108,000 times per second).
38/n In comparison, a modern Intel Core i5 13600K has billions of transistors with clock speeds of up to 5 GHz (5,000,000,000 times per second).
39/n This is a good segue into learning about how computers actually work now - since microprocessors are the most relevant part to start off with understanding modern computers. Time to cue your CS degree.
40/n We will look at simplified examples. Assuming 8-bit computers. Matter is made up of atoms. Atoms have electrons. Flow of electrons is electricity.
41/n We can make transistors which can store and free electricity as needed with the use of capacitors. A fully charged capacitor (one which has ~5 volts) represents a 1. A discharged capacitor (one which has ~0 volts) represents a 0. These values are not exactly 5 or 0.
42/n An 8-bit number in this case can then be represented with 8 capacitors. The number 3 in binary is 11. Expanding to 8 bits, it is 0000 0011 So have 6 discharged capacitors and 2 charged capacitors, and you get the representation of the number 3.
43/n This arrangement of capacitors and transistors in such a way is called a register or memory unit. (We will get into differences of registers and memory units later). But basically, you can use these to store numbers by representing in binary.
44/n A CPU is a piece of hardware that is hardwired to perform certain instructions. These include instructions such as addition, substraction, multiplication, exponentiation, etc. They are often referred to as OPCODES.
45/n A CPU also has some registers where it can store the inputs and outputs of these instructions. For example, if you have two numbers in registers 0 and 1 respectively, you could send an addition instruction to add them up and store the result in register 2.
46/n The storage of values in registers is also a CPU OPCODE, and so is the reading of those values. A CPU however can only have so many registers directly hardwired on the chip itself. To increase capacity, we created RAM - or memory.
47/n RAM has significantly more memory units in it, and data can be moved on/off the CPU registers into RAM through OPCODES present on the CPU which transfers voltage from the CPU register to the RAM memory units. Data stored in RAM behaves like an array.
48/n The RAM has memory locations (array indices) which contains a 1 or a 0. The CPU can access these. Modern day CPUs typically have ~10-30MB of memory as registers on the chip itself, with RAM going upto terabytes of data these days (though typically around 8-16 GB)
49/n This is not a electrical eng degree, so I won't delve too much into the hardware, but you should have a basic understanding now that numbers (values) can be stored in CPU registers and in memory. And that OPCODES allow moving data on/off registers and perform computations
50/n Now comes clock speed. What do we mean when we say a CPU can perform at 5GHz?
51/n Different instructions (or OPCODES) on the CPU have different hardwired electrical circuits through which the desired output is produced. To make things happen fast and in real time, a TON of these computations need to keep happening.
52/n The processor's tasks are executed in a cyclic way. For example, one cycle could consist of "read data" -> "perform instruction" -> "write data" How many such cycles the processor can execute in a second is the clock speed.
53/n The higher the clock speed, the more cycles being performed per second, the more work happening per second. So at 5GHz, 5,000,000,000 cycles are happening per second. While not an exact conversion, you can roughly say 5 billion computations are happening per second.
54/n Okay, now we land up here: 1. CPUs can store some data 2. RAM can help increase amount of data stored 3. Instructions are performed on the CPU which are hardwired circuits 4. Instructions are performed upto the clock speed How does this relate with modern day workloads?
55/n Let's talk strings. Data stored in hardware is represented through electricity, so it's either a charged capacitor (1) or discharged (0). How does this come to represent things like this tweet thread? images? videos? games?
56/n One of the most crucial insights you need to have is as follows. "What a certain piece of data represents depends on how you interpret it". Think about this.
57/n Let's say we were to represents alphabets as numbers. A = 1 B = 2 C = 3 and so on. Now, you have the series of 8 capacitors representing 0000 0011 Is this the number 3, or the letter C?
58/n It's both, and neither, at the same time! What that value means DEPENDS on how you choose to interpret it. For example, the Calculator app might want to interpret it as the number 3 to perform maths. But the Notes app might want to interpret it as the letter C.
59/n There is a VERY crucial insight here. Any data can be represented in binary, as long as you also interpret it the same way again :)
60/n Let's look at the ASCII convention. It is a way of representing characters in binary. It represents various letters (uppercase and lowercase), special characters, and numbers in binary form.
61/n These days, ASCII has mostly been replaced with more modern conventions like UTF and Unicode which added support for characters beyond the English language, and also Emojis!
62/n The point remains, electricity converts into data depending on how that is interpreted.
63/n Let's talk about images now. Actually, let's talk about color. Most commonly, we represent colors in computers using the RGB scale where you provide individual values from 0 to 255 for each one of the parameters - R (Red), G (Green), and B (Blue).
64/n The specific combination of these values gives you a specific colour.
65/n Now, let's say you have an image of 2px by 2px (a square). (A pixel is the smallest area of illumination on a display which can be individually represented). The image consists of a total of 4 pixels. Each of those pixels has a color value.
66/n Therefore, we can now represent the 2x2 px image as a 2x2 matrix, where each element of the matrix represents its color value. Say C1...C4 are 4 color values in RGB, a matrix like: [ C1 C3 C2 C4 ] could be used to represent the image.
67/n Matrices? Numbers? BINARY! Convert RGB values to binary represents. Each individual value of R, G, and B can be represented within 7 bits (because max value is 255), and maybe keep 1 bit to specify if it is R or G or B. Then, we 3x 8-bit values we can represent a color.
68/n And then, with 4x (3x 8-bit values) we can represent the 2x2px image. Voila! Now of course, you only see that image if your software interprets the data as colors and understand the shape of the image. i.e. its a 2x2 image, not a 1x4 or a 4x1 image.
69/n This can also be done by just storing some additional data to represent the shape of the image (2x 8-bit values specifying # of rows and # of columns of the image?) Point is, ANYTHING is representable in binary. Videos too are just collections of images.
70/n Okay. Moving on. Hardware can store binary data through charged and discharged capacitors. Computers can interpret that data as various things to display them. But, how do we tell the computer how to interpret that data? Enter software programming.
71/n We learnt about punch cards. The most pain-staking way to send instructions to a processor is to just give it those instructions in binary itself. But obviously, nobody has the time for that.
72/n Modern day programming is built on top of abstractions. Layers upon layers upon layers which make things easy for the typical programmer today (thank goodness).
73/n We have spent time understanding the bottom two layers so far. Mathematics, physics, and binary. Machine Code is the form of providing instructions to your hardware in binary (or usually it's hexadecimal representation) which it can understand and shoot off OPCODES.
74/n But as I said, writing binary is not what anyone wants to do. So here comes Assembly. The first abstraction over binary-based machine code. Note: Assembly is not a single language - it's a 'type' of language which varies from hardware to hardware.
75/n For example, the assembly language used for Intel CPUs is different from AMD CPUs is different from ARM CPUs. Let's say you want to store values in Register 1 and Register 2 of the CPU from the RAM, and you want to add them and store output in Register 3.
76/n In assembly, you may need to write something like LOAD R1, #0 LOAD R2, #1 ADD R1, R2, R3 which tells it to load two byte values from memory at locations 0 and 1 from RAM into CPU registers 1 and 2 respectively, then add R1 and R2 and place output in R3.
77/n A software known as the Assembler then converts your Assembly Code into Machine Code (binary) so the computer can understand it.
78/n But Assembly still isn't good enough. It's hard to read, complicated, and easy to make mistakes. Also, nobody wants to deal with memory locations manually. See this example for printing numbers from 1 to 100 using Assembly in the emu8086 processor
79/n So now we move one more level up, into compiled languages. Let's look at COBOL - the language Grace Hopper invented.
80/n This still looks VERY different from modern programming languages, but hey, at least you can say things like DISPLAY 'HELLO WORLD' instead of manually writing each character into memory locations and then letting the output device know of those values so it can display.
81/n COBOL by itself boosted productivity MASSIVELY. But devs are lazy and want to keep making life easier. So we had MORE abstractions. Let's look at more modern compiled languages like C++.
82/n Starting to look a little familiar now? Eh? But how does this go back to the CPU in binary? Here, we introduce the compiler (well, actually, with COBOL). Remember how the Assembler converted Assembly to Machine Code?
83/n Add another layer on top of that. A compiler is used to convert code like C++ into Assembly (this is a simplified explanation).
84/n With more modern compiled languages like Go and Rust now, this process is somewhat different as optimizations have been made around this process. But roughly, the idea is the same.
86/n Interpreted languages basically don't have a compile step - the instructions are not pre-compiled into machine code. Instead, they are run with the help of an interpreter, like Nodejs. Interpreters then "interpret" each line of code, and execute them on the target machine.
87/n This process happens all at runtime, and has it's own pros and cons. One pro of interpreted languages is that with compiled languages, you need to compile your code for each platform separately. For example, the same code needs to be compiled separately for iOS and Android.
88/n This is because the underlying hardware in those devices uses different architectures, hence different machine code and assembly instructions. This is why iOS development is restricted only to macOS as that compiler is proprietary.
89/n But regardless, if you are building some code that can run on MANY different types of platforms, you need to compile for each upfront and distribute the right executable. With interpreted languages, you distribute the same file to everyone.
92/n A pro for compiled languages however is that they can be optimized for their target machines, thereby offering better performance than interpreted languages in general. At large scales, this can matter a lot as a few milliseconds in each request can add up very quickly.
93/n There is also a third category which kind of falls in the middle of these two. Languages which can be considered both compiled and interpreted. These include things like Java and Solidity.
94/n In these languages, the written code is first converted into bytecode - a special representation that is a language-specific instruction set. This bytecode is then executed by a VM (like an interpreter) on a target machine which converts the instructions to machine code
95/n In Java, you'd convert your .java files first into bytecode by 'compiling' into something like .jar files. In Solidity, you convert your .sol files into bytecode as well.
96/n Then these programs are distributed to target machines (or nodes on the blockchain network). Then these files can run on the JVM or EVM (Java/Ethereum Virtual Machine) which can interpret the bytecode and run machine-code for those instructions.
97/n Alright, alright, moving on now. We've discussed the language stack now - all the way from binary up until modern programming languages. Now we can write code that is (relatively) easy to write and can run on all sorts of machines. How do we make them communicate now?
98/n Introducing the Internet! The internet started in the 1960s as a way for government researchers to share information. Back then, as we saw, computers were massive and to share information one had to travel to the site of that computer or mail magnetic tapes.
99/n This was obviously very inefficient, and with tensions rising around the Cold War, the government wanted ways to share information even after a nuclear attack. This led to the creation of ARPANET, which eventually became the internet.
100/n Simplifying it a bit, the internet is a network connects all computers in the world together through some entities. There are three main types of networks as far as the internet is concerned: 1. LAN 2. MAN 3. WAN
101/n LAN is Local Area Network. It connects a small group of computers in a given geographical area together. For example, all devices in a home, a hospital, a school, etc.
102/n MAN is Metropolitan Area Network. Relatively larger network that connects computers in a region like a town or a city together.
103/n WAN is a Wide Area Network. It connects an even larger group of computers together such as various countries. The internet as we know it is a type of WAN.
104/n But things always start on a smaller scale. Say you have a Laptop and a Wireless Printer in your home. How does your laptop tell the printer what to print? First, you need to connect both devices to the same internet modem/router.
105/n The modem assigns each device on it's network a local IP address. For example, Computer = 192.168.0.1 Printer = 192.168.0.2 Your computer then scans for devices on the same network as itself, and finds the printer.
106/n You then try to print a document, and tell it to use the given printer. The data is transmitted from your computer to the modem router, and your request includes the recipient of that data. In this case, 192.168.0.2. The modem router forwards that data to the printer
107/n Now, expanding this example into a MAN. These modem/routers also allow you to connect to wider internet, and you usually buy/rent them from a telecom operator. In Canada, companies like Bell and Rogers. In India, companies like Airtel and Jio. In US, companies like Verizon
108/n On the MAN network as well, each computer is assigned an IP address. When you send out a request to send data to another computer on the network, the request travels from 1. Your Computer 2. Your Modem/Router 3. The ISP (Internet Service Provider, usually Telecom)
109/n 4. The recipients modem/router 5. Their computer The same goes for a WAN, just on an even larger scale. The internet is nothing but a complex, and gigantic, network of wires running under the oceans connecting ISPs and data centers together.
110/n Alright, so now computers can exchange data with other computers. Note, I use computers as a general term here - I mean any internet-connected "smart" devices - including that toaster you bought last Christmas.
111/n But what kind of data should we be sending over the network? How do we know that data is not corrupted? After all, electrical signals through wires can be corrupted through magnetic interference.
112/n Introducing Error Correction Codes (ECC) ECCs are actually used beyond just network communication - even within your own computers' RAM to make sure that if data is corrupted, it is recoverable to some extent.
113/n There are various different types of error correcting codes and schemes that have been in use. The naive solution is, for every bit of data being transmitted (every 1 or 0), send 3. So instead of sending "11" you send "111111" and take the majority bit from each group of 3
114/n This has downsides however, where obviously if two bits get corrupted in the same group the message is still corrupt. A lot more code correction schemes have been developed over time, such as the Hamming Code which are used more popularly.
115/n Here is a great explanation vid for the Hamming Codes by @3blue1brown here
116/n Anyway, so we can send data, and have schemes to ensure that errors are taken care of in case of signal noise. Now, what kind of data to send? Clearly sending something like "Hey Printer, print mySecretFile.pdf for me" isn't great.
117/n Note that in the end, over the actual wires, binary data is the only data being sent. Since wires can only transmit electricity, and electricity can be converted to 1s and 0s. But, for computers to make sense of that binary data, they need to interpret it correctly.
118/n Here's where the type of data being sent over comes in - and there are a LOT of options here depending on what you're doing.
Creating webpages? HTML
Creating public APIs? JSON
Creating private APIs? Protobuf
Legacy APIs? XML
and much, MUCH more
121/n A sample JSON object looks something like this:
122/n The root object has three properties -
next. Both the
next properties further have more objects, which include strings and an array of more objects.
123/n This is just one of the many formats of data that is used over the internet. Regardless of the format being used, as long as it is something the computers part of the exchange can understand, it's okay.
124/n Now what happens with all of this data? How is it that when you load up Twitter and log in, you see a feed of posts and your messages and such. @elonmusk says it's "batched RPC calls" Good, but let's dig into that
127/n As part of the initial load, Twitter also returns a JSON object that contains within it various tweets to show on your feed and their related data (author, timestamp, comments, etc).
129/n This keeps going on, and you keep scrolling Twitter trying to get the latest alpha or post memes or do whatever it is you do.
130/n The question that arises, now, is how does Twitter have all this data to constantly show you? How can you search through billions of tweets made on the platform? And just where is all this data stored?
131/n Storing it just in the server's CPU and RAM is very risky - because if power ever goes out, the capacitors will get discharged and bada boom yada boom. We need something more permanent.
132/n This is where storage devices like hard disks, solid state drives, magnetic tapes etc come in. They're present in everything from your smart toaster to the biggest servers in the world.
133/n These storage devices store data in ways that is not dependent on charged/discharged capacitors, but is more permanent. Different methods utilize different techniques.
134/n Hard Disk Drives (HDDs) used to be the norm until a few years ago. They stored data on magnetic spinning disks called platters, and a head (tiny needle-like point) would be rotated over the spinning disks to read/write data in certain locations.
135/n Hard disks were slow though, because the disks are constantly spinning and if data needs to be read from multiple locations the head needs to continuously move all over the place.
136/n Solid State Drives improved upon this through being a fully electronic way of storing data. Data in SSDs is stored in NAND flashes, which use floating gate transistors. Unlike transistors used in CPU or RAMs however, these ones don't need a power source to maintain charge
137/n This allows SSDs to offer 5-20x improvements over HDD's in terms of speed of reading/writing data. However, they are still slower than registers and memory units which use regular transistors.
138/n Anyway, so now that we have viable storage devices, how do we actually manage and store all of this data? Where does Twitter keep all the billions of tweets, millions of profiles, messages, and such?
139/n The answer to this is databases. Normally, you'd just create files in a hard drive on your computer, but that is an inefficient way of storing large amounts of data when you know you'll need to perform operations on that data regularly.
140/n Databases are a type of software optimized and built for storing large amounts of data in (un)structured ways, and allow you to perform operations on it (Read, Write, Update, Delete, etc). There are various different kinds of databases
141/n For example, SQL databases and NoSQL databases. But also, key-value databases, time-series databases, and much more. Regardless of the choice of database, they're all used for the same purpose with some pros and cons depending on which one you choose.
142/n So, Twitter has all the data stored in a database somewhere, and their servers can read this data and present to you your feed.
143/n Also, however, at scale as large as Twitter, a single database is not enough. What if power goes out? What if some data is accidentally deleted? What if it gets hacked? What if there is a natural disaster that destroys the computer where the database is?
144/n To prevent against such issues, large scale organizations typically use distributed databases. This means they split the data across multiple databases, replicate the same data in multiple physical server locations, and have them all running in parallel.
145/n So if the US East database server goes down due to a flood, the US West database server still has all the data and Twitter can keep functioning as normal.
146/n All large scale orgs - Netflix, Google, Microsoft, governments, and many more use this form of distributed data systems.
147/n These databases keep track of everything. Your identity, your personal information, your financial details, your employment history, your behavioral patterns, your physical movements, and MUCH more. Herein lies a problem.
148/n Whosoever controleth the data, controleth the user
149/n Control over this information stored in these siloed database systems, and what these companies do with it, has been bit of a black box. Swinging election votes, lying about financial reserves, running psychological social experiments based on behavioural data, and more.
150/n To this problem (and more), we introduce blockchains. Blockchain, at its core, is a distributed data system which is also decentralized i.e. not controlled by a single entity.
151/n Networks such as the Ethereum blockchain for example, are an open transparent distributed database that lets anyone also create their own software and upload it to the network and others to interact with any of that software. These are called smart contracts.
152/n The Ethereum network is also not controlled by a single entity, and nobody can modify the data on the blockchain unless it's within the rules of the network and everybody else agrees with that change. (This is assuming at least that there isn't a malicious majority)
153/n Network validators, ranging from individuals like myself to larger organizations, help secure the network and enforce rules on how data can be modified and updated there. Everything is public, transparent, open source, and composable for all.
154/n This brings us to a new generation of the internet and connected software. Through blockchains, we enable the potential of building composable apps without silos. Without a few entities controlling the majority of our online experiences.
155/n Since everything is public, anyone can build anything on top of any pre-existing thing, and release it to the world. Today, blockchains serve roughly five main categories - money, defi, identity, daos, and hybrid applications.
156/n Even Tim-Berners Lee, the creator of the world wide web (www) is now working on Solid - a new standard for how the internet should work using decentralized technologies. Note: Solid does not have a token.
157/n Which brings me to my next point. Web3's co-mingling with tokens has had it's ups and downs. Not all projects require a token, but some are better with them. The price speculation involved with building in web3 has turned developers on and off.
158/n Also being a fairly new space with lack of proper regulations, it has attracted a lot of grifters as well which has shown various horror stories for sure.
159/n Even after all of this though, if you take your time to dig deep into it, you will see it for what it truly is - a whole new potential for redefining the internet tech stack and building a truly composable, permissionless, open network.
160/n I can go on and on about Web3, but it isn't something usually part of a CS degree 😜 But, we've made it one - kind of. Go check out @LearnWeb3DAO if you're interested in digging deeper and starting your journey as a developer to learn all about web3 for free.
161/n I look forward to seeing the evolution of this space, and can only hope that we build a better future ahead. Keep price speculation aside, and focus on building, for you are part of a revolution.
162/n This thread would not have been possible without some great resources to help me out. In particular, Michael Rothstein's writings on the Kent State University website - http://www.cs.kent.edu/~rothstei/ I couldn't find his Twitter handle, but thanks a ton!
163/n If you've stuck around this far, hope you enjoyed the read and learnt a couple of things. Cheers 🍾