7 ms·
Yes and no. I'm a co-founder of http://devbootcamp.com http://devbootcamp.com so I see this every day in the context of people learning to be programmers. "Th
by jfarmer 14y ago
Yes and no. I'm a co-founder of http://devbootcamp.com 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.
- prawks 14y agoCorrect. 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.
- jfarmer 14y agoYes! 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."
- mobweb 14y agoBut 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...
- amalag 14y agoYes 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.
- jfarmer 14y agoIt'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.
- wting 14y agoIt'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.
- windexh8er 14y agoFantastic insight, thank you!
- arcadeparade 14y agoSorry 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?
- jfarmer 14y agoI 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-language-for-a-beginner-to-learn/answer/Jesse-Farmer?__snids__=99944016&__nsrc__=2 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.
- eru 14y agoGet yourself a book like "How to design programs" and a computer, and hack away.
- janson0 14y agoI 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.
- lifeisstillgood 14y agoLet 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.
- groby_b 14y agoI 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.
- bigiain 14y agoAnd 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.