
Two Years as a High School Mentor - signa11
http://nullprogram.com/blog/2016/09/02/
======
jazzyb
That sounds like a wonderful program, and that student sounds significantly
more prepared for the working world than most recent-graduates I've met.

If I were the company, I would re-think not paying interns. I understand that
they don't know anything when they come in and need their hands held, but an
unpaid internship limits your pool of students to those who are well-off
enough not to have to work. Paying even minimum wage could open doors for poor
students who would otherwise be unable to engage in the internship because
they have to wait tables or flip burgers to help provide for their family.

~~~
gravypod
It's not necessarily about the usefulness of the candidate but more the
freedom it provides.

If he was paid he would need to work on chosen projects, not what he wants to
work on.

~~~
spunker540
"If he was paid he would need to work on chosen projects, not what he wants to
work on." I don't think that has to be true. It's not inconcievable that a
company pays an intern for undirected research.

But that speaks to the problem posed by this program: it blurs the line
between mentorship and internship.

Mentorship is always unpaid and strictly for the benefit of the student.

Internship should always be paid (unpaid internships are legally questionable)
and are founded on employer-employee relationships, which are almost always
for the benefit of the employer first, then the employee.

While its great that the company supports mentorship, and that it worked out
so well for the mentor and mentee in this instance, I feel like the ambiguous
structure makes it a hard model to follow at many workplaces.

~~~
gravypod
Unpaid internships are allowed if the intern isn't a) treated like an employee
and b) the intern can't do work that would otherwise be considered that job of
an employee. That's exactly what is happening here.

He was not doing the job of an employee nor was he treated like one.

As soon as he started doing the work an employee would normally be tasked with
they put him into the payroll. They did the right thing.

------
happy-go-lucky
I wish I had a mentor like him.

I’ve no formal CS background. When I started off learning fundamental
programming concepts, I chose Python as my first language and during the
honeymoon period I felt as if I was going to learn the art inside out in no
time. I had no idea what was going on under the hood and was stupid enough not
to give it a thought. Then, after some fiddling around with Python, I started
wondering if something was amiss. The computer I was using was running Windows
and I was under the impression that Linux was only for seasoned programmers
and not for an aspiring programmer like me. I was all on my own and somehow my
intuition told me the proprietary OS was unduly restrictive and I felt locked
up with no leeway at all. After consulting some Linux communities, I thought
it’s about time I wiped Windows and tried a couple Linux distros and freed
myself. First I learned the command line, then C and then I went back to
Python and that’s when it all made sense.

------
kory
I had 4 internships in software engineering and 1 in web management during
high school, if you include the summer afterwards. Four were paid, one was
not. I also know quite a few friends with SWE internship experience in HS, but
more often than not were in unpaid positions.

I wanted to poke a hole in the idea that unpaid internships are a good thing.
Spending hours of my time on someone else's project, regardless of what I'm
learning, feels wrong. The fact is that I'm 'working' for the employer and
therefore deserve to get paid.

Being paid also makes me more productive and motivated to finish the project
I'm working on and learn in the process. Unpaid internships feel loose and
unorganized, while when real money is involved both the employer and student
feel obligated to help each other.

If you want to go unpaid, you're best off at an educational institution as a
student helper or at a nonprofit. I just haven't seen unpaid internships with
actual companies work well for the student or employer in that case. The
burden on the employer is often too much for them to be able to offer any
substantial help to a complete newbie while attending to their own
responsibilities. Newbies need to code themselves or in class before they're
ready for internships.

That's my experience.

~~~
wyager
Agreed. I had two internships in HS. Both were paid. To be fair, I did have
enough prior experience to be somewhat useful.

------
gravypod
I've got to say from personal experience mentoring is a go-to solution for
programming.

That's how I learned. I bugged a retired developer to help teach me how to
program and after enough pestering he did.

We basically pair programed for an entire summer.

If anyone wants details on my experiences I'd be happy to help.

~~~
kzisme
How did you end up meeting your mentor exactly?

I'm interested in hearing some more details.

~~~
gravypod
Well when I was around 12 I started playing minecraft. I had some friends who
told me about it and got me into the game. When I started playing I got into
hosting my own server and fell into the configuration/server ownership side. I
eventually wanted to implement my own features and didn't know how to do this.

At the time the community was small enough that I knew the owner of Essentials
(one of the larger game extensions, called "plugin"). He was one of my friends
who helped me setup my server, taught me some basic linux commands, and told
me to go for it. I asked him for help to teach me how to program and he,
essentially, said fuck off and ask my other friend who maintains a small part
of my plugin.

I asked this guy to give me a hand and he said "show me some code". I showed
him what I had been working on and he basically said he couldn't help me over
text. I pressured him to make a voice chat server so he could then help me. He
had never done this but after exercising my innate ability as a 12 year old to
annoy the crap out of someone he ended up folding and setting one up.

We've basically been talking and working together for almost every day for the
past 7 years on average more then 4 hr per day. We've worked on game engines,
plugins, scripts for our own needs, websites, etc. You name it and we've done
it.

It essentially boiled down to being at the right IRC server at the right time
with the right interest in the subject matter. It started out as a game for me
and ended up being something I liked more then the game.

------
BeetleB
Your mileage may vary.

What worked with one student won't work for everyone else.

Part of the responsibility of a mentor is to tailor the approach to one that
works for the mentee.

I can say for sure: His approach would fail for many (most?) students. It's
great it works for some, but let's not generalize it to everyone. I personally
am glad I was not introduced to programming this way.

Python definitely can work better than C/C++.

Using an IDE can definitely work better than Emacs/vim.

His approach is almost the _ideal_ \- and the thing with ideals is that they
work for only a few. It's a very tough lesson I had to learn. I had a very
strong background in many technical topics (physics, programming,
mathematics), and was known for it. People would occasionally come to me for
guidance and advice.

I failed almost all of them by behaving in a manner similar to the author.

Why?

Because the ideal approach, where you must get all of the fundamentals really
well before moving on, doesn't work for most. Heck, even _I_ did not learn
everything that way. I felt it was better than the way I learned and I was
wrong.

With most people, you have to provide a more measured approach. Teach some
basics, and then give them fun stuff. Then go back to some more basics, and
then some more fun stuff. Insisting on C/C++, with pointers, on Emacs, delays
the "fun stuff" quite a bit to the point where many students feel
(incorrectly) "Maybe this isn't for me".

An analogy in mathematics: In some universities (e.g. East Europe),
mathematics majors are taught analysis before _any_ calculus. Their calculus
course is actually the real analysis course we have in the US. Start with
sequences, limits of sequences, convergence, metric spaces, compact sets,
Bolzano-Weierstrauss theorem, all of this leading up to limits of continuous
functions. And only _then_ do we tackle derivatives and later integrals.

I mean, after all, why should we teach people derivatives if they do not
understand metric spaces well, right?

Imagine if all engineers learned calculus this way. Most would drop out.

The optimal education for the brightest tier of folks is suboptimal for the
majority. (And perhaps vice versa, although I have doubts on that).

------
VLM
Some of the confusion is the language is of internships and employment, the
behavior is more apprenticeship and early journeyman level.

Historically its very unusual to pay apprentices full rate. Nothing, or room
and board, or more recently a sliding scale of 50% pay for 50% of formal
apprenticeship completed. I've seen three internship situations where grunt
labor pay results in grunt labor tasks being assigned instead of learning
happening.

In the very long run programming is likely to fracture much like the building
trades, where most will get an apprenticeship then journeyman then master
coder job, there will be some scientists doing research in the trade, and
there will be some engineer/architects doing advanced design and verification
work. I suspect welding will be a good model. There will be certifications and
tests and levels based on industry (or in the coding world, based on
language).

------
hood_syntax
Great article. Jealous of the mentee (I didn't start programming until
college), but impressed with his success.

------
jackmott
I really like the choice to start with C, I've always felt that is the best
approach as well. Learn what is really happening from the beginning.

------
yberreby
I originally posted this is as a reply to someone who commented about learning
programming well before college on the article, but I think it could spark an
interesting discussion here, so I'll paste it:

"I'm self-taught and started at 11. I'll start college next year. Would you be
so kind as to provide some advice to someone who is in a similar position to
you a few years ago?

It all started out as a center of interest among others, but grown into a
passion, and today I know that I will work on software development. I've
gained some experience along the way - worked on real-world, revenue-
generating projects for relatives, read through a lot of technical books, and
learned varying amounts of Python, Ruby, C, C++, JavaScript (client- and
server-side), and Rust. As well as some HTML and CSS. I learned how to use the
command line, how to administrate a UNIX system, the basics of information
security (just enough not to make overly stupid mistakes as a developer),
among (many) other less important things.

Python was my first 'real' programming experience. I 'know' C, but I wouldn't
trust myself to write production software in C without a lot more experience.
I can read C code, but writing a sizable amount of _correct_ C is not an easy
endeavor. I wrote a few production utilities in Ruby and recently started to
dabble in Rails. I got interested in game development and read a lot on the
matter, so I just _had_ to learn C++. I did for about four months before
learning JavaScript seriously. I learned to use JS client-side, and server-
side with Node.js, which I used to sell Steam trading bots for peanuts. More
recently, I learned Rust, which has been my most pleasant experience so far
(static type checking, memory safety, close to the hardware with C-level
performance? Sign me in!), and the language in which I've invested the most. I
contribute to open-source projects whenever I can, hung out a lot on the #rust
IRC channel and on the /r/rust subreddit for some time, and used the language
to write a few small production utilities (a few kLOC).

I like to think that this is a great track record for a 16-year-old. However,
my perception of my own skill level is what I'd describe as unstable.
Sometimes I'll read through some particularly technical HN threads and feel
like a pretentious idiot who knows no more than the bare basics. At other
times I'll read stories about college graduates and 'professional' programmers
with 5 years of experience who cannot seem _much_ less skilled than me, and
I'll feel like I don't even need to go to college.

So I turn to you. Enlighten me. What new things will college teach me? How
should I approach it?

Here's my GitHub profile in case you want to take a look:
[https://github.com/yberreby/](https://github.com/yberreby/) "

