Some time ago an intriguing article appeared on Reddit: "Do Experienced Programmers Use Google Frequently?". The author discussed if expert programmers use google more often than novice coders. He mentioned than using google is actually a good thing. It helps to find the best solutions, validate ideas, speed the development. Google nowadays seems to be a crucial part of any developer toolbox. That reminded me of old times.
This post was originally posted at my blog: Bartek's coding blog: Coding without Google
An old computer
I got my first computer when I was around 14 years old (in the year 2000). The specs were pretty decent at that time. If I remember correctly, it was something like Celeron 500mhz, maybe 256mb ram, 20gb HDD, Riva tnt2 Vanta. What's more important, there was no network connection! Some of my friends got their 56k modems, but it was not that common. Also, it was relatively expensive to surf the net that times... not to mention the great download speed! :)
After playing some games, I started reading some programming books and experimented with C++ language. Instead of playing games I actually wanted to create them... especially the graphics. Without an internet connection, I couldn't just google for tutorials or solutions. Was it that horrible?
Old Workflow
How did I survive those days then!? It wasn't that bad, to be honest.
The first compiler that I used was Borland C++ with a nice Windows IDE. I bought C++ in 24h by Jessie Liberty and I got immediately drawn into all of the programming ideas I could find there. I read the book and tried to recreate examples, modify them, write my ideas. Chapter 19 Was about the list data structure. I remember being so proud of myself when I understand the principles behind it!
I could just focus on that book and learning.
Then I started doing graphics. In the first place, there was <conio.h>
with an amazing color mode for console apps! After that, I've discovered <graphics.h>
header from the library called BGI - Borland Graphics Interface. Now I could really play with individual pixels and use more than 16 colors! I learned what is the update loop pattern and why it's so powerful technique. Before that my space ship on the screen would freeze if there was a missile animation in the process.
I could just focus on the library.
My workflow updated after a year or two. From time to time I went to an internet cafe and we had also a connection at school. Eventually, I got a modem for my home PC! I won't lie that I didn't spend a lot of time being not productive. Just browsing the net. But still, it was a limited experience when we compare it to our current state. And the cost for an hour of browsing was still high. There was no Facebook, Twitter, or other social media. I often downloaded pages with tutorials, so that I could read them offline later.
At some point, I stumbled across a great library called Allegro! This was another breakthrough in my development experience! I spent a lot of time coding in the library. After getting a bit comfortable in the API I started to realize my ideas - I had a lot of them at that time. Problems with a bazier path for camera movement? I simply sat down, tried to understand the problem, use a lot of paper, experiment... Finally, it was working. Continue until all ideas are in a decent state. You could recently see my updates to Matrix, the demo that was created in those semi-offline times.
I could just focus on my ideas. But some distractions started to appear.
After Allegro I learned OpenGL 1.1/1.2. At that time, I had more or less full internet connection. My workflow wasn't radically changed. I could focus and just play with the code and graphics. Still, there were a lot of online incentives.
What was the main advantage of being partially offline? I could focus better on my tasks.
New Workflow
How would it look like today?
I hope you don't do it, but sometimes in my spare time, I sit in front of my computer with some great idea to implement. Then, instead of doing it I browse the net, I check statuses. Fortunately more often I try to block it and start the task I planned (the task can be still some online activity).
But let's not be so pessimistic! With the internet, I get access to huge amount of good content. A tutorial needed for some strange technology? Just type it in the address window. A solution to a programming problem? Go to StackOverflow. Need some programming/software news: go to Reddit.
Depending on the technology you use you might need more net resources or less. For example, I don't imagine going to some offline MSDN documentation (I remember installing that back then in the early versions of VS!). Now I simply type "msdn:... " and visit an online site.
With tons of good stuff out there it's worth to be a bit resistant to all the distractions. I wonder if I had learned the same things if I would have had today's net connection.
Lessons
Was I slower in those offline (or semi-offline) days? IDEs weren't that advanced so when I wanted to invoke a function I probably needed to look at its file header. I could find it quickly in a pdf/chm with help for the IDE/Library. So it was not that slow...
I believe that the offline experience that I had in the past was a good thing. I could focus better on the ideas and on the code. Now, with so many distractions you need to be more resistant and self-disciplined.
Lessons: Maybe it's good from time to time to disconnect and be offline? Could we just code and be quicker in the flow?
- Do you cut off the connection when you want to work?
- How do you fight with online distractions?
More from the Author
Bartek recently published a book - "C++17 In Detail" available @Leanpub - rather than reading the papers and C++ specification drafts, you can use this book to learn the new Standard in an efficient and practical way.
Top comments (16)
The problem for me or not the distractions, but the fact that the information is so fleeting when you look it up on the web. I always feel a little sting of shame when I have a basic problem I know I've solved before, but have to look it up on the web again because I forgot the syntax. This might even happen multiple times, especially when the answer can be copy-pasted from stack overflow directly.
I recently read as a sidenote somewhere that inexperienced developers simply copy paste stuff from stack overflow without understanding it, and I had to admit that even though I consider myself quite experienced, I do not even try to read the code most of the time. As a result I started to try to at least read and understand the code I was copy-pasting and that has helped me to learn more from googling for answers.
Where the internet has helped improve my coding skills, was when I started to read open source source code.
So as a whole, I think the Internet has helped me improve on some levels, made me lazy on others, and sometimes it's the way I use it that makes the difference between help and hindrance.
One thing that's helped me when StackOverflow has the perfect piece of code, is to force myself to manually transcribe it instead of just using copy-paste. I have to pay more attention to how the code actually works and I get a more immediate opportunity to customise it to the project I'm working on.
If you paste code in without understanding it, how will you maintain it when you have to make a change in a couple of months? How do you know it doesn't have bugs, or a condition which will have a knock-on effect in your program?
I cannot fathom why anyone would use foreign code like this when it's not at least black boxed into its own library.
I have a makeshift rule that "I will not reuse code I do not understand". If I'm going to copy-paste something, it's going to be after I spend an extensive time actually learning and understanding exactly what it's doing. It made life hard at the beginning. Then my own knowledge started to grow at a very accelerating rate compared to before, along with the fact that debugging issues became a breeze because I immediately know what's wrong. Even if not immediately because of a more complex issue, it's still actually solvable in a much more timely fashion!
It took me two years, three distinctly different projects and technology stacks, and countless tutorials + reading + Stack Overflow visits to finally get to this stage. Just keep at it, it's definitely worth it in the end.
I really like thinking about this, but my workflow is almost completely tied to Google and Stack Overflow now.
This one time, I didn't have Internet access for a couple hours and it almost broke me. I'm not sure what the policy is on self-promotion here, but I wrote a stream-of-consciousness style blog post about the tribulations.
Ultimately, I don't keep in my head a lot of the detailed knowledge that you need to write code, it's offloaded into the cloud. My workflow involves a lot of cache misses and trips to the Internet to look up syntax, core APIs, and Unix command usage. And it pretty much always has. To the point where I can't even write a blog post in markdown without Googling.
Here's the thing - you're in earlier stage of programming.
I had this phase as well, but i kept at it, and kept increasing sizes of projects i do - eventually (granted your brain isn't damaged) - neural connections will store all constantly-reused info. it's like with typing or any other repetitive task - our brain is good at storing that info.
Just keep practicing.
Full Disclosure: I am ancient, not all that wise, but have stuck with things since 1989.
The first time it's research, the second time it's engineering.
Taken from one perspective, the interwebs offers great resources where you can get up to speed, rapidly. In theory, no need for failure, struggle and head banging as you can glean important details from other's experience on Stack Overflow, review good code on GitHub, read blogs, etc. How useful this is still depends on the level challenge you are facing, and how diligent you are at understanding the code you chose to implement. In other words: do you really know what that code is going to do that you just pasted?
Here is an alternative view, and comes from an interview that I recently had where I didn't get the job. In many respects I was interviewing the company as well, so the thing happened as I wasn't offered the position. The question I was asked was this: what sources do you use online?
I answered honestly, and said the first thing that came to mind: Well there's lot's of resources like Stack Overflow but to be honest there's a lot of noise out there. I try to sift through it all, but to be honest I tend to be skeptical.
I was one the first beta testors of Stack Overflow and followed Jeff's experiment as it blossomed into something amazing. I have a decent rating, but quite frankly I don't what it is, and am not impressed when people wear their badges. Skepticism and trying things for yourself and struggling is one of the best teachers. All those mistakes build a foundation.
In the end it's up the individual to go back and judge themselves, and yes, look to others for guidance.
Back in the 80's and early 90's I hauled around a few massive "cookbook" tomes. In the mid 90's to the early 00's, I hauled around large CD binder with MSDN and other books on CD. Now, I just have my work PC and my phone. I'm glad I can find the same info plus a whole lot more online today.
So far as online distractions, I'm pretty good at staying focused on the task at hand. I don't answer Stack Overflow questions or get involved in forum/blog discussions when I'm working on a program. I save that for off times.
For me It will be like this when coding to solve a problem:
So in the entire journey i used Google 4 times. That is more, but it keeps my productivity levels high. If Google is not there i'd look up to JDK JavaDoc, some offiline HTML help, talk to a senior.
Cheers!
Nice article! I do indeed remember those days when I was less tethered to the World Wide Web :-) I actually think those days impacted my learning style and, to this day, I still like to immerse myself in written content/physical books.
That said, I do feel more productive and rounded in certain ways when I can find answers swiftly and confirm assumptions I am making with a large community. Sometimes I feel completely at home in some online tech community and other days I feel lost, like I can't keep up.
I guess whereas in the days of yore I felt like I was learning from a handful of masters of my craft, these days I feel like I'm standing on the shoulders of millions of giants in our space - and it is a diverse set of folks too. That is a nice feeling.
PS: I believe my first programming book was Waite Group's Turbo C Programming for the PC send to me from the USA by my big brother. :-) I hope I still have it #Nostalgia
I think this is a question of what I'm working on. A new field of study (currently js and UI) requires a greater amount of information input for me to get my hands around the concepts and tooling. Once I've established a baseline of understanding and I simply have less questions then the rate of query decreases.
I love reading through other people's code examples and their approach to problems and I'd like to think that it keeps me from developing really bad habits. If I were isolated I'd likely fall into a heap of anti-patterns that seemed to make sense at the time. I can think of more than a few of these that more experienced friends have pointed out to me about arrays in JavaScript and I'm better off having my mistakes pointed out.
I'd rather have the connection there and make my own choices about when it's best to use it, when it's best to keep beating my head against the problem, and when it's best to just take a walk around the block and come back to it.
Dealing with distractions is a constant practice in daily life and in work. I try to cultivate discipline actively. Some of that is in the environment setting; turning off notifications, clearing my work space and getting a good cup of tea at hand. Some of it is inner work, gently pulling myself back to the task at hand when I am wandering off, allowing space for breaks and extensively Pocketing interesting technical bits that I'm not currently working on.
I figure it's going to happen; I'll get distracted. So I've designed a workflow that neither punishes me for it nor allows it to become the all consuming time suck it is likely to become if left unchecked. I just try to let it be a natural part of working in the hive mind.
Very nice article Bartlomiej you remind me how I got started as well, the steps were similar if not exactly the same! The love about programming from the beginning, the "gamer" who wanted to be the creator and all that...you really moved me! Keep up!!
I totally agree, as reading this has also been a distraction. Done, I’ll unplug the cable now :)
But...wait, I can plug it back in :(
I guess that we need some sort of outside control, like a big brother, which you can instruct to kill your internet connection between this and that hour, without any exceptions. That’ll do!
Being from the same country I can completely relate to your experience :)
I started my programming journey from the bottom up. First language I was writing in was x86 assembly. I had a computer (486SX;)), a book, a notebook (paper one) and a pencil. The thing was the computer was there for me only during weekends, so I had pages of assembly code created after school from Monday-Thursday, which I typed in from Friday to Sunday.
This was slow and difficult, but I had lots of time back then, and I could think over some things. Finally, when my assembly code started to look like regular C, I moved to C.
The internet was precious and expensive, I used dial-up connection to download programming tutorials and read them offline. Every minute (or rather 3 minutes) counted ;)
I miss these times and I know that I do, because I was young and responsibility free, not because it was better back then.:) Although there is limitless stream of information and resources available now I think we are getting more and more lost.