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.
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.
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.
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.
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.
I don't think I'd heard that the education costs compared to salary were bad for computer science. For IT this may well be possible, but I went to a state college, had a small stipend in grad school, and made more in 2006 than my dad, who was a Mechanical Engineer with 30 years experience working at NASA.
So I think it depends what you do with the degree. Working in IT may not pay well, but systems programming will probably put your household in the top 10% of income within 10 years. Pay at IBM, EMC, Amazon, Microsoft, Google, etc., are all pretty comparable.
Terrorist, bomb, al Qaeda, nuclear, yellowcake, kill, assassinate. Carnivore is dead... long live Echelon.
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.
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.
Don't be silly. They already know that.
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.
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.
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.
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
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?
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."
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
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.
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
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.
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
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).
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.
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.
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. :-)
* 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.
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.
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
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.
(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.
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...
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...
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.