Entry level computing text books [closed] - language-agnostic

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 11 years ago.
I am looking for some good text books in the public domain, which could be used to teach computing to school kids aged (10-15). I couldn't get any googling for it. Can somebody out there point me to good links. If text books are not available any information on what is taught commonly to this age group as part of computing curriculum will be helpful.

"Computing" is an awfully broad topic. Do you mean teaching them how a computer works (like on the inside), or how to use computer applications (word processing/spreadsheet/internet), or how to program them? I think all three would be good topics for 10-15 year olds.
My dad, a computer engineer, taught me much of the above on my own around that age (of course, it depends upon how motivated your students are). Mostly it was through experimentation, and asking questions. I'll point out a few good resources that I went through when I was that age. While these books aren't public domain, they're not that expensive (you can purchase all the books I mention below for under $100US at the time of this answer, cheaper than a single college textbook; the movies you could try finding at your local library). Note some of these are from MS-DOS 3.x era of 10-12 years ago, but honestly, the basic concepts haven't changed that much. The IBM PC platform still has the same architechture, it's just been upgraded. Applications have changed though.
How a computer works
You might want to teach about all of the different parts in a modern computer tower by opening one up and explaining to them what each part is and does, and how they hook together. It doesn't even need to work, you just need to be able to show them stuff. A good, simple book that explains the parts of a computer is How Computers Work by Ron White. I believe there is also a Magic School Bus episode on this ("The Magic School Bus Gets Programmed", Episode 50 From Season 4).
After that you may want to explain about the startup process, and how the computer first turns on, and doesn't know anything. Then you could explain about how the BIOS chip finds all the various things hooked to the motherboard, and then uses the hard-drive to start the Operating System (Windows/OS X).
There are some interactive programs that describe how all of these things work, although I can't think of any off the top of my head. There was an old learning program called "What's in that Box" that I used, but it's so outdated now its useless.
If you have really motivated students, you may want to introduce them to the electronic foundations of the computer, and binary numbers and gates. A good (teacher level) introduction to these things is Charles Petzold's Code. You try explaining how computers talk about things using 1s and 0s. Also, there is a Bill Nye the Science Guy episode on this (Season 4, Episode 78).
How to use applications
Honestly, I'm really not sure what to tell you here, but I imagine you can find lots of tutorials on this if you google. Explaining Word, Excel, etc. to students is beneficial and I imagine widespread.
NB: Teach students how to touch-type at that age. I didn't learn how to touch-type until I was in middle of HS, and it was hard. By that time, I had already learned how to do stuff on computers and play games on the keyboard, and so had my fingers memorized to go to all the wrong spots. If you catch them early, they'll do well.
How to program
The way I learned how to program at
age 10 was this way using a language called BASIC (BTW, that
link gives lots of other ideas for
learning how to program at a young
age). I'm certain others will have
good answers on this too. A book that I used to learn from after that was QBasic by Example, that a computer bookstore owner gave to me when I was 12 from his throw-away pile. That was my programming bible, and I read it cover-to-cover.
Note, though, that some students will want to do "cool" things when learning how to program; admittedly, how I learned would not be classified as cool. My old computer science prof from undergrad is involved in a program with inner-city kids that teaches them how to program robots using a language called LOGO, Sun's SunSPOTS, and LEGO Mindstorms NXT (depending upon the class focus). You basically give commands to the robot and it does them, and you can watch the robot do what you told it to do. Very cool, and interactive. It can get them thinking about programming, and how its about telling the computer/robot what to do, and how you can be a "robot commander" or "computer commander." This is, essentially, what computer programmers do everyday.
The new children's show Cyberchase teaches critical thinking skills that are a foundation to programming skills.
Just some thoughts to get you started. I think many kids would appreciate a hands-on approach; most of those in the industry got started because of hands-on exposure and not rote book-learning. The above early education, along with some books, worked for me, most of that stuff I rattled off from memory.
Also check out Woz.org; Steve Wozniak (programmer/hardware engineer, designer of the Apple ][) now teaches grade school children computers.

Try How to Design Programs: An Introduction to Programming and Computing, by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt and Shriram Krishnamurthi. The book uses a language called Scheme, which is freely available and designed to be used by students. The book is available online at www.htdp.org.
The book was designed to be used by high school and university introductory programming classes and is intentionally written to teach how to design a program, not just how to use the syntax of a particular programming language. It stresses things like how to design readable programs, thinking about the structure of your program before typing anything, and general programming concepts such as recursion and encapsulation.

Think Python would be my first choice for teaching programming. The book is free, python is free, and some really good IDE's are free - Stani's Python editor or Wing IDE 101. This provides a really good environment and set of resources for teaching programming to kids in that age range. If programming is a bit much for the younger kids, PyGame can be used to get simple graphics on the screen fast - and that is a great way to hold onto attention span.
EDIT: I just ran across a great book for introducing computer programming to kids (and other beginners): Hello World! Computer Programming for Kids and Other Beginners. This book uses Python as the programming language, and the projects are all simple games. Overall, this is a great book for introducing kids to computer programming.

In the UK schools tend to have some affiliation with Microsoft so:
Word
Excel
What is a network
Dinner-time Java class (if lucky)

What areas are you trying to focus? MIT open course ware offers a few good open texts on different programming languages - but doubtlessly intended for an older audience. I think that finding books specific to this age group on general computing will be a challenging task, but there are always good websites that the kids can explore addressing a variety of different topics.
As mentioned, unless you know the kids to be at a more advanced level (which many that age are now days) I'd focus on word processing, web use (searching & responsible surfing) and things of that nature. Googling "introduction to for kids" will often yield useful websites on things of such nature.

Check out Squeakland. It's specifically about computers & teaching.

Not a book, but could looks like a pretty good resource.
KidsDomain.com

The C# Yellow book by Rob Miles is a good and free resource to teach students C#. It is used by the Department of Computer Science in the University of Hull as the basis of the First Year programming course

For younger kids especially ToonTalk is an awesomely cool introduction to programming. It even does concurrent programming from the very beginning. ToonTalk teaches foundational principles while being extremely engaging with a 3D interface, animals to carry out computations and so on. I recommend it very highly!

Related

How to get more involved in programming that benefits science and the advancement of the human race [closed]

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center.
Closed 12 years ago.
My day job is a good one, but there are times I long to pour my programming efforts into something that benefits science at large.
Something more than simply letting BOINC fold proteins and munge SETI data during my spare cycles.
Is anyone doing this now? Are there any projects on which I could get involved?
One of the most satisfying feelings I ever had was to learn that the lead scientist on a project I had once worked won a Nobel Prize for his work on that project. (The Nobel being what it is, this was over fifteen years after I had moved on and also several years after that science had been done. Mind you, there were literally hundreds of programmers involved and any competent programmer could have done what I did, but it was nice to know I had contributed.) So, I can certainly understand where you're coming from.
You don't say where you're working now, but if you're not currently working on a science project, why don't you get a job on one? You may have to brush up your science background, but if it's what you're interested in, go for it!
You don't say where you live. In the U.S., at least, there are plenty of opportunities to get science related programming jobs:
In the Washington, D.C. area there are a lot of federal government agencies which do scientific research in a variety of fields. A few of these are: the National Institutes of Health (NIH), the National Oceanic and Atmospheric Administration (NOAA), the National Institute for Standards and Technology (NIST), the U.S. Department of Agriculture (USDA), and the National Aeronautics and Space Administration (NASA). In my experience, it's fairly difficult to actually get a government position; however, there are lots of companies with contracts to these agencies to provide support, including programming and other IT work.
In other areas of the U.S. there are still opportunities in at least some of the above (and other) federal agencies as many of them have operations centers in other areas of the country. Perhaps best known is that NASA has 11 major centers in 9 different states (and D.C.) and operations at smaller facilities in other states as well.
As has been mentioned in other answers, universities are a resource for science-related programming jobs also. Many of these have grants of some sort which fund the research.
I'm not familiar with the situation in other countries, but I'd expect the situation to be at least somewhat similar in other "major industrialized nations".
You might also ask around a local university for graduate students who need software tooling for research projects. Many physicists end up rolling their own tools (simulators, etc.) and I'd imagine they'd be ecstatic to have a quality programmer at their disposal. Maybe you'll end up getting connected with higher-profile projects; or maybe you'll write the software that some kid uses to change our view of reality.
Good luck with whatever you find.
This is likely not what you are looking for, but if you are looking to help society and those in need, the following organization does a lot of good: givecamp: Coding for Charity.
For a different type of challenge, there are a lot of open source projects that could always use another helping hand. How to get involved in an open source project.
I was not aware of this, but there is an open source science software if you want to stay ultra-mathematical at The OpenScience Project.
There's an app for that.
Ok, it's a web site, not an app:
http://www.volunteermatch.org
Do a quick google for "socially relevant computing" it's a movement my old professor started here at SUNY Buffalo. Microsoft and many other universities have started to pick it up. It's a great idea and really makes you feel good when you get a working product out the door.
In general, like Superstringcheese said, ask at a local university.
I know that everyone knows exactly what you're talking about when you say, "science at large," but I do not. To categorize crudely, there are two types of programming gigs:
The kind in which you're working for the evil empire, making their mutual funds invest better, or figuring out how to sell to companies better, etc. etc.
The kind in which you are working somewhere in the evil empire, but your project has a "pure" technology focus (or may get one). This includes open source (and open source with pay-for-support agreements :) ).
Just think about how the Apache project has benefitted science (or MySql, or even Java). The closer you can get to a pure technology focus, the more chance you have of helping. This is my answer, however...
If you want to get your geek on and have an immediate link with "science," meaning dudes (and dudettes) in white lab coats doing pure research for no personal gain... those people usually work in universities and use the research assistant or teaching assistant who "knows the most about coding" (I should know, I was there once). If you really want to help out, walk over to your local university, and head directly to the department that strikes your fancy. Ask the administrative assistants who their boss is. When you find the main administrative assistant who runs the show, they will be able to tell you which professors you can talk to, what you should wear to talk to them, and what kind of stuff you should say so they'll be interested in talking to you. Surely when you offer your services as a coder, you'll get a taker or two.
If you do this, don't forget to think about when you'll start charging money. That way you can quit your day job and just do "science at large" full time.
Something more than simply letting BOINC fold proteins and munge SETI data during my spare cycles.
Both BOINC and SETI would welcome new volunteer programmers too.

Transition from business to game programming [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
Does anyone have any idea how it would be possible to transition from business to game programming? How would anyone get a start in game programming? It seems much more exciting and rewarding (better paying too?). But it seems like most of the jobs out of school are for business programming. Any advice or insight on how to do it or if it can be done?
This is not a direct answer to your question, "How can I transition?" But instead I'd like to recommend you not go down that road or at least be realistic about what it is like. To back that up I'll quote some stats from the 2004 igda survey on quality of life for game developers:
34.3% of developers expect to leave the industry within 5 years, and
51.2% within 10 years.
Only 3.4% said that their coworkers averaged 10 or
more years of experience.
Crunch time
is omnipresent, during which
respondents work 65 to 80 hours a
week (35.2%). The average crunch work
week exceeds 80 hours (13%). Overtime
is often uncompensated (46.8%).
44%
of developers claim they could use
more people or special skills on
their projects.
Spouses are likely to
respond that "You work too much..."
(61.5%); "You are always stressed
out." (43.5%); "You don't make enough
money." (35.6%).
Contrary to
expectations, more people said that
games were only one of many career
options for them (34%) than said
games were their only choice (32%).
Many years ago I created a couple of game development websites on my own and then was one of the founders of GameDev.net. One of the reasons I did it was to make contacts and get into game development professionally. It definitely worked, a couple of the people who were co-founders have gone on to work in the industry and I'm sure I could have gone that way too but everything I learned about the industry taught me the following things:
There is an endless supply of developers out there who believe game development would be really cool. The people hiring for the industry know this and aren't going to pay you nearly as well because they rely on this basically inexhaustible pool of people.
Many of the developers within the industry may be good with 3D or sound or many other topics but often they are inexperienced with basic software practices that you or I might consider essential. In that category I would put things like source control, test first design, design patterns, etc. Even when they know better the time crunch to get stuff out the door often makes them toss good software practices in a foolish attempt to save time.
Working on a game for two years can quickly become no different than working on any other program for two years. That is, when you have to dig around in the guts of the program day after day and deal with its bugs and only with that one game it's not going to seem all that fun anymore. In fact, you may find yourself playing other games just to get away from it for a while.
What says you are going to be working on Half-Life X or one of the few dozen cool games that come out every year anyway? Remember, somebody is out there building the game that goes with the next Will Farrell movie and it's probably going to be you. Look around at most of the dreck that comes out. That stuff doesn't develop itself.
It's quite a transition! The biggest difference in mindset is moving away from the business world's reliance on abstraction to one where you're focused much more on the particular hardware you're targeting and getting things to run within strict budgets of time and memory. Game programming is a lot more like embedded programming than it is like web programming -- you have to think about the exact memory footprint of everything and CPU time is at a huge premium.
This is even true of being an MMO server programmer, because a) the server has to answer to each client command within 80 milliseconds to feel responsive, and b) the bigger the footprint of the game on the server, the more hardware you have to buy, and that costs real money.
First up you should learn C++ if you haven't already. Almost every game is written in C or C++ these days. Game consoles have strictly limited memory, and if you allocate one byte past 512mb it doesn't slow down, it crashes; at the same time, each trip through the main app loop has to complete in 33ms or less, so we can't rely on garbage collection and smart pointers. The game-development world is one of those special applications where you really need to do all those optimizations that people here say you never need to do any more.
Also, bone up on your math. Games are built out of linear algebra and kinematics -- not just the graphics, but the state of the world and the behavior of every character and object. I like Eric Lengyel's book for game math; it's been my bible for years (though there are many other good ones).
You could try to learn some graphics math and programming as well, but this is sort of a subspecialty now and typically only a couple of people on a game team are really working at the level of DirectX calls. I suspect you're more interested in game logic and server backend, which is less specialized.
Make games. There are many frameworks to help you get started. XNA has the advantage of being a real-world product that actual games are shipped with, unlike PyGame or SDL which are quick to get up and running but have vanishingly little commercial support.
A common route people take transitioning into the game industry is starting as a game development team's Tools Developer.
These tools are often written in higher level languages like C# and are used to aid in the development of the games. For example, you might help maintain or modify the teams in-house map level editor or help develop the tools that convert one media file format into their propriatary file format.
After you have spent some time as a tools developer you can start picking up domain knowledge on the side and naturally transition into one of the many types of game programmers:
Game physics programmer
Artificial intelligence programmer
Graphics programmer
Sound programmer
Gameplay programmer
Scripter
UI programmer
Input programmer
Network programmer
Game tools programmer
Porting programmer
Technology programmer
Lead game programmer
Modern games are often made by huge and highly fractionated teams in terms of roles. So, it might be worth it to pick one of the above specialities and begin studying right away as you attempt to get your foot in the door. It almost goes without saying that you should be proficient in C++ and one of the major graphics libraries (OpenGL, DirectX, etc). Don't stress about learning both, just pick one and learn it. Generally people who know one very well can transition to the other if they need to.
If you're a good programmer you can do it, game programming requires much better understanding of the platforms and tools you use to develop the games.
I think it's much harder to get into the game programming industry than just the regular industry.
The best alternative is to create your own games, get exposure, if you're good enough you'll find your way.
There are many really good competitors though, just check out the many sites that offer free flash games, you can start posting your work to those sites.
The general story is that the way to get into game programming is to start doing it. There's no point in even showing up on a game company's doorstep without a demo of whatever you want them to pay you to do.
If you're coming out of business programming, that'll count against you and be a culture shock besides. The game industry runs on single 20-something males who can be taught that 120-hour work weeks are just how things are done.
I'd recommend keeping your current job for a while and finding a mod team or open source game that could use help. Try to find one that looks likely to create a playable game rather than vanish, at a guess I'd say it will look better on your resume than some test demos both because you'll probably be working on something more advanced than you would at home and it shows you can work in a games team.
I was wondering the same thing!
I've noticed there are a number of good game-programming books at Barnes & Nobles, probably not a bad place to start.
In general though, I'd start looking at books, maybe coding some prototypes, and start looking at what companies are in your area, what tools they use, how you could basically make yourself valuable to them!
By the way, does anyone happen to know if there are particular engines similar to what WOW / Guild Wars are using for MMORPG game development in particular (my main interest)?
I think it is not an easy switch. Game programming is not something you can learn overnight. I suspect an entry level will be quite high if you want more than a graduate salary.
A long time ago I worked in a company that worked in the online gambling field. I then decided I wanted to be engaged in more serious activities.
You really need to answer one question - is that what you want because you like it or just because it seems to be rewarding right now. In the latter case you'll need to understand you'll be plating catch-up and noone can promise the salaries will be as high as you wish by the time you get your skills high.
Maybe consider some certifications/training so that you can step-up your current career position in business programming?
If however it is what you really want then just follow you heart. Show your interest and commitment, potential employers will notice it and hopefully prefer you over a guy who has applied just because the salary was looking attractive.
On the other hand, businees developers/consultants (for example in SAP world) earn quite a generous ransom.

Any advice for getting started in Web Programming/design [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 7 years ago.
Improve this question
A little backround:I'm a 22 yr old with just a high school degree and a lot of free time (college did not work out). I am completely new to web programming and I have taken a couple day classes in Photoshop, Illustrator, Dreamweaver, Fireworks, and InDesign. Seeing as these are only day classes, I am by no means a pro at any of them but I am getting more familiar with the Adobe programs. My teacher who was a freelance web designer told me that along with those Adobe programs, if I could learn HTML, XHTML, CSS, Flash, and Java that I would be in good shape regarding getting a job. She also told me if I could get good at both the design and programming sides, I could really get a good job.
I was just wondering if anyone has some advice or information for basically a noob who is starting from scratch and really wants to get into this profession. I've gotten on lynda.com to try and get going on the programming stuff and I'm just trying to turn some of these skills into a job. Best case scenario is that eventually I could be doing freelance and supporting myself...But that is obviously very far away. ANy advice would be greatly appreciated....
Advice You Don't Want To Hear
figure out what went wrong with college - at 22, you should have graduated by now, or close to it
fix it!
focus!
go back to college with a new focus and resolve - you now have a goal
If You Can Teach Yourself, You Can Graduate College
if the problem was boring general ed classes, look into CLEP tests to test out of them
if the problem was curriculum, take classes you are interested in first
if the problem was time, start part-time
if the problem was school choices, research different colleges - many online universities are now accredited
if the problem was self-discipline, then freelancing is not a good career choice
I'm not saying that you can't do what you asked about, but your chances of getting a good job are greatly increased with a degree, even a 2-year degree.
Obviously, this is not the only path, but it is arguably the easiest path. Marketing yourself when you have no degree and no experience is difficult, even if you are overflowing with talent and creativity. (It's easier now with the Internet, but by the same token the marketplace is that much more crowded.)
Good luck!
I'm currently a software engineering consultant. Familiarity with the following list of things helped me get an interview and an offer right out of college.
Note: HTML, XHTML, CSS... these are just markup languages, and chances are they'll barely be glanced at if you put them on a resume. Flash (not so much) and Java are more impressive, but you might want to look into the following additional topics/technologies to really spice up that resume:
Get comfortable with OO (Object-Oriented) principles (inheritance, polymorphism, abstract vs concrete classes, encapsulation, etc.)
Java is a great open-source beginner programming language. I'm primarily a .NET developer so I tend to favor that, but I started with Java in my college days and picked up on it very quickly
.NET 2.0, 3.5 -- C# and VB.NET (LINQ, lambda expressions, anonymous methods, etc.) -- You can start with the Express edition of Visual Studio, but may eventually want to get the full version
Move on to higher level programming concepts such as Design Patterns (MVC/MVP, Command, Facade, Adapter, the list goes on and on) -- I'd recommend the Gang of Four book (Google will tell you which book it is)
Database Management Systems
Learn SQL, be comfortable JOINing, using GROUP BY and HAVING clauses, and familiarize yourself with aggregate functions
Tackle DB design concepts (relational modeling especially)
Start with the free ones, like MySQL or PostgreSQL, then...
Focus on Microsoft SQL Server or Oracle (these are the big cats)
Go deeper with things like Normal Forms, data warehousing (OLAP, MOLAP, ROLAP, cubes, etc.)
Testing: look into unit testing and test-driven development
Software quality assurance - defect prevention techniques, etc. (this goes along with some of the points mentioned below)
Look into methodologies like Waterfall, Agile, and XP (eXtreme programming), perhaps even PSP and TSP
Learn to use Source/version control systems such as CVS, SVN, and VSS (Microsofts, unfortunately not free -- the first two are)
You could get really crazy and learn about static code analysis, but definitely look into code reviews and code inspections
EDIT: I thought I'd give you some books to check out (no particular order):
Introduction to Algorithms, 2nd ed.
Thomas H. Cormen, Charles E.
Leiserson, Ronald L. Rivest, and
Clifford Stein, 2002.
Artificial Intelligence: Structures
and Strategies for Complex Problem
Solving, 5th edition. George F.
Luger, 2005.
A First Book of Visual C++. Gary J.
Bronson, 2000.
An Introduction to Object-Oriented
Programming with Java, 3rd edition
(Java 1.5) update. C. Thomas Wu,
2004.
Mathematical Structures for Computer
Science, 5th edition. Judith L.
Gersting, 2003.
Mastering the Requirements Process,
2nd edition. Suzanne Robertson and
James Robertson, 2006.
Data Management: Databases and
Organizations, 5th edition. Richard
T. Watson, 2006.
Software Quality Engineering:
Testing, Quality Insurance, and
Quantifiable Improvement, 1st
edition. Jeff Tian, 2005.
Artificial Intelligence: A Modern
Approach, 2nd edition. Stuart
Russell and Peter Norvig, 2003.
Software Architecture in Practice,
2nd edition. Len Bass, Paul
Clements, and Rick Kazman, 2003.
Unit Testing in Java: How Tests
Drive the Code, 1st edition.
Johannes Link and Peter Frohlich,
2003.
Practical PostgreSQL, 1st edition.
John C. Worsley and Joshua D. Drake,
2002.
PSP: A Self-Improvement Process for
Software Engineers, 1st edition.
Watts S. Humphrey, 2005.
TSPi: Introduction to the Team
Software Process, 1st edition.
Watts S. Humphrey, 2000.
I guess that's all I have for now. If you can get these things down, your skill set should be pretty solid, and you'll be on your way towards being another member of the software engineering world. I'm not sure that anything you do on your own will give you the same level of knowledge as college courses, but I'm sure this is a good start. This is a hefty list; don't be surprised if obtaining these skills takes a couple of years.
As far as your graphic design skills, depending on the type of job you find yourself in, they may be more important than your programming skills. On top of either skill sets, make sure your soft skills are polished and that you are confident in your work.
Don't create websites by exporting to web from your design programs. If you see yourself creating slices and mouseover effects in Fireworks STOP and hit yourself in the head with something heavy and blunt.
Learn XHTML and CSS and learn them well. Try to be as semantic as possible.
Pick an all inclusive framework and build yourself a web app like a blog. As much as I love ASP.NET it is not all inclusive. It is massive. It will throw you in every direction. The same can be said of Java. Try something simple like Django or Rails.
Practice, practice, practice, and realize that all that you know is crap and that you need to get better.
Go back to 4 and do it till you die.
Ok, this may not be popular - but is drawn from my own experience at being a "self taught" programmer. The bottom line for getting a job at a company as a "programmer/web developer" is about "0%" without some type of degree/certification/on-the-job experience.
You may have noticed "the problem" with that statement - without a degree or certification, how do you get "on-the-job experience"? Welcome to "the real world".
My path to becoming a developer started with "the desire" ... and getting a job doing something else (Semiconductor manufacturing if you must know). I learned programming on my own as a "hobby" and continually looked for ways to apply it to my job tasks to improve my "job performance". I eventually applied for positions that would bring me closer to "programming" to make better use of my growing skills until I had enough "job experience examples" to apply for a programmer position.
That took "8 years". Regardless of what you think about college, getting "any" degree related to computer science at one would have cut that in half. You can do it on your own, but until you have some outstanding examples of how you used your programming skills to solve "real business" problems, you won't be considered over anyone with a degree "just out of school". When you finally do make it, you will notice that the "just out of school" folks who don't know jack about solving "business problems" will probably start with a better salary than yours.
The environment is probably better now than when I started (25 years ago - :-)) but the same general principle applies - the degree may not mean you know how to program, but it will get you past the "HR" screening process so you can get the job. :-)
Good luck ...
Create a project that would actually be useful and non-trivial for you: A forum or message board, or a job posting site, for instance.
But here's the important part: Give yourself a firm deadline. You can do quite a lot in, say, 4 weeks, and if you keep to a schedule like
database backend in week 1
login system in week 2
messaging in week 3
and so on, you can broadly cover many related subjects. Your project won't be pretty, but if you start out being a perfectionist, you'll never finish it, and will end up knowing only the first half of the technology in your project really well.
As you get more experience, you can go back and polish things up or rewrite stuff you did wrong, and then you have a portfolio that accurately reflects your current skills.
Learning HTML, XHTML, CSS, Flash, and Java plus several graphical programs is a pretty tall order. You'll overwhelm yourself trying to do that. Pick one and learn it then move onto the next. Grab a book or search the Stack Overflow archives for recommended online tutorials.
The best way to learn is to pick a project and just work on it. Then learn on demand as you find a need. The end product won't be the highest quality, but you'll learn how everything works together.
For serious web developer it is very crucial to understand how websites work inside out.
As you are starting from scratch I strongly recommend W3Schools.
With this website you can learn from Very Good Tutorials, then Try It Yourself and Test your skills.
Here are the steps for an absolute beginner:
html
css
JavaScript (Client Side Scripting)
PHP (Server Side Scripting)
SQL (DataBase applications)
DOM(Document Object Model)
AJAX
Drupal/Joomla/Plone (Content Management Systems)
NOTE: Type the code rather than cut-paste or using tools like Dreamweaver/FrontPage.Use the tools only after you are very comfortable with manual coding.(Believe me this helps a lot)
Enjoy!!!
The best I could suggest is that you create a fake need, for example create a simple file read / write app, or something that can toss information onto a database and retrieve it.
A more advanced project you could start on after would be a tagboard of sorts, with Create/Update/Read/Delete (CRUD) functionality, and add features to it in order to get practice with cookies, login, more database functionality, etc. You could also try using an image editor that just draws a clock showing the current server time the request was recieved as practice with images.
I would recommend learning html and css first. That is the cornerstone of anything you'll do on the web. For graphics, learn photoshop. Once you can make basic html websites, I would then choose to pursue either asp.net or flash. There are good jobs in both fields. I would say pick asp.net if you like programming, and flash if you like the visual aspects of web development more. As an asp.net developer I would say 90% of my day is doing database related work with MS SQL server. Really focus on databases. Finally, if you develop with asp.net, you should program in C# rather than vb.net. I started as a vb.net programmer and had to switch to C#, simply because most of the professional world uses it, hence it will be easier getting a job.
Look into local Code camps and user groups, create a project and build it, start by lerning HTML, CSS and javascript, then look at learning PHP is a great starter language for doing beginning web development the code side.
as far as getting a job without a degree, start a little lower on the food chain, I started in the QA lab, from there you can learn from the development side good practices and the do's and don't. Also as a QA person you learn in a hurry who are good developers and who are not simply by the work they produce.
W 3 Schools is a neat beginner/novice reference and tutorial site.
The site covers most technologies used in web-development.

The value of hobby game development

Does attempting to develop some sort of game, even just as a hobby during leisure time provide useful (professional) experience or is it a childish waste of time?
I have pursued small personal game projects on and off throughout my programming career. I've found the (often) strict performance requirements and escalating design complexity have taught me some of my most useful programming lessons.
In these projects to name just a few, I very quickly came face to face with: "Everything is fast for small N". I also discovered the hard way about using basic object oriented design principles to manage complexity.
In a field where many technologies and topics can be quite dry/dull, I think hobby game development is important in motivating new (and not so new) developers to brush up on essential skills while having fun at the same time.
This question talks about hobby projects in general, however here I am more interested in game projects specially and how valuable they are to professional programmers.
You can learn a lot from game development. Game development requires a discipline that you can't find in other programming projects.
Here are just a small set of things game development has taught me:
Optimization for speed
Sacrificing computational depth for speed
Developing under small constraints of memory
Building a system that works like an operating system but is geared toward speed.
Keeping hundreds to thousands of objects in a tree, each with their own unique characteristics
Some areas of game development have great academic value (like Artificial Intelligence, Procedural Algorithms, etc)
It doesn't matter how much of a hack the code is, as long as the gameplay is there. Translating this to other disciplines, the objective of programming is to make the customers happy, regardless of how clever or ugly your code is.
Because game programmers are forced to use less resources, they become better programmers.
I think extra-curricular development is a good thing whether it is games or not. For a start you can try different technologies and development platforms and it is a great way of keeping your skills up to date. I prefer mathematical algorithms to games, but that's just a preference which doesn;t speak to the value of doing it at all.
If you bring any of this back to your employer then they are getting the benefit of your broadening knowledge which you are gaining on your own time. That is good for them too.
I say code away to your heart's content!
Games have some of the most complicated processing that's "agreeable" to a layman, hobbyist programmer. In high school, all I wrote were games. Want to explore physics? Write a game. 3D graphics? Write a game. High performance computing? Write a game. AI? Economics? Military Strategy? Natural Language Processing? Theorem Proving? Write a game.
You don't have to publish it, you don't have to document it, you don't even have to PLAY it, you just need to fiddle with it, and you'll learn any algorithm you find interesting as you try to apply it -- in a game.
Games are interesting because of the wide domain they can cover. Everything else is just data processing, and you can do that at work!
Game development (or any other sort of personal programming) is a good way to:
learn new languages
learn new concepts (TDD, OO, etc..)
Use and evaluate different tools/technologies (CI, automated tests, etc...)
These sorts of projects give you the freedom to explore different aspects of the programming world that you are not able to do at work. If you are stuck doing line of business applications at work, you probably won't deal with a physics engine, or spacial rendering. But you could explore these subjects in your game.
This would also provide you with a good portfolio of code you can bring if/when you interview for new positions. Assuming the code you write is in decent shape...
If you are looking to get a job in game development, you should absolutely be doing some hobby development on the side while you look. Being able to send a more-or-less complete game along with your resume makes it stand out from the crowd. When we list a game programming job we get a ton of resumes, and while I'm thrilled to hire people with no industry experience to fill them, it's kind of hard to pick between all the options.
Sitting down at a problem and solving it with the tools at hand (whatever the problem is, fixing a database, programming an interface or making chess in ascii) is helping you becoming a better programmer.
Hands down.
I think more importantly, is the hobby game development making you happy?
Many areas of game development can absolutely be applicable on a more professional level, but if that's the only reason why you're developing games as a hobby then you may want to re-evaluate the situation and perhaps put your efforts toward various open source projects that could proudly be displayed on a resume (not that hobby game developing couldn't) or discuss at an interview.
Your hobbies should be something you love doing and if you love game development, then absolutely stick with it and hey, maybe you'll find yourself doing it professionally which ultimately seems like the ideal situation for your scenario.
I don't see how anything that enables you learn, practise and experiment could be considered 'childish'.
Besides, if you are aiming to produce a decent (even 'professional') game, it will almost certainly require learning and mastering skills that are directly transferable to may 'conventional' roles. Optimisation, testing, cross platform working, UI design and usability... the list goes on.
YES
I taught myself C (and Psion's proprietary OO extensions) using the Psion Series 3 TopSpeed C SDK and wrote several games which I released under the GNU license. (Previously I had quite a bit of experience in Turbo Pascal and Pascal on the Amiga and Borland C++ 3.1 on Window 3.1 in a financial analysis internship doing signal processing, but when I got the Psion, I have to go back to C and I used K & R to get a good solid basis for that code.)
Then I parlayed the expertise I learned about the Psion platform into a 3 year gig doing mobile development using their industrial handhelds where I gained experience in databases, too. It was a huge turnaround for them, the product was in disarray and I had a ton more experience in the platform than anyone else - just from that year writing games.
I parlayed that into a Windows development gig where I eventually became IT director and got massive experience with SQL Server, Windows, ASP, data centers, DR, you name it.
Then I moved into data warehouse consultancy.
I owe a lot of it back to that first foot in the door where I really was able to make a massive difference to that first company because of the platform experience in C and that particular C-based library system.

Suggestions on starting a child programming [closed]

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 11 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.
What languages and tools do you consider a youngster starting out in programming should use in the modern era?
Lots of us started with proprietary Basics and they didn't do all of us long term harm :) but given the experiences you have had since then and your knowledge of the domain now are there better options?
There are related queries to this one such as "Best ways to teach a beginner to program?" and "One piece of advice" about starting adults programming both of which I submitted answers to but children might require a different tool.
Disclosure: it's bloody hard choosing a 'correct' answer to a question like this so who ever has the best score in a few days will get the 'best answer' mark from me based on the communities choice.
I would suggest LEGO Mindstorm, it provides an intuitive drag and drop interface for programming and because it comes with hardware it provides something tangible for a child to grasp. Also, because it is "LEGO" they might think of it as more of a game then a programming exercise.
My day job is in a school, and over the past few years I've seen or taught (or attempted to teach) various children, in various numbers, programming lessons.
Children are all different - some are quick learners, some aren't. In particular, some have better literacy skills than others, and that definitely makes a difference to the speed at which they'll pick up programming. I bet that most of us here, as professional computer programmers and the kind of people who read and post to forums for fun, learnt to read at a pretty young age. For those kinds of children, and if it's your own child who you can teach one-on-one, you could do worse than JavaScript - it has the advantage that you can do real stuff with it right away, and the edit-test cycle is simply hitting "refresh" in the browser. It gets confusing when you start to run in to how JavaScript does everything asynchronously, and is tricky to debug, but for a bright child under close tuition these problems can be overcome.
LEGO Mindstorms is definitely up there at the top of the list. Most schools now super-glue the bricks together to create pre-made models that can't have bits nicked off of them, but this shouldn't be a problem at home. Over on the Times Educational Supplement site (website forum for the UK's weekly teaching newspaper), the "what programming language is best for children?" topic comes up pretty regularly. Lots of recommendations over there for Scratch as an alternative to Mindstorms - bit more freedom than Mindstorms, again probably better for the brighter student who could also be given a soldering iron.
I've found that slower pupils can still have problems with Mindstorms, even though the programming environment is "graphical" - there's still a lot going on on screen, and there's a fair bit to remember (this was an older version, mind - haven't tried the snazzy new one yet). In my experience, the best all-round introduction to programming is probably still LOGO - actually a considerably more powerful language than most people give it credit for. The original Mindstorms book by Seymour Papert (nothing to do with LEGO - they nicked the title of the book for their product), one of the originators of LOGO, is the canonical reference for teaching programming to children as a "thinking skill" and for the concept of Constructionism in learning.
We've had classes of 7 or 8 year-olds programming LOGO. Note that we aren't aiming to make them "software developers", that's a career path they can decide on at some point post-16. At a young age we're trying to get them to think of "computer programming" as just another tool - how to set out a problem to be solved by a computer, in the same way they might use a mind map to help them organise and remember stuff for an exam. No poor child should be sat down and drilled in the minutia and use of a particular language, they should be left to explore and figure stuff out as they like.
I'll second Geoff's suggestions of Phrogram (used to be KPL), and Alice.
My only other suggestion is Lego Mindstorms NXT. The NXT's programming language is drag-and-drop, is very easy to use, and can do some very complicated tasks once you learn it. Also young boys usually like seeing things move. :)
I've used Alice and NXTs with some young kids, and they've taken to it very well.
Two possibilities are:
Scratch - developed at MIT - http://scratch.mit.edu/
and
EToys from the One Laptop per Child fame - http://wiki.laptop.org/go/Squeak
Full disclosure: I'm one of the guys who invented Kid's Programming Language, which is now http://www.Phrogram.com, which others have recommended here. Let me add some programmer-oriented info about it.
It's a code IDE, rather than drag-and-drop, or designer-based. This was intentional on our part - we wanted to make it easy and fun to do real text-based programming, particularly programming games and graphics. This is a fundamental difference between us and Alice and Scratch. Which you pick is a matter of the kid, their age and aptitudes, your goals. Using them serially with the same beginner might be a great way to go - if you do that, I would recommend Scratch, Alice, Phrogram as the order. Phrogram has worked best for 12 years and up, but I know dads with 6 year olds who have taught their kids with it, and I know 10 year olds who have taught themselves with it.
The language is as much like English as we could make it, and is as minimal as we could make it. The secret sauce is in the class-based object heirarchy, which is again as simple, intuitive and English-like as we could make it. The object heirarchy is optimized for games and graphics. 3D models are available, and 2D sprites. Absolute movement using screen coordinates is supported, or relative movement ala LOGO turtles - Forward(x), TurnLeft(y).
The IDE comes with over 100 examples, some language examples (loops), some learning examples (arrays), some fully-functional games and sims (Pong, Missile Command, Game of Life).
To give you a sense of how highly leveraged we made the language and the IDE: with 27 instructions you can fly a 3D spaceship model around a 3D skybox, using your keyboard. The same with a 2D sprite is 12 to 15 instructions.
We are working on a Blade-compatible release of Phrogram that will allow programs to run on the XBox 360. Yeah, the XBox, on your big TV. Nice motivator for getting a kid started? :)
Phrogram includes support for class-based programming, with methods and properties - but that's only encapsulation, not inheritance or polymorphism.
A tutorial and user guide is available,
My own ebook is available at Amazon and other places online, "Learn to Program with Phrogram!," and gets a beginner started by programming the classic Pong.
Phrogram Programming for the Absolute Beginner, by Jerry Lee Ford, Jr., is also available, as a paperback, at Amazon and elsewhere.
For a child, I would go with Alice. Any kid is going to like the drag-and-drop interaction that Alice uses better than trying to remember how to spell and punctuate any programming language. He/She will learn the basic programming structures (conditionals, loops, etc.) and will experience the fun of building an animated program they can show off to other family or friends.
A beginner CS class at the local community college actually uses Alice to teach programming in a language-independent way. It provides a good foundation for moving into programming in a particular language (or a few languages) down the road.
I recently saw a presentation about GreenFoot (a java based learning environment for children). It looked awesome. If I would have kids, I would give it a try
Link to the presentation
It is a very playful environment, where you could start with very basic methods. The kids learn thinking in an object oriented way (you cannot instantiate an animal, but you can instantiate a cat). And the better they get, the more of Java you can uncover for/with them.
I'd go with Scratch, some points regarding it.
It's a graphical programming language. It isn't text based (this might be
positive or negative). It does make it more intuitive and easy for kids (7 and
up).
It's actually highly object. The objects you write these graphical scripts have the code attached to them and can be reused and moved around.
Very Important: quick and impressive results. Kids need to get going fast and get results in order to get hooked.
I'd like to note that although many of us started programing at a young age in basic or logo and because programmer later in life doesn't mean those are good languages to start with. I think that kids today have much better options, like scratch or Alice.
Text based languages (python, ruby, basic, c# or even c) are dependent on external libraries and tools (editors, compilers) while something like Alice or scratch is all inclusive and will teach kids (not aimed at teens) programming concepts. Later they can move on and expand their learning.
Check out Phrogram (formerly KPL) and Alice
I'd say: give the kid a real C64, because that's how I got started. But, today... I'd say Ruby, but Ruby is a bit too chaotic. BASIC would be better in the long run. Processing is easy to learn, and it's basically Java.
The reason I recommend a C64 is because it's BASIC, but you still have to learn certain computer-related things, like the memory model, pixels, characters, character maps, newlines, etc. etc, if you want to do more advanced stuff. Also, if your kid finds it boring, you know his heart really isn't into coding.
I would pitch LOGO. It was something that was taught in my elementary school. It gives nearly immediate feedback, and will teach really basic programming concepts. Moving that little turtle around can be a lot of fun.
For a child, I would go with Alice.
Here is another vote for Alice. My 4 kids have had a ton of fun working with it and learning the basic concepts of programming. Of course to them it's all about socializing with fairies and ogres, but heck the darn legacy system I work on could use some faries and ogres too.
I'd recommend python, because it's so terse and expressive. Seems less likely to frustrate when getting started, but offers plenty of room to learn more advanced concepts as well.
Game Maker might be another approach. You can start simple with easy drag and drop development, and then introduce more advanced programming as you go. The book The Game Maker's Apprentice: Game Development for Beginners has a number of sample games and takes you through the steps required to make them.
I think python is a good alternative; it is a very powerful language also you can easily do a lot of things (not boring at all).
Checkout Squeak developed by Alan Kay who think programming should be taught at early ages.
How old? Lots of us stared with BASIC at some point, but before then, I learned the concepts of stringing commands together, variables, and looping with LOGO. Figuring out how to draw a circle with a triangle that can only go in a straight line and turn was my very first programming accomplishment.
Edit: This question & its answers make me feel old.
Though _why hasn't given it much love in the past year or so, for a while I was really excited about Hackety Hack. I think the key for most new programmers, especially children who are more than apt to losing interest in things, is instantaneous feedback. That was the really wonderful thing about Hackety Hack: a few lines of code, and suddenly you have something in front of you that does something. There are a few similar applications aimed at things like drawing graphics (one of which, I briefly assisted Nathan Weizenbaum on, Scribble!). Kids simply need positive feedback that they're doing something correct on a regular basis, else there's nothing to keep them interested in the task at hand. What I think the future is for teaching children to program is some sort of DSL built on top of a language with friendly syntax (these would include, arguably, Ruby, Python, and Scheme) whose purpose is to provide an intuitive environment for constructing simple games (say, Tic-Tac Toe, or Hangman).
I think you should start them off in C. The sooner they can get the hang of pointers the better.
See Understanding Pointers and Should I learn C.
I think the first question is: what sort of program would it be interesting to create? One of the things that got me started with programming as a kid (in BBC basic and then QBasic) was the ease of writing graphical programs. I could write a couple of lines of code and see my program draw a line on the screen straight away.
The closest I've seen to that sort of simplicity recently are the pygame library for python and Processing, a set of java libraries with an IDE.
I imagine that hacking on web pages would be another good way to get started: that would entail HTML, Javascript (using a library like jQuery), perhaps PHP or something along those lines.
Whatever tools you provide, the crucial thing is for it to be easy to get started straight away. If you have to write twenty lines of correct code and figure out how to invoke the compiler before you see any tangible results, progress is going to be slow.
There are many good suggestions here already. I really agree with Kronikarz. Get a retro computer (or emulator) that you are interested in and teach with that. Why a retro computer? Basic is built in. Making sounds and primitive graphics is a trivial task. The real deal might be better than an emulator because it will be a bit more fascinating to a child who is used to seeing only modern devices.
As I said here, I'd go for Squeakland and the famous Drive a Car example (powered by Squeak).
Smalltalk syntax is simple, which is great for children.
And later as the child evolves, he can learn more complex and even very advanced concepts that are also in Squeak (eg. programing statefull webapps with automated refactoring and automated unit tests!).
And like #cpuguru and #Rotem said, Scratch (also Squeak based) is great too.
I think Java might be a good choice simply because you can make GUIs easily, and see "cool things" happening. For the same reason, maybe any of the .NET languages. I've also heard good things about scripting languages (Ruby and Python, especially) for getting kids to learn how to program.
Well, if they're young and haven't learnt their ABC's you could try them on BF - non of those pesky letters and numbers to deal with.
I'll get me' coat.
Skizz
I would go with what I wish I had known first: a simple MS-DOS box and the integrated assembler (debug). It is great to really learn and understand the basics of talking to a computer.
If that does not scare away a child, then I would go the "next level up" and introduce C. This shouldn't be hard given that the basic concept of pointers, registers and instructions in general are well-understood by then.
However, I am not entirely sure, where to go next. Take the big jump to Lisp, Haskell or similarly abstracted languages or should there be some simple object oriented languages (maybe even C++) be thrown in or would that more hurt than help?
Looking at Alice, I see it is "designed for high school and college students". There appears to be another language/version called Story Telling Alice that is "designed for middle-school students"
Alice Download Page
I think Context Free Art might be a good choice, with output of graphics, it makes it a lot of fun learning about context-free grammar.
Try [Guido van Robot][1]. It's an excellent introduction to robotics, and it's a great way to introduce kids to the programming side of things (vs the "building the robots" side).
Wasn't Smalltalk designed for such a purpose? I think Ruby would be a good choice, as a descendant of Smalltalk.
I know in the first few years of high school we were 'taught' Logo, and strangely, HTML. After that, the progression went to macros in MS Office, followed by basic VBA, followed by Visual Basic.