

Ask Slashdot: Good Introductory SW Engineering Projects? (HS Level) 140
New submitter mtapman writes: I'm looking for suggestions on introductory software engineering projects for a high school level student. Assume the student can do basic math (up through Algebra I or Statistics I) but is new to logic and computer science. Each project should take no more than four hours to complete including research, coding, and testing. The intent is to introduce the student to software engineering (and computer science) through practical and fun examples. Classic CS problems are welcome. One of the key criteria is available research/reference material to allow the student to make progress with 30-60 minutes of online research.
Some ideas that came to my mind (not necessarily good ones) are: (1) pick a sorting algorithm and sort a list of ten words alphabetically, (2) write a program to convert characters from lower to upper case, (3) write a program to divide two numbers in two different programming languages and compare the results to determine the differences between the languages.
Some ideas that came to my mind (not necessarily good ones) are: (1) pick a sorting algorithm and sort a list of ten words alphabetically, (2) write a program to convert characters from lower to upper case, (3) write a program to divide two numbers in two different programming languages and compare the results to determine the differences between the languages.
Re: (Score:2)
Re: (Score:2)
4 in a row (Score:4, Insightful)
Re: (Score:1)
This a thousand times this. 4 in a row is a great startersproject.
When I just learned programming this was an assigment, when the assigment was done I spent 2 months reading up on networking and programming to make it able to play over the internet.
Re: (Score:1)
This a thousand times this. 4 in a row is a great startersproject.
When I just learned programming this was an assigment, when the assigment was done I spent 2 months reading up on networking and programming to make it able to play over the internet.
This , also , please learn them some version control system like git if you want them to actually learn something that they might be able to use in a production environment.
Re: (Score:1)
This , also , please learn them some version control system like git if you want them to actually learn something that they might be able to use in a production environment.
High school may be a bit early for production environment discussions. But, please learn yourself some grammar if you want to work more in a production environment in English, eh?
Re: (Score:2)
This is a great idea. Any modern source control system is good, just to get experience with the general ideas. If you make them commit as they go along it's a great tool to monitor their progress as well. I made it through all of university without ever seeing a source control system in an academic setting. Luckily I found out about it myself before getting out of university.
Another recommendation is to introduce them to the debugger. Another invaluable tool that was non-existent throughout my education.
Re: (Score:2)
Re: (Score:2)
Re: (Score:2)
Re: (Score:2)
You can easily build those lessons around how to represent a chess board with 64 squares in code. This can be as simple as an array or complex as move generation.
http://www.gamedev.net/page/resources/_/technical/artificial-intelligence/chess-programming-part-ii-data-structures-r1046 [gamedev.net]
Re: (Score:2)
Re: 4 in a row (Score:3)
Here's one (Score:2, Insightful)
How about https://projecteuler.net/? They have a ton of problems.
Re: (Score:2)
If they have a feedback on that page suggest that they work on the problem of their menu bar. It doesn't resize with the page and leaves navigation to the impossible on my phone as all the menu options are off the page with no way to scroll to it.
Don't reinvent the wheel (Score:5, Insightful)
Don't reinvent the wheel. Look for teacher forums where you'll find CS teachers who have found certain exercises are really great teaching exercises. Call other CS teachers at peer schools or schools that are a little better than yours. (You can also go to really great schools, but depending on where you're teaching may have to simplify a bit). Email teacher lists.
The examples most slashdotters think of may be good, but haven't been field-tested in the same way.
Re: (Score:3)
Given that most teaching is utter crud designed to get students to pass tests and teachers to think as little as possible, I'm not sure that's a good idea.
My main advice is that the first year or so of assignments should always be to at as low level as possible. No library functions except the most basic IO ones allowed until the student understands the underlying algorithm of those library functions. No puts() until you know how to use putc() to do the same. No printf() until you have written your own
Re:Don't reinvent the wheel (Score:4, Insightful)
Software engineers should not just batch up black boxes they don't understand.
And if they want to become software engineers they should go to college. This should expose a broad spectrum of students to programming. I absolutely treat printf as a blackbox. I trust its output, I trust that the authors of the black box did their job. But if I spent my career reinventing BLAS I'd never get any work done.
I say start highlevel to appeal to a broad number of students and then if the rabbit hole they want to go down is CS, then they can learn how the blackboxes work.
Re: (Score:2)
Re: (Score:2)
And learning 2D shapes like triangles and squares isn't high level engineering but you wouldn't be able to do a statics or dynamics course without it.
Remember these are still high schoolers.
Half a million (Score:1)
. . . there is no such thing as a "software engineer".
There are half a million of these supposedly fictional beings. It may be time to get off the soap box.
http://www.bls.gov/oes/2008/ma... [bls.gov]
sorting? (Score:2)
Re: (Score:3)
Sorting may be interesting to you, but it's dry and rather abstract.
I completely agree. Sorting and doing string manipulation may be important things to learn, but they won't inspire passion in the kids. And in high school I assume your goal is to get them interested in the subject not just provide job training.
My first programs in grade school were tic-tac-toe and various text based dungeon crawler games. These got me interested in the field. I learned sorting and string manipulation to solve other problems, they were not the goal themselves.
Get it Sorted (Score:1)
Sorting algorithms are the old staple for a reason, they are generally pretty simple and get the kids thinking about how the data is actually manipulated. Do you need a scratch copy of the entire list or just a buffer of 2 elements? is method X faster than method Y? is this always true? What are the time / memory trade-offs and would this algorithm be suited to a very large data set?
Id be tempted to give them a large data-set to work with an get them to race their algorithms without explicitly walking them
Re: (Score:2)
Re: (Score:2)
Yeah, but don't forget all classroom crypto projects must include a back door for teacher access.
Bonus marks are available for using steganography or other methods to provide plausible but inaccurate plain text through the back door such that the teacher does not know you are actually passing secret messages in class (before attempting, candidates may wish to note that teachers must be aware of the feature to award bonus, and that teacher awareness of such also indicates failure)...
Re: (Score:2)
CS vs. programming (Score:2)
Obvious question (Score:1)
Given your requirement regarding online research, the question should be:
"Search the internet for a classic computer science exam or job interview question, then find a matching answer on Stack Overflow. (Bonus points will be awarded if the answer you find is correct)."
Booooring (Score:1)
The ideas suggested are really dull - has the world really not moved on in 30 years?
I'd suggest tasks that incorporate *real data* from the *real world*. Read a thermometer, get the weather from yahoo's api, or calculate exchange rates using live data: real world problems that are relevant and engaging.
Hello World (Score:1)
Hello World. In Java. That should put him off CS for good.
Code Kata (Score:1)
Sounds like something that Code Kata were designed for.
Decent list of them can be found http://codingdojo.org/cgi-bin/... [codingdojo.org]
Re: (Score:1)
I'm thinking most hardcore system programmers and computer scientists on here will probably agree with that to some degree. The best in the industry are those who were already learning this stuff *on their own* as early teens at latest. Focus on them. The others are just seat warmers, honestly.
LOGO (Score:2)
Is LOGO dead? It once was the perfect introductory language. Now get off my lawn!
An init system (Score:2)
An init system that's just an init system - not 97 other unrelated things.
More fun projects (Score:1)
Payroll (Score:2)
Right a program that calculates gross pay, federal, state social security, and Medicare deductions, and net pay. Extra credit for handling exemptions and filing status. Teaches basic logic for the tax tables, how the tax system works (good life skill), and how to take input and produce output. Can be done in any language, too...
Re: (Score:2)
Right a program that calculates gross pay, federal, state social security, and Medicare deductions, and net pay.
*cough* COBOL *cough*
Re: (Score:3)
Haha.
This is for introducing high school students to programming and basic logic. Remember that most of these kids will probably not become programmers but they might be doing reports and/or spreadsheets which can take advantage of basic programming and logic. Start simple (one step beyond "Hello, world"), then move on to more interesting stuff once they have mastered the basics, otherwise they will not understand or be able to adapt the exercises to new projects.
(and let's not forget that a LOT of programm
Re: (Score:2)
Re: (Score:2)
Many of those old books are available at the Atari Archives. I've been translating David H. Ahl's BASIC games into Python to learn that language better.
http://www.atariarchives.org/ [atariarchives.org]
Software eng has piss all to do with comp sci (Score:2, Insightful)
You don't go into an intro woodshop class and hand the students physics exercises. Why would you intro computer engineering by throwing dry computer science at them? Are you trying to chase good kids away from computing professions??
The biggest mistake educators make with computers has been thinking they have piss all to do with math or science. Sure, at a fundamental level they aren't about anything else. But at a fundamental level my morning omelet is all about particle physics, so yah. :/
The reality
Neither science nor engineering (Score:4, Insightful)
You're right, this has nothing to do with computer science. But it's not software engineering either, merely programming. Just like making a birdhouse in the woodshop is neither physics nor mechanical engineering, but merely woodwork.
Find books (Score:2)
They have a lot of simple intro projects that dont need some "company" CS web gui, movie set branding or intro movies to show what fun their movie themed gui is.
Re 'write a program to divide two numbers in two different programming languages and compare the results to determine the differences between the languages."
That might just result in seeing something done in 4 lines vs 8 lines or the use of english words in code. A discussion about the amount typing, why english
Tax (Score:1)
and everything that we usually do IRL that involves computation. For the logic part, try alarm system.
Convert integral numbers to Roman notation (Score:1)
(1) pick a sorting algorithm and sort a list of t (Score:3)
(1) pick a sorting algorithm and sort a list of ten words alphabetically
Why limit yourself to 10? The difference, on a modern computer, between n^2 and n log n will not show up with that few. If you are going to make them write sort programs, make them sort arbitrary input. Then when they feel confident about their code ask them to sort 10000 words.
Teaching sorting help to better appreciate the quality of good algorithm, and there is nothing better for that than seeing your 'perfectly fine' stupidsort() never returning because the data is so large.
Re: (Score:2)
Why limit yourself to 10? The difference, on a modern computer, between n^2 and n log n will not show up with that few.
Because with that few, you can step through the program from beginning to end, even on paper. A much better chance to find out why something goes wrong, and not just that it crashed or produced wrong results.
If you are going to make them write sort programs, make them sort arbitrary input.
No. Two point six times no. Real life data is not arbitrary. Different search functions work with different efficiency for different data.
Re: (Score:2)
Card Shuffles .. (Score:1)
Prime numbers (Score:2)
High school students should know what a prime number is. Find all prime numbers from 2 to 1000 could be a fun, little problem. A quick research, and the student will find the sieve of Eratosthenes (https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes) and implement it.
Goldbach conjecture (Score:2)
In HS, finding the two primes that add up to an even number was the most memorable assignment. The teacher had a bet that anyone who could write a faster program than his would get a prize ... but his was always faster for any number over a million or so. It wasn't until the next semester that I figured out that the key was to only loop until the square root of a factor before deciding it was prime.
Software engineering? (Score:3)
Re: (Score:1)
Re: (Score:2)
Re: (Score:2)
This is common in education: people want to teach X, so they bluntly approach X.
I recently had a conversation with K.A. Ericsson--a brilliant man who has driven research in the area of learning and developing expertise--and our exchange included a minor discussion of using his Deliberate Practice in education. His interest was largely targeted at incorporating better educational techniques into the classroom, and he lamented that he only saw an improvement in *learning* and not an improvement in the lo
Make sure there is learning within learning (Score:2)
None of your choices are SW engineering (Score:1)
They're copypasta programming.
Project Euler and Games (Score:2)
For simple procedural stuff, do exercises off of Project Euler.
Then move on to games. These can start simple, for example, writing a poker or blackjack program that runs in the console. Then move up to simple graphical games. Put together a simple framework they can use, to get them started. Or take an existing framework, but it's really better to roll your own: it will be a lot smaller, because it is focused on the exercises you want to do, and you will understand it better as well.
Write a POP3 client (Score:2)
OOP with actual objects. (Score:2)
Preface: I'm a mechanical engineer by trade. I went back and decided to audit some of my undergraduate classes to refresh my memory I realized there aren't any good 'toolboxes' for any of those classes. AeroPython [github.com] is a good graduate level class for Aerodynamics-Hydrodynamics with Python but there's nothing more basic.
Last night I decided to cram Kindergarten -> Statics into one module just so that I could build on top of it for Mechanics of Materials.
It is in no way complete but it served a purpose, here
Not "Software Engineering" ... (Score:2)
First off, stop calling this software engineering, because it isn't. No more than a potato gun is rocket science.
This is an into computer programming assignment, but it sure as hell isn't engineering, and it sure isn't "software engineering".
Engineering is a discipline, and involves far
Re: (Score:2)
Not engineering (Score:1)
Re: (Score:2)
poker (Score:2)
Create a deck of cards, shuffle it, deal a hand of poker adn determine what hand it is.
This is Introductory Programming not Engineering (Score:1)
While you might be trying to make the course sound cool calling this Software Engineering is totally inappropriate. If you teach a person to apply a bandaid it isn't introductory medicine its first aid. Engineering is a licensed profession with regulatory bodies and legal responsibilities and entails a much higher level of training than the programming equivalent of adding two numbers together.
Get a couple of Raspberry Pi (Score:1)
Hard copy output (Score:2)
Whatever the exercise there must be something to physically take away, and perhaps titivate later.
'Draw a graph' might start with rows of stars bashed out on a teletype... which then needs !'s for the horizontal scale and +'s for the vertical scale... and then the scales may need to be scale to fit the data. Of course by now you're drawing symbols on a pixel map then converting it to a matrix printer. Then instead of a fixed X axis you move to X-Y (or scatter) on a virtual drawing surface that gets expr
ECG with sound card input and Python grapher (Score:1)
This circuit is really cheap and easy to build. I've built it twice now, and even with Radio Shack last minute trips for parts I'd forgotten, it was still cheap.
http://www.swharden.com/blog/2013-04-14-simple-diy-ecg-pulse-oximeter-version-2/
The circuit doesn't take long to make using a breadboard - no soldering required. There's a parts list on the site.
For the Python grapher, I think I used pygame to get a context to do graphics. I can't remember what API I used for sound card input. Basically, I polle
Math + visuals (Score:3)
Another project that can start simply and become as complex as you want to make it is something like diffusion-limited aggregation - https://en.wikipedia.org/wiki/... [wikipedia.org] - which also lends itself well to visualization and requires non-trivial array-handling.
Of course, the calculation and display of the Mandelbrot set also lends itself to any number of enhancements.
Something Fun, not Math (Score:2)
First off: avoid the algorithm and math problems. The one or two geeks in the class will love them, the rest of the class will be turned off from programming for the rest of their lives. I have a Ph.D. in CS and still hate those types of problems (ok, I have a love/hate relationship with those types of problems - i love them, but hate using them for pedagogical purposes).
That said, the single best intro to programming/software engineering project I had was a graphics programming project when we barely knew
Re: (Score:1)
REGULAR EXPRESSIONS (Score:1)
Write a Paper (Score:3)
Advent of Code (Score:3)
I had a lot of fun with this over the holiday season: http://adventofcode.com
It's twenty-five simple but interesting programming challenges. Day 1 is a simple "count the number of open and close parentheses in a string." Later days include "generate MD5 hashes until you find one that starts with five zeroes," "generate 50 iterations of Conway's Game of Life," "solve a Traveling Salesman problem for Santa," and even "simulate an RPG and find the best strategy for beating the boss." Each day has two parts; solve the first to unlock the second. Several of the challenges involved recursion, but in general they cover wide ground. Some people solved both parts within five minutes of each day's puzzle becoming available, but for those of us who didn't care about the leaderboard, an hour's work was usually plenty to get it done. (Students without experience would take a bit longer.) Also, the input for each day's challenge was different for each user - there were probably only a handful of possibilities, but it meant that you couldn't always just copy someone else's answers without doing the work yourself.
I think you'll find a lot of great material here. Pick a few of the days to explore with your students; teach them how a software engineer would attack the problem. Try solving it with different languages and compare how each language would do it. Demonstrate how you could optimize code to find the solution faster (especially in the "Game of Life" and "Look and Say" challenges).
Also, there was a great Reddit community that shared solutions in various languages, and lots of people put their code on GitHub. Some people played "code golf" and came up with amazingly terse solutions. I used the Advent of Code to teach myself Swift (my solutions are at https://github.com/bskendig/advent-of-code); my code was more verbose than it should have been but I usually solved each problem in fewer than 100 lines.
mastermind (Score:2)
games are always better for teaching. have them program mastermind, and other real-world logic-based games. They'll learn the logic of programming from the logic of reality.
Don't start with sorting (Score:2)
If this is in a classroom environment where they will be doing actual homework and such your entire first week wil
Spreadsheet (Score:2)
Have them do a spreadsheet that uses both formulas and pivot tables.
Software Engineering IS NOT Programming (Score:2)
The game of kings... (Score:2)
Some SW engineering ideas (Score:2)
After that i think there are two paths you could take. Since you'll already have experience with motivators it should be simple to scale up a little and create some kind of vehicle. I would suggest
Benford's Law is fun (Score:1)
Have them write a program based on Benford's Law [wikipedia.org]. The task combines statistics and programming. The results are interesting, too. Have them find a real dataset online and run it through their program to determine how likely fraud was involved in producing it. I wrote just such a program--it should be tiny--and evaluated population per county in Texas. Was legit! Also have them create their own fraudulent dataset and show that it is fraudulent via their Benford's-Law program.
Monty Hall simulation? (Score:1)
Walk them through the Monty Hall Problem (https://en.wikipedia.org/wiki/Monty_Hall_problem) - they won't believe the solution. Then make them write code to simulate the problem and tally the probability seen empirically. Should be a very modest amount of code but pretty fun for them.
Have them convert between Arabic and Roman numbers (Score:3)
I taught an intro to programming course years ago and having them convert an Arabic number to Roman numerals was one of my favorites.
There are lots of CS constructs that come into play including number and string manipulation, looping constructs, if/then logic, etc.
They also get to see that there is more than one way to solve the problem and that some solutions can be far more elegant than others.
Software Engineering != Programming (Score:1)
Re: (Score:2)
In teams of 3-4 students each implement a program to solve some problem that might take the teams at least several days. They need to work out an approach to the problem, divide up the work among themselves and actually implement and debug their solution.
I had that exercise in Small Group Communications. My team consisted of myself (a.k.a, token white guy) and three Vietnamese guys. I did all the work, made the group presentation and wrote the report on Vietnamese culture. The Vietnamese guys were upset that the instructor gave me all the credit for the assignment even though I used their ideas. The real world work environment isn't that much different.
teaching software engineering? (Score:2)
If you want them to learn software engineering, try this:
- find a fun exciting simple project on Github. Or write one.
- challenge the class to:
-- download the source code (requires installing git and learning how to use it)
-- build it (requires build tools and learning how to run them)
-- run it (make it do something fun)
-- find a bug in it (make sure it's got bugs - e.g. a calculator that adds 2+2=5)
-- raise a bug report (requires fi
Practical Jokes and Having Fun (Score:1)
Great question and welcome to IT!
I have a pretty crazy history with computers which started with self assigned projects and self appointed challenges at 11 years old.
First, I bought 101 Basic Programs by David Ahl available here: http://www.atariarchives.org/b... [atariarchives.org] and spent a summer typing those games into a basic interpreter running on an Atari 600xl. There were MANY games in this, which was my attraction, but the real learning came when i didn't like the game's mechanics and changed them to suit myself, wi
ROBO CODE (Score:3)
Check out Robocode, it's a game where you write simple java code to control a tank in 2d. You can then battle your robot against your friends. The great part about it is that you can make a working AI with really simple code, stuff like turn until facing enemy, if facing enemy drive forward. If facing enemy shoot straight ahead. If you know enough trig, you can try to lead your shots, try to dodge, etc. We did this once at a computer science camp I went to in highschool and it was AWESOME. The other thing that's great about it is that since they're competing with each other, they wont get too discouraged. Everybody's bot is going to be a twitchy mess, so even barely working ones can win matches. This works best as a mult-day things, since the kids can learn from each other and refine their bots over time.
Robots and Video Games (Score:2)
Re: (Score:1)
Hah! I know who he is. I even met with him a couple of times. I was an Applied Mathematic student and went to see a few of his lectures and a couple of his talks. Conway, I think he's still alive, is pretty damned smart.
Re: (Score:2)