Live data from Hacker News

Ask HN: Do coding coaches exist?

news.ycombinator.com

41–50 of 69 posts

Re: Ask HN: Do coding coaches exist?

#41

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 cou…

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?

Re: Ask HN: Do coding coaches exist?

#43
post #40
post #33

Earlier quoted context omitted.

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.

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.

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.

Re: Ask HN: Do coding coaches exist?

#44
post #5

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…

I've talked to some of the guys at Tutonic.com, and seems like they might be trying to do something similar. I can't tell if they're getting anywhere or have any users, though.

Re: Ask HN: Do coding coaches exist?

#45

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 whiteb…

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.

Re: Ask HN: Do coding coaches exist?

#46
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.

Re: Ask HN: Do coding coaches exist?

#47

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 cou…

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

“The only thing more expensive than education is ignorance.”

Benjamin Franklin quotes (American Statesman, Scientist, Philosopher, Printer, Writer and Inventor. 1706-1790)

Re: Ask HN: Do coding coaches exist?

#48
post #39

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 universi…

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 disagre…

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!

Re: Ask HN: Do coding coaches exist?

#49
post #45

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 whiteb…

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 week…

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

- 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!

Re: Ask HN: Do coding coaches exist?

#50
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.

Post reply on HN