

Ask HN: Do coding coaches exist? - asher_

When I used to play online poker, I had weekly coaching sessions over Skype with a pro who reviewed my play, or talked me through particularly difficult hands, and gave me things to work on. It was incredibly helpful.<p>I am wondering if any similar thing exists for programmers. I would love to have guidance to improve my programming by someone that is better at it than I am, and be able to get opinions and guidance on my thinking and decisions about particularly complex problems.<p>I do read a lot, and I have discussions with other programmers, but what I am looking for is something more in depth. I would like a situation where I can get regular, specific feedback.<p>I haven't heard of such a thing before, and would love to know if there are people out there doing this, or that would be interested in doing this.
======
breckinloggins
I've often thought about doing this. I have been coding for a LONG time, and
during that time I, like most programmers, have learned through others and
experience that the practical lessons that are difficult or impossible to
teach in more formal settings (and that includes the usual training programs
that companies put their new recruits through) are much easier explained in a
one-on-one setting, often at the whiteboard or through pair programming.

One of the things I've realized is that I love to teach this stuff. I'm not
talking about syntax and "what is an object" and all that stuff; I'm talking
about stuff like:

\- Programming is simultaneously much easier and much harder than you imagine.
The trick is to determine what your mind and society just convinces you is
hard (before the fact) versus what ACTUALLY separates average or beginner
coders from the masters.

\- In anything but the smallest script or test application, architecture is
EVERYTHING. But architecture is more of an art than a science. It takes more
skill than most imagine to figure out what to name things, how few or how many
"buckets" to construct such that current and future functionality fits in the
right bucket, how to recognize when your current architecture needs to be
amended or replaced, yet how to restrain yourself from designing a cathedral
when all you need is a two bedroom apartment, and how to develop the
discipline and leadership to keep other programmers (and yourself) within the
architecture that you've laid out.

\- Along the same lines, how much easier it is to code something when you have
thought through the overall concepts in your head, not in the world of your
favorite programming language.

\- The skills you need to learn new programming languages in minutes or hours
rather than days or weeks.

\- It is fun and enlightening to understand what's happening at the bits,
bytes, and machine code level at the same time you understand what's happening
behind the layers of abstraction that your programming environment provides.
By connecting concepts "all the way down", I've seen many wonderful "a-ha!"
moments.

\- The notion of "audience". Just as you must design your top level interface
to the audience of your end-user, so must you design the layers of your code
to the audience of the programmer-user who will use that layer to implement
higher layers. Truly understanding that programming at each layer is about
designing the best, most usable interface you can for the layer above you is,
I've found, one of the quickest routes to respecting and appreciating
architecture.

\- The true barriers to becoming a great programmer are not often the
technical ones. Things like algorithms, idiomatic coding in a certain
language, database design, performance analysis, and design patterns are
challenging and are worthy to learn, but they are almost unlearnable in a
vacuum. When you're just getting started, the same can be said for just
learning how to program at all. In my experience, you MUST have a project in
mind. You can read all the "21 days" books you can find, but in the end if you
don't have an idea that you just can't wait to implement, you'll be sitting
there with a blinking cursor and nothing to type but the examples in your
books and tutorials. I don't care if it's Space Invaders, you have to have
SOMETHING in mind.

\- Debugging is often a more important skill than coding. You must be able to
shake all superstitions and approach problems from a rational basis. Just like
an experimental physicist, you have to learn how to form reasonable
hypothesis, understand what would falsify them, and then go about doing so in
a methodical fashion (in a process that often looks a lot like binary search).
I still occasionally make use of fancy graphical debuggers like those in Xcode
and Visual Studio, but the more I studied and mastered the art and science of
the debugging process, the less I relied on those things. Nowadays, it is
often faster for me to debug a problem with nothing but print statements. I
also find debugging to be extremely enjoyable rather than a necessary chore. I
think it's because of the "gather evidence, hypothesize, test, iterate" cycle.

\- In the end, programming is the reification of "thought structures". I think
this is what I find so appealing about the craft: it's the closest we have to
magic. When you truly learn to create and reason about these structures in
your mind and in your heart, and then learn to translate that into the magic
words of your programming language, you will be on your way to becoming a
master (or at least be able to create something useful of which you are
proud).

~~~
wturner
As a middle aged man who has spent the last year teaching himself javascript
and the prior year teaching himself basic programming concepts using C++ I can
contest there is no substitute for developing a deep kinesthetic learning and
having a project that drives you. I would really like to read your opinion on
what exactly the skills are to "learn new programming languages in minutes or
hours rather than days or weeks." Thanks for this post, it was a good read.

~~~
breckinloggins
Thank you for the compliments.

> I would really like to read your opinion on what exactly the skills are to
> "learn new programming languages in minutes or hours rather than days or
> weeks.

In this there is no substitute for practice and a little drudgery. It is a lot
like sight reading sheet music. At first each new piece is a struggle (more so
if you are learning the instrument at the same time). But over time, you
naturally develop a set of "meta skills" that make you much better at sight
reading. Many of these skills you are not even totally conscious of, but they
do develop and before long you can play most new pieces just as you can
immediately read most new books (though it still takes a deeper read to
appreciate the nuance).

So, here's some advice for developing this skill:

\- Learn a lot of programming language and, if possible, learn them
simultaneously or in rapid series. You're not shooting for mastery of each,
just understanding and casual proficiency.

\- Again, having a really cool mini-project helps. If you're a math guy,
Project Euler is a good way to start building your personal Rosetta Stone. If
not, pick a game or some simple app. It needs to be something that fairly well
exercises the 20% of each language that is used 80% of the time, but also has
enough complexity to warrant playing with the remaining 80%.

\- The "Rosetta Stone" example is, I think, apt. Your goal is not to build
yourself a personal decoder ring such that you can just match up the
equivalent symbols, but for something deeper. You're aiming for something that
aligns the concepts in each language such that the superficially similar
things are blindingly obvious, but the deeper differences still abstract out
to a higher-level similarity that you can train your mind to see when new
languages come along. For example, how are object-orientation and functional
decomposition, though dramatically different in form and theory, both just
translations of a single higher level concept or two? I can't tell you that,
because I would be wrong or, at best, trivial. You have to discover those deep
mappings yourself. Only then will they really speak to you.

\- Syntax is just, like, the language designer's opinion, man. No, really.
Stop caring about the syntax while you're learning. Just accept that you're
painting with someone else's idea of a paintbrush and move on. As you get more
advanced you'll come to have "aesthetic taste" in syntax and you'll know which
languages look, to you, like beautiful paintings and which, to you, look like
so much angry scratching. But when you're learning a new language (or 10),
it's best to put your aesthetic judgements aside and just let it ride. Haskell
is a good example of this. At first I absolutely HATED the kind of "sharp"
syntax and bizarre ordering of things. The language felt "pointy and
argumentative" in the area of my mind that has developed this weird "code
sense synesthesia" that has developed over years of looking at so much
different stuff. But I put that aside to really learn the language, and while
it's still not my favorite language syntactically (that goes to Clojure or
CoffeeScript), it became more beautiful and ordered in my mind and took on a
kind of beauty that, like certain forms of architecture, is only visible once
you understand a bit of the purpose. But in any event, really, ignore the
syntax and just treat it as "the rules of the road" until you become more
adept.

\- Similarly, just because a language LOOKS difficult doesn't mean it is. Tell
yourself that it's "just code" (I use this term a lot) and struggle through.
Before long you'll invariably look up from your frustrations and say "oh. This
isn't as hard as it looked." _cough_ Scala _cough_

\- When learning about a language, read about the history of its development
and guiding philosophy first. It helps to understand a language more when you
know where the designer was coming from. You may not AGREE with the
designer(s), but you'll appreciate that there's a reason behind the apparent
madness.

\- I'd recommend learning the following types of languages simultaneously or
in rapid succession to shake yourself of the "different == scary" prejudice
that's only human in all of us:

* Something comfortably high level and "cozy", like Python or Ruby

* Something "enterprisey and conventional", like Java or C#

* Something really functional, like Haskell or F#

* Something really object-oriented, like Smalltalk (just go with Smalltalk here)

* Something "industrial". Go with C here or maybe C++

* Something lispy, like Clojure or Scheme

* Something theoretically foundational and bootstrappable, but not lispy. I'm thinking FORTH

* Something painful and to the metal. Assembly language for your favorite architecture.

* Also, do yourself a favor and write at least ONE thing in pure machine code (as in manually write a hex file that will execute). In the DOS days, I wrote a COM file that printed something to the screen using a BIOS interrupt. Load up DOS in an emulator and do that, or do a system call in your environment. This little exercise will be tedious and suck unless you're a hexadecimal masochist, but you'll be forever better for it, because you will have broken the ultimate barrier and actually done the thing most people think of as "ultimate wizardry"... and it won't be as hard as you think.

Keep in mind that this is an intellectual exercise. It's not job training. It
should be treated as a hobby at first, because it can be frustrating but
rewarding... like a really hard jigsaw puzzle.

Finally, I'd have to recommend picking up a copy of Petzold's Code. Once you
read that, get yourself into an online TECS (The Elements of Computing
Systems) course and follow it all the way through. Go to
<http://www.nand2tetris.org/> for starters.

This is all very time-consuming and difficult, and at times it will be
extremely frustrating, but it's more than worth it. Once you REALLY get how
the machines work and how the various languages above machine code (even
assembly language!) are just the result of various people's opinions on what
kinds of abstractions to stack on top of the wires, you'll be a better
programmer for the rest of your life. You'll also, with continuing practice
and education, run rings around everyone at work :)

Good luck!

~~~
Itaxpica
I can't stress how much I agree with the last point. Probably the single
hardest CS course I took in college was an upper-level seminar on compiler
design, in which we built a simple compiler (for Appel's Tiger language) over
the course of a semester. I've never poured more hours in to doing harder,
more frustrating work in my entire life... and I've found that I haven't
looked at code the same way since. I've found that you can get a similar
experience by really, really groking C, but it still doesn't hold a candle to
really getting to the innards of the machine.

------
sophacles
It's funny that this turned up today. Last week I was browsing craigslist for
quick side gigs, and came across a post of someone wanting a Django/python
tutor. I pinged the person - and decided to help her out. The problem is: I am
not comfortable taking money to help someone learn something, since I am not a
professional tutor or teacher. Fortunately in this case she was also about to
apply for a job at the university I work at, so payment for the tutoring
couldn't happen at all (due to potential conflict of interest issues). So
instead we worked out a deal where I will help her learn if some of her
learning projects are stuff we need to do at my local hackerspace, and helps
me with some of the pages I do as volunteer work for charities.

We were talking and have come to the conclusion that this arrangement might be
somewhat scalable for learning - an apprentice model for coding, that benefits
3rd parties. It certainly gets around some of the weird power dynamics of
traditional apprenticeship/mentoring and paid tutoring. Further it is a good
way to get some needed talent to good non-profits that may not be able to
otherwise arrange such a thing.

Finally, and this is the kicker - it gives novices practice in real
development, and it gives experienced people (who may be hiring) access to
people to see how they are at problem solving in a real environment, rather
than interview tests, potentially faked code samples, etc. (Not to mention,
someone willing to go through the effort of something like this is probably
already a great candidate on the strength of "wants to learn more and actually
takes effort to do so", which I have found to be a strong indicator for a good
employee).

I don't know where you are located, but if you want to get into some more
discussions about setting up something like I described above, feel free to
email me:

    
    
      $HNUSERNAME at gmail.

~~~
asher_
Thanks for your reply. It sounds like what you are doing is admirable but not
along the lines of what I'm after.

I don't think that there is really any weird power dynamics in this kind of
coaching, at least not in my experience. On one hand we are dealing with a
domain in which reason is the ultimate method of arbitration, and a good coach
would not be presenting me with opinions or ideas that I could simply disagree
with due to some difference in personal belief. Instead, they would be
challenging me with different ways to think or different ways to approach a
problem, and be able to explain its benefits if they weren't obvious to me.

On the other hand, the trust that can be built in this type of relationship
can be quite useful for the learning process. Having someone that I respect as
a programmer as well as a coach allows me the comfort to know that I could
come to them with either a specific problem of general deficiency and get the
kind of response that will give me the most enlightenment in the long term,
which is often different to what you'd get when asking a question online.

~~~
sophacles
I'm pretty sure I was unclear in my original reply (not enough coffee at that
point to be replying to the internet I think :) ), I think we actually agree
more than disagree. Perhaps I can explain what we thought of as problems and
solutions a bit better now that I'm fully awake:

First the idea of paid, but not directed tutoring is a bit weird. When a
person is paying they exert an influence over the person they are paying. So
in a tutoring situation, the student can say "no I don't want to focus on that
fundamental thing because I don't see it as important and you have to do what
I say". This can turn off a lot of tutors, because they honestly know that
understanding that bit really helps (e.g. knowing about how HTTP works, even
if you are just writing DJango apps and never deal with anything other than an
abstracted object representing the request). The goal of a lot of tutors is to
help people learn, and not just make money. Further it is a bit sticky,
because if the student decides not to learn stuff, and can't get a job or
doesn't really gain skills, it reflects poorly on the tutor - a bit of a
problem if that is your business.

The reverse situation exists in programs like internships or company-internal
mentorship programs. The mentor/boss always holds a trump card of "because I
am higher in the hierarchy and say so" which can influence the student/learner
to not want to rock the boat or express disagreement or initiative. This sort
of thing really has the same fundamental "I need to work and keep working to
afford life" pressure on it.

The traditional solution to this is a mentorship program (basically what
you've been describing). This is generally a safe place to be able to express
opinions and disagree, and I completely am on board with your entire post in
this sense. One of the problems with mentorship generally is that it can be
hard to really get deep tho. Conditions like NDAs on work can really limit
shared context - problems are kept in the abstract and specific code
review/pointers can be lost. This makes the problem hard. Further, finding
mentors can be hard, because from the mentor side doing that task falls into
the volunteer/contribute to fun oss projects/hobby category, and therefore the
task is in competition with other worthy tasks.

So this is why we were talking about the structure I described. It provides a
mentorship opportunity with all the benefits you stated, with the added
benefit of easily allowing shared context for the mentor and learner, and
reducing the opposition of "competing choices". Essentially it is a way to
foster mentorship in a way that everyone wins, with the benefits for all
parties being a bit more clearly defined and in focus.

A final note about the software field:

At the end of the day - there are lots of equally good technologies, and
people, even the best, will have preferences and beliefs on what is a better
solution. Things like architectural style (e.g. event driven or threading?),
language (python, ruby, clojure?), and on and on don't actually have a "right
and well reasoned" answer. It is hugely style/belief/experience driven. Even
at the code level this is true - is a facade or strategy better here is
regularly unclear. Is a decorator or descriptor the better way to do this
thing in python? How should I break up my classes is a huge source of
disagreement even amongst people subscribing to seemingly the same
philosophical set (e.g. srp, dry, yagni).

Sometimes the decisions made are based on subtle factors that are impossible
to easily clearly explain, and it sounds like hand-waving: "down the line it
will be easier to refactor for what we actually need rather than figuring out
perfect right now" is a statement of belief and experience, not of reason and
fact. Particularly when the same person will say "lets do it right - we won't
want to change this later" on a seemingly similar problem. I do that. I try to
explain why to my team. It really comes down to "because it just is in my
experience - the problems are not similar on a human/project level, not a
technical or reason level and those human factors are really hard to pinpoint
or don't seem relevant, such as the way the boss reacted to a particular
statement, or past experience with the client on a completely different
project"

My point is that one of the reasons to ask for advice from an experienced
person is that they have an opinion and experience in things that you can't
just write a book or set of rules about. Ideally they guide you through the
minefield of non-deterministic decisions and consequences when there is a lot
of choice and no clear obvious solution.

I've guided a lot of people through stuff like this - very bright people who I
learned a lot from and who were very good at learning. The biggest problem
wasn't "I don't know how to do this" but "I see so many ways to do this and
don't know how to choose". It's a weird thing that comes up in engineering and
software: how to be wrong in the right way.

I hope this helps clarify what I was trying to say. Best luck with your
finding a coach!

~~~
asher_
Thanks for this thoughtful reply. I think you articulated the power dynamic
between tutors and students very well. I was reluctant to use the word "tutor"
in my post, and picked "coach" instead, for this very reason, but I did a poor
job of explaining it.

------
skrebbel
My employer does this in-house, by pairing a programmer up with a more
experienced programmer or architect in roughly the same field, and having them
review the programmer's work on a regular basis. I bet there's many firms with
a system somewhat like this.

That said, if your team does peer code reviews, you get a lot of that coaching
that you ask for, directly from your team members.

In fact, if your workplace doesn't have any way by which you can regularly
collect feedback on your work, I'd be very worried. If nobody cares about the
quality you produce, chances are small they care much about what you do at
all. In any sufficiently important team, code reviews are a _must_ in order to
guarantee a sufficient level of quality.

~~~
asher_
I work in a small psychology research lab in a university. I am one (the
senior) of only two programmers. I work here because I am passionate about the
problems I get to work on, as well as the freedoms afforded to me. Since I am
in this situation, code reviews and pair programming are of limited value to
me, although we do them so I can help my junior colleague.

------
KentBeck
I coach full-time at Facebook, and I coached for various clients part-time for
a decade before that. We work a bit on technical stuff like how to design,
test, or refactor, but honestly the technical work is mostly to establish
trust so we can work on more personal issues--time management, multi-level
thinking, communication skills, principles of programming. For example, a
couple of recent students had ADD. We worked on finishing one thing before
starting the next, mostly using techniques that I developed for my own use.
After a month of daily one-hour sessions the change was noticeable.

~~~
shill
Is the word 'coach' in your title, or is coaching just something you do as a
good manager?

I really enjoyed your recent post about incrementally escaping local maxima.
It would be cool to read some of your coaching tips and stories someday.

------
adriand
There's Rails Mentors - <http://www.railsmentors.org/>

I've been a mentor on there for ages and I've "mentored" several people -
probably around 7 or 8. The reason I put quotation marks around "mentored" is
because of all the people who have applied to be mentored with me, only one
has actually applied themselves to the task at hand and consistently requested
feedback and guidance.

As a result, that was really the only rewarding mentorship interaction I've
had via that site, which is a bit disappointing. One of my colleagues signed
up too, years ago when that site launched, and I think he's had better luck;
he has a postcard on the wall near his desk from someone he successfully
mentored in China.

The reason I bring this up is because I think anyone who wants to be mentored
must realize that the relationship goes both ways: you want a good mentor, but
your mentor in turn wants a good student - and anything less than that is
disrespectful.

------
nlh
This is a great idea.

I'm not sure if others work the same way, but I know my coding-brain is much
more receptive to learning and improvement when the feedback is on code that
I've already (tried to have) thought through.

I could read 100 books on Advanced Ruby Theories and "learn" a lot, but take a
block of code I've already written and tell me how I could make it better and
my synapses will go wild :)

~~~
asher_
I couldn't agree more. This is exactly the experience I had being coached with
poker. Sometimes you get some insight or way of looking at a problem that you
probably would have never worked out on your own no matter how much time you
were given. Having an external person who is invested in your success is
really powerful as a tool for learning.

------
dkubb
This is something I've done before, and I quite like it.

I didn't realize how enjoyable it would be until I was a team lead in the
early 2000's and I started doing code reviews and established peer reviews in
my team. The team would review the code with someone else in the team, and
when they couldn't find any issues they'd pass it to me for final review and
deployment. The process was sort of gamified (without realizing it, I later
found out their goal was to get it by me without me flagging anything).

Since that experience I've been freelancing, I usually try to establish the
same environment in the teams I work with. I sometimes do _pure_ mentoring,
where I'm not working on the day to day aspects of the project, and am just
reviewing pull requests and offering suggestion; but this isn't quite as
common yet.

Lately I've been getting more gigs to act as a mentor, and that's pretty cool,
but I don't think it's something I would want to do full time. I've found the
mix of working with the team _and_ mentoring feels perfect to me.

------
abecedarius
I've done this for money a couple times, and informally for a few friends.
(Plus, a bit more regularly lately as a student at Hacker School, which you
ought to check out.)

When I did it for money, both clients were appreciative, but I think it went
better with the one I'd previously written a lot of their backend code for,
who were also well-heeled. This gave me specific knowledge and more time to
give them.

(I could be available for some more of this after the Hacker School term is
over, late December.)

~~~
kami8845
Is there a HackerSchool alumni discount? :D

~~~
abecedarius
It's more like, that makes me more likely to do it. :) It's hard to justify
much of it at the rates you can get programming instead.

------
saidinesh5
How about contributing to a nice little opensource project? "I had weekly
coaching sessions" - Pick/Create 1 Issue/Task every week :P "I would love to
have guidance...." - Discuss your plans with the project maintainer/other
contributors. "I am looking for is something more in depth......" - Heh you ll
be writing code... don't you think that's enough depth :P "regular, specific
feedback" - Every merge request you send..... you get a nice code review, and
specific feedback... and a ton of suggestions for improvement.

Since "coding" itself is a huge field, just be sure you pick a project that
interests you and has a lot of scope instead of
$random_famous_opensource_project.

Good Luck :)

------
keeptbluesideup
I've been thinking about something like this for awhile.

As a developer who works mostly freelance from home, I do engage with some
other developers when working on agency contract work, but these engagements
are infrequent and I find most of the team to be on the same skill level as
myself. The bulk of my other work is solo projects for smaller businesses.

With that being said, for somebody like myself, I find it tough to meet other
people who I would consider a mentor.

The only mentor types I have met have been very short lived relationships due
to the short term nature of our contracts. I have felt it would be
unprofessional to contact them outside of the work and after the working
relationship has ended.

For the better part of this year, I have read something computer science
related almost everyday. I have made it a day by day mission to better my
skill set and understanding of everything computer science. Going at it alone
isn't easy sometimes.

I actually wouldn't be able to put into words how grateful and happy I would
be, to able to meet and have a long term friendship with a "mentor", even
somebody I checked in with just once a week through email, irc, telephone,
etc.

So hacker news, where can I find somebody like this?

------
CesareBorgia
It does exist! Check out Avdi Grimm's pair programming/coaching services:
devblog.avdi.org/pair-programming-services/.

If you're looking for a real reboot, consider Hacker School (hackerschool.com)
or App Academy.

Disclaimer: I'm one of the founders of App Academy. Read here
(<http://qr.ae/8QbUb>) for how experienced devs thought that App Academy
helped them level up.

------
willaaye
When we launch LiveNinja ( <http://www.liveninja.com> ) in about a week, we
will have coding experts/coaches available for you to hire and video
chat/screenshare with. If you have any questions or would like to know more
please email me at will@liveninja.com

Please also email me if you'd like to be featured on the site as a
Ninja/Expert for our launch.

Thanks!

------
michael_miller
What you're describing is very similar to a 1-1 with a lead/manager at a good
company. Usually you'll meet once a week, talk about any problems you're
having, and work through any hard design problems you're encountering. If the
company is well managed, your lead will be very experienced and know how to
help you become a better programmer.

------
scottharveyco
My local Ruby on Rails organisation, in Australia, has a list of mentors
available for different topics. I've both given sessions and attended them and
they are always educational.

<https://github.com/rails-oceania/roro/wiki/Available-mentors>

------
ComputerGuru
Internships. Find a great company w/ top-notch developers who aren't too stuck
up or arrogant to give proper advice.

~~~
huhtenberg
Amen to this.

Tutors w/o industry experience are useless. And virtually no one with the
experience will do the tutoring outside the work.

------
david_vydra
Unless programming is a hobby for you, I would recommend you look for a job
that has mentoring built in. I remember that at Google -- which hires pretty
decent coders to begin with -- there were plenty of both educational and 1-1
opportunities to get better. In fact you had to pass a 'code readability
review' with senior colleagues before you got access to check in any code.

If changing jobs is not an option, then, yes, remote coaching/pairing works
pretty well. Lately, I have been starting remote study groups to master new
technologies with other developers. Take a look here for an example:
<http://scalafp.pbworks.com> and <http://scalapro.pbworks.com>

------
mgkimsal
I've been approached by 2 people to mentor them in coding, and neither worked
very well, but it was primarily my fault. In one case, we just had a lot of
communication problems for a few weeks (probably mostly my fault) but
expectations weren't set on both sides early on (regular times to meet, goals,
etc). In the other case, we ended up discussing things a bit more and decided
that's not what he was really after.

That said, feel free to reach out to me if you'd like to discuss it, and
perhaps we might be a fit (or I might know someone who is for your needs).

<http://phpmentoring.org/> is a site set up to help people match up with each
other, but I've no idea what sort of success any of them have had.

~~~
asher_
I will check out that site, PHP is one of the languages I work in regularly.
Thanks!

------
JackMorgan
I do this. My best success story? I started mentoring my little brother in
July when he graduated with a B.A. in philosophy. I code reviewed, wrote
assignments, helped him choose his own projects, gave advice on what study,
and pair programmed with him on weekends. He worked hard; just started his
first job as a software engineer last week.

I used to be a schoolteacher before getting into development, mentoring
combines my two favorite things: teaching and programming. Feel free to
contact me, I'm open to take on one or two select individuals interested in
working hard.

~~~
andrewkkirk
@JackMorgan - what's the best way to contact you?

------
Inebas
Well, what I am doing right now, just trying out so can't say for sure how
effective it is. I was working with a a freelancer who knows python and is
more experienced than me so I say I'll pay for your time for pair programming,
design review, etc...

What I would do is to code the way I would and then go over it with him via
teamviewer or something and we chat over skype. For me, the difficult part is
creating the right classes and refactoring, making unit tests and making code
scale. I also have design questions. Perhaps I'll make a post when I have more
feedback.

------
TallGuyShort
I'm sure there are online communities that would provide what you're looking
for. I've been a member of cboard.cprogramming.com for over a decade and that
community is exactly like what you're looking for. It's focussed on C/C++, but
people who post their code either with specific questions or asking for
general feedback will get a wealth of advice on how to avoid common pitfalls,
how to do things better, and how to be more standards-compliant. For other
languages, ask around for the good communities - they must be out there.

~~~
asher_
Online communities are useful, but not what I am looking for. I already have
access to online communities. Coaching is different - it is more personal,
more focused, and is based on a longer term relationship.

------
andreipop
I've thought a lot about this problem. Trying to remedy it I built
<http://coderook-beta.herokuapp.com>

Still just playing with it.

------
arikrak
I think this is something that could be very helpful. In college, I didn't get
so much feedback on code, so I would be interested in having a "coding coach".

In fact, I wonder if anyone would be interested in helping a small group get
better at coding. The coach would provide feedback and answer their toughest
questions. I guess it would be like a small independent coding bootcamp. I'm
not sure how compensation would work, but I wonder if anyone would be
interested in it?

------
amorphid
I've benefited from having coding tutors. My path was to pick a project I
wanted ti work on, start coding it myself, and then find people who'd be
willing to help me figure it out.

The thing that took me a while to understand was that lessons tend to be much
more effective when I ask the teacher for help with building a specific
feature, including architecture, refactoring, and testing.

Chris Pine's Learning to Program was a very helpful book, too.

------
thibaut_barrere
I can tell you it exists since I'm doing exactly what you describe: providing
short sessions over Skype/shared-screens, on various topics including pure
coding, freelancing, or ETL.

I only do that on a lightweight volume (and I am paid for that since this
year).

I believe Avdi Grimm does something similar too.

This is something I really enjoy doing, and I'm surprised that it's not more
widespread.

------
bridgeyman
I am planning on creating a startup that would do something along these lines.
This would be a great opportunity for me to learn about coaching through
Skype. If you are interested, I would love to devote a few hours a week to
code coaching.

I wouldn't consider myself an expert, but I have been coding for 9 years or so
now. What level are you at, and what level would you prefer your coach to be?

------
tekknolagi
I'm a coding coach. I'm only 16 but I am the programming captain of my
school's robotics team and I teach a small class.

I have to do _just that_ to help the kids along, to learn, to fix small things
and generally become more independent.

I love it.

------
ibgeek
There's a company called Software Carpentry ( <http://software-carpentry.org/>
) that runs workshops for scientists but they might do the same for other
programmers or have an idea of who might.

------
sarhus
Hi there, check Codersumo (<http://codersumo.com>).

We're still in alpha stage, but the idea is to solve challenges and get
feedback and reviews from more experienced programmers.

------
dmcg
Slightly off topic, but I've had a great learning experience by asking the
right question on the Code Review Stackexchange
<http://codereview.stackexchange.com/>

------
writeclick
Perhaps you should consider <http://devbootcamp.com>. I'll be graduating in a
week, and it's been a good experience.

------
econner
CodeHS.com is an online introductory programming that offers feedback from
engineers. The focus though is more on beginners.

------
Kliment
Depending on your level, I might be interested in doing that for you. Contact
me at kliment [at] 0xfb.com if interested.

------
logn
They're called tutors. wyzant.com has a lot of tutors. But beware they take a
large commission so prices are inflated.

------
YuriNiyazov
I have done this quite a bit over the last two years, and was paid for it. I
love it.

------
inglesp
This is something I've offered informally before. Is it something you'd pay
for?

~~~
asher_
This is something I'd insist on paying for. Investment in a relationship like
this goes both ways, and having a coach that was not incentivized to continue
would be a deal-breaker for me.

~~~
btilly
The problem is this. Any coach who you want to listen to can make more
programming for themselves than you can afford to pay them.

Getting the incentives right is tricky. Money is often not going to be the
right incentive here.

~~~
asher_
I agree, money isn't the only incentive. Some people (myself included) have a
passion for teaching. Money is just an extra motivator.

I don't think its true that they can necessarily make more programming
themselves than I can afford to pay them either. Remember, I am not wanting to
hire someone full time, but for only a few hours a week. If I have to pay
multiple hours of wages for an hour of high quality coaching, that is
perfectly fine with me.

------
porter
I would pay for this. If anyone is interested please contact me to discuss.

------
ashitvora
Did you try oDesk?

------
WayneDB
I would like for a site to exist where I can go and find an expert on whatever
I need and consult with them over whatever communications method they prefer
(Skype, Google Hangout, Phone, etc). The experts would work for
tips/donations, an hourly/15 minute fee, wishlist items, credits, bitcoins,
barter, etc.

If anyone is interested, I have a more detailed roadmap for this idea, a
couple of domain names that would work as well as technical and financial
resources at my disposal. One of the domain names is ExpertHour.com, which I
think is decent enough. I don't necessarily want to co-found this with you,
but I might want to commission it or invest what I have for a very small
return. Email me if you want to know more.

~~~
willaaye
At LiveNinja we are doing exactly this and we are launching to the public next
week. Check us out at <http://www.liveninja.com>

If you'd like early access email me at will@liveninja.com

Thanks!

~~~
WayneDB
Can't wait to see what you've got!

------
martinced
I kinda like the idea but...

Coaches for online poker had that convenient that you could get a coach whose
prices would always been within your reach: if you were a regular winner (or
break even) at, say, $25NL then you probably had a few $25 buy-ins you could
use to pay a coach begin a regular winner at, say, $50 NL or $100 NL and both
of you could find value in doing that.

Then there was also this idea that you could learn from someone only a bit
better than you: someone who was beating one or two levels above yours had
already stuff to teach you and would be unlikely to give you bad habits.

But for programming I'm not too sure: it's not really a good idea to learn
from someone who's just "a bit better" than you. And if you want to learn from
someone who can do $100/hour consulting then it may cost you an arm and a leg
to learn anything from him.

~~~
asher_
When I played poker (at reasonably low-medium limits) I think I paid $100/hour
for coaching if memory serves me correctly.

I don't mind paying for quality coaching at all. I see it as a worthwhile
investment in terms of both productivity and happiness (I love learning!).

On the whole, I think high level education is very undervalued. When you think
about it, how long is the payback on a $100 coaching session if you get just
one really good insight that improves either the efficiency or quality of your
code?

