- #1
- 11,308
- 8,731
- TL;DR Summary
- IMO, people should put more effort in choosing where to start their computer science education.
I want to share a good Youtube Channel that I recently found. "Ben Eater" https://www.youtube.com/channel/UCS0N5baNlQWJCUrhCEo8WlA
[I have no personal or financial interest in Ben Eater's stuff.]
Mr. Eater is a talented teacher. His choice of topics and his execution of the demos are all excellent. He covers devices, logic chips, system design, debugging, programming in machine language and assembler, data comm, and networking.
I included below a list of links to his videos. Just read the titles. It might be difficult to find a university or a trade school that would give you a comparable education on those topics. If you want to design and/or program digital boards and controllers, all those skills are relevant.
But my real point here is that people wishing to get started with computing and programming should think more deeply than they do about what level is the appropriate place to start. If your ambition is to create web pages, or phone apps, certain starting points are most appropriate. If your ambition is to make micro controllers, or space-based real time systems, very different starting points are appropriate. Mr. Eater's videos slant toward the latter. You can even repeat his projects at home using breadboards.
If you're not sure about your final ambition, remember that it is easier to start with simple basics and continue with more abstraction and higher levels than it is to learn in the reverse sequence.
What's the harm in making the wrong choice? I think of voting machines used for elections that are Windows 7 based. That's a horrible choice of platform for that application. Why did they choose it? Almost surely because that was the only programming environment the developers knew. The end result might have been different if the very first step in their education was different.
I see examples here on PF of people choosing C++ for their first choice of language to gain familiarity with programming. IMO, modern C++ a very poor choice as a teaching language.
So my advice is to think before you leap. Ask advice of others more senior than you. Choose your goal before choosing your first step toward that goal.
What is error correction? Hamming codes in hardware
Hardware interrupts
Binary to decimal can’t be that hard, right?
How assembly language loops work
Why build an entire computer on breadboards?
Subroutine calls, now with RAM — 6502 part 7
RAM and bus timing — 6502 part 6
What is a stack and how does it work? — 6502 part 5
Connecting an LCD to our computer — 6502 part 4
Assembly language vs. machine code — 6502 part 3
How do CPUs read machine code? — 6502 part 2
“Hello, world” from scratch on a 6502 — Part 1
World's worst video card? The exciting conclusion
The world's worst video card?
Hardware build: CRC calculation
How do CRCs work?
Checksums and Hamming distance
Error detection: Parity checking
Reliable data transmission
Conditional jump instructions
CPU flags register
Making a computer Turing complete
Adding more machine language instructions to the CPU
Reprogramming CPU microcode with an Arduino
8-bit CPU reset circuit and power supply tips
8-bit CPU control logic: Part 3
8-bit CPU control logic: Part 2
8-bit CPU control logic: Part 1
8-bit CPU control signal overview
8-bit computer build: Connecting the bus
Build an 8-bit decimal display for our 8-bit computer
Build an Arduino EEPROM programmer
Using an EEPROM to replace combinational logic
Designing a 7-segment hex decoder
Program counter build
Program counter design
Binary counter
Master-slave JK flip-flop
JK flip-flop racing
JK flip-flop
RAM module testing and troubleshooting
RAM module build - part 3
RAM module build - part 2
RAM module build - part 1
8-bit computer RAM intro
Testing the computer's ALU
Troubleshooting the ALU
Building the ALU
ALU Design
Twos complement: Negative numbers in binary
Testing our computer's registers - 8-bit register - Part 5
Building an 8-bit register - 8-bit register - Part 4
Designing and building a 1-bit register - 8 bit register - Part 3
Tri-state logic: Connecting multiple outputs together - 8 bit register - Part 2
Bus architecture and how register transfers work - 8 bit register - Part 1
Clock logic - 8-bit computer clock - part 4
Bistable 555 - 8-bit computer clock - part 3
Monostable 555 timer - 8-bit computer clock - part 2
Astable 555 timer - 8-bit computer clock - part 1
8-bit computer update
D flip-flop
D latch
SR latch
Making logic gates from transistors
How a transistor works
How semiconductors work
Learn how computers add numbers and build a 4 bit adder circuit
Comparing the buffer and inverter circuits | Digital electronics (10 of 10)
Inverting the signal with a transistor | Digital electronics (9 of 10)
Using a transistor to solve our problem | Digital electronics (8 of 10)
The transistor as a current controlled switch | Digital electronics (7 of 10)
Troubleshooting: Investigating why the LED is so dim (5 of 10)
How a transistor amplifies current | Digital electronics (6 of 10)
Connecting to a mystery signal | Digital electronics (4 of 10)
Powering our LED circuit | Digital electronics (3 of 10)
Limiting current through an LED | Digital electronics (2 of 10)
Experimenting with LEDs | Digital electronics (1 of 10)
Programming Fibonacci on a breadboard computer
Comparing C to machine language
Stepping through a program on the 8-bit breadboard computer
Programming my 8-bit breadboard computer
ARP: Mapping between IP and Ethernet | Networking tutorial (9 of 13)
TCP connection walkthrough | Networking tutorial (13 of 13)
Lower layers of the OSI model | Networking tutorial (7 of 13)
Clock synchronization and Manchester coding | Networking tutorial (3 of 13)
Looking at ARP and ping packets | Networking tutorial (10 of 13)
Hop-by-hop routing | Networking tutorial (11 of 13)
Frame formats | Networking tutorial (6 of 13)
Analyzing actual Ethernet encoding | Networking tutorial (4 of 13)
Intro to fiber optics and RF encoding | Networking tutorial (2 of 13)
TCP: Transmission control protocol | Networking tutorial (12 of 13)
Sending digital information over a wire | Networking tutorial (1 of 13)
The importance of framing | Networking tutorial (5 of 13)
The Internet Protocol | Networking tutorial (8 of 13)
KA 60 Minutes Sep 2013 rerun (10x speed)
[I have no personal or financial interest in Ben Eater's stuff.]
Mr. Eater is a talented teacher. His choice of topics and his execution of the demos are all excellent. He covers devices, logic chips, system design, debugging, programming in machine language and assembler, data comm, and networking.
I included below a list of links to his videos. Just read the titles. It might be difficult to find a university or a trade school that would give you a comparable education on those topics. If you want to design and/or program digital boards and controllers, all those skills are relevant.
But my real point here is that people wishing to get started with computing and programming should think more deeply than they do about what level is the appropriate place to start. If your ambition is to create web pages, or phone apps, certain starting points are most appropriate. If your ambition is to make micro controllers, or space-based real time systems, very different starting points are appropriate. Mr. Eater's videos slant toward the latter. You can even repeat his projects at home using breadboards.
If you're not sure about your final ambition, remember that it is easier to start with simple basics and continue with more abstraction and higher levels than it is to learn in the reverse sequence.
What's the harm in making the wrong choice? I think of voting machines used for elections that are Windows 7 based. That's a horrible choice of platform for that application. Why did they choose it? Almost surely because that was the only programming environment the developers knew. The end result might have been different if the very first step in their education was different.
I see examples here on PF of people choosing C++ for their first choice of language to gain familiarity with programming. IMO, modern C++ a very poor choice as a teaching language.
So my advice is to think before you leap. Ask advice of others more senior than you. Choose your goal before choosing your first step toward that goal.
What is error correction? Hamming codes in hardware
Hardware interrupts
Binary to decimal can’t be that hard, right?
How assembly language loops work
Why build an entire computer on breadboards?
Subroutine calls, now with RAM — 6502 part 7
RAM and bus timing — 6502 part 6
What is a stack and how does it work? — 6502 part 5
Connecting an LCD to our computer — 6502 part 4
Assembly language vs. machine code — 6502 part 3
How do CPUs read machine code? — 6502 part 2
“Hello, world” from scratch on a 6502 — Part 1
World's worst video card? The exciting conclusion
The world's worst video card?
Hardware build: CRC calculation
How do CRCs work?
Checksums and Hamming distance
Error detection: Parity checking
Reliable data transmission
Conditional jump instructions
CPU flags register
Making a computer Turing complete
Adding more machine language instructions to the CPU
Reprogramming CPU microcode with an Arduino
8-bit CPU reset circuit and power supply tips
8-bit CPU control logic: Part 3
8-bit CPU control logic: Part 2
8-bit CPU control logic: Part 1
8-bit CPU control signal overview
8-bit computer build: Connecting the bus
Build an 8-bit decimal display for our 8-bit computer
Build an Arduino EEPROM programmer
Using an EEPROM to replace combinational logic
Designing a 7-segment hex decoder
Program counter build
Program counter design
Binary counter
Master-slave JK flip-flop
JK flip-flop racing
JK flip-flop
RAM module testing and troubleshooting
RAM module build - part 3
RAM module build - part 2
RAM module build - part 1
8-bit computer RAM intro
Testing the computer's ALU
Troubleshooting the ALU
Building the ALU
ALU Design
Twos complement: Negative numbers in binary
Testing our computer's registers - 8-bit register - Part 5
Building an 8-bit register - 8-bit register - Part 4
Designing and building a 1-bit register - 8 bit register - Part 3
Tri-state logic: Connecting multiple outputs together - 8 bit register - Part 2
Bus architecture and how register transfers work - 8 bit register - Part 1
Clock logic - 8-bit computer clock - part 4
Bistable 555 - 8-bit computer clock - part 3
Monostable 555 timer - 8-bit computer clock - part 2
Astable 555 timer - 8-bit computer clock - part 1
8-bit computer update
D flip-flop
D latch
SR latch
Making logic gates from transistors
How a transistor works
How semiconductors work
Learn how computers add numbers and build a 4 bit adder circuit
Comparing the buffer and inverter circuits | Digital electronics (10 of 10)
Inverting the signal with a transistor | Digital electronics (9 of 10)
Using a transistor to solve our problem | Digital electronics (8 of 10)
The transistor as a current controlled switch | Digital electronics (7 of 10)
Troubleshooting: Investigating why the LED is so dim (5 of 10)
How a transistor amplifies current | Digital electronics (6 of 10)
Connecting to a mystery signal | Digital electronics (4 of 10)
Powering our LED circuit | Digital electronics (3 of 10)
Limiting current through an LED | Digital electronics (2 of 10)
Experimenting with LEDs | Digital electronics (1 of 10)
Programming Fibonacci on a breadboard computer
Comparing C to machine language
Stepping through a program on the 8-bit breadboard computer
Programming my 8-bit breadboard computer
ARP: Mapping between IP and Ethernet | Networking tutorial (9 of 13)
TCP connection walkthrough | Networking tutorial (13 of 13)
Lower layers of the OSI model | Networking tutorial (7 of 13)
Clock synchronization and Manchester coding | Networking tutorial (3 of 13)
Looking at ARP and ping packets | Networking tutorial (10 of 13)
Hop-by-hop routing | Networking tutorial (11 of 13)
Frame formats | Networking tutorial (6 of 13)
Analyzing actual Ethernet encoding | Networking tutorial (4 of 13)
Intro to fiber optics and RF encoding | Networking tutorial (2 of 13)
TCP: Transmission control protocol | Networking tutorial (12 of 13)
Sending digital information over a wire | Networking tutorial (1 of 13)
The importance of framing | Networking tutorial (5 of 13)
The Internet Protocol | Networking tutorial (8 of 13)
KA 60 Minutes Sep 2013 rerun (10x speed)
Last edited: