Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Yes and no. I'm a co-founder of http://devbootcamp.com so I see this every day in the context of people learning to be programmers.

"The best programmers I know understand how to architect and build large projects piece by piece. They can focus on the macro because don’t get hung up in the pieces. They know how to use Google to find solutions fast. DRY."

I agree with the first and second bit and strictly speaking the third. That is, when students first watch me code they're surprised both that I'm looking up this-or-that ActiveRecord method and at the speed with which I do it. They assume expert programmers have a book of magic spells they've memorized, so to see what I haven't in some ways makes it more magical.

What am I doing, then, if not memorizing every last little thing? What makes me a "better" programmer?

The key to becoming a non-beginner are the first two bits, not the third. It's developing that filter experts have which separates relevant information from irrelevant information. Lots of beginners use Google in a backwards sort of way, having been trained to "look for the solution." Google is like the great universal answer key for them.

It can't be about memorization, then. Being an expert is more like having this amazing compression algorithm at your disposal and we can evaluate very quickly whether some piece of information is compatible with that compression algorithm.

It's made worse by the fact that they see experts do it, sometimes. Or worse, that experts tell them, "I use Google all the time, you should, too." But Google is worse than nothing if the beginner finds code, copies it blindly into their project, and shuffles characters around until it does what they want. They are robbing themselves of the opportunity to abstract out common patterns, recognize similar problems in different guises, and generally setting an impossible bar of having to memorize too much.

Lots and lots of students have been trained to see software development as THAT.



Let me give a non-programming example.

It took me the best part of the weekend to drill twelve holes for curtains - because it is not enough to Google for the answers.

Now, if you knock on a wall and it sounds hollow - you just google for hollow wall fixings. Great. I'll go buy some of those.

Drill into the wall. And hit brick behind the plaster. Err... Ok they have invented a new type - dry lined Walls. The gap is so small my umbrella fixings cannot open up behind the board.

So I will get longer screws to go in the wall. But now my masonry drill slips on hard stones and gouges chunks from the plaster. Try harder - is that smoke coming from the drill? Eventually I find a consultant ( in the DIY store)

Aha - it's not masonry drill bits you need - you need aggregate drills. And a new drill.

Eventually I bought new drill bits, a new drill, six inch screws and I can do chin ups on the damn things.

The lesson

1. Until you understand the fundamentals of the problem, you will make poor choices time and again. Google correctly told me where to buy masonry drills and plasterboard fixings. It did not know to ask if I had the right walk for that.

2. New technology changes "embedded knowledge" - I learnt to drill brick walls from my father, But new ways of using the old can change everything.

3. Hire a professional while you go and do revenue generating work.


I cannot upvote you enough - especially on the first point. All the googling in the world is worthless without knowing what to Google for.

The "trick" of expert[^1] programmers is to know the difference, and to slowly expand the base they can build on.

[^1] An expert is merely a person who has learnt from more mistakes. There's nothing magical about it, as much as the cult of the rock star programmer would have us believe otherwise.


And this is the unstated meta problem implied (but usually ignored) in that Einstein quote.

Sure, you don't need to remember anything you can look up in a book (or Google), but you do need to know how to get to the right book again.

Beginners aren't characterised by not knowing how to type queries into Google's search box, it's that they don't know _what_ to type. Being an expert isn't about being able to solve problems without outside knowledge, but it is very much about having enough awareness of a large body of outside knowledge that you've got the right terminology in your head to know what words to start typing into that search box. A beginner trying to format a number as currency is going to spend a lot more time looking than the programmer who knows they just need to type "perldoc -f sprintf" at the command line.


"Sure, you don't need to remember anything you can look up in a book (or Google), but you do need to know how to get to the right book again."

Well, I would actually say you need to know "why" you're looking for said book/solution first. Then after you've found the right book/solution then its a matter of how to get there.

In my case, its all about having a good plan of attack. If you know where you're going, then its easy to Google for that solution to get to the next step in your plan.


I find knowing what to search for isn't that crucial. The brain is a very powerful pattern matching system, so you just look for something vaguely similar and search for that. Those results will virtually always lead you to the right terminology, at least in my experience, at which point you can modify your search query and drill down further.

I suppose learning how to use Google this way is a skill in itself though.


"Good judgement comes from experience. Experience comes from bad judgement." I think Nasrudin?


This is a great point and a great example.

I find:

I google things I understand but don't remember.

I read books about things I know about but don't understand.

I read blogs and other streams to learn what I don't know about.


This post helped me reach clarity. Thank you.


> 3. Hire a professional while you go and do revenue generating work.

Nothing wrong with acquiring a new skill. And next time you know how to do it.


YAGNI. There's nothing wrong with not acquiring new skill either. It depends on how soon/often you will need to use the skill in the future. Also on how urgent you need to do it if the need arises.


The trick is having enough skill to be able to evaluate the professional you're going to hire. I've been bitten by this before both in my personal and professional life. If you don't know enough about the field even someone with only a marginal amount of knowledge about the topic can seem like an expert.


As programmers we see this all the time when non-technical people make very bad hiring decisions. It's a chicken and egg type problem for a non-technical (co-)founder to build a good team because(or find a technical co-founder) he/she needs a good programmer to evaluate potential hires but they can't make that evaluation themselves.

I would expect myself to encounter exactly the same problems others encounter when trying to hire good programmers when I'm trying to hire some other kind of expert in a field I have little experience in.


It also depends on the amount of revenue you can generate if you hire a professional and get on with your work.

If we assume that the professional's fee is constant (doesn't depend on your income), then someone with very high income can waste only minutes on the task before it would have been cheaper to hire a professional, whereas someone with low income can devote a few hours to learning how to do it themselves and still make up for lost earnings by avoiding the cost of hiring a professional.


You an other comments seem to only balance cost and time lost, but doing your own curtains, for many people, is also fun, rewarding, interesting, and a very good way to change focus from professional or personal issues.


I find most of the benefit of learning new skills is in how they supplement other skills. I may very well never need to drill into masonry or have dry lined walls - by knowing that they exist, I can ask better questions.


To update the punchline of the old joke for a new era:

  Invoice
  For performing 1 (one) Google search: £0.01
  For knowing exactly what to Google: £999.99


I've always believed that being a software developer taught me not to DIY my home improvement. I recognize the finer points are subtle enough that I'd rather be coding instead of frustrated by messed up drywall. I'll call an expert. Or at least a practiced layman.


Yes, but the thing is you didn't build the drill, you didn't cast the fixings, you didn't design the drill bits.

It's one thing to google for a sorting algorithm, find one that doesn't work correctly, and learn about it in the process. And from your post it sounds like you learned a bit about hanging curtains just from your google experience.

The article is arguing against thinking "I need to hang curtains" and gathering together bits of materials that you have lying around the house to try to make it work. Someone has made the drill, and maybe you don't know which drill it is you need, but the right answer is most definitely not "build your own drill".

In programming, people will quite often go and build their own drill. I guess this is less of a DRY problem than a NIH problem.


But they key to becoming a non-beginner are the first two bits, not the third. It's developing that filter experts have which separates relevant information from irrelevant information. Lots of beginners use Google in a backwards sort of way, having been trained to "look for the solution." It's not about memorization, then, it's about this compression algorithm we call "being an expert."

I think this goes pretty much for everything that you do using Google, not just programming. I do some on-site user support on the side, fixing end user PC problems. Most people watching me over my shoulders are usually shocked to see that I have to Google the solutions for most problems.

Once the shock wears off, they are actually fascinated by how I seem to be able to instantly filter between relevant and non-relevant content and search results. Some even tell me that they've Googled for hours for a problem that people who have this "filter" ability can probably find a solution for in under a minute...


It's more broad than that. I'm pretty sure that's just what it means to be an expert at anything. You have a set of heuristics at work as an expert. To a beginner, everything has the same emphasis. They won't even be able to differentiate correct from incorrect in many cases.

Watch a lawyer scan through a contract or a copyeditor edit your essay -- same thing. They catch in a second something you'd never catch in hours and hours, if ever.


It's funny because that's perfectly backwards. :)

Machine learning is a model of this thing we observe in ourselves. Don't mistake a picture of a pipe for the pipe itself.

http://en.wikipedia.org/wiki/The_Treachery_of_Images http://en.wikipedia.org/wiki/Reification_(fallacy)


I'm not sure what your point is. What is the image, and what is the actual object?


I was replying to wting, but HN doesn't let me reply to a reply by the same author as a way to combat back-and-forth style arguments, I guess.

He said that experts doing that is "trained pattern matching gained through experience, i.e. machine learning."

But that's backwards: machine learning in this style is a model of something we observe in ourselves. The thing that's in us is the pipe, the machine learning algorithm is the picture.


You have to either wait a few more minutes till the "reply" link appears, or simply click on "link" link(!) and write your reply there.


Thanks! I've been an HN member for ~5 years and I didn't know this. :D


It's trained pattern matching gained through experience, i.e. machine learning.

What you said in the GP post stands true, it's important that beginners learn the correct patterns (look up documentation for idiomatic examples) and not false ones (blindly copy and pasting code).

You see this all the time in casinos; their goals is to reinforce poor pattern matching behavior. From roulette tables' results signs to bad poker players chasing terrible odds, the human mind has the ability to disproportionally increase the significance of selected memories.


It's not only knowing how to filter the results, but knowing what to Google for in the first place. Often results will be different if the search uses slightly different terminology, and knowing what the right terminology to use is requires a little bit of domain knowledge. Once you have the domain knowledge, not only is it easier to determine what results are more likely to yield useful information, but you also get better results in the first place through better search terms.


I see it more as a Family Feud style of reasoning. It's not just "how to ask the question" but "how other people would ask the question." Being able to model how other people would ask the question (empathy) is a key skill.

In my mind using jargon or appropriate domain-specific terminology is an instance of that.


Yes, my first steps in learning about something new are to search usin the words I know to find terms, then use those terms to find other terms, and to keep going until I have hit bottom. Then I read the books the people using the most expert terms recommend.


It's about knowing what you don't know. There are unknown unknowns and known unknowns.


I agree with this. I was recently amazed when a front-end developer came up with a google query that had much better results for a problem I was having.


Yes it's funny when they are paying me to do tech support and the first thing i do is google their exact error message, but I know how to hone in on relevant information.


The interesting thing here to me is that this represents a failure of Google to present you with relevant information and only the relevant information.

It's an opportunity. Not an easy one, by any means, but still an opportunity.


This is something only someone who was already on their way to being an expert would say. :)

A beginner with a broken, incomplete, or confused model of the world won't be able to accurately assess whether a new piece of information is consistent with that model. The information could directly address their issue and they won't even realize it. The expert, standing over their should, is dumbfounded: "Your answer is right there! You scrolled past it five times!"

This isn't something unique to programming. It's true of all human understanding. How long were humans relatively comfortable with magnetism and electricity before we understood the relationship between them?

The effects of electricity are all around us. It's why we can't put our hand through the table. But you have to have a deep understanding of electromagnetism to see how that "obvious" fact is related to the this magical voodoo thing we call electromagnetism.


To recognize an answer you almost have to know it. Somebody unfamiliar with the right solution will not recognize it even if it is staring them in the face.


>Once the shock wears off, they are actually fascinated by how I seem to be able to instantly filter between relevant and non-relevant content and search results.

This filtering is definitely crucial. I think when you're on your own, you don't even tend to realize how much is just being ignored. I've also had people look over my shoulder and say "what about that?" and point at obviously useless results that I had skipped over. Explaining why you skipped that link and don't think it's worthwhile can be a challenge.


Correct. If I'm understanding you, I'd summarize the distinction as follows:

Google should be used as a reference. It should not be used in place of educated judgement.

This goes along with the ideology that you should not trouble yourself with monkey-memorization. When learning to program (for instance), concepts are far more important and useful, as you are constantly faced with making educated decisions. Decisions should not be made based on reference material alone.


Yes! It's developing the judgement that separates an expert from a non-expert. Effective use of Google is a consequence of that judgement, not a cause.

More formally, it's nothing more complicated than a standard fallacy of the converse. We have "being an expert implies being the quickest to use Google." This does not imply the converse: "being the quickest to use Google implies being an expert."


I really agree with this analysis of the OP. It is pretty interesting to notice that as you watch other programmers you are teaching look for things on Google. That filter comes probably out of more and more googling combined with more and more programming to see which posts lead to a good solution.


Sorry for being off topic, but what resources would you recommend to someone who wants to learn everything that is taught in dev bootcamp but cant attend?


I have no idea, unfortunately. One of our fundamental theses is that much of what we teach is difficult-to-impossible to teach outside direct human-human interaction.

So, try to solve that first, c.f., http://www.quora.com/What-is-the-most-useful-programming-lan...

Second, if it had to be one overarching thing, I'd say learning about "fixed mindsets" vs "growth mindsets," as Carol Dweck calls them, and applying the scientific method to your own patterns of thought, emotions, and systems of understanding without judgement, shame, or super ego.

Everything we do, curricularly-speaking, follows from principles like that.


Get yourself a book like "How to design programs" and a computer, and hack away.


Fantastic insight, thank you!




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

Search: