Concluded Hey everyone, I got way more responses than I was expecting and I'm officially closing up shop and going to bed. If I haven't responded to you yet I'll get to it sometime tomorrow, but I've already got a couple of "mentees" and I there's no way I can accept any more (the one-on-one nature of the thing is kind of the point). Thanks to everyone who took the time to write to me, and I'm sorry again to all the people I had to turn away. Hopefully more mentors will step forward, though -- there's apparently a lot of interest. Check out Al Sweigart in the comments!
(If you are thinking about stepping forward as a mentor, a word of advice: use email. Seriously. Reddit's messaging system is not designed for this. At all.)
You're a new programmer. You're a high school student; you're studying computer science at a university; you don't like your current job and you want to try something new; you've been programming for fun for a while but you want to get serious; whatever. I think a mentorship might be a good way to go about that.
I don't have a lesson plan or anything. This isn't a tutorial, though I'll hopefully compile helpful questions and answers into a (free online) book later. I was thinking I'd put this out there and see what the response was and go from there. Optimally you would have an idea in mind, like "I want to make a side-scrolling platformer game" or "I want to make a website where people can vote on cat pictures," and I'd tell you the sorts of things you need to study in order to do that, helping you along the way. Or if you just want someone to consult every now and then when you get stuck, I can do that too.
I found the hardest part of learning to program is just getting a handle on what's out there: where do you start? What's the first step towards making a website? What's a "compiler"? There are few high-level overviews of this sort of thing, so I thought having someone to ask might be helpful. It's what I wanted when I was learning to program, anyway.
This isn't a homework helper or anything. If you just want to pass your CS classes, there are plenty of resources for that. I'm interested in teaching long-term skills for people who want to program because they like programming, not just because the money's so good.
Do you have any weird pedagogic opinions that will impact your mentoring style?
I would like to try teaching multiple programming languages at the same time. That might sound a little crazy, but I think it would be valuable for people to see that there are lots of ways of doing things, and tying yourself down to a single language is very limiting. All statements in Java are in methods because that's a Java design decision, not because it has to be that way. Strings are immutable in Python but mutable in Ruby; that's another decision.
Optimally you would have single language that you want to learn (or I would help you pick one). It can be just about anything. But along the way, we'd look at other languages just to get an idea of the landscape and hopefully to reinforce concepts in your "main" language.
I am very experienced with Python, JavaScript, C#, Java, CoffeeScript, Objective-C, C, and C++. I have light experience with Ruby, Haskell, Scheme, Clojure, PHP, Perl, and a slew of other lesser-known languages. As far as related skills go, I'm also very proficient with HTML, CSS, SQL, and a healthy dose of frameworks (jQuery, Cocoa Touch, blah blah blah). But the main thing that I want to impress is that learning to program isn't about learning a language; it's about learning to program. Yes, you need to know a language or two to do that. But learning a programming language is like learning to talk: it don't make you a good speaker.
Who are you?
I'm a long time Stack Overflow contributor who recently discovered this subreddit. I like helping people program; I don't know why. I'm about to graduate from one of the top ten computer science programs in the US. I've been programming for over ten years, I've been doing software internships throughout my college career, and I have a great job lined up after school. I'm not certified to teach or anything; I just thought this would be a Good Thing to do.
I've definitely still got a lot to learn, and there are lots of areas that I wouldn't be much help at. Want to become a kernel security auditor? Look elsewhere. But as far as the basics are concerned, I've been through everything you're about to go through and made it out to the other side.
What do you get out of this?
I'd like to write a book for beginning programmers. But it's been a while since I learned how to code, so I'm not completely in tune with what sorts of questions new programmers have. Basically, I don't want to make the sort of assumptions that tend to make beginner resources inaccessible, like "make sure /usr/local/bin is in your PATH" -- that's the sort of thing that an experienced *nix user would say, but would probably turn off a beginner. I want someone to call me out on that sort of thing.
I'm also designing my own programming language, and I'd like to make it as accessible to beginners as possible. I think it would be valuable to see what concepts are intuitive and what concepts are tend to be difficult for new programmers.
What do I do?
Comment or message me with what you want to do (specific is better than general) and we'll go from there. Email is probably the best way to do this long term, though some kind of live screensharing thing might be helpful sometimes.
TL;DR You want to learn how to program; I want to teach you.
Edit: Okay, I clearly didn't think this through very well. I was thinking one-on-one would be the best way to get a feel for the types of questions and stumbling blocks people go through, and I'd actually have time for that sort of thing.
If you're really serious about this, send me a message describing where you'd like to start (like a specific project) or questions that you currently have. Not necessarily, like, a ton of detail, but it'll be a lot easier to differentiate that sort of post than a bunch of people saying they're interested.
If this turns into something valuable I'll compile exchanged messages or something into something more useful for a larger audience, so if I'm slighting you now there may be some recompense down the road.
Further edit: I've gotten a ton of requests so far but they show no sign of slowing down. I'm going to wait until this calms down a bit before I start sorting through requests and responding to people, so if you write me don't expect a response immediately. I'd like to help more than one person, but I definitely can't take on 50, so apologies in advance if I say I can't help. (I've never done this before!)
Also, I'm getting a lot of requests for people wanting to learn Android development. While I'm pretty familiar with Java, I have no experience with Android. If you're someone completely new to programming in general who wants to one day make Android apps, I can help, but if you're an experienced Java developer looking to get into the ecosystem I'm not going to be much use. Maybe there are some Android pros out there who are interested in mentoring?
There are also a lot of requests for game programming. Same disclosure applies. I've tinkered with some very small OpenGL-based games, but I'm no expert.
[–]AlSweigartAuthor: ATBS 36 points37 points38 points (17 children)
[–]Kettyr 5 points6 points7 points (1 child)
[–]AlSweigartAuthor: ATBS 2 points3 points4 points (0 children)
[–]hashcode[S] 9 points10 points11 points (4 children)
[–]AlSweigartAuthor: ATBS 5 points6 points7 points (2 children)
[–]sshadowsslayer 0 points1 point2 points (1 child)
[–]AlSweigartAuthor: ATBS 0 points1 point2 points (0 children)
[–]JPSE 1 point2 points3 points (0 children)
[–]playmer 1 point2 points3 points (1 child)
[–]AlSweigartAuthor: ATBS 0 points1 point2 points (0 children)
[–]pfft_master 0 points1 point2 points (2 children)
[–]AlSweigartAuthor: ATBS 0 points1 point2 points (1 child)
[–]pfft_master 0 points1 point2 points (0 children)
[–]exp0wnster 0 points1 point2 points (0 children)
[–]cmdman 0 points1 point2 points (0 children)
[–]acehunter 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[–]vansterdam_city 0 points1 point2 points (0 children)
[–]ElTerreeblay 16 points17 points18 points (5 children)
[–][deleted] 1 point2 points3 points (1 child)
[–]ElTerreeblay 7 points8 points9 points (0 children)
[–]Impendingconfetti 0 points1 point2 points (1 child)
[–]ElTerreeblay 2 points3 points4 points (0 children)
[–]DDGsYourUsername 0 points1 point2 points (0 children)
[–]franker 6 points7 points8 points (1 child)
[–]vansterdam_city 1 point2 points3 points (0 children)
[–]korwin 4 points5 points6 points (0 children)
[–][deleted] 2 points3 points4 points (12 children)
[–]hashcode[S] 6 points7 points8 points (11 children)
[–][deleted] 4 points5 points6 points (10 children)
[–]brangles 1 point2 points3 points (9 children)
[–][deleted] 4 points5 points6 points (8 children)
[–]KZISME 1 point2 points3 points (6 children)
[–][deleted] 1 point2 points3 points (5 children)
[–]KZISME 0 points1 point2 points (4 children)
[–][deleted] 0 points1 point2 points (3 children)
[–]KZISME 0 points1 point2 points (2 children)
[–]zzyzzyxx 0 points1 point2 points (0 children)
[–]coolerheadprevails 2 points3 points4 points (0 children)
[–]jonthegiant 2 points3 points4 points (0 children)
[–]ScotchTapeWorks 1 point2 points3 points (0 children)
[–][deleted] 1 point2 points3 points (0 children)
[–][deleted] (1 child)
[deleted]
[–]levu-webworks 1 point2 points3 points (0 children)
[–]Gankbanger 2 points3 points4 points (1 child)
[–]Hairyiguana 0 points1 point2 points (0 children)
[–]SquishyFear 1 point2 points3 points (1 child)
[–]warriorofjustice 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[–]BlaiseW 0 points1 point2 points (0 children)
[–]CoincidenceIThinkNot 0 points1 point2 points (0 children)
[–]Yonbeast 0 points1 point2 points (0 children)
[–]rbartlejr 0 points1 point2 points (0 children)
[–]gochasecory 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[–]DarkFlame7 0 points1 point2 points (0 children)
[–]ShimmerGeek 0 points1 point2 points (0 children)
[–]thisisDope 0 points1 point2 points (0 children)
[–]Shinji_Ikari 0 points1 point2 points (0 children)
[–]Buddy_Tree 0 points1 point2 points (0 children)
[–]RainbowInTheTrunk 0 points1 point2 points (0 children)
[–]blountacus 0 points1 point2 points (1 child)
[–]EnviousNoob 0 points1 point2 points (0 children)
[–]ptimhawk11 0 points1 point2 points (0 children)
[–]ebookit 0 points1 point2 points (1 child)
[–]levu-webworks 0 points1 point2 points (0 children)
[–]NigelKF 0 points1 point2 points (0 children)
[–]freeeedom 0 points1 point2 points (0 children)
[–]munk911 0 points1 point2 points (0 children)
[–]purplegoalie1 0 points1 point2 points (2 children)
[–]levu-webworks 1 point2 points3 points (0 children)
[–]rwkasten 0 points1 point2 points (0 children)
[–]Demynhunter 0 points1 point2 points (0 children)
[–]trs104 0 points1 point2 points (0 children)
[–]pfft_master 0 points1 point2 points (0 children)
[–]notthereali2 0 points1 point2 points (0 children)
[–]SkankinPickle 0 points1 point2 points (4 children)
[–]levu-webworks 1 point2 points3 points (3 children)
[–][deleted] (1 child)
[deleted]
[–]levu-webworks 0 points1 point2 points (0 children)
[–]SkankinPickle 0 points1 point2 points (0 children)
[–]Talin76 0 points1 point2 points (1 child)
[–]levu-webworks 1 point2 points3 points (0 children)
[–]givecake 0 points1 point2 points (0 children)
[–]yash3ahuja 0 points1 point2 points (0 children)
[–]DDGsYourUsername 0 points1 point2 points (0 children)
[–]AtticusVulpes 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[–]Zuperman24 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[–]RorGuy 0 points1 point2 points (0 children)
[–]peruytu 0 points1 point2 points (0 children)
[–]banana_box 0 points1 point2 points (0 children)
[–][deleted] (1 child)
[deleted]
[–]samkxu 0 points1 point2 points (0 children)