I'm currently in college to be a software engineer, and one of the main principles taught to us is how to learn for ourselves, and how to search the web when we have a doubt.
This leads to a proactive attitude - when I need something, I go get it.

Recently, I started wondering how much development would I be able to do without internet access and the answer bugged me quite a bit. I know the concept of the languages and how to use them, but I was amazed by how "slow" things were without having the Google to help in the development. Most of the problems I have are related to specific syntax.

For example, reading and writing to a file in Java. I have done this about a dozen times in my life, yet every time I need to do it, I end up googling "read file java" and refreshing my memory. I completely understand the code and fully understand what it does, but I am sure that without Google it would take me a few tries to get the code correct.

Is this normal? Should I be worried and try to change something in my programming behaviour?

I guess I'm the odd person who still prefers books for these kinds of reference docs; too many online resources are of dubious quality whereas I can generally count on one or more of my book sources as being respectable. (If a book isn't good it does not stay in my possession long though)
–
Billy ONealMar 28 '12 at 12:25

11 Answers
11

Working without internet is a skill. You don't have it, as most developers.

The thing you must ask yourself before being worried is if you need this skill in your life. Chances are, you don't, because at every developer job with Joel Test higher than zero, you will have a fast internet access.

Then, you have a choice:

Either you spend years learning how to work effectively without internet, without IDE (just with a text editor with no syntax highlighting) and even without a high level operating system (i.e. only in console mode).

Or you spend the same time learning things you will really use in your daily work.

The first will help you a lot in a case of some post-apocalyptic world where there will be no IDEs, no operating systems and no internet, and where most developers would be unable to continue their career because of the lack of skills.

The second helps you today, in the world you live, right now, and very probably in the near future.

post-apocalyptic world where there will be no IDEs, no operating systems and no internet This analogy would make more sense if digital assets were truly perishable and expirable, which of course they are not. Not really. The notion that software has a "life" is mostly an artificial construct. Windows XP could continue to be supported for the next 100 years for instance and I could theoretically continue to play my old computer games from the mid 90's on that operating system.
–
maple_shaft♦Mar 28 '12 at 11:07

4

@maple_shaft, provided you have a functional computer, reliable electric supply, a safe environment and enough free time, as a minimum...
–
Péter TörökMar 28 '12 at 11:32

@PéterTörök that is why a pen and paper is till the ultimate perfect storage medium. No need to rely on those pesky electrons. :-)
–
tehnyitMar 28 '12 at 13:45

@tehnyit, unfortunately, it is far from perfect. Humidity, rodents and pests can easily destroy it - and each of these are fairly ubiquitous on most parts of this planet :-(
–
Péter TörökMar 28 '12 at 13:59

If - as you seem to indicate - you use Google & the web to gather information you know how to use, and (ideally) you would be able to get from other local sources (such as printed books - provided you had the perfect developer's library), it is IMO fine. Practically all developers seem to do this nowadays (even those of us who have development experience from the pre-Google and pre-internet time). Because when used sensibly, the web indeed gives us an amazing productivity boost, by resolving repetitive and slow tasks for us, such as looking up information in paper-based books and libraries, and ensuring it is up to date.

Syntactic details is a typical thing for me too. Nowadays I can have a task requiring the usage of any of at least 4 different languages, 3 of which I am not a master of. So looking up the specific details like this is regular activity to me. Still, I know enough of each of these languages to use the code examples I find (more or less) the correct way and in the right context.

OTOH, copy-pasting snippets of code googled from the net into production code without fully understanding what and how these do is definitely a Bad Thing which must not be done - else it is bound to backfire sooner or later.

Update

Reading and writing to a file in java. I have done this about a dozen times in my life, yet every time i need to do it, i end up googling "read file java" and refreshing my memory.

I would pretty much do the same, even though Java is my main language at the moment :-) Since I have mostly done server side development in it, I rarely need to do file manipulation. So these things aren't in my (limited) short term memory.

Memorizing the details of specific APIs / frameworks / languages / whatever may give us intellectual satisfaction, but ultimately it is only useful insofar it helps us solving (our own and customers') actual problems. If I haven't needed the nuts and bolts of Java File I/O API(s) in order to solve any problems recently, there is no value in keeping it in memory, and IMO it is entirely logical and useful to replace it with something more useful in my short term memory (keeping only a brief reference to the source of relevant information).

Recent research suggests that the internet has completely changed the way we memorise things, as a species, not just in programming. Rather than memorising a whole piece of information, we are learning to remember how to find it (for example, I just Googled "memory google" to find that link). This is not a bad thing, it's a more efficient use of our limited brain-spaces. Think of it as a complex version of a database index.

I'm old enough to remember days when I had the entire MSDN library, in book form, piled on my desk. It was big. And it wasn't even close to the full collection of books I had. But, because it was hard-work trudging through those books, I memorised a lot of it. It was imperative, to be productive.

Nowadays, I don't have to remember anything, I need to hone my Googling skills. If that doesn't work, I can usually get an answer to my question from Stack Exchange in minutes, even if I have to ask and wait for a response.

If it's something I have to do 20 times a day then I'll soon learn to do it without even thinking, let alone searching. But if it's something I do monthly then it's not an efficient use of my brain to remember it. Rather, it's useful for me to know how to find it -- keep a link to a blog or even write some notes in the corporate wiki.

But, if I had to go back to working without that information available, I've no doubt that I could. It's highly likely you could too. We adapt like that, as a people. This is exactly how we've advanced as a race. ("It is not the strongest of the species that survives, nor the most intelligent, but the one most responsive to change." - Darwin.)

You can not overestimate the influence of the internet and effective search engines on productivity!

Before we had the internet, we had to rely on books and other printed source of information to look things up. Boy, was that slooooooow...
(ok, yes, I am old - not only do I remember the time before Google, I even remember the time before the internet!)

Regarding your example of reading and writing files in Java: I have done this more often than a dozen times in VBA, but if I wanted to do it now, I would need to look up how to do it anyway. I wouldn't need that in C#, because that's what I program in right now. But VBA is not something I use on a daily base (thank God), so the knowledge is not that present in my mind.

If you are doing it every single day and after two weeks you still need to look it up, I would say that you have a problem with mid term memory and should worry (and go see a doctor about it, perhaps). But if you need a refresher on things you have learned some time ago, but do not remember right now, that's ok.

What's wrong with Googling how to solve a problem? This usually gives you hints about 3 or 4 mathematical or algorithmical approaches, so that you can decide on runtime, memory, etc. parameters and implement using well known, best case algorithm, or improve upon existing one. Knowing the direction in which to do the research, say use hash tables vs linked lists vs vectors to attain insert/lookup characteristics of A or B. It's only bad when you ctrl+c & ctrl+v solutions. Or use patented approaches without legal backing. But research is always good. Don't reinvent the wheel.
–
CoderMar 28 '12 at 10:53

@Coder maybe I phrased that wrong. I mean googling the problem with no basic idea (think of the 'can I have the code' posts) rather than 'I have an idea, but need clarification' - I'll add this in as an edit
–
AmyMar 28 '12 at 12:33

I did programming in the "pre-Internet" days. Back then, I had several books on hand to look up bits of info I needed for MASM and C. I'd look in the table of contents or index and find what I needed. If it wasn't in one of my books I'd have to go to the bookstore and buy one that did or, in some cases, order one through the store and wait for it to be delivered.

I'd also communicate with other programmers via Compuserve, Genie or other paid services, Usenet or on bulletin board systems (FIDOnet, etc.). It wasn't that much different than SO or other online forums although it wasn't nearly as efficient as doing a Google search today.

So, the Internet has made programmers more efficient because more information is available and more quickly. You don't need to lug around a bunch of books or try to search through tons of unconnected text from dozens of different sources.

Yep, I used to have quite the large library of programming books back in the day. Nowadays, there's really not any need to have any books at all (although, I can't get entirely away from my roots... I've got a few programming books still on the shelf).
–
Brian KnoblauchMar 28 '12 at 12:29

As a developer who occasionally has to do work in relatively unfamiliar languages on computers that are airgapped from the internet for security reasons I'm probably better able to comment on this than most people, and I agree the general sentiment of most of the other answers.

A decent IDE's autocomplete is able to find about 95% of what I need in the standard class libraries. Walking to/from a networked computer (and occasionally taking notes/making a printout) only costs me an hour or two of reduced productivity per month of coding.

Trying to memorize massive class libraries just isn't worth the effort expended. Spending a few hundred hours learning something else would have a much higher return on the time expended.

I find myself on your description, and what I can say is because of that I could get a deadline in a c++ project without any experience in the language itself.

As you pointed, when I needed to read a file in c++ I googled it and got to several pages, thanks to some OO knowledge, I could find the most accurate solution to my problem, even had the luxury to find logical errors in one of the proposed solutions.

What you are doing with google, you can replace with a cheat-sheet, Eclipse has a very nice User Assistance section in the wizard when you do ctrl+n, that helps you to create your own cheat-sheet, in that way you can code once and paste several times.

Like some answers pointed out, Internet boosts your productivity! Don't be afraid to use it :)

Get good at memorizing. Memorization is a skill that is not taught in school. It is hardly critical to being a great programmer, but it is better to remember something than having to Google for it. We can greatly improve our skill at memory the same way that we improve all of our other skills: learning effective techniques and practicing.

Believe you're missing the point, that being languages naturally bootstrap from the exchange that results from their use, and to believe that's not the case is a misunderstanding of the nature of languages.

Even before the internet, computers, or even written word - people or "peopleware" used natural forms of communication which resulted in a dialog that bootstraps the exchange and development of any logic based system.