Suitable environment for a 7 year old [closed] - children

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
Locked. This question and its answers are locked because the question is off-topic but has historical significance. It is not currently accepting new answers or interactions.
My 7 year old would like to learn, how to program? (his idea not mine, and he does things in the outside world. So, I am not too worried from that point of view. He already went so far as to take a game programming book out of my office to read at bed time.) The other day we sat down and wrote a very simple number guessing game (you pick 8 and it is correct, anything else it is wrong).
It went OK but there were a number of questions he had based on the syntax of the language. (I happened to pick Java as I had the IDE opened at the time.) I teach post-secondary introductory programming courses so this was a bit of an eye opener to me (most students out of high school are reluctant to ask questions) as I really had to figure out, how to explain syntax to a 7 year old?
Clearly any C type language is going to have the same issues, as will most “languages”. I looked at squeak but decided not to use it yet. I looked at the Alice environment but didn't like it for this either.
From a physical point of view he is comfortable with a keyboard/mouse and can put together Lego sets with relative ease (so following directions with a fun outcome works for him). I have access to Lego NXT but he is still a bit young for that (it takes too long to see the results of the work, even with the supplied graphical environment).
Ideally I'd like the experience to help him build up confidence in math and logic (if a 7 year old has logic:-).
I remember using turtle graphics/logo as a child. I am leaning towards this but wondering if there are any other ideas or if anyone can recommend a good logo environment?
Edit 1:
Logo works out well. I'll need to teach him the concept of angles (90 degrees, 180 degrees). Unfortunalty they don't really do division at school yet so angles might be fun...
First off draw a square:
FORWARD 50
RIGHT 90
FORWARD 50
RIGHT 90
FORWARD 50
RIGHT 90
FORWARD 50
RIGHT 90
At some point later I'll go into loops:
REPEAT 4
[
FORWARD 50
RIGHT 90
]
And then variables:
make "length 50
REPEAT 4
[
FORWARD :length
RIGHT 90
]
This works out very well. Virtually no syntax, easy for a 7 year old to remember the vocabulary, and immediate feedback.
Edit 2:
Well it was a success, in that he was able to write a simple program (no loops yet) while I was out of the room. It actually works out very well - we went out and got to graph paper and a protractor, we fugured out 90 degree angles, and he made a bunch of squares, turned a square into a rectangle, and got to see where he went wrong and how to debug it. I'd recommend this approach for anyone with a 7 year old who is interested in programming. I think I'd recommend it to my post-secondary students too (!)

There is actually a browser-based Logo interpreter in Javascript.
http://logo.twentygototen.org/

I strongly disagree with the people who say seven year olds would have a hard time learning new syntax. This is completely backwards. Try teaching pig latin to a seven year old and to a thirty something non-native English speaker. Or try traveling in a foreign country with your kids. See who can chat fluently with the natives after a month (hint: it probably won't be you).
Kids pick up on arbitrary linguistic conventions much faster than us gray hairs do.

I learned how to program when I was 10 in exactly the way you taught your son. My dad used the GW-Basic interpreter that came with our AT&T PC6300, and we wrote a game where the computer asked you a question, and you had to answer A/B/C. The big advantage to syntax in GW-Basic was that you didn't have multi-line statements. You might want to try something similar. Java, with it's curly braces, might be a little tough.
Example code:
10 PRINT "What color is Big Bird?"
20 PRINT "A. Blue"
30 PRINT "B. Green"
40 PRINT "C. Yellow"
50 INPUT$ ANSWER$
60 IF ANSWER$ = "C" THEN PRINT "Good Job!" ELSE PRINT "Oops, wrong answer!"
I spent hours upon hours using various permutations of that syntax and writing my own "games". And it made me want to learn more... might help.

Tell him about parsers. You just need to add context and reasoning to why things exist. The curly braces are so that the machine that reads the code knows where things start and stop.
I find that most people including children pick up things easily as long as you explain the purpose of them. This is why school was a terrible failure for me, no-one ever explaining the point of learning half the stuff.

Scratch is another one. Developed at MIT specifically for the purpose of teaching programming to children.

I think that Python might fit your needs. It is well known for being easier to learn than many other languages and the interactive interpreter allows programmers to immediately see what happens when a piece of code is executed. The IDLE gui that comes with it is easy to use. It also has a turtle module through TKinter.
https://docs.python.org/library/turtle.html

Developmentally, a seven year-old is unlikely to grasp the basics of syntax even in their spoken language.
Whatever language or environment you use, I would recommend focusing on the idea of programming as play rather than the ability to write actual programs. Towards this end, something you can run from a command line and see immediate results, like Python or, for a more graphical experience, Silverlight, would probably be best.

Microsoft has a couple of interesting efforts that seems a nice fit:
popfly: http://msdn.microsoft.com/en-us/devlabs/cc950523.aspx --- "Popfly includes a simple way to create and share games with your friends. Choose from a variety of built-in templates or start from scratch to create a side scrolling game, a 2D shoot-em-up, or a host of others. And best of all, you can get started without writing a line of code" ... I think it can really help being motivated :)
smallbasic: http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx --- supposed to be simplified but having intellisense+.net framework support (the short description is too marketing like, so I didn't paste it :P)

Try Small Basic, which has a mini-BASIC language and simplified for the younger crowd.

Flee from Java! Try something designed for teaching, like scratch, LOGO, or PLT Scheme.

Why not go back to the days of QBasic? That's the first language I learned (actually it was GW-BASIC, but that's beside the point).
The syntax is much easier to get one's head around (albeit fickle and sometimes downright frustrating). It doesn't teach anything OO, but that's probably above his head anyway, as it would have been mine.
This site may also be of interest.

I'd say use visual basic, or something similar where you don't have to worry about syntax, curly braces, etc as much. I was programming at 7, but it was in LOGO and C64 Basic. I HATED LOGO ... it was so frustrating to me that one of the "big" things you could do was move around a stupid turtle. However, C64 Basic (to me) was great ... once I had that down (a couple years) I was psyched to learn C and even C64 assembler.

Two thoughts come to mind:
My 3 year old son loves playing World of Goo with me. He can't solve problems yet, but I can see he is soaking up loads of information.
Have a go with Alice. My son is too young to try this, but once he is older we'll give it a go if he is keen. FWIW I learnt about this program after watching The Last Lecuture by Randy Pausch (R.I.P)

Have him check out http://scratch.mit.edu. My seven year old is learning this as we type...

Etoys is perhaps the thing you're looking for. It's a partly graphical flavour of smalltalk made just for children. This is used by the olpc project.

I was involved with a primary-grade computer course using Stagecast. This is a graphical programming language designed for children. I found it an ideal introductory language because it is graphical and interactive. It does not require reading or mathematics, it runs on Windows and Mac OS, and is ideal for simple games so children are motivated to learn.

While it appears that it is being redesigned, you can still get the old version of Hackety Hack, which is a ruby programming kit designed by _why for teenagers and beginning programmers.

I am a bit torn about Alice.
On the one hand, it is nice to have a framework where you can program with direct visual gratification. This is really a good idea.
On the other hand, I think that it is a very bad idea to have beginners program exclusively by drag and drop. I fear that this might even lead to a sort of illiteracy, where they are unable to produce properly written code when the drag and drop interface is taken away.

Personally, I think the basics of arithmetic operations and Boolean logic are more important to teach to a child first. After they have grasped these concepts then I think moving on to the basic constructs are appropriate. I just don't see how a child could understand conditionals and looping without Boolean logic, but then again, there are some pretty bright kids out there :)
Assuming the previous statement is met, I would have to cast my vote for python.

I would have looked for one of the many arcade game engines and let him play with that. Choose one where he will need to use loops and conditions, and maybe some procedures.

There a book called Learning to program from pragmatic that is geared towards people who have never programmed before and might not be extremely technical.
It uses Ruby which can be quite easy for new people to pick up.

Squeak Smalltalk system is an implementation of Smalltalk that I have heard much good about when it comes to educating children in programming.
The Etoys project supposedly contains lots of resources for keeping the learning experience fun and motivating.

I became interested in programming when I was introduced to Turing language in high school. Turing was used as a teaching language in many schools at the time, and it worked very well for me to introduce programming concepts. Here is a description of Turing from WikiPedia
Turing is a Pascal-like programming language developed in 1982 by Ric Holt and James Cordy, then of University of Toronto, Canada. Turing is a descendant of Euclid, Pascal and SP/k that features a clean syntax and precise machine-independent semantics.
Named after British computer scientist Alan Turing, Turing is used primarily as a teaching language at the high school and university level. Two other versions exist, Object-Oriented Turing and Turing Plus, a systems programming variant. In September 2001, "Object Oriented Turing" was renamed "Turing" and the original Turing was renamed "Classic Turing". Turing is available from Holt Software Associates in Toronto.
Versions for Microsoft Windows, Linux and Apple Macintosh are available. Turing is still widely used in high schools in Ontario as an introduction to programming.
In November 2007, Turing, which was previously a commercialized programming language, became freeware. As of November 28, 2007, it was available for download from the Holt Software website free of charge for personal, commercial, and educational use.1

You could also use Commodore 64 emulator. It start's right from BASIC.

Might as well throw out Lego™ Mindstorms™ as a possibility. It uses a graphical programming language based on LabView.

I read this post earlier today, and then by chance accidentally went to YUP.com and discovered
Teaching Kids to Hack(Program) with Hackety Hack
Figured I'd post it as an additional resource for anyone looking at this question.

I recently responded to a similar SO question with a pointer to kidbasic, which is open source and cross platform software.

Scheme is nice and syntactically similar to Logo, in the respects of simplicity. Also Scheme offers a very intuitive way of understanding recursion and picking up these type of fundamental concepts in computer science that early on is nothing but good with more good.
UCB Scheme also offers a lot of built in functionality for manipulating sentences, which may make more sense to a 7 year old than constructing polygons and solving number puzzles (not to say that the sky's the limit!).

I was typing programs from the book "BASIC Fun" when I was in 2nd grade.
I distinctly remember that the concepts of infinite loops and INPUT A$ was like discovering gravity. Heady stuff.
Self taught, my progress was glacially slow, although I did reach a point in a program where I wished that GOSUB took variable arguments, which in retrospect meant I understood function pointers.
My early goals included writing LONG programs. A lengthy program not a bad goal for a 7 year old because a program with a well defined spec makes the risk of failure too high. Anyone can write a long program and feel good about it and learn a lot along the way.
There was a whole genre of books for programming in BASIC for kinds from the 80s. That stuff is a great source of programming ideas. However I wouldn't recommend using BASIC even for a 7 year old-- lua has the simple feel of BASIC but it isn't broken crap.

Look no further, there's actually an entire learning platform/ OS designed for this very purpose: Sugar.
The OLPC (One Laptop Per Child) operating system called Sugar is now available to the general public and you can run it as a VM within all major operating systems such as Mac, Windows and Linux.
Download a copy at Sugar Labs.
One interesting activity included is called TurtleArt, a souped up 21st century version of Logo. Also has a kid friendly version of a Python IDE called Pippy. It actually teaches kids Python!
See TurtleArt and Pippy and the other activities found in Sugar.
Alan Kay was behind some of the novel concepts in Sugar OS which is actually a modern incarnation of his visionary DynaBook. Even as an adult (who's an engineer), I find it fun to play with.
And if you love Sugar as a VM, you can even buy the hardware and at the same time help a poor kid somewhere else in the world.
Engadget explains : OLPC XO Buy-One, Give-One program underway
As a bonus to us adults, Sugar is derived from Fedora. So it's a real and complete Linux based OS. Should be fun to hack. ;-)

Related

Prerequisite for SICP

I have been programming in a "learn-by-doing" fashion for almost 2 years now and I consider myself fairly good however, I really wish to build a good foundation of Computer Science/Computer Engineering and most people recommend I start off with SICP. (Structure and Interpretation of Computer Programs)
I wished to know
Is this the best way to go about it?
I know how to code a matrix-multiplication in OpenMP and MPI and I know college level math, is this sufficient to read and appreciate SICP?
Instead of this, can I just spend all my time working on Project Euler instead?
A personal experience: Like you I am trying to learn programming by self-study and I started off with SICP. As I am a ancient historian and archaeologist, I have no background in maths, engineering or real computer science (just good knowlegde in stuff like LaTeX, HTML and CSS). My last lessons in math are now 15 years ago. Although I am working through SICP with a math book at my side the explanations given in SICP are really sufficient to understand the stuff. I really appreciate SICP, it is demanding, but great fun. I also would recommend to buy it as a book, I prefer that from reading on screen.
Sometimes you have to cope with some difficulties because language standards have changed (eg. Running SICP Pattern Matching Rule Based Substitution Code) or the authors assume existing functions which are just defined later in the book (eg. How do I get the functions put and get in SICP, Scheme, Exercise 2.78 and on). As a you always will find solutions or hints on the web this is nothing which should bother you.
If you know any amount of programming you'll likely be better off for it, but it's by no means a requirement when going through the SICP. I'm going through it right now (cover to cover style), and I'm up too section 2.3.3. The biggest road block for me has been how maths based some of the problems can be, as it's been a while since I did maths back in high school. For these problems I've resorted to googling an explanation of the problem and solution. Like programming, maths isn't a requirement either, obviously because I'm still making progress through the book, but I feel it could help at times.
The only requirement you'll honestly need, is a computer and a scheme implementation, I'd recommend MIT scheme or DrRacket.
TL;DR
The only requirement you'll need is a computer, and a scheme implementation, everything else can be learned as you go along.

What is a good language to develop in for simple, yet customizable math programs?

I'm writing to ask for some guidance on choosing a language and course of action in learning programming. I apologize if this type of question is inappropriate for Cross Validated, please advise me to another forum if that is the case.
I've seen thread after thread with questions from newbies, asking, "What is the best language to start with?" and then it always starts a flame war or someone just answers, "There's no best language, it's best to pick one and start learning it." My question is a little bit more focused than that.
First off, I've been programming my whole life, in very limited capacities. My deepest training was in C++. Whilst in my EECS degree program, I resolved to never be a software developer because I couldn't stand not interacting with people for such long periods of time. Instead I realized I wanted to be a math teacher, and so that is the path I have taken.
But now that I'm well down that path, I've started to realize that perhaps I could develop my own software to help me in the classroom. If I want to demonstrate the Euclidean algorithm, what better way than to have a piece of software that breaks down the process? Students could run that software as part of their studies, and the advanced students might even develop programs for themselves. Or, with an Ipad in hand, why not have an app that lets students take their own attendance? It would certainly streamline some of the needs of classroom management.
There's obviously a lot of great stuff already out there for math, and for education, but I want a way to more directly create things specific to my lectures. If I'm teaching a specific way of calculating a percent, I want to create an app that aligns with my teaching style, not just another calculator app that requires the student to learn twice.
The most I use in class right now is iWork Numbers/Microsoft Excel for my stats class. Students can learn the basic statistical functions, and turn some of their data into graphs.
I have dabbled a bit with R, and used Maple in college. I've started the basic tutorials for OS X/iOS development and have actually made good progress making an OS X app that takes a text string, converts it to numbers, and performs encryption using modular addition and multiplication. I sometimes use Wolfram|Alpha to save myself some time in getting quick solutions to equations or base conversions. I know of MatLab, Mathematica, and recently people have been telling me to check into Python or Ruby. I also know basic HTML, and while it's forgotten now, learned Javascript and PERL in college.
If I keep on the path of Obj-C/Cocoa, I think it will have great benefits. Unfortunately, anything I produced for Mac would only be usable on a Mac, so it wouldn't be universal for all of my students. Perhaps then learning a web language would be better. Second, I'm wondering if the primary use is mathematical, then perhaps my time would be better spent learning Mathematica Programming Language, or R, or something based less on GUI and more on simple coding of algorithms, maybe Python or Ruby?
It seems that Mathematica already has a lot of demos for different math concepts, so why reinvent the wheel is also a question I have. I think overall, it would be good to have more control and design things the way I need. And then, if I do want to make an "Attendance" app or something else, I would already have the programming experience to more easily design something for my iPad or MacBook.
The related question to this is what is a good language to teach to my students? In his TED talk, Conrad Wolfram says one of the best ways to check the understanding of a student is have them write a program. But if Mathematica does the math virtually automatically for them, then I'm not sure that will get the deeper experience of working out logic for themselves, like you do when you're writing C, or a traditional procedural language.
I know that programming takes time to learn, but I also know that at this point, my goal is not to be able to make an app like "Tiny Wings." With the app store ease, some of my work may be an extra revenue stream, but I see myself as more of a hobbyist, and now teacher looking to software development specifically for its ability to help me demonstrate mathematical concepts.
I think I will push ahead with Obj-C/Cocoa for OSX/iOS, but if anyone has some better guidance regarding all of the other available stuff, it would be much appreciated. I don't think I would want to go fully to the web (I like apps), but perhaps someone could suggest a nice way of bridging what I produce in XCode to a universal web version. For example, if you come up with an algorithm in obj-c is it easiest to transition that to ruby and run it online, or is there another approach that works better?
Mathematica is pretty awesome for the first part of your question. I've used the interactive mode (Manipulate[]) for explaining things to my colleges (and myself). It makes really nice dynamic figures and is fairly expressive (although your code can end up looking like line noise). It is very powerful, but it does far less for you than you might think. It's pretty intuitive, which is a good thing for teaching.
You could use Scala if you want an "easy" way to make a domain specific language for teaching. Python seems to confuse people as a first programming language. Objective C seems like a completely random choice to me.
Mathematica then. It's worth the price. But anything that is interpreted and has an interactive shell is probably better than a compiled language. BBC BASIC?
Nothing beats Haskell for general-purpose mathematical programming. The wiki's quite extensive and the IRC channel (#haskell on Freenode) is great for asking questions. If you statically link your binaries on compilation, you should be able to run your programs on just about any system (with a few exceptions, e.g., libgmp).
Haskell code reads (roughly) like mathematical notation once you get the hang of it, so it can really help to tie things together for your students who are motivated to write their own programs. The purely functional style can be beneficial, as well, since it focuses less on I/O and the marshalling of data (perfectly useful in applications, perhaps less so in pure math), and more on the actual creation and refinement of functions and algorithms. You can even compose functions just as you would on paper.
If you want to get really serious, you could also look into Coq or Agda, but those might be a bit much for most classes.
For a Haskell program idea for an educator, check out this link.
A nice list of arguments can also be found at:
Eleven Reasons to use Haskell as a Mathematician and the book The Haskell Road to Logic, Maths and Programming

Chances of IDL in Image processing

I am a software engineer working in Medical Imaging.I have just started using the language IDL and i feel very comfortable with it.As a new member in this field with a language like IDL, i would like to know the chances of IDL in this field.Can any one help me?
Well, so here is my biased opinion -> I'm heading the opposite way to you. I have used IDL (and before PV-Wave) on and off for ca 10 years (mostly MRI) and I'm now trying to part from it. Here is why. If you are proficient you can very quickly test something in an interactive / lightly scripted fashion. This is the typical use case of scientists; most have little CS education and are happy to grab any tool that seems to helpful. In fact, IDL is fairly good at dealing with largish arrays/images etc as you are likely to encounter in imaging.
However, it is not very pretty and coding gets increasingly awkward as your project size increases. If you are a software engineer, I suspect you'll hit the limits soon and will be cursing it no end. If you try to develop GUI code for people around you, you might be in for a rough ride. This is one of the main reasons I am moving over to Python + EPD with scipy and the likes. Also, binding to existing sophisticated image processing tools as you might need (registration, segmentation, etc) are not ideal.
A further complaint I have are the ongoing licensing costs. Even in an academic environment they are becoming prohibitive and I'd rather spend it on a Coop-student who could code for me than on ITT. A nice feature though is the ability to compile almost all IDL code into a sav file that others can use with a free IDL virtual machine.
Essentially, what it will come down to is how much your collaborators need you to use IDL. If it's fully your choice, I would look elsewhere. If there is a significant (and decent) code base, I would stay. The medical imaging plus astro community is dependent enough to keep this going for a while. If you do decide to hang on, I can highly recommend Dave Fanning's writings (his web page + his book + the google-group). He is somewhat of an icon in the idl community and certainly taught me things that were very useful. (Check out the mighty histogram function, I'm not kidding!)
Hope this works out for you.

Programming Games and Applications/OS [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 5 years ago.
Improve this question
I am interested in programming for games. I am currently building an iphone game with Shiva using Lua as the scripting language. After that, I am not sure what I should do or what languages I should learn. My goal is to keep building games but I also want to build my own game console. Of course, that won't be for years but I need to learn something right programming now. I know that programming games vs applications is totally different and that's why I need some help. What languages or things do you recommend for me to learn? I also want to be able to create applications but programming applications and programming games is a whole different thing.
The first game I ever wrote was a snake game written in Turbo Pascal. I was fiddling around and managed to get (using a series of dots) a line moving across the screen. Once I did that I made the line change direction. I hooked that up to the arrow keys and got excited. Two hours later i'd gotten a different coloured dot as 'food' up on the screen and it was a game of snake. Each game I wrote pushed me further and forced me to learn new things (ideas tend to roll on from one another.)
Try and stick to arcade style games. Breakout, Pong, Snake, etc. The amount of time it will take you to build Halo doesn't bear calculating!
Don't worry about which language you learn. You will learn many over the years. Right now is the time to ask which is easiest to start writing games with. If you already have the basics of C, then that's your answer straight away.
If you have no idea where to start, start doing animations instead of games. Ideas will come once you get used to your tools.
Write a program that draws a smiley face in the middle of the screen. Changing screen modes and using big graphics engines might be overkill for this. Keep it simple. Get that smiley face to move around, change it's colour, make it an unhappy face, etc. Before you know it you'll pick up some good momentum.
The question to ask is how do I write a smiley face on the middle of the screen instead of just on the next line in the console. In my first snake game, the answer was to write a load of space ' ' characters until i got to where I wanted. The better answer, apparently, is ncurses. If you are on Windows XP then the MingGW compiler is free you can get the (non-standard) conio.h library. That's what I used in my second snake game and it will get you started very quickly.
Good journey!
Look into modding.
I found QuakeC (how Quake1 mods were made) to be really easy to pick up, and you already have a very rich base of game content to use so that you can focus on gameplay and such. I found it a lot easier to stay interested when you're starting with a fun game and adding your own twist to it, rather than starting out making 3d box demos or other overly simple but needed low level programming steps.
Quake1 is pretty old but has the upside of pretty much everything involved in it being open source and free to extend. You could just as easily start modding any of the newer games out there.
A lot of todays big name game shops got their start making Quake or Halflife mods.
Having worked in the industry for several years, this is the best summary I can find:
http://gamesfromwithin.com/so-you-want-to-be-a-game-programmer
My advice:
Learn C++ inside and out. Program in it every day. If you're already set up for iPhone development, learn OpenGL. It wouldn't hurt to learn Direct3D as well if you have access to a PC ( also have a look at XNA ). If graphics isn't your thing, make sure you know how pathfinding (A* algorithm) or collision detection works.
Keep building your own projects, and find a good online community that can support you if you have questions. Employers want see that you are smart, but more importantly, that you are dedicated - game programming is very hard, don't let anyone tell you differently.
You can download free development tools for Windows here:
http://www.microsoft.com/express/download/
The one you want is Visual C++ 2008 Express Edition.
Perhaps check out some of the game programming links here: http://lazyfoo.net/SDL_tutorials/index.php
Those tutorials assume C++ which is used a lot in games programming so may be worth learning.
Or you could check out this tutorial if your interested in Java http://www.cokeandcode.com/node/6
Adam
You should check out Unity3D website. They have now a free version (named Unity) for personal and commercial use. You can use scripting with C# (possibly any .NET language), JavaScript, and Boo.
XNA would be a good fit too.
When you're just starting out, C, C# and C++ might be a bit complex to start with. If you're serious about game development, you will probably need to learn C++ eventually, but if you just want to quickly get some things done, you're already on the right track with lua.
Javascript is another language which is very similar to lua in many ways (and very different in others). One advantage of javascript is that everyone in the world has javascript installed on their computers. Another advantage is that it's very easy to learn. There are disadvantages too, but they are not nearly as bad as most "serious" programmers think. Javascript gets an undeserved bad rap.
Here is a very good tutorial for learning javascript:
http://eloquentjavascript.net/
It does not cover games programming, unfortunately- But it does cover concepts that are relevant to both games programming and application programming.
Here is a tutorial for javcascript that does cover games programming:
http://billmill.org/static/canvastutorial/index.html
you will need a web browser in order to follow that tutorial. This does not include internet explorer, so you will probably want to use safari, firefox, or opera.
Once you are comfortable making games in an easy language like javascript or lua, then it will not be quite so hard to learn to make games in a hard language like C or C++.
On the other hand, you might be happy just making games in the easy language, and that's okay, there's no rules that say you have to learn C or C++ to make good games. Good games come from good ideas, not difficult programming.
Priority Order for a game programmer.
Any subject that needs Analytical thinking and Logical Problem Solving.
Necessary knowledge in the following domains.
Mathematics
Data Structures
Computer Graphics
Physics
Artificial Intelligence
Computer Networks
Web Technologies

How can I learn higher-level programming-related math without much formal training? [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 6 years ago.
Improve this question
I haven't taken any math classes above basic college calculus. However, in the course of my programming work, I've picked up a lot of math and comp sci from blogs and reading, and I genuinely believe I have a decent mathematical mind. I enjoy and have success doing Project Euler, for example.
I want to dive in and really start learning some cool math, particularly discrete mathematics, set theory, graph theory, number theory, combinatorics, category theory, lambda calculus, etc.
My impression so far is that I'm well equipped to take these on at a conceptual level, but I'm having a really hard time with the mathematical language and symbols. I just don't "speak the language" and though I'm trying to learn it, I'm the going is extremely slow. It can take me hours to work through even one formula or terminology heavy paragraph. And yeah, I can look up terms and definitions, but it's a terribly onerous process that very much obscures the theoretical simplicity of what I'm trying to learn.
I'm really afraid I'm going to have to back up to where I left off, get a mid-level math textbook, and invest some serious time in exercises to train myself in that way of thought. This sounds amazingly boring, though, so I wondered if anyone else has any ideas or experience with this.
If you don't want to attend a class, you still need to get what the class would have given you: time in the material and lots of practice.
So, grab that text book and start doing the practice problems. There really isn't any other way (unless you've figured out how osmosis can actually happen...).
There is no knowledge that can only be gained in a classroom.
Check out the MIT Courseware for Mathematics
Also their YouTube site
Project Euler is also a great way to think about math as it relates to programming
Take a class at your local community college. If you're like me you'd need the structure. There's something to be said for the pressure of being graded. I mean there's so much to learn that going solo is really impractical if you want to have more than just a passing nod-your-head-mm-hmm sort of understanding.
Sounds like you're in the same position I am. What I'm finding out about math education is that most of it is taught incorrectly. Whether a cause or result of this, I also find most math texts are written incorrectly. Exceptions are rare, but notable. For instance, anything written by Donald Knuth is a step in the right direction.
Here are a couple of articles that state the problem quite clearly:
A Gentle Introduction To Learning
Calculus
Developing Your Intuition For
Math
And here's an article on a simple study technique that aims at retaining knowledge:
Teaching linear algebra
Consider auditing classes in discrete mathematics and proofs at a local university. The discrete math class will teach you some really useful stuff (graph theory, combinatorics, etc.), and the proofs class will teach you more about the mathematical style of thinking and writing.
I'd agree with #John Kugelman, classes are the way to go to get it done properly but I'd add that if you don't want to take classes, the internet has many resources to help you, including recorded lectures which I find can be more approachable than books and papers.
I'd recommend checking out MIT Open Courseware. There's a Maths for Computer Science module there, and I'm enjoying working through Gilbert Strang's Linear Algebra course of video lectures.
Youtube and videolectures.com are also good resources for video lectures.
Finally, there's a free Maths for CS book at bookboon.
To this list I would now add The Haskel Road to Logic, Maths, and Programming, and Conceptual Mathematics: A First Introduction to Categories.
--- Nov 16 '09 answer for posterity--
Two books. Diestel's Graph Theory, and Knuth's Concrete Mathematics. Once you get the hang of those try CAGES.
Find a good mentor who is an expert in the field who is willing to spend time with you on a regular basis.
There is a sort of trick to learning dense material, like math and mathematical CS. Learning unfamiliar abstract stuff is hard, and the most effective way to do it is to familiarize yourself with it in stages. First, you need to skim it: don't worry if you don't understand everything in the first pass. Then take a break; after you have rested, go through it again in more depth. Lather, rinse, repeat; meditate, and eventually you may become enlightened.
I'm not sure exactly where I'd start, to become familiar with the language of mathematics; I just ended up reading through lots of papers until I got better at it. You might look for introductory textbooks on formal mathematical logic, since a lot of math (especially in language theory) is based off of that; if you learn to hack the formal stuff a bit, the everyday notation might look a bit easier.
You should probably look through books on topics you're personally interested in; the inherent interest should help get you over the hump. Also, make sure you find texts that are actually introductory; I have become wary of slim, undecorated hardbacks labeled Elementary Foobar Theory, which tend to be elementary only to postdocs with a PhD in Foobar.
A word of warning: do not start out with category theory -- it is the most boring math I have ever encountered! Due to its relevance to language design and type theory, I would like to know more about it, but so far I have not been able to deal...
For a nice, scattershot intro to bits of many kinds of CS-ish math, I recommend Godel, Escher, Bach by Hofstadter (if you haven't read it already, of course). It's not a formal math book, though, so it won't help you with the familiarity problem, but it is quite inspirational.
Mathematical notation is is akin to several computer languages:
concise
exacting
based on many idioms
a fair amount of local variations and conventions
As with a computer language, you don't need to "wash the whole elephant at once": take it one part a at time.
A tentative plan for you could be
identify areas of mathematics that are interesting or important to you. (seems you already have a bit of a sense for that, CS has helped you develop quite a culture for it.)
take (or merely audit) a few formal classes in this area. I agree with several answers in this post, an in-person course, at local college is preferable, but, maybe at first, or to be sure to get the most of a particular class, first self-teaching yourself in this area with MIT OCW, similar online resources and associated books is ok/fine.
if an area of math introduces too high of a pre-requisite in terms of fluency with notation or with some underlying concept or (most often mechanical computation and transformation techniques). No problem! Just backtrack a bit, learn these foundations (and just these foundations!) and move forward again.
Find a "guru", someone that has a broad mathematical culture and exposure, not necessarily a mathematician, physics folks are good too, indeed they can often articulate math in a more practical fashion. Use this guru to guide you, as he/she can show you how the big pieces fit together.
Note: There is little gain to be had of learning mathematical notation for its own sake. Rather it should be learned in context, just like say a C# idiom is better memorized when used and when associated with a specific task, rather than learned in vacuo. A related SO posting however provides several resources to decipher and learn mathematical notation
Project Euler takes problems out of context and drops them in for people to solve them. Project Euler cannot teach you anything effectively. I think you should forget about it, if it is popular it does not mean anything. You cannot study Mathematics through Project Euler as it contains only bits and pieces(and some pretty high level pieces) that you're supposed to know in order to solve the problems. Learning mathematics means to consider a subject and a read a book about it and solving exercices or reading solutions, that's how you learn math. If it so happens that through your reading you find something that is close to some project euler thing, your luck , but otherwise Project euler is a complete waste of time. I think the time is much better invested choosing a particular branch of mathematics and studying that. Let me explain why: I solved 3 pretty advanced Projec Euler problems and they were all making appeal to knowledge from Number theory which I happened to have because i studies some part of it. I do not think Iearned anything from Project Euler, it just happened that I already knew some number theory and solved the problems.
For example, if you find out you like number theory, take H. Davenport -> Hardy & Wright -> Kenneth & Rosen's , study those.
If you like Graph Theory take Reinhard Diestel's book which is freely available and study that(or check books.google.com and find whichever is more appropriate to your taste) but don't spread your attention in 999999 directions just because Project Euler has problems ranging from dynamic programming to advanced geometry or to advanced number theory, that is clearly the wrong way to go and it will not bring you closer to your goal.
This sounds amazingly boring
Well ... Mathematics is not boring when you find some problem that you are attached to, which you like and you'd like to find the solution to, and when you have the sufficient time to reflect on it while not behind a computer screen. Mathematics is done with pen and paper mostly(yes you can use computers .. but that's not really the point).
So, if you find a real-world problem, or some programming problem that would benefit from
you knowing some advanced maths, and you know what maths you have to study , it can be motivating to learn in that way.
If you feel you are not motivated it is hard to study properly.
There is also the question of what you actually mean when you say learn. Does the learning process stop after you solved the problems at the end of the chapter of a book ? Well you decide. You can consider you have finished learning that subject, or you can consider you have not finished and read more about it. There are entire books on just one equation and variations of it.
The amount of programming-related math that you can learn without formal training is limited, but it's more than enough. But maybe you can self-teach yourself.
It all boils down to your resources and motivation.
To know mathematics you have to do mathematics not programming(project euler).
For beginning to learn category theory I recommend David Spivak's Category Theory for the Sciences (AKA Category Theory for Scientists) because its relatively comprehensible due to many examples that enable understanding by analogy and which quickly builds a foundation for understanding more abstract concepts.
It requires the ability to reason logically and an intuitive notion of what is a set. It proceeds from sets and functions through basic category theory to adjoint functors, categories of functors, sheaves, monads and an introduction to operads. Two main threads throughout are modeling databases in terms of categories and describing categories with annotated diagrams called ologs. The bibliography provides references to more advanced and specialized topics including recent papers by Dr. Spivak.
An expected outcome from reading this book is the capability of understanding category theory texts and papers written for mathematicians such as Mac Lane's Category Theory for the Working Mathematician.
In PDF format it is available from http://math.mit.edu/~dspivak/teaching/sp13/ (the dynamic version is recommended since its the most recent). The open access HTML version is available from https://mitpress.mit.edu/books/category-theory-sciences (which is recommended since it includes additional content including answers to some exercises).

Resources