

Ask HN: Suggestions for a 14-yr old software-developer-in-training? - jamessun

My 14-year old has shown an interest in software development. He attends a magnet high school that focuses on math and science. While the intro-level CompSci class he took this past year was taught in Java, a few higher level classes are taught in Python.<p>While he has the opportunity to take formal classes at school, much of what he has learned has been self-taught. For instance, he's figured out how to create a custom Bukkit Plugin for Minecraft in Java. Now, he's working on a simple HTML5 game using Node.js and incorporating Socket.io to support realtime, multiplayer (two players for now) play.<p>As a parent, I'm constantly walking a fine line between letting him do his own thing OR guiding him -- gently most times, more forcefully on occasion :-) -- to topics/concepts in software development, like source control using Git, that I believe will help him enjoy software development AND be a better developer.<p>What topics, concepts, programming tools, languages, projects, general advice, etc. would you suggest for a 14 year-old who is interested in software development?
======
roguecoder
1) Collaboration. Figure out some way he can work with other people his own
age, talking to them about code and coding. The sooner he starts clearly
communicating his insights the easier his life will be.

2) Whatever coding he thinks is fun. Even precocious childhood (and the best
parts of adulthood) are about play. I'd encourage automation and code in as
many areas of his life as possible: let him get a smartphone if he writes an
app for it first. Let him get hosting when he finishes his game. Rewards are a
great way to guide without getting in the way of letting him do what he thinks
is fun. Even if he wants to head off into writing prolog code it's not likely
to do any lasting damage at this point ;-)

3) Hardware/networking. Much of good programming comes down to interacting
with and adapting to users; much of good networking and use of hardware comes
down to ignoring the users and telling them what they should do. Let him
disassemble boxes, put them back together again. See if he can scavenge
working machines from discarded towers. If there's a local non-profit that
refurbishes machines they are a great way to get into this and find a good
community.

4) Other things that enhance a sense of aesthetics, communication and
creation. Musical instruments are popular, public speaking or theater help
enormously in getting ones ideas out into the world, reading and writing
poetry is fantastic training for creating clean code. A design background and
art classes can be enormously beneficial when doing web development.

5) The history of computers and software. If he learns about Turing and Hopper
and Kay as people it'll make the contributions they made to software that much
more interesting, and again it brings it back to "software is fun in part
because it is about people." Lego Turing machines and cutting up wire into
nanoseconds and fooling around with Scheme and listening to Steele's talk on
How To Grow A Language are all great ways to start feeling like you are part
of a larger community, doing amazing things together, rather than a lone
magician in a tower.

~~~
j45
I really agree with the choice of pursuing an interest in music. Understanding
how rhythms, counts, and more come together to make something greater is
fundamental to the building of software.

Learning to find the patterns in music is much like finding the patterns in a
problem, and a solution to know you 'got it'.

------
heyfouad
Hi there!

I'm an engineering intern at an edtech startup in SV with explosive growth.
I'm also 16 years old, still in high school and from the other side of the
country (DC metro area). I'm still in the process of starting up my blog
detailing my experiences as a teen entrepreneur and developer in Silicon
Valley. If you or your son are interested in my experience or some advice from
me, please feel free to shoot me an email at fouad [at] classdojo.com.

------
CoryG89
I can only say keep building, refining, starting new. I am 21 years old and am
doing basically the same things you are helping your son do in his spare time.
I am about to graduate with my bachelors in Software Engineering. I never had
anyone to help teach me anything before college. Who knows where I'd be if I
had someone like you there the whole time. I'm sure he'll go far if he keeps
at it and enjoys it.

------
neovive
He clearly has a strong interest and is very self-motivated. When introducing
theory, be careful not to reduce his enthusiasm and excitement. If you plan to
introduce some fundamental programming concepts, perhaps, start by helping him
improve his existing code. He might also be interesting a game development
platform such as Unity3d, which has support for C#, JavaScript and a Python-
based language.

~~~
mindcrime
_When introducing theory, be careful not to reduce his enthusiasm and
excitement._

Agreed... unless he just plain shows a lot of interest in theory for theory's
sake, I'd say to make sure to always have an application for any theory you
introduce, that demonstrates the value of what you're showing. Or even if you
can't _literally_ demonstrate it, at least an explanation that's as context
relevant as possible.

Example: If you start talking about sorting algorithms and runtime complexity,
explain how a bad decision here could cause lag / latency in one of his
projects. IOW, tie the theory back to something he can easily relate to.

Otherwise, if he already thinks he wants to be a developer down the road, I'd
say you'd be doing him a favor by teaching him some of the things that you
tend to _not_ get in a CS degree program... that is,the "software engineering"
stuff. Revision control, release strategy, testing, etc.

Anyway, it sounds like your son is in a pretty good place already, so you
might want to be careful not to push him to hard, to the point where
programming becomes a chore and he starts to tune out.

Finally, there are a couple of books that might help whet his appetite for
hacking, such as Levy's _Hackers: Heroes of the Computer Revolution_ or
Kidder's _The Soul of a New Machine_ or Rosenberg's _Dreaming in Code_.

~~~
jamessun
_I'd say you'd be doing him a favor by teaching him some of the things that
you tend to not get in a CS degree program... that is,the "software
engineering" stuff. Revision control, release strategy, testing, etc._

That's a great point. I wonder how many high schools (or colleges, for that
matter) teach the "software engineering" stuff, the practical, "vocational"
skills that software developers need.

~~~
mindcrime
_That's a great point. I wonder how many high schools (or colleges, for that
matter) teach the "software engineering" stuff, the practical, "vocational"
skills that software developers need._

Not enough, from what I've seen.

------
tobylane
Watching open source project discussions to see how people interact there.
Look at a higher qualifications units and see what is covered, eg the HND I
just finished included project management, forensics and business structure.

------
j45
My teenage years were intensely productive. I had the right mix of mentors,
synergy with my circle of tech friends and the limitless opportunity to create
for the sake of creation. As most people get older the ability to do this goes
away with having to pay bills. Living at home is one of the best times of your
life to create.

My advice for you as an advisor is this: Teach him how to channel his energy
and not be all over the place. Learning to be effective, disciplined and
focused, on however many interests is critical. This one ability will serve
him for the rest of his life if he can master it under your guidance. If you
like, harness his energy into a particular direction for the odd project and
let him chart his course otherwise.

This is for your son.

How to be in any situation:

\- Learn to be a self-directed individual. Looking to others to be taught is
not the path of a developer.

\- Learn to be a self-study. Everything he will ever learn will always become
obsolete. Years ago, some language and framework was hot, to be replaced by a
new one today, and tomorrow.

\- Don't fit in. The greatest gift of geekdom is being comfortable being
unique and seperate, even from other geeks. Don't fall for the entreporn of
fitting in, you resisted it all through out school, why give in to followers?

\- Open: Give something 5 minutes to sink in before judging. Don't become a
religious fanatic about your tools to fit in. Users don't give a hoot about
what you code in, only if you can build something that solves their problem
well. This is the single most mind closing thing you can probably do when
you're young, forget about older.

\- Become an insanely curious individual. Try to understand how people deal
with information in their lives in any place. You'll get faster.

\- Learn to focus your curiosity to have a start, and end point. This year, I
made a goal of taking every little project I hacked on and simply launching it
to it's own domain. It's been refreshing, only for $9/year per domain.

\- Learn the difference between being a creator and a consumer. Playing games
is consuming someone's world and can have it's value as long as it's not
greater than the time you're spending creating.

What is worth doing at that age:

\- Build for the sake of building.

\- Experiment for the sake of experimenting.

\- Explore your curiosity. Find new interests to explore and try to connect
them.

\- Don't prematurely optimize. Run as far, and fast as you can from any
developer who talks about doing things perfectly but does not launch anything,
ever, themselves because their projects are never done or ready to release.

\- Learn the difference between building something that interests only you and
helps others solve the problems they have.

\- Release prodigiously. I still have code from the late 90's when I was 17
that's running just fine on the web. It's not pretty but the tens of thousands
of hits on it remind me to fight confusing activity with results.

