Ask Slashdot: What To Tell High-Schoolers About Computer Science?
First time accepted submitter lsllll writes "I got drawn (without my intention) into three 20 minute sessions, talking to high school students about computer science and programming, and am wondering what are some of the things I should talk to them about. I have previously done the same thing for a forty minute period, and all the students wanted to talk about game programming. My only game programming experience dates back to the late '80s and programming a few games (some which ran on top of Novell's network) in Turbo Pascal. Since then I have done lots of database design, web interface programming, and systems configuration and integration. I am pretty fluent with Windows and Linux, but my contemporary programming skills are somewhat limited to Coldfusion, PHP, Javascript, SQL and bash scripts. Should I talk to them about different aspects of computer science, what it's like to work full-time in the computer industry, or do I make the sessions just question and answer, since 20 minutes might not allow me to talk and do question and answer?"
If they are passionate about it it is a fun and rewarding career, with lot's of job opportunities.
They won't get outside much, they will need to stay active after work to not get fat, and that programmer != sys admin.
I am very small, utmostly microscopic.
I think it would be a good idea to discuss with them how computer science effects different aspects of society. I think the reason they like to focus on game programming is because that is the only exciting thing about CS they soft of understand. Here's a few things you could talk about application wise: - Control systems (aviation, industry, trains, subways, superfast cars, etc.) - Trading robots - changing market dynamics - Open source and the web Just a few ideas. Q&A is fine if they are up for it, but give them some focus points up front. Cheers!
Show them a program that can play Texas Hold'em. Tell them about crypto and the cool things that are happening with that (disclaimer: I am a grad student whose research is in crypto). Show them stuff about robotics. Show them how more information can be extracted from medical scans because of advances in image processing.
Palm trees and 8
Be sure to tell them that the gaming industry is the worst possible CS career path. Expected 100 hour work weeks for peanuts, and usually not working on fun stuff either. And that testing isn't fun either because it doesn't mean you're playing the game for fun, but instead trying to break it.
Connect your laptop to a slide projector, log onto dilbert.com, and then spend 40 minutes walking through as many cartoons as you can.
Why not? Because we'll tell the kids that by the time they graduate, the industry will have gotten much better. And if it hasn't, we'll prepare a software service pack to fix all of the major problems.
I got drawn (without my intention) into three 20 minute sessions, talking to high school students about computer science and programming, and am wondering what are some of the things I should talk to them about?
Warn them that a career in almost any area of computing science will be high stress, high workload and have few long term options as they age. Apologize on behalf of society for a system that doesn't value real work and instead tell them to think of their future and what makes most sense. Then steer them towards jobs in high finance and save them a life of grief.
Read them some Dilbert cartoons.
but my contemporary programming skills are somewhat limited to Coldfusion, PHP, Javascript, SQL and bash scripts
I'd suggest you use yourself as an example to demonstrate that if you don't keep learning, you'll end up an obsolete toolbag who gets stuck talking to schoolkids. ;)
It would be an excellent opportunity to explain to them the differences between Computing Science, Software Engineering and Information Technology before they start applying to colleges.
And then you'll blame the hardware when something's too slow.
Troubleshooting, problem solving, algorithms, and the target platform. If you don't know what you are going to run the software you create on, how can you make judgements on the best way to design the software? Best practices, know your OS.
Talk to them about flowcharting:
http://www.telusplanet.net/public/stonedan/pict01.jpg
http://www.telusplanet.net/public/stonedan/pict02.jpg
When you have a nasty task, a simple flowchart can be a big help.
The above 2 charts are the flowchart for hi-liting TEXT search results.
http://www.telusplanet.net/public/stonedan/source.txt Follow the logic in the source code
Once I threw out a program I was struggling with and did a flowchart that evening. The next day the program ran first try. That doesn't happen often. By the time I decided to throw it out and start again, I knew the problem inside out.
Challenge: I have better access to my Video, Music, Pics and Text than anyone on Earth.
If they want to know about game programming, then obviously they are at the wrong talk. Programming is not computer science.
...they're looking to you to tell them what's in it for them
What is it?
Who does it?
Why are you still doin' it?
Computer Science catchall breaks down into:
Math Whiz's - Computer Scientists who can write an Algorithm for that
Programmers - wannabe ComSci guru's who can't
SysAdmins - ComSci guys who don't care they just love all the new toys
I think it would be most helpful if you covered the entire field of computer science and the IT profession in general. As you said, a lot of kids have a distorted perception of what it may mean to be in the field, and it is important to flesh those things out a bit. Also, talk about your passion for what you do: perhaps the technical challenges you face, the joy of working with technology, etc. You could cover all these things in about 10 minutes, and open for another 10 for questions.
It's easier to be interested in something if it relates to you. For teenagers of the past that used to be games, but there is non-game genre of software that is very relevant to high school students today: the Facebook ecosystem. Those PHP, JavaScript and SQL skills could be put to very good use building add-ins for sites like Facebook.
A strong math foundation laid in high school and earlier will be fundamental to their success in computer science later. The function of a computer really is to mathematically transform data sets from one format to another. Especially in games, where trigonometry is foundation of physics, no matter how basic. See Xbox Live's Trueskill formula if you don't believe me.
That's a good point.. most people think you just go and flush, and don't realize how much stuff goes on behind the scenes. Planning/designing of the plant, permits required to build (since most are built along rivers in flood zones, so include the impact studies for flooding, etc), grinders inline to chop up the solids, pumps to push the sewage along and up hills, the straining tanks, chlorination and UV to kill germs, controlling and monitoring the particulate outputs, etc, etc.
It's much like programming. Those who don't know think there's not much too it.. but there is quite a bit that goes into making a good program. The initial idea, planning, finding out what regulations your project must comply with (HIPAA, SOX, etc), designing the flowcharts, settings time lines, cost planning, marketing, etc, etc.
So, as much as you were trying to be a smart ass, you inadvertently brought up a good example.
If they aren't interested and experienced in computers by that age they're not going into the industry. We don't need any more PHBs, clueless coders and buzzword bingo players, thanks. It'll be better for them too, IT/CompSci has an awful education:pay ratio. My sister woke up one day a few years ago and said "I think I'll work in interior design" and now she makes almost as much as I do at my job that requires a BSc and more (and she needs all the money she can get, she's terrible at managing it).
"When information is power, privacy is freedom" - Jah-Wren Ryel
CS10 : The Beauty and Joy of Computing (Give them the "big ideas" on one hand, and allow them to "peek under the hood" (do some visual programming with Scratch/BYOB/Snap) on the other. :)
Steer them toward a tech-related college, along the lines of UAT or Full Sail. Don't tell them about the negatives; they need to find them out for themselves, in the context of their own future experiences. Encourage them to develop a passion for programming, as if it were an emotional connection to others, in their own spare time.
Twenty minutes to demonstrate binary sort by tearing apart (literally!) phone books to find a person listed there, is how CS50 opens its classes. Take a look at the opencourseware site cs50.tv. It's practical, it's interactive, and it really shows the computational aspects that we take for granted. Twenty minutes to demonstrate selection sort and merge sort might be a bit tight though.
I think a discussion of the more "non-computer" parts of computer science would keep an audience more interested than a discussion about programming languages, which could easily lose people in the first five minutes.
Doing the Right Thing should not be preempted by making a buck.
I know that 20 minutes is pretty short, but I have found that the most impact from a presentation like this is when I actually give them the knowledge they need to start developing something on their own. A little research before the session (much like you are doing right now, kudos to you!) can produce a half page sheet on how to set up a development environment, a short tutorial to solve a real problem, and even some links to further tutorials.
In a high school setting I am sure you will get a huge mix of people who range from very interested all the way down to super bored. With 20 minutes, play to the interested learners and show them the real deal. If they always seem interested in game programming, make sure to have a link on your half page to a game programming tutorial.
That's not enough time to do anything technical. How about spending part of the time on ethical and political issues? Anonymity, piracy, privacy, that sort of thing? I have a two-hour spiel I use for first-year college students - with a good group, you can get some interesting discussions going...
Enjoy life! This is not a dress rehearsal.
Tell them that knowing just a little programming can get them very far in certain industries. I have no formal CS training aside from a C++ class I took in high school, but programming is a huge part of my job. Even for those who won't actually program in their jobs, chances are that nearly everything they do will happen on a computer. Having a good knowledge of how computers work (i.e. the logic and conventions), above and beyond knowing how to use an operating system, makes a person more productive and will benefit his/her career, not to mention his/her mind.
I honestly think that, given the degree to which computers permeate our society, we should be giving kids CS training at much younger age.
You could also describe a (typical?) high-level problem and work through the basic steps you would use to solve it.
Keep it brief, as initial interest in the area is not a given.
*this space intentionally left blank
"One of the four pointers saying 'come and see', and I saw, and beheld a white
Talking about games (something they're familiar with and interested in) gives you a springboard for:
- Graphics (screen drawing, rendering, vector math)
- Physics simulations (particle physics, gravity, collisions)
- Interfaces (Kinect, controllers, touch)
- AI
- Databases
- Networking
Even thought they're interested in games because they're "cool" and "fun," you can use that interest to direct them to the deeper topics behind games. Games intersect with lots of hard, interesting CS topics.
.. and all the things they end up in.
..
If you can bring enough stuff to set up a small Arduino lab for the Q&A, and let them play around in the IDE a bit, that'll definitely wake a few of them up
One other time I needed a flowchart. We were making changes to a property management system to give it budgeting capabilities. The oiginal programmer (working at a different ministry) said "Don't touch that code" I charted it out and passed it by my supervisor. We tested it and it worked. I was the maintenance contractor after that...
Challenge: I have better access to my Video, Music, Pics and Text than anyone on Earth.
Do the Q&A.
The most valuable thing you can give them is insight about your experience, not just as as someone in the technology field, but as someone who has had a long career in any field. They are high-school students - they go to football practice, go home and Facebook and play video games every night, they have no idea what it's like to find or to have a career. Ask the teacher to introduce you in a way that stresses that you have been in an important and growing industry for decades and you know what things are like out there, and to remind the students that they are all going to need to find jobs and really need to think about what they want to spend their future doing. Give a 3 or 4 minute introduction of yourself and what you do and then open it up for questions about anything the students are willing to ask, about technology or otherwise.
This way, you at least give students who want to draw from your experience the opportunity to do so. Not to make any assumptions about your presentation skills or ability to put together an engaging demonstration, but anything you do (especially related to computers) will put most of the class to sleep. I watched Steve Wozniak lecture to a classroom of 200 college students and I think about three of them were even remotely interested in anything he had to say - a not-Steve-Wozniak in a high school classroom will be lucky to do that well unless the students realize they have an opportunity to learn how they are going to survive and enjoy a life without Mom and Dad in a few years and can capitalize on that opportunity.
People today have a misconception today that equates computer science to secretary school. Hopefully Raspberry Pi will change that.
Tell them about the purpose of computers outside of private communications devices and gaming platforms. Talk about the reasons we use computers, what they are for and how they are used.
I think that's more important if they are looking for a 'job' advice.
Ask anybody if they are just interested in doing stuff to see if they can, and tell them that the best way to learn is to try and build their own computers and languages, maybe they can invent something that we haven't really tried yet.
You can't handle the truth.
Those who don't know think there's not much too it..
Unless of course you live in a rural area and have a septic tank. There is really not much to a septic tank. A hole, a couple 36 inch concrete tube sections, a drainage trench filled with gravel, and a cover. As my dad used to tell me back when I was a little boy and he had a big construction company: "shit eats itself".
Seven puppies were harmed during the making of this post.
Tell them they can get their feet wet in projects like Wesnoth.
Don't be silly. They already know that.
I've been in a similar situation some years ago. Kids are always into games, so couching your talk in terms that they are interested in would be appropriate in order to keep/hold their attention. In any case, games are very object-oriented, so an introductory talk (10 minutes or so) into how using object models helps to define the elements of a game would be appropriate. Then, display some examples of game object classes (environment, character, properties, etc) and how they interact (methods). This lays the foundation for modern game development. Finally, open the session to questions, but try to constrain them to questions as to how to use these models to formulate their game universe. Keep the students on topic, so to speak.
I'd explain to them the wide variety of things people tend to do with a CS degree. From continuing on to advanced degrees and entering academia to doing corporate R&D to the myriad of shades of programming. When I was that age I really had no concept of all the things "computer scientists" and/or "computer programmers" actually do.
Most likely an in depth discussion of "game programming" won't be beneficial for most students.
"Software patents will prevent you from doing anything *really* cool anyway."
You have twenty minutes to present to an audience who has little to no information about your topic. Within 2 minutes, grab their attention or you'll lose them for the remaining 18 minutes. An interesting visual to begin with will be helpful.
... you'll have a few folks genuinely interested.
One of the best demos I remember seeing was Cisco presenting their work on the Playstation2 networking components. They popped a disc into the Playstation2 and started messing around with the innards. They had my attention for the remaining hour.
For this specific group, do NOT give detailed explanations or definitions, they will not care. Show them what the field is capable of doing with recent examples (the Watson computer on Jeopardy, the recent innovations with automotive technology, iPhone/Android apps, etc.), and, a bit of your own personal work. Finish up by saying "without computer science, none of this would be possible". Leave 5 minutes for Q&A
I doubt a high-school student really cares about the "theoretical foundations of information and computation". As you suggest yourself, your audience is more interested in the things they can DO with computers--- which is more about Engineering than Computer Science.
I suggest that you spend the first 5-10 minutes helping your audience see the fact that they are literally surrounded by computers, and that SOMEONE needs to learn how to program them. The real excitement in computing is found in embedded systems, not games or tablets. But unless you get people to see all these invisible computers, they have no idea that it's a viable and meaningful career choice.
Then give them a demo of an Arduino, preferably one connected to the guts of an R/C car or the like. Something tangible. Of course, if you can't do this yourself then you have an obvious skills gap that needs to be addressed.
After that, leave the rest of the presentation to your audience. You will not have any trouble filling the time allotted, I assure you.
b.g.
That "programming" is merely the current paradigm for computing; and that even the term "computing" might become obsolete in not too long. That computer science should be about tackling the hard problems and putting their solutions into practice, including how to create reliable and trustworthy (secure) systems, how to engineer and deploy systems quickly, how to design flexible systems, how to design usable systems. Hacking out programs is not "computer science" and should not be confused as such. It is merely "hacking".
Tell them that game design is LOTS of math for collision detection, gameplay physics, etc., and it's really, really hard. Explain how it's much easier and more rewarding to make database-backed CMSs for porn sites. :-)
Dear Slashdot: next time you want to mess with the site, add a rich-text editor for comments.
Half the people they work for won't appreciate them, the other half will be sitting around thinking of ways to outsource them. You'll be pretty much done with your career by the time you're 45 and get replaced by people who speak English with difficulty on an H1-B visa.
You'll also be scoffed at by younger contemporaries who will suggest that if you had kept your skills current, you'd still have a job. That while listening to employers gripe in the media about not be able to find qualified applicants.
That's our life, the big wheel of shit. - The Fat Man, Blue Tango Salvage
Then do a little dissection into the game. Is it a shooter. some of the best are running on their own created engines, so if you are making models, you usually need an understanding of sculpture, painting, lighting, human anatomy. weaponry needs physics for reactions, math for mass and damage.
Gaming is a damn sight more then just computer programming. you need a lot of other interdisciplinary skills. i know one of the earlier ID employees and Kens skill was sculpting monsters. you need more then just programming. I bet you find the games they like the best are the ones that are the top titles, and they are made to look like complete worlds. so you need to understand how the real world works. get out there and explore it, because if you expect to help create a digital version of it, you better understand how it works.
Yeah, put together an arsenal of Dilbert cartoons. Use them to season the presentation-- especially effective when you can put an appropriate one on the screen in (partial) response to a student's question.
Lead off with a Dilbert cartoon. Then spend the first half of the first session doing a general presentation on Javascript and PHP, how they fit together, how much they influence the student's lives, and how students could get involved in using them. Be as interactive as possible. Show a lot of code snippets but keep the discussion at about 10,000 feet: no detail, but low enough to talk about the similarities and differences between the languages. Basically use the server - browser as a concrete example from which you can discuss the larger issues of security, conformity with conventions, dealing with weaknesses in a language, etc, etc.
Use the last half of the first session as a discussion session, with you asking them what topics they would like you to talk about in the next two sessions. Give them a list of general topics that you could talk about and encourage them to hash it out amongst themselves. Possibilities include design and implementation issues, debts incurred during schooling and salaries and job security, dealing with PHBs and other external job pressures, handling collaboration issues. Use the results to figure out what to do with the following sessions.
If you run into dead spots, put up a Dilbert cartoon and try to get some discussion going about it. So go in with maybe 100 or so cartoons on tap, with the intention of showing only a few as part of the presentation but with the rest a click away, to be brought in as needed.
Handouts: No handouts in this day and age. Give them access to a web page written by you for this presentation that has links to basic tutorials on Javascrpt and PHP, and to more material on the subjects you choose to cover in the 10,000 foot overview. Get the student's input on what kinds of things should go on this web page (it should be working by the last session, but it does not have to be finished before then).
An experienced teacher who knows their subject and their students will need 40 minutes to prepare for each 20 minute session. You know the subject, but you do not know the students and presumably you do not know how to teach (or you would not have asked Slashdot for input). So give yourself an hour to prepare for each 20 minute session, and use feedback from the first session to shape the second and third sessions.
Let us know how this goes.
Will
Simple guide..
Computer science = an academic discipline that explores the theory and limits of computability. Hard to get a job unless you are really good, and at least a little lucky.
Programming = somewhere between an artform and an engineering discipline, can turn into a deathmarch of long hours.
IT = maintenance, troubleshooting, helpdesk, market research, vendor negotiation, corporate politics, high stress, even longer hours
Yeah, they all involve computers, but in practice are totally different.
For simple things no flowchart is needed ever.
I'm saying look at the 2 page flowchart of the print logic. That was the only tuff thing in doing a Search Engine. A search finds text and hi-lites it. First and formost. Then if the next line has a pic or video or song. Stand back and Look out. you are on your way with flowcharts.
Challenge: I have better access to my Video, Music, Pics and Text than anyone on Earth.
Have them watch Office Space... it's a great documentary on the life of a software developer.
Tell them it's math. Everything else is programming, sysadmining, networking, or otherwise not computer science (which is math).
Imagine if you weren't allowed to use roads because a bus company complained about your driving 3 times. --skunkpussy
If they have an aptitude for math, they should look at "harder" sciences than CS, because there's not enough college students studying those right now, so there will be a shortage by the time they are employable. If they cannot do the math then they need to reevaluate why they are looking at CS in the first place.
Is in the trades. There will always be a need for carpenters, plumbers, mechanics, etc. If they want to make money they should go to a trade school and forget about going into a profession that has been effectively taken over by countries whose people will work for a fraction of the cost of an American programmer.
Maybe if you start by reminding them that about the world they live in it will help them understand where you will go from there:
1. Ask them to pull out their cell phones and ask them what these 'things' do. Then, how the phones do it.
2. Ask them why they use *acebook and *witter.
3. Ask them how they would do their home work if they didn't have access to *oogle.
Answer to 1. will help you tell them that CS is not just about games.
Answer to 2. will help you tell them that they see CS as an essential part of their social diet.
Answer to 3. will help you tell them that CS is making their lives easier in many ways.
In short: CS already rules their world.
Another important thing here, is that you make them realize that CS isn't just programming, it's also a form of engineering (developers et al. are building the information bridges of the future... and just like real bridges, we don't want those bridges to fall).
Talk about the history of CS... it wasn't born yesterday.
Talk about the women of CS ( Ada Lovelace, Barbara H. Liskov are a great examples ).
Show the technology, If you wanna show off easy to learn languages, you could go from a methodology pov... Scheme vs. Ruby vs. Pascal... I think you could come up with real simple examples you can showoff in a 15 minute demo.
Finally, programming is a very powerful tool for creation and in the words of a contemporary genius:
" When you don’t create things, you become defined by your tastes rather than ability. Your tastes only narrow and exclude people. so create. "
— Why the Lucky Stiff
I teach high school computer science and I wish I knew how to answer that question. I can offer a few tidbits however.
Tell them that computer science is about solving problems. It is not about computers. ("Computer science is no more about computers than astronomy is about telescopes.” - Edsger Dijkstra) My school also offers a slew of engineering courses. I tell them engineering is about solving physical problems and CS is about solving virtual problems.
I frequently walk through an example about how it would take a single person to calculate the GDP by adding everyone's salaries up by hand, but that a computer could do it in a matter of seconds to illustrate that in CS we may approach problem solving differently.
I tell them the most common way CS solves problems is by writing programs. I present them with some problems and ask if they can name a program that solves that problem. The last problem I usually suggest is boredom which leads to games.
I would have to second the suggestions to steer away from video games. I used to promote my program by having the kids learn Java in the Greenfoot environment. Unfortunately, this attracted the wrong kind of student. They weren't interested in creating "simple" games. I would explain to them that their favorite games took teams of developers years to create, but they still weren't satisfied. My program was defunded (and ironically replaced by game design which will almost certainly fail for the same reasons). I now focus my attention on recruiting engineering students from our robotics program into the AP Computer Science class I am allowed to teach.
Move to india...we don't do science here in 'merica...even if you do choose a career in it, you will spend your entire career trying to find a job that hasn't been outsourced and that pays enough to pay to at least the minimum on your ridiculous student loan balance... But I'm not a cynic....
"It's not that I don't understand what your going through. Its that I just don't care"
Discuss different approaches to shuffling and re-ordering a deck of cards. If they can't get excited about that then they don't deserve to be programmers.
Tell them this:
Information Technology is a lot like plumbing and electrical work, except you don't get too dirty, it's not dangerous, and it's non-union. You run pipes, hook them up to boxes, and get frantic calls to fix stuff that breaks. Lots of jobs, the pay is poor, and you get little respect. 2-year college plus specialized courses plus OJT.
Computer science is about the theory behind how computers work. You need to be good at math for this, and actually like math. And you need to go to a good school. Check out colleges very carefully in this area. 4-year degree is entry level, MSCS is typical. PhD needed only if you want to work in academia, although it's a nice status symbol if you can afford it.
Programming is making new apps and services. There's a huge range in programming, from very easy to very hard, and a wide range of specialized skills. Few people program much beyond age 40-45, so be prepared to move into management. College degree usually required, but a 2- year college may qualify you.
Game programming is near the harder end of programming, but pays like the easier end, because too many people want in. It's like the movie industry in that way. Big teams, frantic deadlines, unpaid overtime. It's not about playing games. Some jobs require a lot of math, but that's less true than it was 10 years ago because most games now use purchased solutions to the hard graphics and physics problems.
Software engineering is about making big apps and services, with a lot of pieces that have to work together. It's about design and team management. Few schools have really good training in this. Look around.
Outsourcing is when your job gets sent to China or India. You're in wage competition with low-wage countries.
Warn them to say the hell out of Sysadmining. AKA the place where your considered a cost center, constantly under threat of downsizing, and basically only remembered when you need to spend money or something goes horrifically wrong. I hate to say it but I wish someone had sat me down 15 ago a years ago and warned me out of the whole IT field.
I am that much more enlightened and proportionally disillusioned
letting the younger generation think that making a facebook page or blog or something IS programming is my (working-) retirement plan :(
20 minutes isn't a whole lot of time, but if they want to talk about Game Programming, take them through how you'd design a simple game. You don't need to write any code, just break the whole problem down to its component parts. Use Tic-Tac-Toe or something and shoot to spend about 10 minutes or so breaking down Tic-Tac-Toe so that you can tell the computer how to do the various parts. Once you have the whole design down, mention some possible features that you might consider adding in your typical computer science class, such as having the computer learn to play instead of using a set of hard-coded rules.
Then suggest that they consider the average game they play and try to break it down to the component pieces like you just showed them with Tic-Tac-Toe.
The road ahead for them is a long one and you can only show them a few steps along it. You don't need to sell them on working with computers for a living, you just need to help them see what it'll be like so they can decide for themselves if they want to.
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
Just be honest.
Spend $40,000 to get a degree and you can have a job that might or might not be interesting. Mileage may vary; not available in all states. Proof of purchase required.
I found this tutorial great for showing how linear algebra relates to gaming: http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-1/ I wish my linear algebra teacher taught this way, we never got any real life examples, just straight plug and chug linear problems. I went to Virginia Tech, freshmen math classes are a big disappointment there.
what do you teach high school students about sewage networks?
The first rule of civil engineering "Shit flows down hill."
Whatever you do, stay within your experience, and pick a topic you are passionate about. What you tell them is probably secondary - they will get a lot of information about computers and programming from different sources. But if you can tell what you do, why you do it, and why it matters to them, that is more than most teachers will ever achieve.
I agree with the warnings about the gaming industry. You could even stretch it from talking a popular game, and telling them how it is supported by a database system. And tell them they could be working long hours on low pay developing a database system for a new game :-). I am sure that would leave some impression.
RUN
After typing what follows:
10 for i = 1 to 10
20 for j = 1 to i
30 print "*";
40 next
50 print
60 next
(this was my first program ever. I still remember it after 25 years)
Lisias@Earth.SolarSystem.OrionArm.MilkyWay.Local.Virgo.Universe.org
Someone writes the computer programs that make your computer and those web sites work, so that you and your friends can post funny and entertaining stuff! (And so companies can get access to all sorts of personal data about you.) Um, wait, did I just say that part aloud?
As a highschooler, let me start off by saying we are all not nit-wits and oblivious to the technology around us, as some previous posters are implying. If someone is attending your session and they care enough to pay attention, you don't have to cover the absolute basics. If someone were to give me a 20 minute session I would want to know some of the following things (slashdot, feel free to answer them for me):
How important is programming to overall computer science, what else does computer science entail, is it worth it to get a masters or doctorate in computer science, if I wanted to get a part-time job today working with computers where can I go, and is everyone in the industry a nerd?
Some other topics to speak about might be: Real life applications they can use today (Write something that can take their list of vocab words, get the definition and spit it out, then show some of the basics of how you wrote it), Artificial intelligence, where you see computer science heading towards in the future, and the experiences you've had along the way (everyone likes hearing a joke now and then about a terrible boss.)
There are many places you can take the discussion, I just urge you not to under-estimate them just because they are young.
First of all, they should learn how to drawl: Ya want fries wizzat? ...since that is most probably where they will end up working.
Excuse me, but please get off my Pennisetum Clandestinum, eh!
I gave two 40 min talks about computer engineering, etc yesterday to 9-10 grade kids at Kihei Charter School (Kihei Maui Hawaii USA). I also work weekly with the robotics club a the King KeKaulike HS (Makawao Maui HI). I am an IEEE Certified Software Development Professional (CSPD) with over 30 year experience in areas like animation, virtual reality, multimedia search, desktop UAV control apps, etc. I dont do much computer science - more applied practice aka software engineering. What I talk to the kids about, and show examples of, is physical computing -- arduino based projects. These move, light up, make noise, sense and report, etc. And are very easy to program/wire. I include examples like the Makerbot, eggbot, and other CNC devices found in a FabLab or makerspace. These grab the kids attention and imagination ... well some of them. Expect that some kids will be snoozing or otherwise occupied - they are teens in school, not something we all loved.
I related some of my experience with the robotics club too. Generally these clubs use VEX, Lego and First equipment, which is pretty much the same as arduino based projects... microcontroller, sensors, actuators. I started teaching arduino to the club last month and the kids ate it up... the girls were especially taken with some of the creativity it offers (blinkin lights).
So, I don't know whether comp sci by itself is going to grab the kids attention and get them interested in computer development. The problem solving aspects of deep programming wont really grab them until after they've gotten experience and learned their way around the basics.
At this point, I would say: If they want to be a programmer, tell them not to waste their 4 years getting a CS degree. Study something else entirely and write code on their own time. If they truly enjoy programming, they'll learn far more by just doing and reading all of the vast resources out there, on the Internet and in libraries, as they need them to solve problems. Then when they do graduate, they won't just be another code monkey - They'll have a good start towards some domain expertise and be able to model it with their coding skills.
Split the boys up from the girls. Tell the boys it's hopeless and that there are no fun jobs left anymore. Tell the girls it's the best thing in the world. We need more girls in our profession.
I think High Frequency Trading (HFT) is a good topic to talk about, considering the recent media attention on financial meltdown, new NYSE trading facility in NJ and occupy wallstreet and what not. It covers most CS topics like 'algorithms/math' to maximize profit, 'data mining' to beat the competition, 'IT infrastructure' to minimize latency, and 'global influence' in terms of market impact, fat-cat bankers and boom-bust economy (you may consider positive phrasing on last 2 points).
Finally, I remember reading here in slashdot, a C++ native dev who writes algorithms for one of those HFT firms, who earns 1/2 million per annum. Now that is serious money right ?
I would answer the kid that in today's world most of the jobs that require a CS degree either go to foreign work visas or are outsourced to Asia and the best bet to get a job is anything in medical!
I killed da wabbit -Elmer Fudd
Problem: how to predict the water flow over different shaped nuclear fuel rods
Approach:
Solution: which approach gives the easiest way to tweek a shape?
Problem: Predicting weather
Approach:
Solution: refining the model used in b is easier as it is much more fine grain
Very few people work in pure Computer Science.
jerry
"Software is the difference between hardware and reality"
I would discuss what skills are required and beneficial. Also the duos learning experiences in the profession, such as basic political issues and best practices. A good place to point them to learn more is WiBit.net
Computer Science is different than Computer Programming.
A lot of Computer Scientists can't program. A lot of "professional" programmers can't, either.
What they learn in classes-- especially the hardest ones-- is actually useful, but it's up to them to make
something of it. They shouldn't expect getting a job and a college education to correspond. If they want
a job, mess with Linux, not with college. If they want an education, take school seriously.
1. The Bastard Bible: The Tome From Hell.
2. The Compleat BOFH.
3. Kama Sutra
Pop quizzes every Friday. Tardiness punishable by 2 days in the comms cupboard. Unexcused absences punishable by cattle prod.
Knowing Google's lust for data collection, the Soviet Union is still alive and well inside the psyche of Sergey Brin....
You'll get the "how do I hack?" "how do I make games?" questions no matter what. But if you do the talk about right, those will be flippant jokes rather than serious questions.
Basically you need to open with your way of saying "everything you've seen on TV or in movies is wrong. There are no falling columns of Matrix code controlling everything, and there is no 'hacking' by flying through 3D cities or typing for 30 seconds. World of Warcraft took sixty million dollars and three years to build. Whoever fried Iran's uranium centrifuges, wink wink, took years of planning."
You don't really have time to go in depth, nor do they have the background for you to show them actual code. So don't worry about those. The key is to pick examples that they'll already be at least a little familiar with and that you're comfortable with, and realistically de-magic those examples a bit.
I'd recommend two flavors of examples before you open for questions. The first one is based around "this is what I do in real life". You can very easily tie your database stuff to, well, every big popular site the students have ever used. Facebook, Google search and maps, any webmail, ebay, Amazon, itunes, 4chan, Slashdot, and so on. All of that is based on gathering, sorting, storing, and searching through vast amounts of information. You can do the old dictionary example - use a physical dictionary, solicit a word from the crowd, and then look it up quickly right in front of them. Then point out how it'd take all day if you had to read every line in order from the front or the back. Then point out that Google's database printed out as dictionaries wouldn't fit in the entire internal volume of the school - floor to ceiling, wall to wall, all the rooms and hallways and the cafeteria and gym and auditorium and so on - and yet Google needs to do millions of lookups per second. All that is math. Not Einstein's rocket ship time machine math, but stuff not much harder than what they'll see next year in Precalculus. But without the math, it's like the warehouse at the end of Indiana Jones, where cool things go to die (because no one can ever find them again).
The second one would be any common-but-hard problem in games. Something like pathing AI. You don't need to have actually written those programs; the idea is that you can explain it's too complex to calculate every possible path and pick the best one. The gamers in the crowd will grasp this fairly well, because they've all seen games where the pathing sucked, or where the third person viewpoint kept blocking them, or where the AI enemies seemed to cheat, or where the interface was poorly designed and you could never find what you needed in its maze of nested sub-menus. Again, it's all math. But it's hard-but-interesting math. The computer can do the calculations, but you need to know what its limits are, what calculations need to be done to do the work you want, and how to tell the computer to do those. You cannot say "computer, make me a sandwich"; you've got to write it a cookbook first.
Not on it's own of course.
Knowledge of computers, their capabilities, and how to access these capabilities through programming can make a member of any professional field into a superstar of that field. I am a chemist, but one of my most valuable skill-sets right now is my knowledge of programming and my ability to learn new languages and apply them to automation of tedious to interpret data. Another example is in the financial sector; other than the executives, the biggest pay goes to programmers.
Look at any high paying field and you will find that people with dual skill-sets that include programming will earn more money and have more opportunity than their programming deficient peers.
Tell this to the students. Tell them that in today's economy they should foster an interest in computers to compliment their future profession.
They can learn all the dry topics once they decide computer science is something they like. Speak to what they seem interested in. You may not nail it on the first couple days of class but it shouldn't be too difficult to figure out some portions of computer science that already have their interest.
With that being said, you mentioned you are big on SQL. If you students seem technical enough, try to introduce them to The Schemaverse (http://schemaverse.com). If game development is what they are interested in then they can play the game by each making their own interfaces in php/js, java, python, whatever you prefer to teach. They will learn the basics of how to connect and query against a database and, if they get really into it a lot of very advanced database concepts. Full disclosure makes me mention that they game is mine and you should take what I'm saying with a grain of salt but I would have loved to be introduced to something like this in high school. Kids are competitive and this lets them learn and battle against each other at the same time.
-Abstrct (posted anon because /. won't let me login)
No, I'm not bitter.
DT
Is this thing on? Hello?
Rather than ruining their dreams, you make this an opportunity to make them realize how important math and science is in CS. If you know a little graphics, you could start by describing how a 3-D model is represented and how it is converted to a 2-D image. If you want a realistic simulation of the world, then you need to compute the physics correctly, meaning trig, algebra, calculus, forces, etc.
Right after I learned a few basics of the C16 (C64 was for rich kids) I programmed a small game. Granted it wasn't much, dodge missles in a balloon but it was a game. And it was within a weekend. Instant gratification was a LOT easier back in the days. Only thing that gotten close was knocking up a light organ with Andruino and a robot that tries to stay within a given distance of your hand. Also quick knock-ups although they were done based on years of programming experience.
We had it easier as oldies when if you weren't rich you HAD to code your own stuff because you couldn't afford bought games or even to load them from tape in a cassete drive which you didn't have.
Anyway, if you want to get kids down, just remind them that for every scientists there are dozens of people running the same test time and time again all over the country. For every top programmer there are dozens of people writing the same HR program or website over and over again.
Maybe it is better to not tell them. Let them dream.
MMO Quests are like orgasms:
You may solo them, I prefer them in a group.
As a board-trained draftsman, I know that fancy computer models are not necessarily representative of reality. Start there. And yes, I've done my own bit to "do something about this" by co-authoring a book (The Planning Guide to Piping Design), my websites and involvement with local and international CAD and engineering-related organizations.
Hacking. Porn. Drugs & alcohol howtos. How to bypass to censored websites. Being free from ones parents. These are the things a kid is interested in. These are the things you won't be talking about.
However, they'll be plenty of kids interested in these thing. If they think you are just alluding to any of those things they will stay on in lunchhour, even if it's mixed in with more mundane stuff. But like a granny who gives the grandchild sweeties, be careful.
A blog I run for the wealth
I recommend against *you* giving that talk.
Find someone who *can* do video game programming, and ask that person to give the talk.
Listening to a description of software engineering from the perspective of someone whose primary experience is with Coldfusion, PHP, Javascript, SQL and bash scripts, is just going to seem SUPER LAME to those high school students. So why waste their time and your time?!
first 20 minutes: dip into topics that the students are familiar with, or should be: game programming, google, facebook, twitter, wikipedia, slashdot of course, windows, linux, browsers, internet infrastructure, etc. a few well-chosen sentences on each, things that they might not know and that might interest them. how many servers does google have? how many programmers? bill gates, linus torvalds, others. there's only time to tantalize the students about the topics you bring up, and the point is to get them to want to know more and to start doing their own browsing and research.
second 20 minutes: hardware, especially processors. spend more than half the time introducing how a processor works and how designs are evolving. the students might be intrigued to hear about the code names for current and upcoming intel architectures. then spend a few minutes on memory, disk, graphics, other i/o, etc.
third 20 minutes: programming, especially programming languages. assembly, C, and higher level languages of your choosing. suggest how to get started programming. maybe (just maybe) begin with a pair of languages, one higher-level and one lower. for example, either python or ruby, and C.
Please mention the GPL & LGPL and their significance, along with the Apache & BSD licences. Make sure they understand the importance of software licences in general, especially the benefits and dangers. For promoting standards, an Apache/BSD style licence is probably best; but for an important piece of software (Linux kernel) you want to keep free, then the GPL style licence is probably best.
Ensure they know how licences affect end users, the software developers, and other parties.
Not to mention the nature and danger of software patents, groklaw.net has resources to cover this (& the GPL).
Give them a quick overview of what Computer Science is, what programming is, and examples of occupations in the spectrum. Everything from security, forensics, digital art, movie making, games, accounting, statistical analysis used in sports, medical research, etc.) List some skills and personality needed for those occupations, along with the money and competition they will likely find in each area. I'd show a slide of dozens of areas where they would find CS being used, in various aspects. Then pick 4 that might interest them (maybe gaming, online companies (amazon, FB, google), sports, movies, hardware) and list out the info.
The thing to get across is that computers are used nearly *everywhere* for nearly *everything* and with the proper interest and "mad skilz" can make their own occupation.
You might also want to cover IP, copyright, patents, theft, etc.
Maybe you can also talk about being an entrepreneur, how companies are started, what funding means, stock, and money. money money money. :)
Kids these days are more distracted then ever. They want you to teach them how to create World of Warcraft in 10 minutes from text. Kids need to know, more than anything else, that computer science is extremely complicated and it involves looking at everything they love in a completely different fashion. 90% of kids that are interested in CS lose that interest very quickly when they find out just how involved and complicated it really is.
Someone previously pointed out that Game Testing is actually a really unfun job. And it's true, and kids need to know that. The first thing any good teacher should do is crush the false beliefs that lead so many people down a path they are not properly suited for in the first place.
Ensure that they have some notion of what a database is, and the relative strengths and weaknesses of different RDMS's.
For example contrast MySQL and PostgreSQL: the former is much more widely used, but the latter is more secure and has greater reliability & performance.
I have worked with both; but I find PostgreSQL easier to work with, both as a DBA and a developer.
Also mention normalisation, and what it means.
Perhaps you might suggest to them that by the time they get out of college there will be huge changes coming ever faster and faster and it will be a strenuous but perhaps high paying path. I think we are still in the first seconds of the age of computation and expect radical progress and sudden changes.
The Linux kernel is written in C, and many applications are written in C++.
Python is a fine language, many useful applications have been written in it. Unfortunately it does not scale well when you need to use multi core processors and multi-threading.
I did my DipAppSCi (about half the value of an M.Sc.) using C, with a little C++. Many moons ago I also got paid to write FORTRAN and COBOL, but I would not recommend them now.
For serious Enterprise work, nothing beats Java, and some games have been written in Java.
Java is cross platform, scales well for complicated systems, and has awesome Just-in-Time compilers, plus extensive libraries. It also has a very good IDE named Eclipse.
Java is now my preferred programming language.
Telling students about CS will just encourage them to try it.
you have some options:
A: talk about CS concepts through PowerPoint slides. Result: you will bore them to death.
B: have them build a game. Yes, this actually can be done. I know this because we have been doing this with thousands of kids and have been training teachers to do the same. Here is an example activity: http://scalablegamedesign.cs.colorado.edu/gamewiki/index.php/Frogger_Design
I just visited one of the first schools in Brazil implementing Scalable Game Design. Its working wonderfully!
Well the first thing you need to clarify is this: If you aren't smart enough to research it and figure it out for yourself, to hit the door, you are in the wrong place.
Second with that said, share a few pearls of wisdom with them. Not a lot, so that you don't bore them. Then you open it up for Q and A.
One pearl you can share is that networking is most important, and I don't mean with computers, but people. People resource management is key to success in projects. You need a team of people to get stuff done. If you can't be a good chief then be a good Indian; but by all means, be apart of the "tribe" and pull your weight and help the others as much as you can.
Second; specialize, but try to be a jack of all trades. You will never be master of all of them, but it sure doesn't hurt to try. But ultimately pick one aspect and shine at it, but don't fall out of touch with "the big picture".
Contracts, get to know them, know yours, if you don't have one at the moment, and you are working, something is damn wrong. It's a fast moving industry, in fact humanity has never seen anything that moves like this. Traditional thinking of "lets buy the expensive house with the pretty wife and make a nest" can be like throwing a boat anchor with a chain on it behind you as you are trying to run. You need to be nimble and mobile, but if you find something good, don't be stupid, drop anchor and set up camp.
The military AFTER you have some school isn't such a bad idea. Get as much rank as you can from the start from your education. Go for an MOS, (Military Occupational Skill) that is marketable and lucrative in today's world environment. Get the training you want/need and make some contacts, then bounce out to the private sector where the real money is. That is unless you really dig what you do in the Military and the perks are priceless, or if you think you might have "moral conundrums" working in those fields in the private sector.
Ultimately, the big cheese, the moola, the fat bags of cash, are when you are the boss. Think beyond being another drone, think about being an industrialist or founder of your own company. You then have to be "large and in charge", and do the heavy lifting when it comes to the thinking and making decisions. It sounds sexy and exciting, but it's not for everyone obviously. There is a lot to be said about just enjoying a decent job that pays the bills and having time to have a family and/or to just goof off.
Lastly, the world doesn't owe you a damn thing. Just because you have an education, doesn't mean the world is going to beat a path to your door because you are a "genius they can't live without." Recognize opportunities and capitalize on them. Make your own opportunities if they aren't floating by you at the moment.
If this is too much for you to comprehend, don't stress it. Go deliver pizza, do bong hits and play your games.
Take the Red Pill.
What sort of background do these kids have?
A fun participatory thing is to have them be a computer. One kid is the ALU, some others are registers, another is RAM, another is Disk, yet another does the sequencing. You pass information on index cards and do a simple program (generate Fibonacci sequence? Sort some numbers)
A binary search by ripping phone books is great/destructive fun. Too bad fanfold paper isn't around much anymore, because you can print off a lot of copies, and it has nice perforations.
So that's hardware and algorithms.
Then you can talk about more complex things: security, simulations (which leads into games and also finance and also gambling), analysis (predicting baseball or horse racing), language translation (heh.. it's more than looking up words in a dictionary. Give them an English:obscure language:English dictionary and have fun) You can also tie to information theory
There were comments above about doing a Q&A and talking about programmings impact on society. I think that's a great place to start, and then I'd add the following:
1) Show them examples of different types of programming. Show some programs and web pages, and then show the code behind. Don't worry about explaining the code, the idea would be to just expose them to what code looks like. It may seem boring but they'll like it.
2) Show them some cool tools they can use to start programming. I'd suggest NetLogo (http://ccl.northwestern.edu/netlogo/), it's easy enough to pick up, instantly graphical, and comes with a diverse library of pre-written programs (simulations in physics, chemistry, biology, artistic programs, math programs and yes, a few games...). Maybe show them a quick program that does something that looks cool. You can do this in NetLogo in 5 lines of code.
If you only have a couple short sessions you shouldn't focus on anything too deep. Get them excited about what can be done, and show them something that's easy enough for them to get into quickly but robust enough so that they can do interesting things (this is why I'd suggest NetLogo over something like Scratch).
Games motivates kids, but explaining beyond what they know it becomes really easy to lead into anything CS: databases (WoW and F.Book), algorithms (video game special effects), physics (Portal), etc. :-)
If you try to tell stories only about how incredibly important it is and how many people got rich off it, then you'll be doing them a disservice. The same if you tell stories to make it out like it's some kind of obscure, niche world apart. Dilbert strips and cofee mugs with programming jokes are funny, but nobody really aspires to be the bearded guy in a coffee stained t-shirt who brings a pile of cut-out dilbert strips.
You should try to reach those who enjoy logic and structuring things mentally, and then try to convince them. For example, at some point you should take a brief and simple snippet of code that non-programming fans of logic can grasp and appreciate, talk through it over 1-2 minutes, and then about the context it fits in. Maybe if it involves making pieces of hardware talk together that would be more interesting. THEN you can talk about the benefits, like salary, and how the very best programmers fill very important functions and tend to get recognised for it.
I would explain to them that they will be required to learn new frameworks and technologies on the fly to create solutions. That what they learn in school is only the ground work to allow them to make good decisions when learning more.
* Field changes too fast for experience to be valued much & requiring constant re-learning
* Path "upwards" is bumpy in practice and programmer burnout is common. If you are not in management in about 10 years, you may face a tough future as a techie.
* Low prestige
* Globalization may affect you in expected ways
* Potentially lousy working conditions and/or long hours
* Accounting, Finance, and Law offer potentially better long-term options, even if they start lower
Table-ized A.I.
If it weren't for the guys from IIT, none of the following inventions would have occurred:
Seastead this.
One of the best way to be interesting for high schooler will be, in my opinion, to teach them functional language such as scheme, haskell or lisp. You should have a look at the bootstrap project for more information and examples (http://www.bootstrapworld.org/). This project is awesome and allows to easily bridge the gap between programming language and mathematics, in particular functions (i.e. f(x) = y not f(x) = void).
First let me make it clear that I don't equate computer science with programming. Most programming is not very elegant and typically it has to be done by a deadline. To me computer science is more about algorithms. A programmer will work on writing a thousand lines of code, whereas a computer scientist will focus on 30 lines within the same time frame. Whereas the programmer writes things to work, the computer scientist makes things work a lot more efficiently. Programmers are engineers that take the tools that the computer scientists develop and apply them.
So if you're taking about computer science, in my mind, you're talking about algorithm development. That being the case, I generally start my classes off by doing binary sort and search routines. If you have 3 20 minute sessions, I would use the first to have the kids figure out how to figure out if a number is in the list. Most people come up with a bubble sort routine. Second, show how binary search is much more efficient and have the kids start thinking about how to sort a list effectively. And for the last session show them merge sort and show how it works. As an application it helps to instruct my students about why algorithms and by extention computer science is important and it gives them an activity to participate in which tends to make learning more interesting and practical. You won't cover a big expanse of material, but it generally gives a good feel for a) how useful computer science is b) that figuring out algorithms are tricky and c) that it takes a lot of work. I'm not sure if you could cram everything into 60 minutes, in general it takes me about 5 hours with college students, but perhaps that will give you something to work from. The important thing for me is getting them to the merge sort algorithm, but without a reason for why you would want to sort information that could be difficult. You might just show them binary search by bringing a telephone book in and asking them if fred jones is listed and explain why searching sequentially is a bad idea. Then launch straight into figuring out how merge sort works.
/* TODO: Spawn child process, interest child in technology, have child write a new sig */
Everybody is posting about being a specialist in programming, a full-time programmer.
I'm an engineer who also programs, and there are biologist-programmers and chemist-programmers, and accountant-programmers and salesman-programmers.
Tell them it is generically about the "systematization" and automation of any human work that can be handled without conscious thought. That if they can program and do any kind of white-collar or technical job, they will never have to do drudge work for long, because they'll be able to automate it themselves. Co-workers will come to them for help when bogged down with repetitive work.
I've become convinced that if more people treated the ability to do a few macros, the comprehension of a database and basic filtering and queries, all as required "computer literacy", about half the business software in corporations would not be needed.
> talking to high school students about computer science and programming > programming skills are somewhat limited to Coldfusion, PHP, Javascript, SQL and bash scripts LOL.
+1.
Everybody nowadays uses the terms Science and Engineering (and sometimes their marketing) interchangeably, and it's not only plain folk or children. Academic institutions also do, because all Departments want a piece of the the cake.
In my country there is historically a big battle between Schools and their Departments: In the mainframe computer beginnings (the 80's) it was the Mathematicians that claimed to be the foremost experts in CS. Almost immediately the Physicists came along, claiming that they are the only ones that knew how to apply CS in real life problems. Soon, the Engineering Schools got their CS Depts. and 20 years ago the first CS Depts. within Science Schools were founded.
All these graduates still fight for computer-related jobs in the public and private sector, all claiming to have a "CS" degree and related post-graduate studies.
In real life: A CS Dept. Professor once told me, when asked about the specs of a new PC they were ordering: "Don't ask me about what 'video card' I'd prefer, I don't really know what's inside a PC - I'm a networks expert". On the other end of the spectrum, computer shop owners and sales stuff have no CS background at all - they're just salesmen who might have been hobbyists in their teens.
In conclusion, there's just one thing one could safely advise about "CS" and it's the same piece of advice pertaining to life itself: Beware, it's a bitch.
Pay scales for various jobs in the field, versus similar fields. i.e. Professor vs Project Manager vs Code Monkey vs I&IT Grunt etc.
What your resume should look like to get the job you want.
Then if there's still time, do an intro for iPhone or Android API and how to submit their creations to the respective stores, and Project Euler.
Computer science is the study of algorithms.
Looking at our students at university, most of them, especially the male students, have a total misconception of computer science (CS). Their motive is often: I play with computers all day and computers are cool. Therefor I study computers. But CS is not playing with computers it is not programming. These are only some minor parts of CS. The central element of CS is information, that's why it could also be described as Informatics. The interesting questions in CS are: "How do you get the information?", "Who tells me what to do with it?" and "How can I do that?". The first two questions are answered by the domain of application, which means some none CS person tells you what the do and what they want. And you as as computer scientists have to learn and understand their domain. So communication skills and people skills are as important than logic skills.
In my life, I had to learn to communicate with South African business men, with German business men, with electrical engineers, and mathematicians working in the railway business as developers. They are all different, and you have to know a lot about social group behavior to understand what is going on when you talk to people. So being a total nerd only helps you through the classes at university, but it will not help you to be a good computer scientist.
As CS is considered a male thing, the few women who study it, have given that decision more thought. And in average they are better in that field. This is very similar to the male performance in so called female fields. There men outperform women (on the average), as they given their decision more thought.
And the most important thing to do: Invite real computer scientists, but do not invite the nerds. Nerds are nice people (mostly), but they do not represent the majority in CS especially above ground level (as they live below ;-).
I do not know how things are in the US. However, CS is considered a hard study in Germany. You have less math then in math. Therefor you have graph-theory, logic (first order logic, model logic, etc.), grammars and languages. But CS is not only theory and application of those to real world problems (modeling and playing with other peoples models). It is also a people thing. So you need people skills and you should train your people skills. You need to understand people form other domains so you can understand their models and their information processing needs. You also work in teams and need to know a lot on group behavior and group management. Programming is just one thing and it is the last step in modeling.
50 percent for Question and Answer. That will probably best to have them interact with you and make sure they understood your lectures. 50 percent on the topics. Most of computer science topics are all theories anyway, even programming. It is much better explained with interaction in where the students will be able to ask about and catch up with the theories by their speed
FTW
There will be blood in the aisles!
Begin like this, "How do you solve a difficult problem? Anyone? Gee, I hope none of you encounter a difficult problem. The tools used by the greatest minds in history to solve the most difficult problems in the world are available to you, too. " I'm never around kids but I have an assumption that the scientific method is not given the reverence it deserves. I think you could give a very memorable talk on this subject while working in the details of the programming life.
Not to knock cs people, but the science part is a total misnomer. Cs is math and engineering, not science. I would suggest that you frame computer science in the context of a domain, not for it's own sake. Show how a computer takes a big problem, breaks it into a bunch of little problems and shows a user a answer to the question they asked. You could show a shot in angry birds and help them appreciate how it works as a physics simulator, then go into how the same thing can be done to figure out how to build buildings the don't fall over in earthquakes or something.
They're stagnated.
(or the men, as the industry tends to move towards gender parity)
Firstly, like any profession, people have an idea of what is attractive about that profession, yet that represents some tiny fraction of people actually in that profession.
It's already been mentioned that everyone will want to "get into computers" to "make games", but that is a tiny fraction of people doing CS, CompE, and just plain programming (not to mention IT or SQA).
Similarly, people think they might want to be a lawyer and imagine themselves stunning juries and proving the marginalized innocent, or perhaps helping the downtrodden or just making an asston of money from rich criminals.
But the majority of legal work is mind numbingly stupid paperwork. Almost nothing goes to trial and even less goes to jury trial. People who want to be lawyers need to expect to be loading up Word templates for wills, real estate purchases, etc and filling in the details and then hitting print.
The majority of IT and programming folks do not even work for software pure-plays. You want to know where a lot of programmers work? Insurance companies. Banks. Large organizations that have legally required information management problems. Just like the majority of people who go into law do not spend their days recreating Perry Mason TV episodes, the majority of people who want to "do computers" do not make games and do not even work on something recognizable like Windows or iPhone. You're going to spend your time making underwriting software, or web portals that help your sales people or field agents or back office folks or whomever do their jobs more efficiently.
If you're really good, you have a lot more choices about what you work on and who you do it for. And unlike law and most other professions, computing work is still much more a meritocracy than a seniority or priviledge based system. So that's good.
The main thing I'd tell highschool folks is that if you have an inclination to tinker with things and are good at solving word problems, IT & software work is very safe, and tends to pay very well. And in 5-10 years when most people are over their sleeping around and getting drunk years, potential mates are going to be looking for people with stable jobs and above average financial health.
And so unlike the people currently popular and fashionable in highschool, 99% of whom will be irrelevant history in fewer than 4 years, people who figure out how to provide value in the modern information economy will be above-average candidates for potential mates, and will enjoy increased disposable income and have an almost zero chance of facing a permanant injury or disfigurement on the job*
So yeah, being a computer nerd now isn't the best way to find a mate, but in the future it pays off.
*(carpal tunnel notwisthanding, although you can mitigate that by pre-investing in ergonomic seating and input devices, which frankly you should be happy to pay for out of your own pocket if you are concerned about those risks and plan on being a professional in the industry)
My opinions are my own, and do not necessarily represent those of my employer.
I've been in the same situation as you, a few years ago I was asked to give a short demonstration to high school students to get them interested in CS.
in my opinion you're either born a programmer or you're not. So trying to coerce someone into a life of programming is pointless.
Many programmers will get started as a child making simple and buggy games. but there are those that lack confidence or just looked at someone else's code and was so overwhelmed they just gave up straight away.
What you're really trying to do is convince those few in your audience (who are natural born programmers) that it isn't as challenging as it appears.
You don't need to know two years of calculus or understand everything about the language to get started.
Today it's even easier than it was when I was getting started thanks to the internet.
Let's say you're like 9 years old and you need to code something that depends on the distance between two objects. But you don't know the Pythagorean Theorem. Who cares? Just Google "Distance between two points" and now you know the theorem and you didn't even have to sit through a boring class to learn it.
What I showed them was two simple programs:
the first was a simulation of two people driving cars and buying gas. The question was, who would spend less money over time; someone who buys gas every day or someone who buys gas only when they need to, and all this while gas prices are rising on average about 1 cent per day.
Now you can sit there and do maths and work out a solution, or you can reason it out and have a 50/50 chance of arriving at the correct conclusion, but if you have just a rudimentary understanding of pretty much any programming language you can just simulate this scenario and have the computer solve it for you.
So I guess the lesson there was that if you know some code, you can solve more difficult problems in life, because you have this extra appendage (a computer) to help you.
the second was a simple zombie game, all done in a console window, which resembled a BBS door game from the 80's. You just walk around as zombies follow you and you need to shoot them. The point of this was to show the nature of object oriented programming as (during the presentation) I was able to get into the code and make a new weapon (a rifle) by inheriting from an existing one (a gun). Although most of the students weren't really interested in the code and just played the game, there's one or two who seemed curious about it.
It's those few you're really there for.
Dilbert talks about his job in 1993:
http://dilbert.com/strips/comic/1993-04-20/
http://dilbert.com/strips/comic/1993-04-21/
http://dilbert.com/strips/comic/1993-04-22/
http://dilbert.com/strips/comic/1993-04-23/
And again in 2007:
http://dilbert.com/strips/comic/2007-11-18/
Of course, this approach assumes you are trying to prevent competition for jobs...
Computer programming today has become quite diverse. For that reason, the future of a lot of programming jobs lies not just in knowing programming, but also being an expert in some subject domain. An example of this is bioinformatics. To do a really good job, the programmer needs to know not only programming, but the relevant biology as well. A deep understanding of what the program is for and why is needed.
I would tell the kids that yes, they should study computer science, but that they should also consider what area they want to work in, and make sure that they have relevant knowledge in that domain.
If these are kids who haven't had any programming experience at all, then I think it would be useful to give them a taste for what a program is like.
Have them "write a program" to get you out of the room. Tell them you'll understand the commands TURN RIGHT, WALK FORWARD FEET, OPEN DOOR, and so forth; and they can string these commands together as a "program" for you, but you will interpret them completely literally. (Like, did they remember that you won't be able to open the door inward if you're standing right up against it?)
Then, have them write a program to get you out of the room no matter where in the room you're standing, no matter what direction you're facing at the start. Introduce them to IF ... THEN, REPEAT ... UNTIL, and other such concepts. Maybe even subroutines for commonly-repeated instructions.
After twenty minutes of this, some kids will be bored, while others will be excited. This is how you'll know who might have a future career in computer science.
To properly do game development you need to know mathematics, physics, are appreciation, art history, literary analysis and business development in addition to computer science. In short they better learn their non-computer science and humanities subjects as well as they can in addition to CS.
Computer programming, software engineering are great and if you keep your skills up, you can do it for a long time. But always be mindful that there are a lot of people who do it well and these days, a lot of very young people around the world who will do it for a lower salary than one might find comfortable in the West. If you want to raise a family on the salary you will make in the software industry, be sure to keep up not just your technical skills but your leadership, writing and project management skills as well. Making machines do stuff in an automated way is impressive, but a lot of people can do that. Leading a large group of people to produce great works is very impressive and much harder to accomplish than you might think.
At the core of Computer Science is Applied Mathematics but I didn't figure this out until I started graduate studies. Undergraduate was all programming.
Rarely what someone studies at university becomes what they are employed as. I don't work as a computer scientist, programmer, or mathematics. I work in IT, it's all a mater of circumstance.
Encryption: I may not agree with what you say, but I will defend your right to encrypt it...
... and created a fascinating curriculum: CS Unplugged (http://csunplugged.org/). It gives you the opportunity to express the core of computer science without any computer. There are excercises for algorithms, binary numbers, information threory, ...
You have to adopt the material for the aimed age. Most sections in the teacher's book explain extensions to the original questions raised, so you can make it as complicated as you wish.
And if you have the chance to get Tim Bell (New Zealand), the original inventor, do it. This guy knows how to make a good show.
What's so amazing is how the smartest people in the world can be so stupid. Computer Science people are smart and logical except when it comes to their own lives and careers. Being chained to a terminal working like a slave and being smart enough to see the "ruling class" of CEO's and sales people getting ahead while you toil at all hours of the day and night his truly sad.
Without the CS majors many of these companies would not exist yet there are armies of stupid CS majors ready to line up one after another to be exploited for low pay and crappy benefits and treated like a commodity.
Along that line, I'd touch on ways they can start working on their own on programming. You could cover different areas each time:
There's more than enough time for them to learn about the realities of life. Right now the goal is to show them that they can enjoy and show off their STEM work. Hopefully some of them will take it to heart and enter the field.
I do security
I was, using math as a guideline, trying to say that if someone in high school is considering CS, they should really first consider something like physics or chemistry or engineering; and if they cannot handle doing the math for any of those fields, they should reconsider why they are looking at CS.
I do presentations for high schoolers (10-20 minutes) about potential career in Engineering, Computer Science, Financial engineering ..
The best is to use videos to keep their attention.
Use a game or a simulation
If you ask a question, give them some options. They are usually intimidated to be wondering
Give them credits
Tell them what they can do with this knowledge you are sharing with them