Experienced Programmers Use Google Frequently
codeahoy.com
codeahoy.com
I can't count the number of times I've Googled for a programming question where the answer is found on a Stack Overflow page I've written. If it's a particularly old answer that I've completely forgotten, I've even thought to myself, "Wow this genius sounds just like me!"[1].
[1]: ... as well as "This idiot has no clue what he's talking about!"
The next day:
- you comment: "hey, can someone explain the downv-- oh wait, that was me"
P.S. Recursive bonus: closed with a comment ("you should just google it") and now actually the top result in search output (happens quite frequently) :)
To comment on the headline, I am an experienced developer who also uses Google and DuckDuckGo several times per day. It's often faster to look up a method in the Java or Ruby stdlib that way, rather than navigating through the official docs hierarchy.
Now you hit the same problem search -- and find you original question. But wait! Now there are half-a-dozen other people with the same problem! So you click on all of those links.
But none of them could find an answer either. Bonus points if there's a guy who comes in condescendingly and quotes a manual or some other standard piece of information -- which is also wrong. This is usually because they didn't pay enough attention to understand the question in the first place.
I always answer my own questions if no answer was given and I found a workaround/hack to solve it. Not for myself, but chances are that in few years, if I search for the same question I'll find my own.
I'd say at least half of the questions/answers I come across are closed flagged as vague, or whatever but at the same time, were incredibly informative, useful and exactly what I was looking for.
The SO moderators need to chillax a bit.
It took two hours to carefully craft my question just to have it immediately shot down. It is needless to say I have not posted again since.
I just assume that my question won't fit their guidelines, regardless of what it is, these days.
I think they're over-moderating the site. It's a shame because it's MUCH better than what was before.
Heh, me too, especially on Stack Overflow. I wish they'd give us a better way to organise our answers rather than having to rely on tags or bookmarks in our browsers.
However, even more often I find answers that I upvoted in the past (sometimes I deliberately look for them, sometimes by accident). When I see an upvote from myself, I can be sure I can immediately use the answer because I already verified it in the past. SO is like a big, googleable, writable public wiki for me, with annotations.
It amazes me that many colleagues do not have an account, or have an account but never write or upvote anything.
The free rider problem is real, that's for sure.
The SO people have done a great job of not requiring accounts. You can even start asking and answering questions without an account, if memory serves right.
That lots of your coworkers get by without an account is a feature of SO!
If I find a problem I can't solve I will post a question on Stack Overflow, then I go back to work trying to solve it. If I find the solution before someone else does I answer my own question on Stack Overflow.
My most updated answers have been to questions I asked in the first place.
I also get a chuckle when someone I know says they were googling a problem and found my post on Stack Overflow.
For example: https://data.stackexchange.com/stackoverflow/query/edit/4811... sum and average of posts score who have a comment starting with the word hacker or news.
(I taught intro to CS for the first time last year, and watched people get very hung up by subtly broken things they found on the innertubes. To the point where we simply told them not to - we'd much rather have them asking the course staff, until they've developed the experience to sort out the wheat from the chaff themselves.)
I eventually got things working, though I feel far from confident about openGL ES. Actually, embedded shader code, packed arrays, limited debugging and my rusty matrix algebra doesn't make it easy.
I find it to be very irritating if it happens for people that should know better...
In general I find that asking them to explain why they think this is causing the behaviour you're seeing they can usually work out they're wrong/convince you they're right. Of course this only works if they don't scream "I've found the bug" every time you step forward.
Google is also very good at what I call "meta-guidance." If I search for something and don't find any good results, there's two possibilities: a) I'm not asking the right question, or b) I'm trying to solve the wrong problem.
Then I have to exhaustively Google to make sure that it's not an obvious Google search away. Then I start listing the steps that I've tried before, and I realize a possibility that I hadn't considered before.
The possibility works, and I close the window. Oh.
These days, I usually just walk the dog. By the time that I get back, I've usually figured out the answer or figured out how I'm going to look for the answer. The dog doesn't mind that his owner is babbling about code for the entire walk because he's a dog.
If the candidate knows the problem he/she is facing and can formulate good query to look for a solution; that's a ++
Use it all the time otherwise, for personal projects and startups (really, all of my startup ideas would be complete non-starters if Google didn't exist). Just beware that if you can Google the answers, the skill is a commodity, and that the real economic gains come from knowing things that nobody else knows.
Now that I understand the big picture/state of the art, I spend more time looking for specific techniques using Google and/or Stack Overflow.
I have my own little cross-distro builder[0] and I /rarely/ bother trying to dive into autoconf/make hell before cut+pasting the exact error message into google! That very likely saved my sanity many times over :-)
Otherwise I agree with the article -- Given the number of environments and languages around, actually 'knowing' trivialities like exact library names and such is a waste of good neuron..
Error messages are not messages for the users to diagnose anymore, they are keywords for google, give them a number. I google and if it fails, I'll try to use my brain.
I bet that many people that should know better here have never updated their VM, except those who are warned by the auto updater that is.
Not to say that this is not actually a security threat, but I would say a VM is safe enough
Here's the actual [1], and perhaps more meaningful, quote:
"[I do not] carry such information in my mind since it is readily available in books. ...The value of a college education is not the learning of many facts but the training of the mind to think."
For some companies, it's what they need in a hire. For others it's OK to just ensure people have a sound problem solving strategy and above-average general cognition.
I think you'll find varying levels of what you might consider nitpicking depending on the sort of company you're interviewing at.
This should be vetted out well in advance of an interview, especially for a developer. If you don't have at least a half dozen repos somewhere with code examples of sites or apps you've built, then there's a very high chance you're not going to get an interview. I've only been coding for 7-8 years and I have an extensive GitHub page, can point to close to 200 public sites I've built (both dynamic and static) and have a portfolio full of images from other projects I've worked on.
If you can't ascertain whether a person has practical experience with a tool, software, or language then you're not doing your due diligence.
Aside from whether or not they can do the actual problem, it seems to be a good proxy for skill. You can quickly distinguish between those that copy-paste their way to a solution and those that thoughtfully attempt to solve the underlying problem. Seeing what they choose to research, and sometimes having to step in and after a while and say "it seems like this is talking about X, which doesn't have much to do with this problem," speaks volumes about the candidate.
I saw another candidate Google "socket get command line arguments" and then stare at a stack overflow answer for a few minutes that had absolutely nothing to do with the problem. What they were attempting to do was just read data from a socket. Some people just seem to throw things at the wall to see what sticks.
I didn’t realize how uniquely good Google’s programming results were until I tried Bing or DuckDuckGo and was left confused because their top results didn’t even mention some pretty significant page on a target subject.
I am however noticing a trend that I don’t like in Google results: they are trying to interpret pages more and more instead of just being a proxy. (No thanks, Google, I don’t want your attempt at a pretty summary of a Wikipedia page or StackOverflow post; the link will do nicely. Besides, it is just a little obnoxious to lift content from other sites that may prevent people from visiting those sites entirely.)
Google is not my sole search tool though. I still find it faster to search offline for a lot of things; for instance, if you have a Mac and haven’t tried something like Dash for quick access to API documentation, you are really missing a potential productivity boost. And, offline search helps a lot on airplanes.
It's a little funny when the interpretation doesn't show anything useful. I've noticed this is often the case when they rip an html table out of the document and show partial rows/columns in the result set. They'll frequently display the column that contains your search term (the "key" so to speak), but exclude the column that contains the matching information you're looking for (the "value"). Other times, though less frequently, there are "answers" to your search query that just make absolutely no sense.
It taunts me and tells me that I'm sorry Daniel, I've decided to exclude the most important keyword from your query.
Domain-specific search tools - e.g. for programming, Dash.app - have become an increased part of my workflow partially because Google simply isn't giving me the results I am looking for.
I wish excluded keywords were the only frustration. Their index seems to have gotten considerably worse at dealing with any somewhat "long-tail" query. I'm not sure why.
I suspect they've won the spam battle by aggressively purging from their index, but in doing so they've lost the spam war because the false positive rate on their approach is way too high. Or maybe I'm completely off base.
sigh
I don't Google things, or DDG things. I search for things
and you might find DDG is much better for devs. they have built in language guides and various other conveniences.
It shows results from various different search engines which you can choose from.
But software was in many ways simpler. The complexity was in squeezing out performance rather than piles of abstraction layers on top of one another. Knowing the hardware was more important and that was gleamed through trial and error.
The internet enabled the complexity that made software development dependent on it.
If there was time, I would post on either a bbs, or usenet (comp.lang.*), and hope somebody else had the answer.
The ecosystem was better documented at the time though. Solaris manuals, for example, were very extensive. You didn't have the litany of third party tools that you do today. So, problems that weren't explained in the manuals weren't as common.
I guess there was a time in the 1950s/1960s when you asked the guy sitting in the next room, who wrote the software, what the error meant, or where you simply read the source code or disassembled the code to figure it out.
When computers became more common, but weren't powerful enough yet for storing electronic documentation, you didn't crack open the tome; you already had it open (and it was more often a tome on the OS than one on the language) You also typically had a printed list of error codes on your desk.
When memory became less scarce, you would see header files with extensive (for the time) documentation, and there were tools to look up API calls, error codes, etc. (I think Windows or Visual Studio still ship with one)
When CD-ROMs became common, you had documentation on CD. Later, when hard disks outgrew CD-ROMs, that data moved to hard disk, because that was faster, and multi-CD setups became common-place.
Those CDs later moved to the web. That often made searches even faster (for example, I remember searching Apple's or Microsoft's site being faster than searching a locally installed MSDN (yes, MSDN was an application before it became a web site) or Apple's documentation for a while)
Also, I read release notes front to back, and used to read almost all API documentation. I think that was fairly common. Without the likes of HN to distract you, there was plenty of time to do that :-)
Since search engines weren't that good, it also was useful. If you didn't know the name of an API call or at least that of a technology, it was almost impossible to find it.
I did once go to the library for a reference to a 1950s book on relevance trimming of search indexing - probably about 10% of "MapReduce".
I guess I'm just restating the Einstein quote more verbosely, but it's absolutely true.
This is so true, and yet I haven't ever heard of anyone asking about this in an interview. It would be an interesting skill to try and assess, not sure how it would be done though.
I must use Google dozens of times a day :)
I think we have gotten to the stage where an intelligent and determined individual can teach themselves pretty much anything by researching a subject on Google.
Hold key concepts in your head, Google for everything else :-)
It just seems like people are googling, landing on Stack Overflow, and solving the same problems so many times.. especially if you could somehow follow through from the code on the screen, the google searches, pages landed on, and then the code or commands that got entered in.. I think that a lot of these recurring questions or problems could almost be solved/programmed by an AI.
Maybe if you could get a web extension running on thousands of developers computers.. maybe for Chromebooks if it could read the code out of crosh.. then monitor all of the searches and coding/terminal commands and create a giant deep learning/reinforcement learning network thing out of that.
Or maybe for monitoring the terminal code and commands some kind of background terminal program would be needed. Maybe ttylog or screen or tailing a tty device or something.
I guess it would be similar if in 1950, all of books lost their ink or all of scientists/engineers had amnesia. I'm not trying to make a point other than it is interesting to think about it.
Funny story, when I was just starting out in this field, my client wanted his chip to communicate with a sensor that was already on his board. This was at the time, a brand new, unreleased product. Because our hardware engineering department didn't like to communicate with the software engineering department the CPU they chose for the project didn't support i2c, but they sensor they chose (out of many thousands of different sensors from different manufacturers) only communicated over i2c.
At the time I was obviously very frustrated with the hardware engineers so I did a simple search for other sensors in the same category. Most of them would communicate over a handful of different protocols, it just so happens that the one they picked only supported i2c.
So, since I was just starting out and my client was breathing down my neck for access to the sensor that he paid for, I figured I didn't have enough time to write my own bit-bang software driver for i2c. Instead, I would just find one on google... So the driver I picked had a really tricky bug in it where it was bit-shifting the address of the device it was supposed to be communicating with. A logic analyzer came in really handy here. So my "solution" was, instead of fixing the bug properly, I just manually bit-shifted the address the opposite direction, and then the driver bit-shifted it back. At first I used the "<<" operator, right before the address went out on the wire. That didn't work, since the compiler optimizations ripped out my bit-shift command. So I manually did the shift and just put the "fixed" address in the define.
I estimate, that had hardware and software engineering communicated better, and worked together better, we could have shaved half the development time off of that project. Such a waste.
It's not just me, either - one example was a failure in STL map that was as old as the product. It was a known defect but nobody had the heart to face it. When I showed them the defect, people got rather angry with me.
2. Hope you're using OSS software and simply browse the source to find answers.
The second approach is a bit slower at first, but after you dismantled a bunch of repos it becomes natural, you get faster and the answers you find are more reliable.
That said, I do web search some specific terms frequently to get to certain documentation that I trust, SMS search is the easiest way to get there consistently.
For example, when I used Leaflet, I had no idea how this whole geo stuff worked, so I assumed that the code would be like higher math to me.
Things like spending several hours on a problem where copy/pasting the error into google yields a github issue complete with a work around or writing a boat load of code when there already exists a package or plugin that does exactly that.
The worst is when a google search would have revealed that our chosen framework already built in the desired feature they just spent the afternoon writing.
Where do you find junior programmers who don't Google with impunity?
Sometimes it's useful just to see how Google tries to autocomplete a search phrase I've started to type.
As well as writing the correct search query, this is the other important aspect of the skill of using Google. A good programmer can look at an answer on StackOverflow and quickly determine whether or not it looks "about right" and how it can be integrated into their code.
Google and StackOverflow fill a much wider niche however.
And then there's the CMS/framework search that might actually be more common than looking for Stack Overflow/forum/social media answers to questions. You know, where you're working with WordPress/Drupal/Joomla and can't remember what that one function or class is called that you need to use for some use case or another. Cue more Google searching, usually in conjunction with the wiki/documentation/codex/whatever it's called.
I'm in 100% agreement.
I don't know if I am experienced or not (beyond the numbers of years programming) but I am sure "search engine oriented programming" give you a lot of advantages and connect dots that take years if you follow other routes.
That doesn't mean you just copy and paste whatever you find. But it means you are now more informed than you were before and can come to a better, faster solution.