15
$\begingroup$

I'm a developer with a little CS teaching history, and I have a nephew who enjoys math (Algebra-Calculus) quite a bit in high school. Because of this, I feel like he should at least try computer programming, but its not available at his small-town high school. He's a senior in high school this year (16-17yo).

Are there any games or simple projects/tests that are designed to see if someone enjoys programming? I think setting him down with an Intro to Java book would be pretty boring and probably not give him a good feel to what programming is about.

I've seen coding challenges for people learning programming, and simple games that seem to be targeted at younger kids. What I really want is something a teenager can sit down with and say, "oh, so this is what programming is like"...

$\endgroup$
  • 2
    $\begingroup$ Is this purely self study, or do you or someone else intend to mentor him? I think that former might fail unless the student is already strongly self-motivated. Also, you might say a bit more about the student's actual interests, especially outside of computing; math, biology, literature, ... $\endgroup$ – Buffy Aug 11 '17 at 18:49
  • 1
    $\begingroup$ We live about an hour apart, so any mentoring would have to be remote for the most part. We could meet and discuss things, but honestly my time is limited. I was hoping for something "fun" so there would be some self-motivation. $\endgroup$ – JPhi1618 Aug 11 '17 at 18:51
  • 1
    $\begingroup$ I'm afraid it will be difficult. I have a similar issue with my grandson (a bit younger). I have a lot of materials that are age-appropriate, and I'm motivated, but he is not, so nothing has happened. If he likes to build things in general, then you might have a hook (Lego Mindstorms, say). That hasn't worked yet with my grandson, though. :-( $\endgroup$ – Buffy Aug 11 '17 at 18:55
  • 1
    $\begingroup$ Well, think about it this way... I don't want to motivate him to the point of steering him into a career he finds boring. He's actively looking for career choices, so I want to give him something that isn't so dry that it turns him off immediately. I want to take a "give him the tools and let him play on his own" approach. I don't want to try to talk him into the career, just expose him to it. $\endgroup$ – JPhi1618 Aug 11 '17 at 18:58
  • 1
    $\begingroup$ @Buffy Why the sad emoticon? Every kid is different, and it's not reasonable in the very least to expect them to do whatever it is that you want them to do. Trust me, it's the worst thing on earth when your family members want you to do something you don't have a passion for. Let them discover their interests, and encourage them in pursuing them! $\endgroup$ – rahuldottech Aug 11 '17 at 21:39
11
$\begingroup$

You shouldn't "test" somebody to check whether they're interested in something. You should give them some stuff you think they might enjoy, and you let them decide for themselves.

There are a ton of programming languages designed for novices, including:

  • Processing. This is my personal favorite. Shameless self-promotion: I've written a series of tutorials for people exactly like your nephew, available at HappyCoding.io.
  • Scratch. This is geared towards younger kids, but might be a good "game-like" introduction.
  • Game Maker. If your nephew is interested in game development, this might be worth checking out. I suggest not limiting him to game dev though.

See also:

$\endgroup$
  • 1
    $\begingroup$ Yea, I threw the word test in there for lack of a better one, but I very much just want to give him something that he can work on to see if he enjoys it. I think him enjoying it is better than him being naturally good at it. $\endgroup$ – JPhi1618 Aug 11 '17 at 19:01
  • $\begingroup$ @JPhi1618 I agree with that last sentence 1000%. I'd definitely recommend checking out Processing. Maybe run through a few introductory lectures together and see if he takes it from there. $\endgroup$ – Kevin Workman Aug 11 '17 at 19:03
8
$\begingroup$

I started with Khan Academy.

Who knows how I stumbled across it - I think one of my teachers back in elementary school pointed it out to me. And then I found the coding course. I started, enjoying drawing the shapes on the screen with some characters. I was talking to the computer! I wasn't very consistent about it though, and my interest soon petered off.

Fast forward a couple months, I found my progress on those old courses. I gave it a whirl again. Who knows what the difference was, but this time, I was hooked. I worked through the Khan Academy JavaScript course, the HTML/CSS course, and parts of other courses. Then, I don't remember how, I stumbled on Python. My guess was I stumbled on it on codecademy. I really loved the language, and I started using it just as much as codecademy.

I think I should be clear that while I was enthusiastic, I was by no means very good, and I also didn't program all day and all night, though I did do it fairly consistently. I started messing around with programs of my own. And then, the beginning of last summer, two big things happened:

  1. I got a computer of my own, a snazzy new chromebook.
  2. I found Stack Exchange.

It was now much easier to code, and I had a resource I could go to with questions - though interestingly enough, I didn't first join stack overflow, I first joined Mathematics.SE, and then Physics.SE, which is still my favorite site on the network. I really discovered how much I could teach myself on my own. I had a goal, that is, to learn about quantum computing.

And I've progressed quite significantly. Along the way, I've worked on several coding projects related to that. Python is my favorite language. I've become a lot more able in Python - and where I'm not, given the internet, I can figure things out. I'm really happy right now, and I love what I'm able to do. There's more to this whole story that I've left out, but I'll leave it at that.


From what I've experienced, I'd point out several big things:

  1. Plant a seed, but don't force it. It took me months to get truly interested in programming, and even then I wasn't super consistent about it, but now I'm really excited about programming. Sometimes people truly aren't interested, in which case, move on. Perhaps they'll become interested at a later date, and even if not, at least they're aware that programming exists.
  2. Provide resources. I was able to get very far, very quickly, just due to having my own computer and knowing about stack exchange. Khan academy, codecademy, and other such sites were essential to my even starting in the first place.
  3. Help provide an inspiration, or some projects to go through outside of tutorials. I used the Euler problems, and right now I'm working on a bigger sort of project - to create a simulation of an ideal quantum computer (which ties in with my other interests).
  4. Let them fail, but also be encouraging. A couple months ago, I thought I had a working simulator for a quantum computer, for any number of qubits. I was ecstatic. And then, of course, I noticed an error in the results. I went from ecstasy to pure gloom. My dad pointed out, however, that I'd learned something. And so I had, both about quantum mechanics and approaching a project. I'm still really proud of the code I wrote, it just ended up being useless ;)
  5. Occasionally tremble in awe at their prowess. My parents have both been very encouraging. My mom watched me create shapes in the Khan Academy JavaScript editor, and more recently, appreciatively looked at a GUI I made in python that was rather hideous =)

Now, to answer your specific question about resources - I'd suggest starting with Khan Academy, which has a nice gamification system (energy points, etc), though codecademy, and some of the other sites provided at code.org are quite nice.

The Euler problems are good projects to try to solve, and they're very math-oriented, which your nephew should like. You could also encourage him to write programs that solve his homework (just to check it, of course). Try to provide projects and resources that integrate with his interests after he learns the basics.

I find Python a great introductory language - it forces good habits like indentation, you don't have to worry about low-level stuff like garbage collection, and it's really easy to read and write. (At some point, it is probably a good idea to learn a bit about other major programming languages like C, but not at the beginning.)

There are some great resources on this site as well about the order in which things should be learnt, other ideal beginner languages if for some reason you don't want to use Python, etc. I hope this helps, and best of luck to your nephew!

$\endgroup$
5
$\begingroup$

Khan Academy has as nicely done intro course using JavaScript in a sandbox in their environment. You very quickly get started drawing things on the screen, and the immediacy of instantly seeing something change on the screen is very appealing and engaging - much more so than my early days of back and forth to the console!

$\endgroup$
  • $\begingroup$ Agree that Khan Academy and similar self-directed curricula are a great option. It's also worth noting that Khan Academy uses Processing (which I mentioned in my answer) behind the scenes. $\endgroup$ – Kevin Workman Aug 11 '17 at 19:11
5
$\begingroup$

I'd just like to add my two cents, as a 16 year old who started programming and robotics and stuff at a very early age.

Here's what I recommend:

  • Get the kid access to a computer and to the internet.
  • Let them know about programming, and give them access to resources. I started with HTML. I picked up a book on it from the school library, then moved on to online resources. Yeah, I know. Many people don't even consider it a programming language. But to me, that was magic. I could type some stuff into Notepad, and the computer would do what I told it to do!
  • Leave them alone, let them explore.
  • If it's their thing, they'll do it. If it isn't, DO NOT force it on them or insist. Perhaps they will come back to it someday.

How it worked out for me:
I changed schools, and didn't have too many friends in the new place. People were rich and stuck up. I'd done some robotics and electronics earlier, but not programming as such. When I found out that we were allowed access to the computer labs in the breaks, I carried a book on HTML from the library to up there and created my first page. That was the day my addiction was born, I never stopped.

Interestingly, after HTML I played around with Windows Batch. This is not very common, but I loved it. And then I moved on to PHP.

I guess what I'm trying to say here is that everyone explores and learns in their own manner. Don't ask them to use any particular language, or follow any trend. And if they ever come running to you all excited about something, never ever say "But... What's even the point of this?". It's an instant killjoy.

$\endgroup$
  • 2
    $\begingroup$ PS: I don't like Scratch. At all. Too kiddish for me. While you can ask them to take a look at it, if they find it boring, don't insist. Keep this in mind, some kids just want to jump into the real stuff. Plus, typing stuff out is fun! :P $\endgroup$ – rahuldottech Aug 11 '17 at 21:48
  • 1
    $\begingroup$ I as well don't like Scratch and am a young programmer ::high fives:: great advice. $\endgroup$ – heather Aug 12 '17 at 0:46
  • $\begingroup$ Excellent way of doing this. for me, if a kid is really interested, I want to know that he can be autonomous with minimal guidance. That is how I did it and that is probably what I am looking for when I run into such kids. $\endgroup$ – Jay Aug 27 '17 at 7:18
3
$\begingroup$

I suggest a slightly different approach: have students solve puzzles. Sudoku. Crosswords. Logic puzzles. Lateral thinking puzzles. Anything that requires critical thinking, analysis, decomposition. Then show how these same skills (and the same enjoyment) is found in programming. (For example, have students speed-solve a sudoku puzzle then have them formalize an algorithm in pseudocode for that process.)

In my time teaching CS, I have seen a strong correlation between students who enjoy and are skilled at programming and students who enjoy the intellectual challenge of solving puzzles. For me personally, the New York Times crossword is an indispensable part of my daily routine. When I have a program to write or a concept to think through, I approach it as a puzzle to piece apart and ultimately "solve."

As a teacher of CS50 AP, I use puzzles from CS50's annual Puzzle Day throughout the year. A quick search will reveal many puzzle packets to choose from online (here's one). These puzzles are great as a fun activity from time to time, and I do think they align with skills needed for computational thinking.

Some students instantly see puzzles like the ones linked to above as a problem they simply must solve. They instantly focus and try to break it down from every angle. The same skill of logical, ordered thinking is found both in solving these and in solving algorithmic and computational challenges. I'll think you'll get a good sense of a student's potential interest (and potentially aptitude) in CS with puzzle-solving activities.

$\endgroup$
  • $\begingroup$ Would you agree that calculus problems are like puzzles? $\endgroup$ – JPhi1618 Aug 13 '17 at 16:26
  • 1
    $\begingroup$ @JPhi1618 I'd say it depends on the problem. However, in this instance, to test a student's interest/aptitude, I would stay away from subject-specific skills (e.g. calculus) and focus on logic puzzles that don't rely on subject-matter ability outside of CS. $\endgroup$ – Peter Aug 13 '17 at 16:38
3
$\begingroup$

My attitude to this question (which I have often been asked) is radically different to the other answers.

I've been involved in recruitment and selection of students for Computer Science degree programs for over 30 years (in one way and another). Parents, potential applicants and their teachers often ask "what feature of an applicants profile indicates their potential..?", which is quite similar to your question. They expect me to say something about their coding skills, or even computer gaming aptitude. No; we rarely look at that.

To me there are other very good indicators of a mind set that is successful at Computing and will enjoy it. The classic indicator is Mathematics, but on its own it is a poor discriminator. I found that better indicators were musicianship and modern languages. Being fluent at more than one language and having skills at sight reading music and playing that instrument with others can be an indicator that they may excel at Computing. This combined with enjoying the structure of non-computer games (board games or Role-Playing) also are positive signs. As also noted, puzzle and problem solving is also a good sign.

Why do I think this is so? It is the issue of reading a coded notation at speed, as one does in music, develops the mind to handle computer code as another form of instruction notation. The combining this with manual dexterity, as in performance also helps. Understanding that the music notation expresses the communication of the desire from one human to another is so similar to the function of computer code. This analogue also applies to other modern languages; someone who has to translate between languages appreciates the difficulty in expressing meaning in a different notation for others to act on.

Why non-computer games? It is because of the reading and understanding of the rules that is required to understand the play. If they can absorb and mentally model the multi-tome rule sets to some of these games then they can read and mentally model large enough chunks of computer code to be successful.

I could add more detailed analysis, but I will leave it at that for now.

$\endgroup$
  • 1
    $\begingroup$ Very interesting take. You bring up some good points that I didn't think of. I appreciate you bringing you personal experience to this. $\endgroup$ – JPhi1618 Aug 13 '17 at 16:30
  • $\begingroup$ According to this metric I have zero potential for programming. Hope nobody tells my boss. $\endgroup$ – Kevin Workman Aug 14 '17 at 16:20
  • $\begingroup$ I'd reconsider your stance on video games, but actually narrow it down as well. I'd argue that people who are interested in game optimization would be an indicator. Playing Candy Crush probably won't do it. But a player who's really interested in optimizing their character in the latest MMORPG? Interests in speed running might also be good, since that also explores the limits of the game engine, including potential bugs/exploits. Someone who's really interested in exploring the limits of the game rules of that video game is akin to your board game/roleplaying game analogy I would think. $\endgroup$ – Ellesedil Aug 25 '17 at 21:52
3
$\begingroup$

If he has a decent computer the easiest way to keep him interested (assuming he enjoys computer games) is to introduce him to 'modding'. Modifying computer games is a great way to learn the basics of code, how files can work with an exe, input and output, logging, processing, (assuming the game has a scripting language or allows its source code to be modified) basic loops, statements, logic structures and variables.

There are avenues to explore which can become relatively complex; it's no stand in for true regimented education with specific goals in mind (like the program I took) but it's a great way to familiarize him with specific concepts. Alternatively memory modification which is a bit too advanced (probably) is an avenue for him to explore as well, potentially via a tool like cheatengine. There's plenty of tools and tutorials for popular games with great modding support like the Total War series or the Elder Scrolls which will be a self learning option for him.

$\endgroup$
1
$\begingroup$

Well I couldn't help but notice that this seems something you believe to be interesting to him. Not something he has sent some kind of signal to you that he desires to learn it. And I understand and that reminds me of a situation long ago with a cartoon from a book - now a famous movie - that my dad used to read. Tin Tin!

I remember very well him coming to me one day after work. He had gone through a place to get some tapes he rented (long time ago LOL). And he told me how awesome Tin Tin stories were, and me as a kid in the 90's I was more interested in Anime, or whatever from Japan, and didn't give too much attention to that tape. Than I saw his sad face because me and my brother didn't watch the cartoon series (or some of the episodes that were in the tape). Than I decided to give it a try. Then did my brother. Bottom line; we loved it! Why?

It had adventure, travel, cultures and a bunch of things we enjoyed, but we didn't know. And even though my father had told us about that, we didn't believe it or paid too much attention till we saw that ourselves.

So from my personal experience, I believe it WOULDN'T be a good idea to say or throw something at him like "Look at it!" or "Give it a try!" but something more subtle such as.

  1. Trying to first build a dialogue with him so you can understand what he likes and don't like. Hear his complains (probably at that age you'll hear something like "no one listens to me [LOL]".) and from there build a stronger bond that enables you two to exchange ideas based on a friendship.

  2. What made me watch the Tin Tin tapes, wasn't the cartoon itself but the bond and friendship I had with my father. I guess if I had just watched it I wouldn't like it (at the time). But because we communicated and what he said was what I saw that impressed me. Therefore I had a positive view about Tin Tin. That open dialogue was what made me listen to him and try something out of my scope (even though it wasn't that out, much like your situation I believe.). The value of our dialogue (relationship) is what made me value his words!

  3. When addressing the issue don't start the sentence with "This is where you can get in life" but something more subtle when approaching the subject as "Those are some stuff you can do. Now it's up to you." Teenagers are usually in a moment in their lives where they are trying to empower themselves and find their own solutions (that's why dealing and proposing to kids some times are easier). They don't wish for much interference.

  4. Much like counseling you are not taking the decision to the person, you are just showing the path to where the person want to get (or that you think it is interesting for the person). By doing that you have the possibility to show coding as a fun, exciting and interesting thing for him, without saying a word and just letting him coming to that conclusion (implied message). Maybe after a while you might want to ask how things are going with coding if he took interest at all. Maybe he won't listen to you now, just a few years later (that happens too). However if that initial bond is built you have the space to throw that into the dinner table. And even if you aren't able to get him to code now. As your relationship builds and this becomes a constant topic of conversation eventually he will give it a try.

Those ideas above come also from my experience and learning how to deal with teens as a teacher (but not coding though) and my personal one described above. It is some times a hard task to propose things to people close to us if dialogue hasn't been properly established. And I also hear complains about that on a regular basis . So I would focus on that first. Dialogue and relationship; and coding will be the bonus of that and will probably come naturally as you guys talk. Rather than a fixed one point ("here is the solution, bing!"), you are actually targeting at a process rather than to a simple platform that might be interesting for him. And I am sure you guys will find the tools together as he advances with coding etc.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.