Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

DrMotownMac

Contributor
Original poster
Jul 11, 2008
385
216
Michigan
As I've been interested in computers and how they work for quite a while, I recently purchased a book called "Code: The Hidden Language of Computer Hardware and Software (Developer Best Practices)" by Charles Petzold and I'm reading it for the second time now. WOW. I love how the author starts with Morse Code and Braille, and works in to the binary number system, electrical circuits, relays, transistors, etc., and works through the real nuts and bolts of how computers actually WORK. How electrical circuits and voltages being "on" or "off" can be put into memory, added, subtracted, and ultimately instructed to do anything we tell them to do. It's really amazing when you stop and think about what's really behind the technology and how real people even came up with this concept from scratch!

Anyway, I now have an 8-year-old daughter who's very good at math and extremely shy, and I just have this gut feeling that she would be an amazing programmer or engineer, particularly if she starts it early. And the last book I read was "iWOZ", the autobiography of Steve Wozniak. As I'm sure many of you have either read it or already know the story, I was particularly amazed and impressed with how he was such a child prodigy in electronics, largely because of his father always tinkering with circuits and oscilloscopes at home and explaining it all to the young Woz starting when he was about 5. But, it seems to me, the way he learned about logic circuits, binary digits, and basic electronics really influenced his ability to design both hardware and software from the vantage point of someone who really understood how it all worked. In fact, he even spoke about how he had designed a Pong game, and Breakout, and programmed both games, completely in the HARDWARE!! The programming for those early video games was done strictly using logic circuits. Once he built the Apple II, he had gone back and wrote a BASIC version of Breakout in one night, or something like that, and marveled at how much easier it was to write the game in SOFTWARE rather than HARDWARE.

I think there are very few people out there who could actually do both of those things, and it seems that if you can, then you will have such a clear understanding of how it all really works. From that point, learning Python, C, Objective C, Swift, etc., should all make much more sense, right? Maybe it's all a waste of time, but I'd really love to try to teach my daughter about computers the way Woz did, rather than starting with something like Scratch, where you learn a very high level graphical programming language where all the commands are just pictures and arrows and such, and you arrange them in order on a screen as a series of instructions. You can learn the LOGIC of programming and the pattern of analytical thinking that way, but you don't really LEARN about how computers really work.

Does anyone know if there's a website, book, online course or something which teaches what I'm looking for? "Learn to Program the Way Woz Did!" That's what I want...teach it to me (and my daughter) starting at the most basic level, up through the electronics and Boolean logic, then into some rudimentary Assembler language, just to gain a better understanding of how it all comes together. Actually, even better still, would be an app on iOS or Mac which runs through a simulation or a game where the player IS Woz, starting as a child, and then you have to complete ever-increasingly challenging tasks. Start with building some simple circuits, a science fair project using logic gates to show planetary orbits around the sun, going up to creating circuit designs for pre-existing mainframe computers, building blue boxes, designing the Apple I, making a Breakout game, and finally designing the Apple II. I know...he learned it over a lifetime, not the few months even a complex game would take. But then simplify it...cut out some of the redundancies and keep it focussed on the key learning points. Heck, why doesn't Woz himself make this game?!?!? It's right up his alley, isn't it? Computes, education, children....hmmmm....
 
As an Amazon Associate we earn from qualifying purchases.
Don't know but you sure seem like a great father! It's important to understand this from the fundamentals up because then maybe you can understand why researchers recently made a computer from water droplets. It's the fundamentals of this Age.
 
  • Like
Reactions: DrMotownMac
I learned C first, then Obj-C, then JavaScript, then C++, then Java, then assembly and how to do everything in hardware, then Haskel, then Python, then Lisp/Scheme/Racket, then Boo, and most recently, Swift.

I would teach Python or something else high level first. It's so much more practicle. The world needs millions, if not billions, of high level applications written. We need so many that I think everyone should learn at least the basics of programming.

Learning lower level, closer to the metal, languages, seems like a more specialized need. We don't need anywhere near as many applications written with those. Certainly, learn it if you're interested - I was - but you probably won't ever need to know it. You don't need to teach your daughter it (unless she wants to know) - she can put off learning that until college.

I don't know Scratch, but my understanding is it's too limited to be useful beyond teaching the basics of programming. If just skip over it and go straight to Python. It's simple enough to be a learning tool and complete enough to be good enough for most applications.
 
  • Like
Reactions: DrMotownMac
I learned C first, then Obj-C, then JavaScript, then C++, then Java, then assembly and how to do everything in hardware, then Haskel, then Python, then Lisp/Scheme/Racket, then Boo, and most recently, Swift.

I would teach Python or something else high level first. It's so much more practicle. The world needs millions, if not billions, of high level applications written. We need so many that I think everyone should learn at least the basics of programming.

Learning lower level, closer to the metal, languages, seems like a more specialized need. We don't need anywhere near as many applications written with those. Certainly, learn it if you're interested - I was - but you probably won't ever need to know it. You don't need to teach your daughter it (unless she wants to know) - she can put off learning that until college.

I don't know Scratch, but my understanding is it's too limited to be useful beyond teaching the basics of programming. If just skip over it and go straight to Python. It's simple enough to be a learning tool and complete enough to be good enough for most applications.

Thank you, ArtOfWarfare! That was a great reply...it's always interesting to me how professionals like yourself got started and on what your perspective is, looking back at it, looking forward, and knowing what you know now. I think it's more of an academic interest of mine than anything else. After all, I'm 48 years old and I practice medicine for a living. But, a long time ago, in this galaxy (sorry, couldn't resist), I used to be an aerospace and a biomedical engineer. I have undergraduate and graduate degrees in those fields FIRST, before I decided to go to medical school. I only learned some basic programming (yes, BASIC, and also Pascal, FORTRAN, MatLab, Mathematica and a little HTML in the early 90s when it was simple). But I haven't really touched it since then. I've dabbled in it here and there, and obviously I still read some stuff and follow forums like this, but I think I've become too old, too busy, too concerned with supporting my family, etc., to really put the time in to doing what I think I would love doing. BUT, now that I have a child, one who's better at math than I once was, I feel like I can start fresh and learn it WITH her.

I think I'll take your advice and start with Python. Maybe we'll get a Raspberry Pi and an Arduino kit and learn some basic electronic stuff with that. I don't know. But I appreciate any and all input from folks like yourself. I'd love to have an hour or two with the Wizard of Woz and actually talk to him about this. In many ways, he seems like a much smarter and more insightful version of me, and he's certainly the kind of guy I would have wanted to hang out with back in the day, but he's 17 years older than me, I was only 9 when Apple was founded, and my parents didn't know jack about computers, electronics or anything like that. In fact, I didn't even KNOW anyone who was an engineer (and yes, I grew up in the Detroit area -- go figure), so my childhood was very different from his. My only exposure to computers was in school and I LOVED them...I just didn't understand how important that was at the time. If I did, I would have followed a very different educational and career path. Oh well.....
 
Don't know but you sure seem like a great father! It's important to understand this from the fundamentals up because then maybe you can understand why researchers recently made a computer from water droplets. It's the fundamentals of this Age.

Thank you, Dan. The funny thing is, I would actually PREFER to spend an entire day building a LEGO project with my daughter, for example, than go out golfing with my buddies. Maybe it's because I waited until I was 40 to have a child. Maybe it's because she's my only child. Or maybe it's just because I see so much of myself in her. Sometimes, when I watch her playing or doing things with her friends, I feel like I'm looking at a female version of myself 40 years ago. She looks a lot like my wife (thank God for that), but her personality seems to be about 95% me. I even call her Mini Me sometimes!!! Of course, she didn't love that once I showed her this video. May not have been age-appropriate, but she did get a kick out of it!!
 
  • Like
Reactions: DanCorleone
This is certainly a YMMV sort of question, but I agree with the suggestion to start with python and work from there. I'm less certain about comments that learning what goes on at the bits-and-hardware level is of little use. I started with FORTRAN back in the days of Big Iron (1960s), and the thing that has most helped me as a programmer was a course I took in CDC assembly language programming and system operations. I have written very little assembly-level code in my nearly 50 years of programming, but knowing how the hardware implements your software can help with design, development, and debugging. I've lost track of the number of languages I've learned and used over the years, but that basic understanding has really helped along the way.

There was a great board game I saw back in the 1980s (I think it was) that led the players around inside a microprocessor-based system. It was a bit geeky (as one might expect), but it taught a lot about what's going on inside the computer that you wouldn't otherwise get by just learning a high-level programming language. Don't know where you'd find anything like this today.

Anyway, as in learning anything you need balance. And with a young person you also need to concern yourself with keeping interest up (which was the basis for old learning languages like LOGO). Good luck to you and your daughter.
 
  • Like
Reactions: DrMotownMac
Having a general knowledge of computer's internals and functional principles is always a good thing, even for a developer who plans to code on a high level language. However, the evolution of IT science (or any science for that matter) after some years requires that the newer generations will use some shortcuts regarding the basic/older stuff that previous generations had to get through in more details. We cannot expect that a new developer, starting now his/her coding, will have to go through all the low level details that older IT engineers did, since they had to. IT knowledge is gained on a shifting fashion as years get by. Newer people do not start from the absolute zero, but they skip some obsolete parts in order to catch up with the latest ones, cause nobody can assimilate a superset of all the past and current knowledge.
 
  • Like
Reactions: DrMotownMac
A thing that is important to keep in mind here is that this class of computers from the Apple II era was much simpler than a current PC, and the expectations on what they should be able to do much lower. There was not really an OS to talk about at all, and the entire machine was directly accessible to the users with a memory maped region of the address space.

I'm not sure if you are familiar with the Raspberry PI project, but the goal of the project is to be used as an educational platform for teaching kids about computers and be more similar to the computers of the past.

https://www.raspberrypi.org/
 
...I have written very little assembly-level code in my nearly 50 years of programming, but knowing how the hardware implements your software can help with design, development, and debugging. I've lost track of the number of languages I've learned and used over the years, but that basic understanding has really helped along the way.

There was a great board game I saw back in the 1980s (I think it was) that led the players around inside a microprocessor-based system. It was a bit geeky (as one might expect), but it taught a lot about what's going on inside the computer that you wouldn't otherwise get by just learning a high-level programming language. Don't know where you'd find anything like this today.

Anyway, as in learning anything you need balance. And with a young person you also need to concern yourself with keeping interest up (which was the basis for old learning languages like LOGO). Good luck to you and your daughter.

Thanks, jasnw. Obviously, you have much more programming knowledge and experience than I'll ever have. But your comments are very insightful and helpful. I had a sense that the knowledge of assembly-level code and how things work at the hardware level would enhance the overall understanding, but I just couldn't put my finger on how or why. Your comments certainly support that. Thank you.

Having a general knowledge of computer's internals and functional principles is always a good thing, even for a developer who plans to code on a high level language. However, the evolution of IT science (or any science for that matter) after some years requires that the newer generations will use some shortcuts regarding the basic/older stuff that previous generations had to get through in more details. We cannot expect that a new developer, starting now his/her coding, will have to go through all the low level details that older IT engineers did, since they had to. IT knowledge is gained on a shifting fashion as years get by. Newer people do not start from the absolute zero, but they skip some obsolete parts in order to catch up with the latest ones, cause nobody can assimilate a superset of all the past and current knowledge.

Good points, antonis. I think it's more of an academic interest thing for me. I realize, of course, that we can learn programming starting with Python and then moving to Objective C, Java, C++ and Swift. But, I'd love to have just a little better understanding of those fundamentals..."under the hood", so to speak. So, when people talk about addresses in memory and registers and such, I could understand where it all comes from. Not to mention the appreciation it gives me (and my daughter) for what Woz and Jobs went through back in the day to get started. It's really quite remarkable when you think about it. Particularly in light of the fact that ONE OF THEM was on some kind of mind altering drug (read: Jobs on LSD) during most of that time. But to be clear, I do not want to have to go through all the low level details, as you said. I just want to learn the Cliffs Notes version of those details, if that makes any sense.

A thing that is important to keep in mind here is that this class of computers from the Apple II era was much simpler than a current PC, and the expectations on what they should be able to do much lower. There was not really an OS to talk about at all, and the entire machine was directly accessible to the users with a memory maped region of the address space.

I'm not sure if you are familiar with the Raspberry PI project, but the goal of the project is to be used as an educational platform for teaching kids about computers and be more similar to the computers of the past.

https://www.raspberrypi.org/

Yes, thanks, subsonix. But, I'm such a dope, when I go to that Raspberry Pi site (and the Adafruit site, and the Makerspace site, etc...), I just get overwhelmed by all of the choices. There are now multiple versions of Raspberry Pi, you can buy it "ala mode" (whatever that is) or not, you can get shields, accessories, books (multiple), videos. And then there's the question of SD cards, keyboards and mice, TV vs. old computer monitor, etc.

And when I look at it, I see a pre-built computer on a a credit-card-sized device, with a bunch of ports for inputs and outputs for power, USB, networking, HDMI, etc. But, do you really learn about the bits and logic gates when using the Raspberry Pi? THEN, at the same time, I got sucked in to looking at the "Make: Electronics" books and kits from MakerSpace. THAT is kind of the 21st century HeathKit I'm looking for (I think), in the sense that it should teach me and my daughter the fundamentals of electronics, soldering, multimeters, etc.

Ugh...so much stuff....and the worst part is that I am SO intrigued by all of it and my daughter is so NOT (yet). I really want to find the right thing to sort of spark that interest without forcing it on her in any way. Like, I want to set up shop (so to speak) in my basement, start playing with this stuff, and let her organically discover it and ask me questions about what I'm doing, rather than me having to say, "Come on, sweetie! Let's go downstairs and invent some stuff!"

The more I think about it, the more I realize that I missed my calling. I have to go to my office to see patients tomorrow. But I'd give anything to spend a day working on electronics, programming, etc. It's probably because I don't HAVE TO DO IT, and like everything else in life, the grass is always greener on the other side of the fence. BUT, it sure would be nice to have a chance to try it out for a few months.
 
IMO, the stuff in the book "Code" is a far better way to learn than most any high-level language tutorial. You learn a lot of what your Mac/iPhone is really doing with each line of code that with any fancy OO or functional language.

If you really want to learn the way Woz did, but with modern day products, start with an Arduino, plus a big kit of parts and a wireless breadboard (lots of places sell these, try AdaFruit). Then get an FPGA edu kit for real hardcore logic knowledge. There are also at least of half-dozen, non-high-level, BASIC language interpreter tools for the Mac and iOS devices. But plain C is fairly close to a portable assembly language. Plus some IDEs and debuggers (Xcode) will let you see and step through the actual assembly code (turn all optimization off for sanity).
 
  • Like
Reactions: DrMotownMac
Yes, thanks, subsonix. But, I'm such a dope, when I go to that Raspberry Pi site (and the Adafruit site, and the Makerspace site, etc...), I just get overwhelmed by all of the choices. There are now multiple versions of Raspberry Pi, you can buy it "ala mode" (whatever that is) or not, you can get shields, accessories, books (multiple), videos. And then there's the question of SD cards, keyboards and mice, TV vs. old computer monitor, etc.

And when I look at it, I see a pre-built computer on a a credit-card-sized device, with a bunch of ports for inputs and outputs for power, USB, networking, HDMI, etc. But, do you really learn about the bits and logic gates when using the Raspberry Pi? THEN, at the same time, I got sucked in to looking at the "Make: Electronics" books and kits from MakerSpace. THAT is kind of the 21st century HeathKit I'm looking for (I think), in the sense that it should teach me and my daughter the fundamentals of electronics, soldering, multimeters, etc.

No, it wont really teach you about logic gates, but the platform is made to be open and simple enough that it's possible or easier to peel off the layers of abstractions than in a regular computer. But you can get a digital logic simulator in software to simulate logic circuits, or more hands on, get a breadboard some npn transistors a few leds and switches and build all the fundamental gates. From there, Texas instruments has integrated logic chips (7400 series) with gates, shift registers, multiplexers and so on which can be combined to provide a higher level of abstraction from where you started. Combine a few gates and create a flip-flop and you have a 1 bit memory and so on.

Here's an eight page interactive presentation of a simple CPU that starts with a single gate:

http://www.simplecpu.com/Binary.html

From there, it's quite easy to see that it's possible to create software that maps textual instructions to machine instructions, and now you have an assembler. Here's a 6502 simulator that maps a small screen buffer to memory. It starts with a small example and ends with a snake game:

http://skilldrick.github.io/easy6502/
 
  • Like
Reactions: DrMotownMac
Anyway, I now have an 8-year-old daughter who's very good at math and extremely shy, and I just have this gut feeling that she would be an amazing programmer or engineer, particularly if she starts it early.

Doc,

Check this site out. Dr. Racket is great for the budding programmer and even has it's own IDE. Racket is a great teaching language--based on Lisp--and in my opinion is far better than Python as and introduction to programming.


http://racket-lang.org/
 
  • Like
Reactions: DrMotownMac
Thanks, jasnw. Obviously, you have much more programming knowledge and experience than I'll ever have. But your comments are very insightful and helpful. I had a sense that the knowledge of assembly-level code and how things work at the hardware level would enhance the overall understanding, but I just couldn't put my finger on how or why. Your comments certainly support that. Thank you.



Good points, antonis. I think it's more of an academic interest thing for me. I realize, of course, that we can learn programming starting with Python and then moving to Objective C, Java, C++ and Swift. But, I'd love to have just a little better understanding of those fundamentals..."under the hood", so to speak. So, when people talk about addresses in memory and registers and such, I could understand where it all comes from. Not to mention the appreciation it gives me (and my daughter) for what Woz and Jobs went through back in the day to get started. It's really quite remarkable when you think about it. Particularly in light of the fact that ONE OF THEM was on some kind of mind altering drug (read: Jobs on LSD) during most of that time. But to be clear, I do not want to have to go through all the low level details, as you said. I just want to learn the Cliffs Notes version of those details, if that makes any sense.



Yes, thanks, subsonix. But, I'm such a dope, when I go to that Raspberry Pi site (and the Adafruit site, and the Makerspace site, etc...), I just get overwhelmed by all of the choices. There are now multiple versions of Raspberry Pi, you can buy it "ala mode" (whatever that is) or not, you can get shields, accessories, books (multiple), videos. And then there's the question of SD cards, keyboards and mice, TV vs. old computer monitor, etc.

And when I look at it, I see a pre-built computer on a a credit-card-sized device, with a bunch of ports for inputs and outputs for power, USB, networking, HDMI, etc. But, do you really learn about the bits and logic gates when using the Raspberry Pi? THEN, at the same time, I got sucked in to looking at the "Make: Electronics" books and kits from MakerSpace. THAT is kind of the 21st century HeathKit I'm looking for (I think), in the sense that it should teach me and my daughter the fundamentals of electronics, soldering, multimeters, etc.

Ugh...so much stuff....and the worst part is that I am SO intrigued by all of it and my daughter is so NOT (yet). I really want to find the right thing to sort of spark that interest without forcing it on her in any way. Like, I want to set up shop (so to speak) in my basement, start playing with this stuff, and let her organically discover it and ask me questions about what I'm doing, rather than me having to say, "Come on, sweetie! Let's go downstairs and invent some stuff!"

The more I think about it, the more I realize that I missed my calling. I have to go to my office to see patients tomorrow. But I'd give anything to spend a day working on electronics, programming, etc. It's probably because I don't HAVE TO DO IT, and like everything else in life, the grass is always greener on the other side of the fence. BUT, it sure would be nice to have a chance to try it out for a few months.

Another vote for Arduino and RPi. I think they're the best way to get started, because they allow kids to see the physical results of programming (from turning leds on to moving motors, and interfacing with the house, for instance) and a board can be re-used for an infinity of projects, and even in the event of something breaking, it's cheap. Most projects don't need soldering, and they are almost always low voltage, so very safe. There's a plethora of internet documentation and tutorials, so the possibility of reaching a dead end and getting frustratingly stuck on a project is slim.

Don't push her too much, however, it has to be fun for her too, not only for you! Spend time with her doing easy projects with an Arduino, then move to a RPi. After a few (successful!) Arduino/RPi projects, present to her the possibilities of pure software programming. The key is to induce curiosity, to the point of making her want to learn programming.

Arduino starting kits are about $60, a small multimeter is $15, the software is free, and the possibilities are endless. If you have any questions, and don't know what to buy, where to start, I'll be glad to help, keeping in mind it's for an 8yo (and her dad!). (I prefer PM)
If you think about it, Raspberry Pis are similar (in terms of tinkering, not in processing power!) to computers in the 70s.

As a matter of fact, I just received a set of reed switches to make my own RPi home alarm system. :)
 
  • Like
Reactions: DrMotownMac
IMO, the stuff in the book "Code" is a far better way to learn than most any high-level language tutorial. You learn a lot of what your Mac/iPhone is really doing with each line of code that with any fancy OO or functional language.

If you really want to learn the way Woz did, but with modern day products, start with an Arduino, plus a big kit of parts and a wireless breadboard (lots of places sell these, try AdaFruit). Then get an FPGA edu kit for real hardcore logic knowledge. There are also at least of half-dozen, non-high-level, BASIC language interpreter tools for the Mac and iOS devices. But plain C is fairly close to a portable assembly language. Plus some IDEs and debuggers (Xcode) will let you see and step through the actual assembly code (turn all optimization off for sanity).

I agree with what you said about "Code." It's amazing how well he took such a complex topic (for the neophyte like myself) and explains it in truly simple terms with excellent analogies, going back to kids trying to communicate with each other using flashing lights between their houses. Each step makes complete sense to me, and then, he gradually works up to how computers actually work!! It's amazing that it makes sense! I'm also reading a book now called "But How Do it Know?" This one is also excellent, and a bit more concise as well, cutting right down to the stuff you need (or want) to know. But it's written for someone with a 6th grade education...no knowledge of mathematics, physics or electronics is required.
 
Here's an eight page interactive presentation of a simple CPU that starts with a single gate:

http://www.simplecpu.com/Binary.html

From there, it's quite easy to see that it's possible to create software that maps textual instructions to machine instructions, and now you have an assembler. Here's a 6502 simulator that maps a small screen buffer to memory. It starts with a small example and ends with a snake game:

http://skilldrick.github.io/easy6502/

I will definitely check those sites out soon! Thank you so much.
 
Doc,

Check this site out. Dr. Racket is great for the budding programmer and even has it's own IDE. Racket is a great teaching language--based on Lisp--and in my opinion is far better than Python as and introduction to programming.


http://racket-lang.org/

Wow, that just looks kind of scary and unfamiliar to me! I may be too dumb to manage Dr. Racket. Remember, I'm no longer a smart engineer or computer programmer...I'm just a dumb internist. Physicians are really good at reading a LOT of material, memorizing and comprehending it, and then regurgitating it for 8 hour multiple choice exams. If you've really remembered everything really well, you can diagnose just about anything. The "problem solving" part of medicine is simple...it's the volume of material that's challenging.

But math, physics, engineering and computer science...well, those classes give OPEN BOOK examinations, because the test is not on whether or not you remember or even understand the material; it's about whether you can use pure logic and reasoning to solve problems given the information you have in front of you. Most doctors, in spite of what many of them will tell you, are simply too dumb to compete with you folks. I can say that since I've lived in both worlds. Yours requires more IQ points...period.
 
Another vote for Arduino and RPi. I think they're the best way to get started, because they allow kids to see the physical results of programming (from turning leds on to moving motors, and interfacing with the house, for instance) and a board can be re-used for an infinity of projects, and even in the event of something breaking, it's cheap. Most projects don't need soldering, and they are almost always low voltage, so very safe. There's a plethora of internet documentation and tutorials, so the possibility of reaching a dead end and getting frustratingly stuck on a project is slim.

Don't push her too much, however, it has to be fun for her too, not only for you! Spend time with her doing easy projects with an Arduino, then move to a RPi. After a few (successful!) Arduino/RPi projects, present to her the possibilities of pure software programming. The key is to induce curiosity, to the point of making her want to learn programming.

Arduino starting kits are about $60, a small multimeter is $15, the software is free, and the possibilities are endless. If you have any questions, and don't know what to buy, where to start, I'll be glad to help, keeping in mind it's for an 8yo (and her dad!). (I prefer PM)
If you think about it, Raspberry Pis are similar (in terms of tinkering, not in processing power!) to computers in the 70s.

As a matter of fact, I just received a set of reed switches to make my own RPi home alarm system. :)

Okay, you may be the person I need to talk to! I'd love to get an arduino kit (and the appropriate accessories), but like I said before, I don't know where to start. Realizing that I don't have anything at this point, and my 8-year-old girl and I are starting from a "clean slate," please send me some links, perhaps to the Adafruit or Makerspace sites, for some appropriate products to start me out. Also, what do you think of the "Make: Electronics" books and kits? Is that worth the time and money? I can't really tell....
 
Regarding the book, I think for now, you'll find the info needed to start on Youtube and the Arduino website in the Learning section, and if you've got doubts, check the forum.
If, later on, you want to have a more comprehensive approach, buy the books, but considering Arduino is a first step, a more practical approach might be better.

You'll need a basic electronics kit http://www.adafruit.com/products/136. It'll last many years, so don't skimp on this. Also you'll need some red-black and other similar cables at your local radioshack if you want to create permanent projects. You don't need that at first, but you will, eventually.

A basic Arduino kit like http://www.adafruit.com/products/68 will get you the essentials, and then each project will then need specific (usually very cheap and reusable) components. For instance if you want to make an automatic cat door, you'll need a servo motor to move the door ($15) and a sensor ($4-5) to detect the cat ($0-400 depending on the breed). If you want to make a water leak detector instead, get a water sensor ($2) and a buzzer (cheap).

Keep in mind pretty much everything is reusable, I'm still using my first Arduinos.
Some models of Arduino are specific for different applications, like the Mega ones when you need lots of inputs/outputs, more memory... The micro/nano versions are better for small embedded projects (think for instance a dog GPS logger). Others are flexible to integrate within clothes.

The UNO version is the one you want to learn and tinker. Most shields are designed for it, so usually it's the one used for prototyping, and when everything has been tested, people will get a dedicated smaller model of Arduino. Shields are ready-to-use add-ons you just plug in, and they can do different things. Interfacing with motors is easier with the motor shield, connecting to the internet will need a wifi or an ethernet shield, etc...


If you want to save in shipping costs, and you're not too concerned by the money, when you order your kit, get a bunch of different sensors: light, temperature, compass, humidity, , altitude, water, movement, distance (to make an reverse alarm on your car). Technically, with an Arduino, you can do pretty much anything you can think of. It wouldn't make sense, but technically you could even make an alarm that sounds every time your room temperature climbs 1 degree. That's the cool thing, you could for instance help your kid make an LED turn on triggered by sound, and the challenge her to make it triggered by something else. More advanced projects include self balancing robots, stuff like that.

A few projects worth watching:
Funny project if you have loud neighbours*:
https://blog.arduino.cc/2015/06/25/art-drops/
http://www.instructables.com/id/20-Unbelievable-Arduino-Projects/

* Here you can find a pack of 2 vu-meter like the one he uses for $3 : http://www.adafruit.com/products/1719
 
Last edited:
Anyway, I now have an 8-year-old daughter who's very good at math and extremely shy, and I just have this gut feeling that she would be an amazing programmer or engineer, particularly if she starts it early.
Great stuff listed here. I've been working with local schools in starting a software development club; even looking into starting a non-profit. Here's what the club will start out teaching: http://www.youthdigital.com/minecraft-mod-design.html

I believe this program has the best of all worlds. Something students already know about and moding it to make it there's. Then they can show and share with friends! Look! I made a dinosaur or a sword of lightning!

I certainly would recommend you encourage her as much as possible, I wrote my first real TI-BASIC program on a TI-994A, cassette drive when I was 10 years old. Still coding over 30 years later.
 
Don't worry too much about how Woz did it -- he was in a different era, when things were... different, and new. Chips were something that fascinated him, so he was incredibly self-motivated. However, the suggestion of an Arduino and maybe a Raspberry Pi (though R-Pi is just a general purpose computer, with some nice I/O and your Mac is probably better for general programming) is a very good one.

What you do need are some interesting little (and hopefully achievable, or almost achievable) projects to build with your daughter. My girls (5 and 7) and I used an Arduino and some NeoPixels (Arduino controllable lights) to create a night light for their bedroom -- they helped connect it up on a breadboard, they programmed the colors/brightness (with help from me), and then we built it in to an opaque glass jar and now it sits in their bedroom. The next step for us is to add a Bluetooth module, so we can control it from an iPhone, but I'm an iPhone programmer by trade (plus I also do web, database, business process programming), so it's a bit different for us.

Other cool stuff that you can get for Arduino are things like light sensors, temperature sensors, display boards (the 16x2 character display is best to get started -- you can maybe make a clock that also shows temperature etc), a 'music' shield (make an MP3 player!), a cellular shield (make a basic phone!) and so on. There are some really good community sites out there and some really good projects to work on. A robot kit would also be a good learning experience, but the Lego robotics kit might be better.

If you want to learn programming on the computer, I'd suggest starting with web based programming, because it's the current 'thing' (HTML first, then sprinkle in some Javascript to make it more dynamic -- for example, you could try and build a count-down timer to certain dates, like Birthdays and Holidays). I'm not sure what to suggest about saving data to a back end when you get to that stage -- maybe there are some sites out there that do this nicely now, parse.io springs to mind, or Ruby on Rails -- but at that point it starts getting really complicated really fast and you might want an experienced mentor to help you get over the difficult hump that all beginners face.

Just for info, I learned with Basic on the Amiga back in the early 90s because it was something that fascinated me and If felt compelled to do it. I started out by copying the interfaces of certain types of apps, and trying to make them work as much as possible. Most were failures, but I learned a lot and kept on building new stuff. I also spent a lot of time trying to make really basic games (my favourite project was a top down driving game, where you controlled a rudimentary car around a badly drawn track using a joystick). Those laid the foundations of my future career, but with no formal training it took me years to get any good, and it was mostly just a labour of love and bloody-minded determination for me. There are probably easier routes to the same place... :)

Anyway, good luck! Let us know what you get up to...
 
  • Like
Reactions: DrMotownMac
Don't worry too much about how Woz did it -- he was in a different era, when things were... different, and new. Chips were something that fascinated him, so he was incredibly self-motivated. However, the suggestion of an Arduino and maybe a Raspberry Pi (though R-Pi is just a general purpose computer, with some nice I/O and your Mac is probably better for general programming) is a very good one.

What you do need are some interesting little (and hopefully achievable, or almost achievable) projects to build with your daughter. My girls (5 and 7) and I used an Arduino and some NeoPixels (Arduino controllable lights) to create a night light for their bedroom -- they helped connect it up on a breadboard, they programmed the colors/brightness (with help from me), and then we built it in to an opaque glass jar and now it sits in their bedroom. The next step for us is to add a Bluetooth module, so we can control it from an iPhone, but I'm an iPhone programmer by trade (plus I also do web, database, business process programming), so it's a bit different for us.

Other cool stuff that you can get for Arduino are things like light sensors, temperature sensors, display boards (the 16x2 character display is best to get started -- you can maybe make a clock that also shows temperature etc), a 'music' shield (make an MP3 player!), a cellular shield (make a basic phone!) and so on. There are some really good community sites out there and some really good projects to work on. A robot kit would also be a good learning experience, but the Lego robotics kit might be better.

If you want to learn programming on the computer, I'd suggest starting with web based programming, because it's the current 'thing' (HTML first, then sprinkle in some Javascript to make it more dynamic -- for example, you could try and build a count-down timer to certain dates, like Birthdays and Holidays). I'm not sure what to suggest about saving data to a back end when you get to that stage -- maybe there are some sites out there that do this nicely now, parse.io springs to mind, or Ruby on Rails -- but at that point it starts getting really complicated really fast and you might want an experienced mentor to help you get over the difficult hump that all beginners face.

Just for info, I learned with Basic on the Amiga back in the early 90s because it was something that fascinated me and If felt compelled to do it. I started out by copying the interfaces of certain types of apps, and trying to make them work as much as possible. Most were failures, but I learned a lot and kept on building new stuff. I also spent a lot of time trying to make really basic games (my favourite project was a top down driving game, where you controlled a rudimentary car around a badly drawn track using a joystick). Those laid the foundations of my future career, but with no formal training it took me years to get any good, and it was mostly just a labour of love and bloody-minded determination for me. There are probably easier routes to the same place... :)

Anyway, good luck! Let us know what you get up to...


Wow, great info! Thank you so much, Adrian. Yes, my biggest obstacles are really two simple things: (1) lack of time for me (since I have a "day job" which is completely unrelated), and (2) my daughter has relative "indifference" about all of this. But I do like your ideas, and others above, about using Arduino for some fun home projects. I think the way to go is for me to set up shop in my basement, start playing with some electronics and Arduino kits on my own, talk with lots of enthusiasm while eating supper with the wife and daughter about all of the cool things I'm making downstairs, and then let her naturally find her way to the chair next to me downstairs after we eat.

I think I was so sucked in to Wozniak's book (iWoz), that I forgot that it took place about 40 years ago! That being said, I still believe there's something to learning about Boolean logic and binary code in terms of understanding how the machines actually work. But she'll never be interested in that if I can't get her interested in the basic electronics and the concept of "tinkering."

This actually brings up a point. I remember as a VERY YOUNG child, getting "Highlights Magazine" for children. Does anyone else remember that? They used to have them at the doctor's office in the waiting room. Anyway, they always used to have a few pages of some crafts you could do at home using basic household things like paper, wire hangers, pencils, styrofoam cups, etc. They weren't electronic or anything, but they were usually neat little things you could make at home out of household junk. I ALWAYS wanted to make everything in every issue. Sometimes, I'd be able to do it. Other times, I'd get stuck because I wouldn't have one key ingredient and I couldn't drive to the store. Anyway, I could NEVER get anyone to do these projects with me...I'd have friends come over and they'd want to play video games, play outside, do pretty much anything else. But no one ever wanted to make stuff. Anyway, I feel exactly the same way with my daughter right now. I see all these cool things and projects (now electronic and robotic projects) we could make together, and she's NEVER INTERESTED! I actually BOUGHT the Lego Mindstorms EV3 kit two years ago (when it came out) and I've built every single robot they have instructions for. But I can't get her to do anything with it. She just says, "THAT'S BORING!" :rolleyes:

And then, the worst thing happened last week. My wife and I took her to the mall for dinner one night, and after eating, my wife wanted to use a gift card she had a Nordstrom's to buy some earrings. So, she got a pair of earrings, had some leftover credit on her gift card, and bought my daughter a cheap pair of cupcake earrings that she liked. On the way out of the store, my daughter pulled her hair back so she could show off the earrings and exclaimed: "I just LOVE how these make me feel! I feel so pretty wearing them!" Obviously, my wife and I told her how pretty she was, and she should always feel good about herself, blah blah blah. But, the reality had just struck me: she's really an apple who fell closer to her mother's tree than her father's. I get that sort of happiness and satisfaction from solving problems...whether it be a story problem, solving a medical diagnosis, or building a LEGO Robot and getting it to work. My wife gets satisfaction from buying a pretty dress, getting a manicure or getting her hair done. And as much as I'd love my daughter to be a tom-boy who loves to tinker, I'm afraid I'm watching a pre-pubescent Barbie doll grow up before my eyes. Ugh...... Well, I guess they are who they are, and I love her just the same no matter what. I just wish her future husband luck and hope he makes a better living than me, because based on my experience, he's going to need it!! :)
 
I don't know how Woz learned to program, but at least for me, I started with BASIC, and then had a stint with DECUS C, and Fortran, and then a trip through COBOL, DYL-280, and then sanity with the SAS language. I picked up some dangerous JCL too.

Someone mentioned the Raspberry PI. That's probably a good start. My BASIC was on the TRS-80's and we tried to do things with it, which made it interesting, and exciting. Getting words to actually do something, rather than repeating 'HELLO WORLD' on the screen... I mean, not that it's bad, but... I picked up Postscript decades ago doing graphics in Postscript code, which has all pretty much left me now.

I tried to get a neighbor kid into IT, and it's really hard (at least for me) to judge how to approach and create interest in them. It's possibly easier because she's your kid, but it was not the easy thing that I thought it would be. They had 'game programmer' in their head, and expected, like I'm sure all of them think, to just start programming in days, weeks perhaps. It's not that easy for most people.

I found I was an oddball. I could write code in my head, and was able to run that code and usually have it work with only small edits, but things like that just came easy to me, which probably added the problem relating to the neighbor kid...

Good luck. Hopefully you can ignite the nerd in her, and give her a way to have fun and not be intimidated with computer, or male nerds. I am horrified at the sexism that I read about that seems to have gotten incredibly worse, rather than better.

Good luck!

Oh, one thing that helped me, was an IEEE student membership. Just reading the magazines from their computer society was fascinating... I'm also somewhat north of you. I'll keep my eyes open for other resources...

Hmmm...

Just read the whole post above this one.

Don't give up on a Barbie. (But steer her clear of the Barbie is a computer engineer filth)

You might want to get her started on the books and videos from Danica McKellar, who was on Wonder Years, and is quite a beautiful Barbie-esque brainiac. She encourages girls to cast aside the bonds of 'standard society' and helps girls see that there is nothing wrong with being smart, wicked smart... I married a very much non-Barbie, and it's been so good. There are times I wish she was more Barbie, but she's in a tough career, and Barbies would be chewed up and spit out, or end up barefoot and pregnant and never work again.

But anyway... ;-)
 
Last edited:
I don't know how Woz learned to program, but at least for me, I started with BASIC, and then had a stint with DECUS C, and Fortran, and then a trip through COBOL, DYL-280, and then sanity with the SAS language. I picked up some dangerous JCL too.

Someone mentioned the Raspberry PI. That's probably a good start. My BASIC was on the TRS-80's and we tried to do things with it, which made it interesting, and exciting. Getting words to actually do something, rather than repeating 'HELLO WORLD' on the screen... I mean, not that it's bad, but... I picked up Postscript decades ago doing graphics in Postscript code, which has all pretty much left me now.

I tried to get a neighbor kid into IT, and it's really hard (at least for me) to judge how to approach and create interest in them. It's possibly easier because she's your kid, but it was not the easy thing that I thought it would be. They had 'game programmer' in their head, and expected, like I'm sure all of them think, to just start programming in days, weeks perhaps. It's not that easy for most people.

I found I was an oddball. I could write code in my head, and was able to run that code and usually have it work with only small edits, but things like that just came easy to me, which probably added the problem relating to the neighbor kid...

Good luck. Hopefully you can ignite the nerd in her, and give her a way to have fun and not be intimidated with computer, or male nerds. I am horrified at the sexism that I read about that seems to have gotten incredibly worse, rather than better.

Good luck!

Oh, one thing that helped me, was an IEEE student membership. Just reading the magazines from their computer society was fascinating... I'm also somewhat north of you. I'll keep my eyes open for other resources...

Hmmm...

Just read the whole post above this one.

Don't give up on a Barbie. (But steer her clear of the Barbie is a computer engineer filth)

You might want to get her started on the books and videos from Danica McKellar, who was on Wonder Years, and is quite a beautiful Barbie-esque brainiac. She encourages girls to cast aside the bonds of 'standard society' and helps girls see that there is nothing wrong with being smart, wicked smart... I married a very much non-Barbie, and it's been so good. There are times I wish she was more Barbie, but she's in a tough career, and Barbies would be chewed up and spit out, or end up barefoot and pregnant and never work again.

But anyway... ;-)

I loved The Wonder Years. What a great show.
 
Wow, great info! Thank you so much, Adrian. Yes, my biggest obstacles are really two simple things: (1) lack of time for me (since I have a "day job" which is completely unrelated), and (2) my daughter has relative "indifference" about all of this. But I do like your ideas, and others above, about using Arduino for some fun home projects. I think the way to go is for me to set up shop in my basement, start playing with some electronics and Arduino kits on my own, talk with lots of enthusiasm while eating supper with the wife and daughter about all of the cool things I'm making downstairs, and then let her naturally find her way to the chair next to me downstairs after we eat.

I think I was so sucked in to Wozniak's book (iWoz), that I forgot that it took place about 40 years ago! That being said, I still believe there's something to learning about Boolean logic and binary code in terms of understanding how the machines actually work. But she'll never be interested in that if I can't get her interested in the basic electronics and the concept of "tinkering."

This actually brings up a point. I remember as a VERY YOUNG child, getting "Highlights Magazine" for children. Does anyone else remember that? They used to have them at the doctor's office in the waiting room. Anyway, they always used to have a few pages of some crafts you could do at home using basic household things like paper, wire hangers, pencils, styrofoam cups, etc. They weren't electronic or anything, but they were usually neat little things you could make at home out of household junk. I ALWAYS wanted to make everything in every issue. Sometimes, I'd be able to do it. Other times, I'd get stuck because I wouldn't have one key ingredient and I couldn't drive to the store. Anyway, I could NEVER get anyone to do these projects with me...I'd have friends come over and they'd want to play video games, play outside, do pretty much anything else. But no one ever wanted to make stuff. Anyway, I feel exactly the same way with my daughter right now. I see all these cool things and projects (now electronic and robotic projects) we could make together, and she's NEVER INTERESTED! I actually BOUGHT the Lego Mindstorms EV3 kit two years ago (when it came out) and I've built every single robot they have instructions for. But I can't get her to do anything with it. She just says, "THAT'S BORING!" :rolleyes:

And then, the worst thing happened last week. My wife and I took her to the mall for dinner one night, and after eating, my wife wanted to use a gift card she had a Nordstrom's to buy some earrings. So, she got a pair of earrings, had some leftover credit on her gift card, and bought my daughter a cheap pair of cupcake earrings that she liked. On the way out of the store, my daughter pulled her hair back so she could show off the earrings and exclaimed: "I just LOVE how these make me feel! I feel so pretty wearing them!" Obviously, my wife and I told her how pretty she was, and she should always feel good about herself, blah blah blah. But, the reality had just struck me: she's really an apple who fell closer to her mother's tree than her father's. I get that sort of happiness and satisfaction from solving problems...whether it be a story problem, solving a medical diagnosis, or building a LEGO Robot and getting it to work. My wife gets satisfaction from buying a pretty dress, getting a manicure or getting her hair done. And as much as I'd love my daughter to be a tom-boy who loves to tinker, I'm afraid I'm watching a pre-pubescent Barbie doll grow up before my eyes. Ugh...... Well, I guess they are who they are, and I love her just the same no matter what. I just wish her future husband luck and hope he makes a better living than me, because based on my experience, he's going to need it!! :)

Ah, I know what you mean, but they do choose their own paths and there's no way around that :). The only time I really don't like it is when I see children (or adults for that matter) reject interesting things because of peer pressure or 'social norms' -- that's really sad. More than anything, my wife and I have tried to show our girls that they need to be confident and independent individuals, so that when their friends says 'that's too nerdy', or, 'that's for boys', they hopefully won't care. So far we seem to be doing OK -- but peer pressure is so very hard to fight against, especially as they get older.

As it happens, my girls are in to girly stuff too, and I don't mind that, because it's just part of who they are. They get a lot of satisfaction out of pretty girly things, but they're also super creative and very adventurous, and they get a lot of satisfaction out of that too (which I love, though it means our house always looks like a workshop/art studio and we never get any peace at all!). If your daughter isn't in to computers and engineering, maybe the best route is encouraging her to try as many different creative outlets as she can -- film/photography, podcasting, music, art, writing, sport, adventuring -- all are very worthwhile, and act as nice counter balances against the default gender stereotypes that girls and boys will sadly drift towards...

It's not easy though, and I often feel like I'm out of my depth. I barely know what I'm doing myself half the time, never mind guiding these amazing little people through a tricky world on their path to adulthood... :)
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.