Getting Started With Computers and Programming

In summary, Mr. Eater's videos are excellent and cover a wide range of topics relevant to computer programming and design. He also provides helpful tips and advice for troubleshooting and making sure your project runs smoothly.
  • #1
anorlunda
Staff Emeritus
Insights Author
11,308
8,744
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)
 
Last edited:
  • Like
  • Love
  • Informative
Likes Renee, bikashdaga, feynman_fan and 7 others
Technology news on Phys.org
  • #2
Excellent post. We should make it a FAQ or a sticky or something and refer people to it when they ask where to start or what language to start with
 
Last edited:
  • Like
Likes bhobba
  • #3
I liked your post. I've heard of Ben Eater. I think you mentioned him earlier on PF.

Theres also the Computerphile guys that give some of the history behind the computer.

For learning, I usually suggest either Processing (Java) or Python as a starting position leaning more toward processing for beginners because of the immediate graphical feedback. Processing feels a lot like the old microcomputer BASIC where you see results immediately.

Processing is basically Java wrapped up in a simple IDE with a predefined program structure so you don’t need to jump into OO too quickly. There are also variants where you can use Jython (Python at the v2.7 level) instead of Java.

Python is best for those folks who want to do algorithms, data crunching, numerical simulations, or ML using the Jupyter notebooks session.
 
Last edited:
  • Like
Likes bhobba
  • #4
anorlunda said:
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.
This is not a critic, but I'm curious on what programming languages you prefer to gain familiarity with programming and why.
 
  • Like
Likes jedishrfu
  • #5
jack action said:
This is not a critic, but I'm curious on what programming languages you prefer to gain familiarity with programming and why.
Sure.

Python is much simpler than C++. You can learn almost all the concepts needed for C++ using Python. Actually, you can learn those same concepts with Visual Basic, and have a very easy way to write a custom GUI for each homework program.

But it also depends on who you're teaching and what their goals are. For Aunt Millies with no intention of ever programming at work, the old Turtle Graphics was a great way to introduce concepts with visual feedback.

For pre-teens and teens, where you want to inspire enthusiasm first and skills second, competitive programing such as Robot Wars was superb.

I think the main point is to begin with teaching languages and expect to learn a sequence of several languages before coming to the one to be used in professional work. A F35 top gun pilot, presumably learned to fly first on a training airplane. A Sopwith Camel is not a bad choice for the first flight, and probably superior to a jet plane for teaching energy management.

I'll try saying it another way. It depends on the teaching goal. If the goal is proficiency to be used after graduation, that leads to one choice. If the goal is concepts for the benefit of students who may or may not study further, the choice is different. A friend taught programming to lawyers who wanted to practice computer related law.
 
  • Like
Likes bhobba and jack action
  • #6
anorlunda said:
A Sopwith Camel is not a bad choice for the first flight
I think your analogy is slightly off here - Camels were suicidal for inexperienced pilots. Wikipedia quotes a Lt Col Strange: "In spite of the care we took, Camels continually spun down out of control when flew by pupils on their first solos", and goes on to note that a two-seat trainer version "went some way to alleviating the previously unacceptable casualties incurred during the critical type-specific solo training stage".
 
  • Like
Likes hmmm27
  • #7
Ibix said:
I think your analogy is slightly off here - Camels were suicidal for inexperienced pilots.
OK, perhaps a Piper Cub would have been a better analogy.
 
  • Like
Likes Ibix
  • #8
anorlunda said:
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.

As far as programming languages are concerned, the way to avoid this is to make a point of learning several different programming languages and, particularly, languages that promote different ways of thinking about programming (e.g., learning the trinity of C++, Java, and C# doesn't count). A saying I've heard is that the hardest programming language to learn is your second one.

I don't think you can really go terribly wrong learning most of the widely-used languages as a first one (C++ is one of the exceptions due to the fractal complexity of that language), as long as it let's you do something you find interesting. Most popular programming languages have at least one thing that they are reasonably well suited for (otherwise they wouldn't be popular), while your education and perspective on programming will also be incomplete after you learn a first language, no matter what that language is.

That said, some programming languages (or perhaps the cultures surrounding them) seem better suited for learning programming concepts than others, even if the languages have similar features on paper. One poster on this forum, for instance, who was learning Python and Scheme concurrently several years ago said this about the experience:
It's interesting, as I learn both python and scheme, I find that learning something new in scheme provides me with a new way of thinking about python, although not as much in the reversed direction.
 
  • Like
Likes anorlunda
  • #9
phinds said:
Excellent post. We should make it a FAQ or a sticky or something and refer people to it when they ask where to start or what language to start with
@berkeman
I agree. Would save me a bookmark. :oldwink:
 
  • Like
Likes jedishrfu
  • #10
phinds said:
We should make it a FAQ or a sticky or something
It is so...
 
  • Like
Likes bhobba, berkeman, phinds and 1 other person
  • #11
I have my reservations abort learning programming frem videos but perhaps that's just one of my idiosyncrasies (I use that word correctly? :) ). That said, the first language I learned was C and that really paid off. C may have a rather steep learning curve but it made learning other languages much easier.

Just my 2 cents.
 
  • Like
Likes anorlunda
  • #12
sbrothy said:
I have my reservations abort learning programming frem videos but perhaps that's just one of my idiosyncrasies
I agree. But we must recognize that people's preferences in things like shopping and learning change. The Internet is awash with hard to verify claims that 40%+ of adults never read a book after high school. (Probably Amazon is the only one who knows for sure.)

For 12 years, I wrote a text blog nearly every day; 2700+ articles. I had about 600 followers. Now I note that vlogs with similar content to mine on YouTube attract 100K up to 800K subscribers.

PF is a self-selecting filter. Posts on PF are 99% text. PF members like it that way. Those who prefer the YouTube way are less likely to visit PF.
 
  • #13
A beginner should always distinguish between learning for a general career versus learning for a specific interest. IMO, even if the goal is general interest, this list looks overwhelming.
 
  • Like
Likes bhobba
  • #14
Coming from hardware design, assembly programming was the natural way to start. An 8008 training kit and a teletype was what we had.

This was not really my first encounter with programming, since I had a basic course in ALGOL early in my University days and some hours on assembly programming on a really primitive computer.

Assembly followed me through the next 15 years accompanied by some writing in Pascal (for all practical purposes a dialect of ALGOL that could be compiled and executed).

The a project where the customer demanded that the software should be written in the "C" language. After reading through the K&R book and writing some small bits in that language, I decided that this was the language for me. The power of assembly coupled with the clarity of Pascal - if you did not try to go for Intentionally Obfuscated Code.

C++ and Java did not impress me. If you wanted to write readable code, do it in Pascal. If you want to write device drivers and operating system code, stay with C.
 
Back
Top