I grew up learning BASIC on a C64, then learning assembly, using books and magazines as guides. As a new programmer I enjoyed getting visual feedback of my programs, so my first programs were the simple print "hello world", then moving on to colors, then sprites, and then assembly since BASIC was not fast enough to move sprites around on the screen.
If I had to do it now, I would recommend javascript for many reasons.
First, no IDE is required. I would avoid an IDE as long as possible, that limits what box you can work on, whether XCode,.NET, etc.... With Javascript you can work on either Ubuntu or the Mac, and see results on either via the browser.
Second, an interpreted language doesn't need to be compiled (which is better than C/C++ or other complied languages) so you can code and run your program. Javascript just requires refreshing the page (though you may have to help him understand caching).
Third, there are many good javascript examples out there. I would recommend viewing Crockford's videos.
Fourth, if you setup an external server, he can show his friends what he has made, which has a definite coolness factor. "Hey, look at this program I made to do our physics assignment." "Look at this game I made"
Why javascript over python? Personal preference, plus I think there more answers to problems already documented on the web for javascript, though you can ask python group a question and get an answer quickly.
I've written a large web app that uses PHP on the backend (currently using MySQL, but by using a abstraction layer it can be switched to any major database), and javascript on the front end. This has proved to be one of the best decisions I could have made when starting this project 2 years ago. Browser javascript engines are being constantly upgraded and the web app, which was responsive to start with, is faster now on the same hardware.
As far as a front-end platform I really like YUI. It has good documentation, an active user community, and a BSD license. For the backend, I don't think you need a full platform since it's mostly database stuff, so design a good backend architecture, using some database abstraction layer so you can switch databases easily.
Here are some things that I have learned from this web app:
1) use MVC on the front-end. It's a good design pattern for a reason
2) make the app RESTful. I didn't start out with this, but then had to make a major design change to add needed features and this has been wonderful. Users can use the browsers forward and back buttons and URL's can be bookmarked/emailed and the app will know exactly what should be displayed.
3) learn to use firebug
4) add the following debug information to app in the beginning
a) When the frontend requests data, send the data and the SQL statement back to the frontend if debug is turned on.
b) Log the errors and queries in the database ( When in production mode and debug is turned off, users will have problems and you can look at the error log (table) and see what was going on, by using the database you can search the error log easily
c) my app needs to email people when certain conditions are met, this takes a lot of time ( seconds instead of tenths of a second ), so make email asynchronous, so the app feels snappy.
5) put a waiting (retrieving information) dialog box up whenever the app is waiting on the backend. Hopefully most of the time it disappears so quick the user doesn't notice, but when there is the occasional network lag, the user knows what is going on, instead of thinking the app is unresponsive.
I wholeheartedly agree!
I tend to find new college grads want to pair up and code together. What's that about?!? It's not like they produce more code sitting hip to hip. When one of them sat down to "help" me, my production went down, because my thoughts kept getting interrupted by, "you need to do this..." "place a brace over there..." etc.
I enjoy teaching newbies, but there is a time for training, and a time for me to get my work done. I don't like someone else looking at my screen, thinking and TALKING about the small piece of code, while I'm busy thinking about the big picture design and API.
I'm looking for games that I can play with friends and family in my home. Who plays D&D by themselves? Games are more enjoyable when it is a shared experience. I'm not the "average" gamer, but I know a lot of families that would love a LOCAL 4 player Lego Star Wars or a LOCAL 4 player RPG. I think this is why some of the Wii games are so popular, it allows multiple people to play simultaneously.
Nadaka - I was incorrectly referencing procedural programming.
Slim - thank you for trying to clarify my muddled post. You are totally correct that people use anonymous functions when a named function would be clearer.
I blame my clouded mind on lack of sleep that comes from a 13 week old daughter.:-)
The name "functional programming" implies the use of functions, yet I've seen too much "functional programming" that is just lines and lines of indented code.
Here is an idea: Actually create new functions! Yes, these innovative routines can actually make the code readable and encourage code reuse!
Try to make each function do one task, and code will be readable, reusable, and will not suffer from over indention.
Perfect recordings every time, zero call quality issues. Exactly!
I always laugh when a TV show or movie shows a security person entering the room with a black box and waving it around the walls and phones to verify it is a "secure" location. Duplicating data at the switch is undetectable (unless you have a snitch at the telco). Or the other laughable TV or movie moment is when a black van is parked outside a location with a reel to reel tape recording conversations. Who uses analog to record such stuff? Let alone reel to reel tapes.
Most eavesdropping is done remotely and digitally.
As a embedded software developer at a major telco equipment manufacturer I can verify that when the government wants a wiretap, they can do it easily at the telco. Several times telcos came to us and said "the government has asked for a wiretap how can we use your equipment to comply?" The process to do the wiretap was the same used to setup a conference bridge, which digitally duplicates the DS0 or T1. The government could then get a digital copy of all voice/data of the lines.
I agree that Pages is no Word, so why didn't you get MS office for the Mac?
Yes, there are some websites that don't work with Safari..Gap and Citibank are the two we frequent. I've emailed them many times to write webpages that would handle Safari.
Attachments drove her crazy? This is a puzzle since I think attachements are really easy in OS X..to each there own.
Yes, there are not many kids games for the Mac as there are for the PC.
Here are some things that my wife who was an avid PC user before I got her a Mac loves:
1) It just works. She uses the computer all the time and its nice not to have to worry about installing drivers.
2) No worries about viruses...even better not having to install a virus scanner and keeping it updated...oh yeah, it's a pain to have apps that won't work when the virus scanner is running.
3) Mail has a spam filter built in.
4) iPhoto, iMovie, and iTunes (the Mac version is better than the PC version)
5) keyboard shortcuts that work for many more apps than they do for the PC...
I used to work for a telecommunications company that made digital cross connects. The system that I worked on was small, it only carried close to 200,000 phone calls at once.
On several occasions providers (SBC, MCI, Sprint) called us to help them comply with a federal wire tap. Our systems were made in a way such that you could not tell if a tap was being done, whether it was voice or data. Hardware duplicated the data and sent the copy to any location they wanted.
I think you would be amazed on how much the government listen to without anyone knowing, including most of the government. The right hand truely doesn't know what the left hand is doing.
I have heard many people ask why you would want to boot Linux on the Mac when you can have CLI in OS. Here are my reasons that I want to have a dual (OS X and Linux) or even a tri (OS X, Linux, and Windows) boot machine.
I buy a Mac because OS X is wonderful and the bundled apps are great. I don't have to deal with spam, viruses, and a fresh install every 8 months to a year (as I do with Windows). My wife can do everything she wants without bothering me for tech support (only once did the printer on the Airport get messed up to where I had to get involved). The UI is more consistent and better than Windows or Linux.
With OS X I get a CLI when I want it, but my preferred software development environment has a very customable desktop. Window focus should follow the mouse without a click and should not jump to the front. I can type and don't always want to see the window that I'm typing in.
With Linux I get my preferred development environment, with OS X I get my preferred application environment.
People need to realize that OS (and the apps built for that OS) are tools some tools are better than others for different jobs. An Apple computer will give the user the most flexibility, and that is what is so great about Apple going with Intel. The user can buy one machine and have the top three OSes on it!
I still don't understand why anyone would do embedded software development on a Windows machine.
What the article does not mention, or I forget if it does, is that the Cell is based on the POWER architecture. Linux and OS X are already running on the POWER architecture, and I wouldn't be suprised if they were compatible with the Cell aready. IBM wants to sell these as servers. IBM has stated that a rack of Cell servers will have 16 teraflops of performance. Yes, I believe IBM's hype, even if it is theoretical performance. In contrast a rack of Apple's Xserves only does 630 gigaflops. That's 25 times the performance. I bet IBM has Linux running on it already.
I http://www.tweet2.org/wordpress/index.php?p=13 wrote about this a few days ago. IBM's 970 and derivatives are just too hot for notebooks. Apple doesn't want to spend the money to have IBM develop 2 different processors, one for desktop and one for notebook. Apple wants a chip that has a future, and IBM, Sony and Toshiba have spent billions making sure this chip scales in both power and performance and goes to 65nm. Apple's future is the Cell. Core Image in Tiger is a hint towards the direction Apple is heading. Apple is preparing not to have an Altivec unit, but GPU and APUs.
IBM has said that one rack of Cell servers would have around 16 teraflops of performance. Using Apple's current Xserves it takes 40 racks to get 25 Tflop/s of performance. Apple states that one rack of Xserves currently can produce 630 gigaflops of performance. That means a single Cell server will be able to deliver 25 times the performance of a current Xserve.
No G5 in PowerBooks, in 2006 Apple will announce a whole new lineup of computers, all based on the Cell.
$894 million is a lot of money, but out of a budget of $17.8 billion, NASA has to figure out how to do with 5% less.
If I had to do it now, I would recommend javascript for many reasons.
First, no IDE is required. I would avoid an IDE as long as possible, that limits what box you can work on, whether XCode, .NET, etc.... With Javascript you can work on either Ubuntu or the Mac, and see results on either via the browser.
Second, an interpreted language doesn't need to be compiled (which is better than C/C++ or other complied languages) so you can code and run your program. Javascript just requires refreshing the page (though you may have to help him understand caching).
Third, there are many good javascript examples out there. I would recommend viewing Crockford's videos.
Fourth, if you setup an external server, he can show his friends what he has made, which has a definite coolness factor. "Hey, look at this program I made to do our physics assignment." "Look at this game I made"
Why javascript over python? Personal preference, plus I think there more answers to problems already documented on the web for javascript, though you can ask python group a question and get an answer quickly.
I've written a large web app that uses PHP on the backend (currently using MySQL, but by using a abstraction layer it can be switched to any major database), and javascript on the front end. This has proved to be one of the best decisions I could have made when starting this project 2 years ago. Browser javascript engines are being constantly upgraded and the web app, which was responsive to start with, is faster now on the same hardware. As far as a front-end platform I really like YUI. It has good documentation, an active user community, and a BSD license. For the backend, I don't think you need a full platform since it's mostly database stuff, so design a good backend architecture, using some database abstraction layer so you can switch databases easily. Here are some things that I have learned from this web app: 1) use MVC on the front-end. It's a good design pattern for a reason 2) make the app RESTful. I didn't start out with this, but then had to make a major design change to add needed features and this has been wonderful. Users can use the browsers forward and back buttons and URL's can be bookmarked/emailed and the app will know exactly what should be displayed. 3) learn to use firebug 4) add the following debug information to app in the beginning a) When the frontend requests data, send the data and the SQL statement back to the frontend if debug is turned on. b) Log the errors and queries in the database ( When in production mode and debug is turned off, users will have problems and you can look at the error log (table) and see what was going on, by using the database you can search the error log easily c) my app needs to email people when certain conditions are met, this takes a lot of time ( seconds instead of tenths of a second ), so make email asynchronous, so the app feels snappy. 5) put a waiting (retrieving information) dialog box up whenever the app is waiting on the backend. Hopefully most of the time it disappears so quick the user doesn't notice, but when there is the occasional network lag, the user knows what is going on, instead of thinking the app is unresponsive.
I wholeheartedly agree! I tend to find new college grads want to pair up and code together. What's that about?!? It's not like they produce more code sitting hip to hip. When one of them sat down to "help" me, my production went down, because my thoughts kept getting interrupted by, "you need to do this..." "place a brace over there..." etc. I enjoy teaching newbies, but there is a time for training, and a time for me to get my work done. I don't like someone else looking at my screen, thinking and TALKING about the small piece of code, while I'm busy thinking about the big picture design and API.
I'm looking for games that I can play with friends and family in my home. Who plays D&D by themselves? Games are more enjoyable when it is a shared experience. I'm not the "average" gamer, but I know a lot of families that would love a LOCAL 4 player Lego Star Wars or a LOCAL 4 player RPG. I think this is why some of the Wii games are so popular, it allows multiple people to play simultaneously.
If I had mod points I would give you + for educational! You taught me something new today. Thanks!
Slim - thank you for trying to clarify my muddled post. You are totally correct that people use anonymous functions when a named function would be clearer.
I blame my clouded mind on lack of sleep that comes from a 13 week old daughter. :-)
The name "functional programming" implies the use of functions, yet I've seen too much "functional programming" that is just lines and lines of indented code. Here is an idea: Actually create new functions! Yes, these innovative routines can actually make the code readable and encourage code reuse! Try to make each function do one task, and code will be readable, reusable, and will not suffer from over indention.
As a embedded software developer at a major telco equipment manufacturer I can verify that when the government wants a wiretap, they can do it easily at the telco. Several times telcos came to us and said "the government has asked for a wiretap how can we use your equipment to comply?" The process to do the wiretap was the same used to setup a conference bridge, which digitally duplicates the DS0 or T1. The government could then get a digital copy of all voice/data of the lines.
I agree that Pages is no Word, so why didn't you get MS office for the Mac? Yes, there are some websites that don't work with Safari..Gap and Citibank are the two we frequent. I've emailed them many times to write webpages that would handle Safari. Attachments drove her crazy? This is a puzzle since I think attachements are really easy in OS X..to each there own. Yes, there are not many kids games for the Mac as there are for the PC. Here are some things that my wife who was an avid PC user before I got her a Mac loves: 1) It just works. She uses the computer all the time and its nice not to have to worry about installing drivers. 2) No worries about viruses...even better not having to install a virus scanner and keeping it updated...oh yeah, it's a pain to have apps that won't work when the virus scanner is running. 3) Mail has a spam filter built in. 4) iPhoto, iMovie, and iTunes (the Mac version is better than the PC version) 5) keyboard shortcuts that work for many more apps than they do for the PC...
You made my day with the visual of "I thought I'd join you in the shower". Great! I'm still laughing about it. Great point.
On several occasions providers (SBC, MCI, Sprint) called us to help them comply with a federal wire tap. Our systems were made in a way such that you could not tell if a tap was being done, whether it was voice or data. Hardware duplicated the data and sent the copy to any location they wanted.
I think you would be amazed on how much the government listen to without anyone knowing, including most of the government. The right hand truely doesn't know what the left hand is doing.
I buy a Mac because OS X is wonderful and the bundled apps are great. I don't have to deal with spam, viruses, and a fresh install every 8 months to a year (as I do with Windows). My wife can do everything she wants without bothering me for tech support (only once did the printer on the Airport get messed up to where I had to get involved). The UI is more consistent and better than Windows or Linux.
With OS X I get a CLI when I want it, but my preferred software development environment has a very customable desktop. Window focus should follow the mouse without a click and should not jump to the front. I can type and don't always want to see the window that I'm typing in.
With Linux I get my preferred development environment, with OS X I get my preferred application environment.
People need to realize that OS (and the apps built for that OS) are tools some tools are better than others for different jobs. An Apple computer will give the user the most flexibility, and that is what is so great about Apple going with Intel. The user can buy one machine and have the top three OSes on it!
I still don't understand why anyone would do embedded software development on a Windows machine.
Super soaker....Hope there not wearing a raincoat!
What the article does not mention, or I forget if it does, is that the Cell is based on the POWER architecture. Linux and OS X are already running on the POWER architecture, and I wouldn't be suprised if they were compatible with the Cell aready. IBM wants to sell these as servers. IBM has stated that a rack of Cell servers will have 16 teraflops of performance. Yes, I believe IBM's hype, even if it is theoretical performance. In contrast a rack of Apple's Xserves only does 630 gigaflops. That's 25 times the performance. I bet IBM has Linux running on it already.
My link to the analysis of Apple's use of the Cell was wrong. http://www.tweet2.org/wordpress/index.php?p=13
http://www.siliconvalley.com/mld/siliconvalley/103 23259.htm
IBM has made the Cell for servers and embedded applications. I don't know much about the author of the article, but the Cell will change computing.
Here's my analysis on why Apple will use the Cell http://www.siliconvalley.com/mld/siliconvalley/103 23259.htm
IBM has said that one rack of Cell servers would have around 16 teraflops of performance. Using Apple's current Xserves it takes 40 racks to get 25 Tflop/s of performance. Apple states that one rack of Xserves currently can produce 630 gigaflops of performance. That means a single Cell server will be able to deliver 25 times the performance of a current Xserve.
No G5 in PowerBooks, in 2006 Apple will announce a whole new lineup of computers, all based on the Cell.