Follow Slashdot blog updates by subscribing to our blog RSS feed


Forgot your password?
Programming Education

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.
This discussion has been archived. No new comments can be posted.

Ask Slashdot: Good Introductory SW Engineering Projects? (HS Level)

Comments Filter:
  • 4 in a row (Score:4, Insightful)

    by Behrooz Amoozad ( 2831361 ) on Wednesday January 20, 2016 @06:20AM (#51334715)
    It's a simple board game that can be done in less than an hour if prapared for, of course they can do a lot of extra if they got the talent/time.
    • by Anonymous Coward

      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.

      • by Anonymous Coward

        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.

        • by Anonymous Coward

          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?

        • 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.

    • I would recommend chess. Simple to design on the surface but increasingly difficult to implement the rules and an A.I. opponent.
    • Tic tan toe is perfect for your timetable.
  • Here's one (Score:2, Insightful)

    by Anonymous Coward

    How about They have a ton of problems.

    • 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.

  • by Etherwalk ( 681268 ) on Wednesday January 20, 2016 @06:31AM (#51334725)

    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.

    • by arth1 ( 260657 )

      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

      • by 0100010001010011 ( 652467 ) on Wednesday January 20, 2016 @09:24AM (#51335189)

        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.

        • Programming is not high level stuff. If he wants to teach software engineering - he's on the wrong track. If he wants to teach programming, go with it.
          • 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.

  • Sorting may be interesting to you, but it's dry and rather abstract. If you are working in Java or python, graphics is available, and graphical projects are far more interesting to the average high school student. Animation of any kind (processing is ideal) 3d animation (spinning globe, 14 lines in processing) 2d board games (checkers). Note you are creating a board that only allows legal moves, not playing. Earth-moon-sun system (for those captivated by the spinning globe. You can do more mathematics if
    • by ranton ( 36917 )

      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.

  • by Anonymous Coward

    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

  • Do you want to get the student interested in programming or do you want to show what freshman CS students have to put up with? Because I think these are two pairs of shoes, and personally I would get bored after doing even just one sorting or text conversion problem. My suggestion would be to choose something that has a nice visual result, either directly on the command line or after visualizing it with something like gnuplot/matplotlib. One of my favorite "beginner's problems" for potential research assis
  • 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)."

  • by Anonymous Coward

    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.

  • by Anonymous Coward

    Hello World. In Java. That should put him off CS for good.

  • Sounds like something that Code Kata were designed for.

    Decent list of them can be found []

  • Is LOGO dead? It once was the perfect introductory language. Now get off my lawn!

  • An init system that's just an init system - not 97 other unrelated things.

  • I think doing sorting algorithms, math problems and string manipulation hardly counts as "fun" when it comes to programming. Rather get them to do some ascii animations (walk, wave, punch methods), ascci men, ascci dogs and birds etc. What about simplistic clones of zork? (lots of if else logic, multidimensional arrays perhaps). I have found that to get students (at least younger ones) interested in programming staying away from the more formal cs examples is the way to go. Doing these more challenging ga
  • 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...

    • Right a program that calculates gross pay, federal, state social security, and Medicare deductions, and net pay.

      *cough* COBOL *cough*

      • by printman ( 54032 )


        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

        • When I was a teenager looking at programming in the early 1980's, the local library had only COBOL programming books. Payroll was a common theme among them. There's still a market for COBOL programmers to maintain legacy code on mainframes or convert to a modern programming language.
  • 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

    • by Anonymous Coward on Wednesday January 20, 2016 @08:13AM (#51334999)

      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.

  • That taught BASIC, Ada, Pascal.
    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
  • and everything that we usually do IRL that involves computation. For the logic part, try alarm system.

  • This is a *programming* intro project. SwE projects are hardly shorter than a month of work. Anyway, this "code kata" is excellent to learn 'if then else' constructs, integral division and modulo operator. Cheers
  • by Bobakitoo ( 1814374 ) on Wednesday January 20, 2016 @08:04AM (#51334965)

    (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.

    • by arth1 ( 260657 )

      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.

  • If they seem more of a hobbyist, I would give them a VB.NET cookbook and a copy of the express IDE. The reason why is that VB.NET will hold their hand and that will lead to one of two outcomes if they're the type that is at least warm to the field: either they'll get sick of that hand holding and want something better or they'll realize it's just a tool for them. In the latter case, don't worry. They may go into a field where programming is a supporting skill, but not something they need to be good at on a

  • Project #1: Using the language of choice develop a program to shuffle a deck of cards in the most efficient manner while maintaining a high confidence of random draws. Bonus: Build this program as a library that can be used by later projects to expand their functionality. Project #X: Create a program to utilize your shuffle library that will adequately replicate an existing single player card game. (Solitaire) Continue to build from there until you have a working online casino .. ok.. well maybe
  • 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 ( and implement it.

  • 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.

  • by shortscruffydave ( 638529 ) on Wednesday January 20, 2016 @08:26AM (#51335027)
    It might be a question of semantics, but you ask for a software engineering project for someone with no real programming experience. I would say that software engineering is far broader than just programming. Start with coding projects and move on to the larger/harder discipline of software engineering. Walk before running, and all that
    • ooh, snap!
    • And one does not need to coding experience since Software engineering is higher level. If you want to teach computer programming then teach computer programming. If you want to teach software engineering - DON'T USE PROGRAMMING EXAMPLES!
    • 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

  • I've done this several times and a key point in nurturing interest over disdain in students is to place some additional, personalized learning in the project. If the student has a mathematical bent, I usually assign a Monte Carlo simullation of pi. It is amazing to see random "dart throws" and an easy calculation converging to pi, and it lends itself to a quick drawing, followed by a quick outline, followed by pseudo code, followed by short coding -- and it usually requires simple debugging to work out wh
  • by Anonymous Coward

    They're copypasta programming.

  • 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.

  • POP3 is a simple, basic email download protocol. Shouldn't take more than a few hours to write one from scratch. The specs are easiky available, and will serve as a good introduction to writing free software based on Internet standards.
  • 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 [] 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

  • 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.

    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

    • Two people get it! I suppose it says a lot about our educational system when people equate computer programming with software engineering.
  • Don't oversell what you're doing as "introductory software engineering". If your students are high school level and "new to logic and computer science" then what you should be doing is teaching them an introduction to programming. That is a fine and worthy goal right there. Software engineering is usually a college-level subject or even a degree in itself, teaching already-capable programmers how to design and build complex and robust real-world systems; much of the material revolves not around programming
    • Agreed. However, i think you can teach software engineering **if** you focus on software engineering and not programming.
  • Create a deck of cards, shuffle it, deal a hand of poker adn determine what hand it is.

  • 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.

  • Sorting algorithms are boring. Get a couple of Raspberry Pi. Introduce them to Python scripts (10 lines of code first) and GPIOs for LED blinking. Then maybe display stuff on a cheap 16x2 LCD. For less than $100, then will get the idea, and perhaps have a kick to it, and want to do more.
  • 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

  • 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.

    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

  • by DavidHumus ( 725117 ) on Wednesday January 20, 2016 @10:13AM (#51335393)
    A number of fairly simple mathematical problems lend themselves also to visual representation, which many find appealing. For instance, start with building Pascal's triangle, then display it as an image by choosing some way to map numbers to colors. Once you've done this, similarly visualize the triangle modulus some different integers - as shown here: [] . Doing this while extending the triangle to very high numbers can lead to discussions about the limitations of floating-point representation and other topics.

    Another project that can start simply and become as complex as you want to make it is something like diffusion-limited aggregation - [] - 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.
  • 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

    • by nazrhyn ( 906126 )
      This is probably the best response I've seen. It summarizes the valuable point that there's no way high school introductory programming curriculum should have introductory-college-level-computer-science-like elements in it. (You're trying to excite the students about the possibilities of something they might not have considered before, not bore them to death and scare them off forever! If they decide to not only go into "programming", but also into "software engineering" via a degree in Computer Science, th
  • If there is one discipline to serve as a common root for the fundamentally different learning experiences of "computer science" and "software engineering" in the sense that is meant in the posts above, regular expressions. Regular expression syntax is absolutely not object-oriented and does not share any resemblance to natural human language, which makes the experience more like dealing with individual bits and numbers as in computer science, but still abstract and relatively informal. Regex may be the m
  • by Rob Riggs ( 6418 ) on Wednesday January 20, 2016 @10:49AM (#51335655) Homepage Journal
    Have the students write a paper on the difference between Computer Science and Software Engineering.
  • by Brian Kendig ( 1959 ) on Wednesday January 20, 2016 @10:57AM (#51335719) Homepage

    I had a lot of fun with this over the holiday season:

    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; my code was more verbose than it should have been but I usually solved each problem in fewer than 100 lines.

  • 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.

  • Look if you're going to start out you really need to introduce them to Boolean logic first and foremost. That is your lifeblood in computer science. Start with the basics - true/false, if/else then go to simple compound statements with or/and/xor/nand and show them basic truth tables for evaluating them. From there you can build out. And you should have them working on very simple projects.

    If this is in a classroom environment where they will be doing actual homework and such your entire first week wil
  • Have them do a spreadsheet that uses both formulas and pivot tables.

  • This should not have to be said but Software Engineering IS NOT Programming. Based on your description you want to teach them computer programming. Change the course name.
  • Building a chess engine is a good programming exercise. A board with 64 squares, six types of game pieces, and 16 pieces per each side shouldn't be too hard to program. Implementing the rules for each game piece can be tricky, especially more obscure plays (i.e., castling with king and rook or promoting pawns to queens). Another step into the rabbit hole is to create an A.I. opponent. You can do that without looking at any of the academic literature from the last half-century on programming the game of king
  • A good introductory SW engineering project? I assume you've already done basic maintenance projects and such before and are looking for something entirely new. So i'd suggest starting out with a very small droid. If you keep the functionality limited it should be pretty cheap and simple to construct and program.

    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
  • Have them write a program based on Benford's Law []. 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.

  • Walk them through the 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.

  • 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.

  • I just want to chime in on the side of those who are making the distinction between Software Engineering and programming. If you really want demonstrate what Software Engineering is about here is what I would do:
    • 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.
    • Next, have the groups exchange programs
    • 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.

  • 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

  • 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: [] 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

  • by wolf12886 ( 1206182 ) on Thursday January 21, 2016 @02:00AM (#51342061)

    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.

  • I was involved with a research meta-analysis during my graduate coursework and we found that students are overwhelmingly more receptive to learning programming when they have something visual that they can use to associate the code that they write to something actually happening. We didn't look at what kinds of problems or what visual output works best, but my opinion is that you could start with something like Lego Mindstorms (which has/had a drag-and-drop interface that can be used to arrange blocks of lo

Order and simplification are the first steps toward mastery of a subject -- the actual enemy is the unknown. -- Thomas Mann