The books help a TON, but if you want some practice, code academy helped me learn a lot. I learned java and python on their site, and by the end, i was fairly proficient.
afaik you dont have to be an expert of ansi C and such.
Start with some arduino C programming it's intuitive and there are lots of examples available.
More over teensy and arduino were like cousins.
then you dont have to learn C.afaik you dont have to be an expert of ansi C and such.
Start with some arduino C programming it's intuitive and there are lots of examples available.
More over teensy and arduino were like cousins.
I wouldn't say I want to be an expert I just want to understand it more than just "Change this line to represent your layout", Change this to represent which pins are going to which rows and columns.
And of course, the reference standard:Show Image(http://i.imgur.com/ExeeJl2.png)
And of course, the reference standard:Show Image(http://i.imgur.com/ExeeJl2.png)
then you dont have to learn C.
Not to say algorithms and such.
Keyboard firmware is more hardware related, learn some basics about ardurino sensor inputs and how a keyboard matrix works.
And then tweak around aka break your board, you will learn from that.
My recommendation, start with some Python/Ruby tutorial and write scripts that actually help you, like rename some files for you or visualize some data, maybe write a game in PyGame. Once you feel confident, leave the comfort zone and start with C. Maybe with some hardware kit.
My recommendation, start with some Python/Ruby tutorial and write scripts that actually help you, like rename some files for you or visualize some data, maybe write a game in PyGame. Once you feel confident, leave the comfort zone and start with C. Maybe with some hardware kit.
please for the love of god, let's stop with the use of whitespace sensitive languages (python).
I thought the whole point of learning with python was to teach people to write legible code.
You guys obviously never had to write any code in Fortran 77. Count yourselves lucky.
And Melvang, just skip the high level languages altogether and go straight for x86 assembler. ;)
You guys obviously never had to write any code in Fortran 77. Count yourselves lucky.
And Melvang, just skip the high level languages altogether and go straight for x86 assembler. ;)
Haha. JD, you are just mean. :)
My 0.02$ on the topic.
If you want a simple language that is easy to learn and work with, I would recommend Python. Having an interpreter to test things in when you are learning is invaluable.
Python is a dynamically typed language, so you get to skip some of the complexity too get started.
C is a solid language, but I would not recommend it as your first language. You don't need to learn about pointers and things like malloc and calloc on your first intro to programming.
If you start with python and build something cool, you can learn C by writing a small piece of your python program in C and importing it into python. Because python allows importing of C libs and you will have written the code once in python, you will learn a lot about the differences between high level dynamic languages and low level statically typed languages.
As for an editor, I would suggest Sublime Text 3. Not an IDE, but a joy to work in.
This does not address firmware coding specifically. In that case I like the idea of learning from an existing open-source tool. Read the code and absorb what you can. Google will your bestest of friends.
I tried learning C years ago when I first got interested in programming and the complexity of it put me off. Picked up Java and Python about a year ago and since then I haven't been able to stop.
Lightweight language is very useful for daily job and learning Lisp or functional languages will get your quality-of-life so better. But they are not so fast nor easy path to build your firmware on micro-controller when it comes to embedded thingy.
From my experience without knowledge of low level computer architecture understanding detail of C was very difficult. In the end I needed to learn basic of architecture and instruction set of MCU with its datasheet and app notes. Fortunately you don't have to know lambda calculus or other computational theory here :D
I guess learning MCU with assembly before working on C would be useful and bottom-up approach will work there.
You guys obviously never had to write any code in Fortran 77. Count yourselves lucky.
And Melvang, just skip the high level languages altogether and go straight for x86 assembler. ;)
You guys obviously never had to write any code in Fortran 77. Count yourselves lucky.
Or COBOL. What a PITA.And Melvang, just skip the high level languages altogether and go straight for x86 assembler. ;)
That advice has some merits -- you can't write any serious firmware w/o understanding the underlying MCU. So, get the K&R and datasheet, then find some source code and try to make sens of it. Next thing you know you'll be writing some code ;)
My recommendation, start with some Python/Ruby tutorial and write scripts that actually help you, like rename some files for you or visualize some data, maybe write a game in PyGame. Once you feel confident, leave the comfort zone and start with C. Maybe with some hardware kit.
please for the love of god, let's stop with the use of whitespace sensitive languages (python).
What's wrong with Python?
Leaving out indentation is easier to spot than missing a } somewhere.
And you probably indent your source already, right?
The biggest issue with your advice Grendel (and by all means I don't want to sound like a ****) I have no idea with K&R or what datasheet I would be looking for. I have not written a single line of code with the one exception of a couple very simple ones for my Ti-86 back in high school (15 year reunion next year).
Try to find a smaller project that you can replicate -- build the hardware w/ a breadboard and concentrate on replicating the firmware by setting up a tool chain. Once you can do that, play around w/ the code. Try to understand what's going on and modify it.
Try to find a smaller project that you can replicate -- build the hardware w/ a breadboard and concentrate on replicating the firmware by setting up a tool chain. Once you can do that, play around w/ the code. Try to understand what's going on and modify it.
This is a good suggestion