46
votes

I decided to learn programming. I've been reading SO for few days, and I think I will start with C++, as I read some articles. I am aware of loops, arrays, program logic and objects a little and I need someone to look me over and help me with small questions I get when doing my first projects.

So here is the question - where do I find such guy? I don't got any friends who program and all.

EDIT: 2 years later, I am still looking for mentor. I did not actively code just started 3 months again. I work on Objective-C and iOS programming and game programming with Cocos2d. If you want to become my mentor, drop me a or comment.

10
  • 1
    also buy a good "beginners" book on your chosen language Dec 21, 2010 at 18:21
  • 2
    Just hang out with these users. Offer them a beer or two. Read their posts. Ask them questions.
    – WernerCD
    Dec 21, 2010 at 19:52
  • 1
    Here's a list of names (and map) that signed the Software Craftsman Manifesto: manifesto.softwarecraftsmanship.org
    – spong
    Dec 22, 2010 at 19:24
  • 1
    My answer was a little bit silly, but I do recommend learning JavaScript or Python as you learn a more strictly typed language. There are advantages to both paradigms, depending on what you're up to, but in the "slacker" languages you can try stuff out right in a console and in the case of JS, screw around with web page layout and UI behavior right out of chrome's developer tools. Also, functions you can pass around in params; people who poo-poo, don't even know and never will (thank, jeebus, because I've worked with those guys); are obscenely powerful. Jul 3, 2012 at 4:26
  • 1
    Two years later, all you need is some disclipine. Are you ready for it?
    – ott--
    Oct 5, 2012 at 21:01

13 Answers 13

31
votes

Joining an open-source project is certainly one way to get started. However, I've been using open-source software for years, and quite frankly, the quality on almost all such projects is generally in the toilet. If you learn your programming and design skills entirely from them, you'll probably pick up some very poor ones along with the good ones, with no way to tell the difference between them.

What do you want to learn programming for? The answer to that will determine what you should look for, and where. Here are some common answers, and my professional opinion on how to pursue them (keep in mind that it is just opinion, though IMHO, accurate):

Just to say that you know how to do it.

Then you don't really need a mentor, and C++ is a poor place to start. I love C++, it's my first choice for general programming, but play with another language instead. I'd suggest Python; it has a much gentler learning curve than C++, and unlike some languages (no names mentioned, I didn't wear my asbestos underwear today) you'll still learn a few useful skills in case you want to get into it further later. A lot of the concepts can translate directly to C++ if you decide to continue on that route.

Just to try it out and see if you like it.

An open-source project might be good enough for that. Pick a program that you like, but that you've found some problems or irritations with, and offer your help to whoever is running it. Most open-source projects are open to contributions, that's generally why they're open-source in the first place.

However, in that case, do not try C++ as your first programming language. It's not hard to master the basics, but C++ is low-level enough that you can get some serious and very hard-to-find bugs in your programs. Unless you already know you love programming, or you're as stubborn as the proverbial ox, or have already found a mentor who can point you in the right direction, that will kill any budding interest you might have in the field. See the above answer about Python, it's better suited for that.

Because you have an idea for a specific program you want to write.

(I don't think that the OP is in this category, I'm putting it in for later readers.)

Do you have any idea of the time required to master program design and implementation? As a hint, it's measured in years. You might be able to come up with a half-decent design after only a few months of study, if you're both smart and extremely lucky, but anyone with a little experience who has to work on it (including you, later) will wish that you'd never been born -- I speak from experience. :-) Unless the idea is so super-secret that no one else can know about it until it's done, don't bother. Hire an experienced programmer to do it for you, or if you can't afford one but still want the program badly enough, offer to partner with one -- you handle the business side and let him handle the programming part. Most good developers would prefer to be programming, so that kind of offer can be worth it to them.

Because you already know that you're fascinated by programming and want to learn more.

Then you're on exactly the right track. :-) Whether it's just as a hobby or is something you might turn into a career later, if you've got the kind of personality that finds it endlessly fascinating, the best thing you can do is to immerse yourself in it. C++ is as good a language as any, in that case, and a mentor will definitely help (and with more than just developing your skills; it can get lonely without friends who share your passion).

2
  • 4
    The question was how to find a mentor, not if he should/should not search one.
    – marktani
    Jul 3, 2012 at 11:04
  • 4
    The answer originally included an offer to mentor anyone who was truly interested in C++. After getting eight people who claimed to be truly interested, but who couldn't be bothered to keep up a conversation, I removed that offer.
    – Head Geek
    Jul 8, 2012 at 20:24
23
votes

To find a mentor, don't look for a mentor. Try to improve yourself in specific ways. If you work hard enough at getting better, you will both find that you come in contact with like-minded folks, and find that you have something in common with those people.

Users groups are the likely place to find a mentor, but no one wants to help someone that is there thinking "I'm looking for a mentor." But if you are there thinking: "I'd love it if someone could help me learn to write good JavaScript unit tests," or "I'd love to pair with someone and test-drive a kata in Clojure," sooner or later you will find someone that shares your interests and is a little farther along.

0
14
votes

The types of people who make really good mentors usually have a dozen or so juniors yapping for their time at any given moment. So, "finding" the right mentor is just the beginning, you also have to make mentoring you more attractive/rewarding than mentoring somebody else.

So, step one is to join communities where you are likely to meet good mentors.

Step two is to become a worthwhile mentee. Some things that I, personally, look for in a mentee are:

  • Intelligence near, equal to, or greater than my own.
  • Interest in the things I have to offer and enjoy teaching.
  • Compatibility of personality (i.e. we get along well, enjoy talking to one another).
  • Willingness to be valuable to the project/community I'm mentoring him/her in, by:

    • Writing Code
    • Writing Documentation
    • Doing scut work like issue queue triage, cleaning up comments, etc.
    • Helping out less experienced contributors
  • Compatibility with my usual workflow.
  • Ability to teach me things. Being more experienced than someone doesn't preclude learning from them. The best mentee has a knack for asking the right questions, or a fresh viewpoint, or some experience from outside my areas of knowledge from which I can learn.
12
votes

Join an open source project. You don't necessarily have to program for them either. Most projects would love to have someone help with documentation. You can look at the code and ask questions. When you fell comfortable your can start to write code for them.

6
  • 1
    Ok, I might sound dumb, but how do you join open source projects? What is the best website to visit?
    – Mr. Ant
    Dec 21, 2010 at 14:14
  • 1
    gnu.org/help or some open source code repositories (google code, github... ). Look for an interesting project lacking people to contribute documentation and send an email. Dec 21, 2010 at 14:26
  • 2
    I a firm believer that there are no dumb questions. While there are many open source projects web site, sourceForge is still one of the most popular.
    – Jim C
    Dec 21, 2010 at 14:29
  • 1
    @Ant: the best open source project to work on is a program that you commonly use or expect to use. Dec 21, 2010 at 15:44
  • 7
    -1: Joining an OS project is a good answer, but definitely not at this stage in the learning (ie. day 1). That's diving into the deep end before ever even getting wet. A structured learning via books or a class is a much better idea. Dec 21, 2010 at 16:27
6
votes

What are you expecting from a mentor? The suggestions of an open source project or local user group are designed to be more about networking and finding someone that is a few steps further along what you want to be so that they can help guide you in a way. Think of it as trying to learn to cook from Jamie Oliver or Gordon Ramsay, it may be quite entertaining and useful at the end of the day.

Depending on your expectations it may be easy or amazingly hard to find a mentor. If you are expecting someone that can read your mind and give you step by step the secrets to being awesome in a year or less then that may not be realistic. At the same time, if you want to find someone that can do some things better than you this may not be so hard to do possibly. So first figure out what are your expectations.

Second, now that you know what you want, you have to find it. This may well be quite hard as it isn't like there are many places devoted to showcasing developers using their skills like we have the arts in Canada and the U.S. which is why the suggestion was given I'd imagine. MentorNet would be an example of a program that may work though I haven't tried it, I did research it a while back and didn't think it was for me and what I wanted. Another thought here is how well do your friends and family know of what you want here? They may know someone or some place that may assist you if you ask. While this isn't a comprehensive answer, what you ask is kind of vague and so hopefully you can add more to this and then I'll follow-up once you give some more details of what you want and how you want it as this isn't Burger King but we could try to work it that way.


C++ server side component experts may be rather hard to find. Are there any nearby post-secondary institutions? Those may have someone that has those skills that may be shifting into something else as a possible idea. Good luck on finding that mentor.

1
  • +1 from my side. Looks like working with someone is the way to go forward.
    – Fanatic23
    Dec 23, 2010 at 14:18
4
votes

Open source projects are great at getting feedback on specific code you've added and potentially new ways to do things, but as you figured out, that probably won't amount to a mentor relationship.

I'd suggest what you've already mentioned and that is user groups. User groups usually gather fairly frequently so you can get actual face time with potential mentors. This face time can allow for a quicker, easier flow of communication. Will it guarantee that everyone is in the same domain? No, but you have to start somewhere. If you find someone who has a lot of experience, they may still be able to help you with your domain, just based on other experiences they've had.

3
votes

You might check out your local Linux User Group (here you'll find a list), usually most of the participants are programmers - or at least perl hackers. Plus, if you tell them you're there to find a programming mentor, they'll love you.

A post on craigslist might be worth a try, but I wouldn't bet on that.

Also, if you're based in Germany, there is a couple of places I can suggest in particular.

2
  • what about in the CA, Bay Area?
    – greatwolf
    Feb 1, 2011 at 10:26
  • @Victor, I don't really know but there seem to be a few: google.de/… Feb 1, 2011 at 11:14
3
votes

Given you are signed up on Stack Exchange, you already have many informal mentors available to you. You can easily ask questions or have your code reviewed by many people who are motivated to help.

More locally, if you would like face-to-face mentoring or teaching, great options include:

  • Users groups - Pros: free or cheap, open to all. Cons: Infrequent, not systematic, may not be available in your community.
  • Cooperatives - Pros: open, free/cheap. Cons: less common, ad-hoc, more likely for web than C++.
  • University/college degree - Pros: systematic, high quality, respected, opens doors, generally provides access to at least some high quality faculty. Cons: Competitive admission, major commitment, expensive, high wash-out rate so it is an expensive way to find out if you want to make software your profession, program of study can be flexible but may require topics you don't like or will find difficult.
  • Community college classes or degree programs. Pros: Inexpensive, good value, more individual attention from instructors, easy to be admitted. Cons: Less prestige than university but a good student is a good student where ever they go.
  • Professional organizations - Pros: can be good networking and continuing education. Cons: you may need a degree or job in the field to qualify for membership. Monthly meetings may be ad-hoc topics about innovations rather than systematic coverage of career enabling topics.
  • At work from peers, senior staff, or managers - Pros: frequent, targeted, appreciation/enthusiasm/follow-through will build your career like nothing else can. Cons: can go wrong if your work mentor goes into judgement mode and you have been letting it all hang-out, this kind of mentor might not be available until you have a job which may mean after earning a degree due to global competition.
  • Coworking - Pros: nice resources, great people, generally a cross between a commune and a roomful of future CEOs. Cons: may not be available where you live, can involve a cash commitment to help pay rent on shared space, many in the space will be self-employed so you must respect their time and find creative ways to make benefits reciprocal.
2
votes

i think that forums would be the best way to find some people with expertiece on the matter. I believe you should start there.

Checkout some c++ sites on google or maybe our dear friend stackoverflow, where there are lot of c++ ninjas ready to answer your questions!

1
vote

Learning to program is an ambitious and (I think everyone on this site will agree) noble cause. However, it is a difficult one to start from scratch and learn, even with a mentor. I think that you will find that taking at least some introductory classes to give you a base will be the best way to go.

A mentor is a great idea, and I wouldn't be here 15+ years later as a coder without the guy who put up with my questions at my first "real" job, but in reality, one single person won't be able to give you the time and guidance you will need to become a successful programmer. He or she will probably have a full time job (or course load) themselves. That's not to say you shouldn't find a mentor (or mentors), just that you'll need something else as well.

Sites like this, and online tutorials, and books, and everything else are pieces of the puzzle. Education makes up the border pieces.

This is not meant to discourage you; on the contrary, I think that setting realistic expectations will give you a better chance at success.

1
vote

If you work in a company setting you could look for a mentor there.

As for an open source project, I doubt you will find a mentor for a project you create, but you might find one at a project they created.

Don't forget that they mentor needs to get something from this arrangement also. They are spending their valuable time helping you. Be prepared to do some work for them in exchange.

0
votes

"How do I find a programming prodigee? It's all I want. I just want to build a massive robot army to take over the world with. I'm clever and I've written the AI. I have the money, the influence, the facilities. I just can't be bothered to deal with that loathsome .NET or JVM foolishness... Hmm... How.. How!? Damnit!"

Normally I wouldn't explain this, but we're on Stack. Some folks like it literal. You find one (a mentor), by being useful. You can be useful, by solving the problems the kids with the experience (or - maybe - brains - or (heh) money) don't want to solve.

Solve those problems grasshopper.

Or don't. It's the information age. DIY my friend. Look to communities like Stack to tell you when you're being stupid or wise about something code-related or something we don't get as easily like the machinations of that that investor who is all set to screw you over and then some.

And share what you know. Participate a bit in the collective once you've found your groove. This is not blacksmithing in the 1700s. Your parents didn't have to know anybody (although certainly everybody appreciates when you don't hog craft-knowledge to yourself and share with the guild).

You just decide you're interested and you go. Pretty freakin' empowering when it sinks in. It takes a while (I know) but trust me (if only on this one seemingly absurd point - it took me over ten years to realize that yes, I was a freaking programmer), all that really matters is that you have the base level of talent and that you actually are interested. If you're not, kindly !@#$ off and find something that you are interested in.

Because programming/scripting/coding is a horrible choice otherwise. But I don't want to leave that on a negative, nasty point. If you are interested, don't worry about how good you are. Ask questions. Demand answers. Put up with total long-winded gas/douche-bags like myself. You'll get there if you want to.

Do you like puzzles? Do you like random arbitrary problems to solve? Do you like gladiator movies? Unequivocally on the first two points, yes? Don't look for a mentor. Learn one language really well, learn one or two others that aren't overly similar to your first language to the point of entry-skill-level-well, read some books, and have some opinions. Enjoy having them challenged and alter them occasionally even if only to see whether you weren't just totally wrong. You might be surprised how often your instincts weren't actually all that bad. Ask people to come out and slap you in the face for asking the wrong question and you might find you know better than most who rise to that occasion. But mostly, it's a problem to solve. Solve it.

1
  • Oh, and share the solution, of course, so we can all poo-poo the bits we didn't like. Jul 3, 2012 at 4:09
-2
votes

For a mentor, go freenode (irc). I swear, you can get most of a CS degree from that place, useful at any skill level. That is where I learned a lot. Shouldn't matter whether the person is on that channel once or 24/7, it's real time and that's what counts.

And, as most others said, don't don't do C++. Instead, start with a statically typed, garbage-collecting language and don't move to manual memory management until you know enough to actually beat the garbage collector. You can write some damn fast Haskell or OCaml if you try.

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