**Question of the day: **Developers & hackers, what type of tutorials, products, projects and videos would you like to see more of?
Since I started at SFE, I've bugged a lot of people about highlighting the importance of developers, and some of the awesome products that they can use to prototype their projects out. This happens to the point where my continued emphasis on the need for Bluetooth Low-Energy products results in heavy sighs directed at me in acknowledgment of our need to fill this void, and this week's New Product Post might bring some relief.
Recently, I made the switch from being a Technical Designer to a Connected Devices Developer in the Engineering Department. In this position, I will be focusing on developing new apps for products, content creation, and growing support for developers, makers and hackers. I'm excited to hear any feedback or suggestions on what you would like to see more of, and get your ideas on how to build a better developer and maker community here at SFE.
For my first Enginursday post, I wanted to write about a question I often see from parents: how to get their children interested in programming and have that real-world interaction you get from hardware. There's nothing like remembering the feeling you get when program your first LED to blink. Here are a few things I recommend for beginners of all ages:
Drag and drop programming is a great way to introduce hardware and coding to beginners. Scratch, miniBloq, and Ardublock are fun, visual environments to teach problem solving and programming basics like if/else statements. We already have tons of tutorials, resources, videos and blog posts (Enginursday: Visually Programming Arduino) on how to use a couple different graphical programming environments.
Last summer, we developed the Digital Sandbox, so students and beginners can jump into code quickly without the need for breadboarding.
For the Digital Sandbox we have tutorials on how to work with Ardublock, Scratch and Arduino IDE. Ardublock is a graphical programming environment that works along side the Arduino IDE. We found that it is helpful for classrooms to get students started with dragging and dropping blocks, and then seeing the code produced in the Arduino IDE. After they feel comfortable with the basics they can code straight in the Arduino IDE instead.
When teaching Scratch, we use the SparkFun PicoBoard. We found that the combo of using drag and drop blocks to program the hardware that controls animations is really engaging to people of all ages.
In the past, we have sponsored quite a few hackathons. We found that the MaKey MaKey is actually a fun, interactive product to have at these types of events, and there doesn't even have to be the messy banana clean-up afterwards. (I have cleaned many alligator cables filled with smashed bananas in convention center bathrooms before I made an NES controller out of conductive fabric to take with me instead. If you have to use fruit, please consider apples.) Since the MaKey MaKey acts like a keyboard or a mouse, it is super easy to get started with for web developers or beginners who are interested in making websites and having more real world interaction besides looking at the computer screen.
If you are a Minecraft lover or your kid is, consider using Minecraft as a way to teach code. If you have a Raspberry Pi and want to learn Python, check out the Raspberry Pi Minecraft Edition. Since Minecraft is installed by default in Raspbian, it is easier to get started with now.
We ran a mini NodeCopter event at the last AVC and spent the day hacking Parrot Drones. Thanks to a node.js client called ar-drone, it was easy to control the drones over WiFi to really start having fun. Hacking toys that already have a amazing support community to them can add continued fun to a product that you might have sitting in your closet, and a way to get your feet wet with a new programming language.
In the late 60's i started with BASIC. Later when I dived into assembly, reading well commented code help me learn what is happening and why a particular instruction was used. Well commented code, libraries, and examples will help a newbie have confidence to hack a bit of code to do something different. They are not ready to write a new protocol, but want to change which pins are used.
Interrupt Driven Programming How to build software that actually reacts, instead of just waits on a polling loop. Why this can be critically important, particularly for events that might be missed in between polling loops. Talk in depth about interrupt priorities. Compare an Arduino, which cannot do nested interrupts, to smarter processors, which can handle multiple nested interrupts. Point out that just about no processor can do multiple simultaneous interrupts, regardless of how many cores it has, due to being on a single system bus, rather than a switched fabric; notable exceptions to this, if any.
Hard-Real-Time Software What Hard-Real-Time, Soft-Real-Time, and other varieties of "Real-Time" mean. What this means for which C standard libraries to use, and POSIX compliance issues. Implementing a Hard-Real-Time system on baremetal. Implementing Hard-Real-Time with one or more Hard-Real-Time OSes.
Complete HID Device development The complete process of HID Device development, from start to finish. Implementing:
* Buttons * Digital Joysticks * Analog Joysticks, Analog Pedals, & Analog Triggers * Trackballs & Mouse sensors * Capturing data from sensors * More experimental examples
Also, check with your local IEEE Section: http://www.ieee-denver.org/ And Technical Society Chapters: http://www.ieee-denver.org/technical-societies/
They will no doubt have some very relevant advice.
I'd love to see more random interesting demo projects that don't necessarily have any specific purpose, which can ultimately serve as the foundation for something else. I found that learning by example was by far one of the most enjoyable, and quickest ways to pick something up, and having a short/concise tutorial attached can help for when you get stuck.
Hello. I am new here, and is very interested to learn how to even build a single product. I do not understand programming at all, but after reading all about raspberry pi, it getting me interested in learning all these, but really not sure how do I start or where to start. I am thinking of building a device which connects to a lamp, so when they are asleep and switch off the lamp, it will notify me that they are asleep. Maybe it can be connected to wifi, but I not sure how to do this. I might need a program to send me notification right? Hope to hear some advice from you. Many Thanks!
What would be really awesome, considering you mentioned bluetooth, would be a more understandable library for the nRF8001. The Adafruit library is better than others, but it still uses the original code from Nordic. I would very much appreciate it if someone could rewrite that library so it would be more understandable (This is coming from a sophomore CS Major). Right now I am having trouble using another device with the nRF8001 because of SPI related issues switching between the devices.
I would like to see more programming tutorials for those of us who are beyond the "Blink an LED" phase, and are starting more complicated projects, but are not experienced programmers. The visual programs are frustrating because you cannot add libraries, create functions, add new hardware, etc.
A user friendly repository of code examples and libraries would help - Not github, but a web based listing of what you as developers have written, and libraries you think would be useful. It is a chore to look up several different tutorials and product examples to piece together code and try to make things work.
Also, comments, comments, comments in your example code would help - over comment, state what each line does if you need to, but nothing is more frustrating than looking at code that assumes you understand all the uses of things like string, char, and pointers, etc. and there is no usable resource to figure it out. (and no, the arduino learning and reference sites don't count as they have very few examples and don't explain a lot of things well)
Great ideas! I wanted to ask why not a Github repo? I think having this list somewhere that is easy to find on this site would be great idea. A lot of the list would link to Github, but there is a lot of articles that won't either. It would be nice to put on a Github, so others can add to that list easily or share links to their favorite resources. This is a great idea and have been thinking of ways to do this where it can be easily found. Having the list on Github makes it easier for community involvement. Really like to hear your thoughts on Github before I start on this list of resources. Thank you!!
I'd like to see a tutorial (series?) on how to combine and extend demo code/code samples. That was one of the reasons I gave up on Arduino in 2008(!) and I didn't start to really enjoy using it until I took a VERY basic "logic and program design" class. Even though I could follow the hookup guides, I had no vocabulary to 1. describe what I wanted to do (so I could look it up) and 2. parse error messages. "Not declared in scope" doesn't make any sense when you don't know what "declare" and "scope" mean and if you don't know what a constructor is you can end up with three or four duplicates from trying to mash stuff together. And on and on.
And if I missed a cool tutorial on this, you can come throw a shoe at me, it's a short walk.
Heh. I come from the other side of what seems to be a pretty big divide in the robotics world -- I'm comfortable with software, less so with hardware. The easiest way to learn a new development tool is to actually do a project with it. The problem often comes down to finding a project hard enough to be interesting, but simple enough to get your arms around. For learning new programming languages, I"m a big fan of Project Euler ( https://projecteuler.net/ ), a series of increasingly difficult math problems meant to be solved with the help of a computer. If you can get 25 or so of these babies solved, you'll have a pretty strong foundation in the new language of your choice.
Project Euler was recommended to me awhile back. Thanks for bringing it up, because I kept forgetting to check it out. Thanks! :D
As someone that works in industry here are my suggestions to your question:
It's awesome that you want to get more new people into the realm of making/hacking hardware, but we have to remember that there's a means to the madness. Once a person gets to an intermediate/advanced stage, an Arduino and drag/drop programming will not cut it anymore. Lastly, keep things challenging, make them think and ask questions.
Thank you for your feedback! I totally agree on all points!
I will be doing 3 Intel Edison videos the next couple weeks, (will be shown in Feb) that doesn't use the Arduino IDE. I really want to expand our content on single board computers, boards that isn't an Arduino board, and other programming languages. Personally, Arduino is not my first choice due to the type of projects I like to do. My background is also web & mobile development. At SFE, our documentation is really Arduino heavy. (Mainly due to high amount of request for supporting Arduino more. Also, there are a lot of makers who just need something easier to work with and working on projects that an Arduino can handle perfect fine. We are branching out to different boards/chips, but also keeping Arduino near. I know EDU is seeing a lot of interested in Edison and Galileo. We hear you and definitely agree!
Drag and drop programming are great for a starting point for some. They are not the right environment always when starting out and really depends on different situations/learning styles. Seen it work really well for visual learners when they are taught what each block is doing in the code and seeing the code while they are dropping the blocks. Building up their confidence and interest. I don't recommend only using drag and drop, for everyone, or advanced projects. Thanks again and I will make sure to document like crazy! :D
Another thing that popped up this morning as I was eating a bagel was, make a call for users/customers to write tutorials on their own things! Sort of like I did with the Papilio (before the board got retired). Help out with the knowledge base and doesn't put all the working onto you.
I have to agree with point #2. I can read through and understand how a certain section of code works, but often don't understand the thought behind doing it one way versus another. I'd like to see more articles on how a real world programmer approaches a particular problem, and why she chooses her path to the solution.