Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Two Years as a High School Mentor (nullprogram.com)
80 points by signa11 on Sept 28, 2016 | hide | past | favorite | 21 comments


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.


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.


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


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.


Of course it works the opposite direction too, in that the youth unemployment rate has been increasing for many years such that 1 in 4 or 1 in 5 (probably higher) can't get work, so if you're going to be unemployed anyway, may as well learn something that could be highly profitable in the future.

Another interesting anecdote is I "worked" as a paid intern in the mornings on Friday therefore I basically did meaningless manual labor for a semester, but that was during the school day 1st shift and it had no impact on my 2nd shift "real" meaningless manual labor job that paid my tuition (back when that was financially possible). If it were unpaid I'd feel free to shadow and learn from numerous employees as I saw fit, but being paid I felt I "had to" do my assigned job of pulling and terminating and testing cat-5 ethernet cable all day, which was necessary work but a complete waste of my substantial skills. They were a bottom up employer and I was completely uninterested and not terribly good at pulling and terminating network cabling, so we were both very happy when the relationship ended. "Well you've got to pull cable for maybe two years before you can transfer to networking or the PLC division or unix admin or VAX programming" "Uh well, no actually I don't have to, and I start a real job doing just that, two weeks after this internship ends" "Well OK that settles that then"


This is a high school student, not a college intern. I did a similar thing when I was in high school - during the school year there were incredibly tight restrictions on any job I could have, including limited hours per week, review and oversight by the school, and lots of extra paperwork for the company. Generally it is just easier for both parties to exclude the pay to get around these requirements.


> This is a high school student, not a college intern.

I know. My comment was addressing high school interns like the student in the article.

> during the school year there were incredibly tight restrictions on any job I could have, including limited hours per week, review and oversight by the school, and lots of extra paperwork for the company

I'm curious if we are even talking about the same thing. When/where I grew up, the school had no say in how much or where a student worked as long as it wasn't during the school day, nor did a company have to do any extra paperwork if their employee was a student.


> I'm curious if we are even talking about the same thing. When/where I grew up, the school had no say in how much or where a student worked as long as it wasn't during the school day, nor did a company have to do any extra paperwork if their employee was a student.

This might be state-dependent, but also might be county-dependent. I've even had multiple high-school interns in CA where we had to follow VERY strict guidelines and fill out a lot of paperwork. When I worked as a high school student in WA I was limited to 4 hrs per shift on any weekday and a max of 2 weekdays worked per week.


Fascinating. In Tennessee at the turn of the millennium, I knew many students who were working 6-hour shifts at fast-food joints after school and were working several nights a week. That doesn't even take into account the kids who had to work at their family's businesses (farms, stores, etc.).


> that student sounds significantly more prepared for the working world than most recent-graduates I've met.

I couldn't agree with you more.


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.


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.


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


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.


How did you end up meeting your mentor exactly?

I'm interested in hearing some more details.


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.


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


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


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


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.


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/ "




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: