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?"
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!
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.
If they want to know about game programming, then obviously they are at the wrong talk. Programming is not computer science.
Work experience and no degree
The headline said "computer science", which is an academic discipline and therefore all about degrees and not at all about work experience.
However, it is true that many former programmers decide to acquire a degree in computer science, and many former computer scientists decide to start a career in programming rather than finishing (or after finishing) a degree. Both fields have their advantages and can be quite lucrative and rewarding, but mistaking them for each other is an error.
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'd especially tell them what it ISN'T. There are a lot of misconceptions about what computer science actually is and a lot of is perpetrated by well-meaning adults who tell kids "go learn about technology" and glom computer science into that extremely broad category of "tech".
I work for a youth organization, and I always have kids watching what I do and going "Cool, can you teach me how to hack?" Invariably, they get disappointed when I show them how to ssh into a remote machine and recompile the kernel instead of breaking into a DoD mainframe and launch missiles at China or something. And anytime I do try and generate interest in actual programming, it is hard to get past the "How do you program games?" point. Let's work past printf and scanf first, junior.
It's a toughie. IANACS, but I've taken programming and numerical theory classes and it can be tedious and detail oriented. It's hard to put that up against a generation who has a lot of instant gratification when it comes to their experience with anything technology related.
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. :)
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.
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
And then you'll blame the hardware when something's too slow
Or the guy who quit last week.
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.
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 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".
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.
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
Hard to put that up against a generation who has a lot of instant gratification when it comes to their experience with anything technology related.
Man, you have a true gift for words.
When I was a CS undergrad, it was a small and somewhat exotic discipline. Exactly one course was offered at the first year level. Anyone wanting to get into the program had to first pass through the course. It began with a lecture that basically warned us to expect several times the effort in this course compared to the other sciences. That was no exaggeration. It meant that not too many people went into the program who didn't love it for its own sake. We were happy to put in the time. This was the spirit of folks like Dennis Ritchie.
The dot com boom felt horrid. The industry was massively invaded by greed and competitiveness and impatience and fascination with all things shiny, more the spirit of Steve Jobs. But you can't get around the fact that science is a discipline. It entails a lot of work. If I were trying to expose kids to computer science today, I'd talk to them about this reality. I wouldn't mind scaring a lot of them away, frankly. But I'd also present some simple examples of why I find it so beautiful and appealing. Binary numbers and simple operations. I'd say, "This might seem boring, but this is where it all starts. All we have to work with at first is O and 1. They're our Legos. And we're building an entire universe with them." I'd let my enthusiasm speak for itself. A few in the class would sort of get it. That's all that matters.
Parity: What to do when the weekend comes.
When the talk starts with kids asking about programming games, it's not so hard steering it towards actual computer science. Because game engines are nothing but linear algebra, general algebra, graph theory, artificial intelligence and advanced image manipulation. That's pretty much computer science in a nutshell. Except that actual computer science is about inventing new stuff in those areas while games are mostly about applying what we already know.
BTW, I'm sure there's a lot of cool stuff you can do with real hacking. Compiling kernel is not very interesting to teenagers (except for ubergeeks who need no more convincing). But when they see some tedious task which would take them hours to solve and they sometimes run into it themselves solved in seconds, now THAT is cool. Show them for example how to download a webcomic using simple script or some other mass data manipulation they ask about themselves.
Telling them that programmers make good money is definitely a way to generate interest. Computer Software Engineers make about twice the average salary in the United States and salary growth has been consistent for years. It probably wouldn't hurt to point out some of the folks who have made a fortune in the software business.
I wanted to program games when I was about their age and still do. I remember that I found the prospect of learning a language quite daunting and didn't understand why all the cosine/sine/tangent functions were necessary. Having since programmed some crappy little games, I realize that the motion of objects on a screen is all about trigonometry or geometry. Had someone explained to me back then why I would need all those weird mathy functions, it would have done me a great service I think. Uh, I'm rambling. I guess my point is that math is extremely helpful when programming games. You might want to also explain how stuff like databases or other technical stuff are really important and useful too. For example, storing high scores (or inventories of weapons/armor/whatever) are easily accomplished with a database. If you spend some time explaining why they have to learn the "boring" stuff by giving examples of how it's used, they might be more inclined to slog through it to actually become a game programmer.
Another thing they might find extremely useful to know is what technologies might get them started without having to shell out money for an integrated development environment or a server. For instance, all you need is a browser and a text editor to start working with HTML and Javascript. If they want to write a game, perhaps you could demonstrate some simple code that listens for keystrokes and moves a DIV tag or image around the screen.
And lastly, you might want to point out how there's a huge difference between being a computer scientist and just building websites for a living. It can be a simple vocation or it can be an abstract, theoretical endeavor.
It's hard to put that up against a generation who has a lot of instant gratification when it comes to their experience with anything technology related.
And I had to walk uphill both ways to school... Some of you are proposing you spend 20 minutes with the kids speaking down to them from an ivory tower, using such words as "scary", "don't", "can't". If your aim is to turn off kids to computer science that is a good approach. Yes it is true, you must work hard and display patience. This should not be news to them and if they don't embrace this at some point they will not be successful at anything. So lets not pretend we are special.
You can tell them that computer science is not an elusive club. That their story does not have to include TRS-80's and main-frames and being geekier than the next. Given the time allowed and audience I'd speak on higher levels. Such as computer science is really fascinating because it is constantly evolving, as such you are constantly personally evolving. New challenges keep things fresh and create a wonderful sense of satisfaction. Tell them about what makes you successful in computer science, and be passionate and positive. I trust that if you do this both you and the students will wish you had 20 more :)
And anytime I do try and generate interest in actual programming, it is hard to get past the "How do you program games?" point. Let's work past printf and scanf first, junior.
No, let's not. If you can create even a simple "whack-a-mole" game flipping an image, mouse click to whack and a high score you've given that kid 100x the interest rather than printf and scanf. Are you trying to scare them away or just really that stuck in the 1980s?
Live today, because you never know what tomorrow brings
When I was 40, I went back to university to do a DippAppSci, a 12 month course roughly half the value of an MSc.
A 3 credit Computer Science course took more than 3 times the effort of a 6 credit 'Management of Innovation' paper I did at the same level!
Debugging is often very tedious and time consuming, but you still need to stray awake and keep your wits about you.
If you can not tolerate being outside your comfort zone for more than a minute, then don't attempt CS. At times, I spend days outside your comfort zone when moving into new phases. Every time I get into multi threading, there are new requirements to implement - and there have been at least 3 major changes/improvements in thread handling provided by the Java libraries.
In software development, you have to keep running just to stay in the same place.
Scary, I once met a 25 year old who thought he was too old to learn programming. In the last 5 years, I've programmed in 3 new languages: Python, Groovey, and Octave (since I completed my DippAppSci).
In this business you gotta keep learning!
That's the secret to a long career! You always have to keep learning and doing. I am retired now, turned 69 a couple of weeks ago. I took on my last job in 2004, when I was 61. Most of my co-workers at that company were in their 20s and 30s. In that job I was constantly learning new technological things, largely by talking to co-workers and by buying and reading lots of books, and by reading lots of code. Learned PERL and VXML and XSLT. I had learned Java in my previous job (from age 58), and designed and implemented a plug-in for Eclipse. Since retiring in 2006, I have dabbled a bit still with Eclipse, and helped some local activists build a website. Learned and used PHP (why do /.'ers badmouth PHP so?) to do it.
/. my story about battling a production system that automatically restarted itself every midnight and had an O(n^2) process embedded in the startup sequence (no, I did not put it there) which worked against an ever-increasing set of data. Eventually the startup time was clearly headed to become 24 hours+. CS knowledge certainly helped solve that one, though it took several all-nighters to do.
If you love doing it, keep stoking the fires and shovel in all the learning you can. You do not have to be over the hill at 40.
As for what to tell young people about CS: I found that all the things I knew about CS (self-taught) were enriching to my thought processes, and discrete mathematics often gave ideas for programming solutions.
The one consistent answer I have always given to any student who asked me "what should I study?" is "Learn to write clearly". After all, your legacy will be the writings you leave behind.
I believe I have shared before on
I'm sorry but you are doing it wrong. There are many approaches to teaching and for younger kids it's not necessary to start with such formal fundamental things. I learned English as a second language not by first learning what a verb is and what tenses there are but by reading websites and watching movies.
There is nothing wrong or impure about showing kids a python or basic based easy to use development environment, teaching them some basic operators and letting them get immediately into creating games.
US-UK-Israel: The real Axis of Evil
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 ;-).