Since they're just programming to learn to program, you have the opportunity to start with a "pure" language that doesn't necessarily have to be particularly useful.
I'd stay away from kludgy languages like C, C++, Java, Basic, etc.
So Smalltalk might be good. I'd suggest Lisp, but it might be too useless;) I've also heard good things about Ruby.
And assembler might be good too. A big light turned on in my head when I learned assember, because I finally figured out what was going on inside the computer.
Whatever language you choose, I would strongly suggest teaching them to write test-first.
It will help keep them focused on writing something that works correctly, and writing only what is needed. It should also keep them from wasting hours trying to figure out why something isn't working.
I would suggest finding a small studio and asking if you can test their games part-time without pay. You'll gain experience and you'll find out if you like testing.
The risk to the company is that you'll tell people about their game, or that you'll quit quickly, so you'll have to convince them otherwise somehow.
When the game is finished, you'll have a game on your resume and if the company likes you, you might have a job.
(And when you find bugs, say something like "I was in this awesome firefight which looked hella-cool and this awesome boss popped up and fragged me. It was great! Oh, by the way, I could see right through the boss' left side. Anyway, that was awesome!")
It's so you can tell whose phone is ringing. For a while, everyone had a Nokia 6xxx and when one went off, everyone started digging.
If everyone has a different ringtone, it's easy to tell. It's still annoying though.
I think a Bluetooth wristwatch would kick ass. It would vibrate when you have a call and show the name (or picture!) of the person calling. All of that superimposed on top of an analog face that looks like a normal watch. That would rock.
Of course, you'd have to recharge your watch every week...
With all of your imaginative ideas, do you find it hard to focus on the one story you are currently writing? (Or do you work on multiple stories at once?) What if you are 200 pages into writing a book and a much better idea comes into your head? Do you finish writing the first book, or do you start on the new one? And do you have lots of unfinished books sitting around waiting to get finished? And finally, however you do it seems to work for you, but would you suggest to other people that they do the same thing?
Suppose you are listening to a transmission and you receive the following: 'sdjek dYqkP 1Nt$% GGl9) MHrYD +++' How do you know how the message has been encrypted?
First you djc,s dk%33R +++ (110), then you sD##N KDL:: Ds03k -332+. From there, it's a trivial matter of just 3!Wop mclDI a002g a!22# with the sklj3 V3iia aq@@1 +1867 -5309.
The Online Policy Group provides web and email hosting for groups that are having a problem with censorship. It might be worth a try.
Blurbage:
The Online Policy Group (OPG) is a nonprofit organization with the motto "One Internet With Equal Access for All." OPG focuses on Internet participants' civil liberties and human rights, like access, privacy, safety, and serving schools, libraries, disabled, elderly, youth, women, and sexual, gender, and ethnic minorities. OPG provides concrete services aimed at realizing a free and equitable Internet, including free Internet services, active research, and vigorous advocacy on behalf of our constituents.
I assumed that Apple created their Xserve rack-mounted servers for exactly this purpose: not just for animation studios, but for Pixar in particular (since Steve Jobs runs both companies and does things like selling Pixar DVDs to Apple to give away in promotions, thereby increasing the number of DVDs sold at launch, getting his movies in front of more people, and of course providing more incentive to buy whatever it is he's bundling the DVDs with).
I guess the density of the blade servers is higher than the Mac servers, but it would have been a big boost to the Xserve's credibility if Pixar had chosen to use a ton of them. Perhaps Apple will make a new server (Xblade?) that's more suited to this use. It wouldn't surprise me...
The OXO Goodgrips corkpull (not their corkscrew) is really nice. It is idiot-proof and it will open bottles that have wider necks, like some of the sparkly wines.
If you are projecting a recipe on the counter, then you can no longer use the counter. Don't tell me you'll be able to read the recipe if it's being projected onto clumps of flour, a box of eggs, a jar of sugar, a head of lettuce and a bottle of beer.
Perhaps a much easier and usable solution would be to put an LCD in the wall behind said counter, or in the door of the cabinet above said counter.
Of course, it wouldn't be very Microsoft-y, but you could hire someone to come into your kitchen from time to time, kick you out for a few minutes and remove the entire contents, requiring you to spend the rest of the day re-installing your kitchen. It would be great fun for people who don't like to cook (kind of like how Windows is great fun for people who don't actually want to use their computers to do work).
(Hmm... I wonder why I felt like bashing Microsoft so much this morning. Maybe the eggs I put in my lettuce-and-beer-cookies last night were bad.)
Sharing the connection is probably against the DSL provider's terms of service. Your friend might want to look into that before sharing the connection.
I had this exact problem. The signal wouldn't reach 15 feet (through two interior walls). I downloaded the latest drivers from Orinco's website and my reception improved drastically. I guess the older drivers were buggy or something.
I'd emphasize one more XP practice: get your client to prioritize the features. If he says that they're all important, agree with him and say "but which ones are more important? How about X? Is that more important than Y?"
Then implement the features in order of priority. If you think that feature X requires that feature Y gets written first, try to think of a way around it. Most (not all) dependencies are imagined.
If this is like projects I've been on, there are a lot of things that can be shipped later. And since it's a web project, it's very easy to roll out a new version of the project whenever you want.
Also, you might want to leave the hardest-to-change things for last, like a relational database. Can you go for a while just serializing your data, or using a flat file or something like Prevayler? If so, you won't have to spend so much time changing the schema. And you might find (gasp!) that you didn't need a database in the first place.
The first version of whatever you write will be worthless, and probably require a lot of re-writing before it becomes production quality.
So will the second version, and the third, and the fourth... In my experience, any code that isn't re-written often gets crufty and becomes increasingly worthless.
The more the code gets rewritten (a.k.a. refactored), the better it gets. Hmmm... so, what if you were to refactor it often? Very often? Extremely often?
WOuld you like to accept the new settings? [YES] [NO]
Or, since people read the button text before the message text, Would you like to accept the new settings? [Accept Settings] [Discard Settings]
Or, even better, no dialog box and just accept the settings and let the user undo if he made a mistake.
Or, even better, no dialog box and just accept the settings, and have a little slider in the settings window that lets the user slide back in time to any settings he had ever made.
Mail notifications should include a digital signature of some sort. Users can choose which signing authorities to trust. Signing authorities may require a deposit before issuing a signature certificate and may gain trust from potential recipients by offering to split the deposit 50-50 with the first person to receive spam from the account.
So it boils down to a whitelist of ISPs. If you want to send legitimate mail, you need to use an ISP that other people trust to enforce the spam rules.
How will spammers get around that? The only thing I can think of is by forging certificates, but preventing certificate forgeries is something that I assume has already been solved.
How about making all the exterior doors beep loudly when they are opened? That way, the adults in the house will at least know when doors are being opened. You could probably do that yourself with simple parts from Radio Shack.
You could go a step further, and attach some sort of biometric device to the main doors that disables the sound temporarily if the fingerprint or voiceprint matches. You wouldn't need the device on each side of the door, but it wouldn't hurt.
Hooking a biometric device to a buzzer sounds a lot easier and safer than hooking it to a lock. You might be able to find one that stands alone and doesn't need to be hooked up to a computer. Or, you might be able to hide a small, old computer near the main door and use a computer-connected fingerprint scanner or something. Then you'd have to figure out how to get the computer to disable the buzzer, but that shouldn't be too tricky.
Something like this might do the trick. It is a child proximity alarm system with two parts: a unit for the child to wear and a unit for the parent to wear.
If the child unit strays more than 1 to 9 meters (your choice) from the parent unit, or if the child unit is turned off, the parent unit makes some noise.
It might be possible to rig it so that the child unit turns off if the child tries to remove it (by attaching it to your child by a wire that is connected to the battery, so that if the wire is broken or unhooked, the circuit is broken and the unit turns off).
It's not quite the same as keeping the kid locked in, but it will at least alert you if the kid goes too far away.
If somebody could tell me a way of optimizing this exchange, I'd love it.
How about having two keyboards and two mice? (I assume PCs can handle that; I've only ever tried it on a Mac.)
But I've never had much of a problem. The chairs have wheels; you each slide over so the other person is sitting in front of the computer. When you switch back, you both slide the other way.
Hmm...but shouldn't that have been done when APIs and rough data structures were decided upon?
In XP, that is exactly when the APIs and rough data structures are to be decided upon: when the need arises. That's why you have a pair: to help you design as you go. If programming consisted solely of typing, you wouldn't need a pair.
(And why do the design when you need it instead of at the beginning? Because design is too important to do at the beginning when you don't know exactly what you need or how it's going to fit with existing code.)
Does it always work, for everyone, in every project?
I'd say no. I know many programmers who don't have the skills or desire to work in teams (pairs or larger teams). This is understandable, because a lot of people who got into computers as a hobby enjoy spending time by themselves.
I'm one of those people, but I realize that teamwork is essential to a project's success, so I do my best to be social and work well with others, though it's sometimes hard and drains my energy.
But there are some people who won't (or can't) work with others. These are the people who I think won't be good at pair programming (or working with a team in general).
My estimation is that a project that should have taken 3 months instead took 3 years
Do you think the project took so much time because the people didn't speak English as a native language?
I've been on a number of failed projects, many of which had foreign workers, and I wouldn't attribute any of the failures to those workers' countries of origin. I'd attribute the failures to the managers' and team leads' lack of experience running successful projects.
I'd stay away from kludgy languages like C, C++, Java, Basic, etc.
So Smalltalk might be good. I'd suggest Lisp, but it might be too useless ;) I've also heard good things about Ruby.
And assembler might be good too. A big light turned on in my head when I learned assember, because I finally figured out what was going on inside the computer.
It will help keep them focused on writing something that works correctly, and writing only what is needed. It should also keep them from wasting hours trying to figure out why something isn't working.
I would suggest finding a small studio and asking if you can test their games part-time without pay. You'll gain experience and you'll find out if you like testing.
The risk to the company is that you'll tell people about their game, or that you'll quit quickly, so you'll have to convince them otherwise somehow.
When the game is finished, you'll have a game on your resume and if the company likes you, you might have a job.
(And when you find bugs, say something like "I was in this awesome firefight which looked hella-cool and this awesome boss popped up and fragged me. It was great! Oh, by the way, I could see right through the boss' left side. Anyway, that was awesome!")
It's so you can tell whose phone is ringing. For a while, everyone had a Nokia 6xxx and when one went off, everyone started digging.
If everyone has a different ringtone, it's easy to tell. It's still annoying though.
I think a Bluetooth wristwatch would kick ass. It would vibrate when you have a call and show the name (or picture!) of the person calling. All of that superimposed on top of an analog face that looks like a normal watch. That would rock.
Of course, you'd have to recharge your watch every week...
With all of your imaginative ideas, do you find it hard to focus on the one story you are currently writing? (Or do you work on multiple stories at once?) What if you are 200 pages into writing a book and a much better idea comes into your head? Do you finish writing the first book, or do you start on the new one? And do you have lots of unfinished books sitting around waiting to get finished? And finally, however you do it seems to work for you, but would you suggest to other people that they do the same thing?
First you djc,s dk%33R +++ (110), then you sD##N KDL:: Ds03k -332+. From there, it's a trivial matter of just 3!Wop mclDI a002g a!22# with the sklj3 V3iia aq@@1 +1867 -5309.
Duh.
Blurbage:
I assumed that Apple created their Xserve rack-mounted servers for exactly this purpose: not just for animation studios, but for Pixar in particular (since Steve Jobs runs both companies and does things like selling Pixar DVDs to Apple to give away in promotions, thereby increasing the number of DVDs sold at launch, getting his movies in front of more people, and of course providing more incentive to buy whatever it is he's bundling the DVDs with).
I guess the density of the blade servers is higher than the Mac servers, but it would have been a big boost to the Xserve's credibility if Pixar had chosen to use a ton of them. Perhaps Apple will make a new server (Xblade?) that's more suited to this use. It wouldn't surprise me...
A dozen roses at the supermarket are a lot cheaper. $15 normally, proably more like $25 on VD.
The OXO Goodgrips corkpull (not their corkscrew) is really nice. It is idiot-proof and it will open bottles that have wider necks, like some of the sparkly wines.
If you are projecting a recipe on the counter, then you can no longer use the counter. Don't tell me you'll be able to read the recipe if it's being projected onto clumps of flour, a box of eggs, a jar of sugar, a head of lettuce and a bottle of beer.
Perhaps a much easier and usable solution would be to put an LCD in the wall behind said counter, or in the door of the cabinet above said counter.
Of course, it wouldn't be very Microsoft-y, but you could hire someone to come into your kitchen from time to time, kick you out for a few minutes and remove the entire contents, requiring you to spend the rest of the day re-installing your kitchen. It would be great fun for people who don't like to cook (kind of like how Windows is great fun for people who don't actually want to use their computers to do work).
(Hmm... I wonder why I felt like bashing Microsoft so much this morning. Maybe the eggs I put in my lettuce-and-beer-cookies last night were bad.)
Sharing the connection is probably against the DSL provider's terms of service. Your friend might want to look into that before sharing the connection.
I had this exact problem. The signal wouldn't reach 15 feet (through two interior walls). I downloaded the latest drivers from Orinco's website and my reception improved drastically. I guess the older drivers were buggy or something.
Then implement the features in order of priority. If you think that feature X requires that feature Y gets written first, try to think of a way around it. Most (not all) dependencies are imagined.
If this is like projects I've been on, there are a lot of things that can be shipped later. And since it's a web project, it's very easy to roll out a new version of the project whenever you want.
Also, you might want to leave the hardest-to-change things for last, like a relational database. Can you go for a while just serializing your data, or using a flat file or something like Prevayler? If so, you won't have to spend so much time changing the schema. And you might find (gasp!) that you didn't need a database in the first place.
Don't ask Slashdot, ask froogle.google.com. The first item in the result set: a 4 bay FW enclosure.
So will the second version, and the third, and the fourth... In my experience, any code that isn't re-written often gets crufty and becomes increasingly worthless.
The more the code gets rewritten (a.k.a. refactored), the better it gets. Hmmm... so, what if you were to refactor it often? Very often? Extremely often?
Or, since people read the button text before the message text, Would you like to accept the new settings? [Accept Settings] [Discard Settings]
Or, even better, no dialog box and just accept the settings and let the user undo if he made a mistake.
Or, even better, no dialog box and just accept the settings, and have a little slider in the settings window that lets the user slide back in time to any settings he had ever made.
Mail storage should be the responsibility of the sender . The sender only actually sends email notifications.
Mail notifications should include a digital signature of some sort. Users can choose which signing authorities to trust. Signing authorities may require a deposit before issuing a signature certificate and may gain trust from potential recipients by offering to split the deposit 50-50 with the first person to receive spam from the account.
So it boils down to a whitelist of ISPs. If you want to send legitimate mail, you need to use an ISP that other people trust to enforce the spam rules.
How will spammers get around that? The only thing I can think of is by forging certificates, but preventing certificate forgeries is something that I assume has already been solved.
You could go a step further, and attach some sort of biometric device to the main doors that disables the sound temporarily if the fingerprint or voiceprint matches. You wouldn't need the device on each side of the door, but it wouldn't hurt.
Hooking a biometric device to a buzzer sounds a lot easier and safer than hooking it to a lock. You might be able to find one that stands alone and doesn't need to be hooked up to a computer. Or, you might be able to hide a small, old computer near the main door and use a computer-connected fingerprint scanner or something. Then you'd have to figure out how to get the computer to disable the buzzer, but that shouldn't be too tricky.
If the child unit strays more than 1 to 9 meters (your choice) from the parent unit, or if the child unit is turned off, the parent unit makes some noise.
It might be possible to rig it so that the child unit turns off if the child tries to remove it (by attaching it to your child by a wire that is connected to the battery, so that if the wire is broken or unhooked, the circuit is broken and the unit turns off).
It's not quite the same as keeping the kid locked in, but it will at least alert you if the kid goes too far away.
How about having two keyboards and two mice? (I assume PCs can handle that; I've only ever tried it on a Mac.)
But I've never had much of a problem. The chairs have wheels; you each slide over so the other person is sitting in front of the computer. When you switch back, you both slide the other way.
In XP, that is exactly when the APIs and rough data structures are to be decided upon: when the need arises. That's why you have a pair: to help you design as you go. If programming consisted solely of typing, you wouldn't need a pair.
(And why do the design when you need it instead of at the beginning? Because design is too important to do at the beginning when you don't know exactly what you need or how it's going to fit with existing code.)
I'd say no. I know many programmers who don't have the skills or desire to work in teams (pairs or larger teams). This is understandable, because a lot of people who got into computers as a hobby enjoy spending time by themselves.
I'm one of those people, but I realize that teamwork is essential to a project's success, so I do my best to be social and work well with others, though it's sometimes hard and drains my energy.
But there are some people who won't (or can't) work with others. These are the people who I think won't be good at pair programming (or working with a team in general).
If you are interested in money, become a CEO or shareholder, not a laborer. Being a laborer has never been particularly profitable.
Do you think the project took so much time because the people didn't speak English as a native language?
I've been on a number of failed projects, many of which had foreign workers, and I wouldn't attribute any of the failures to those workers' countries of origin. I'd attribute the failures to the managers' and team leads' lack of experience running successful projects.