Bartlomiej Filipek
Software developer with a blog about C++, performance and native programming.
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 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
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 is that horrible?
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.
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 same things if I would have had today's net connection.
New articles and bonus content? Sign up for my newsletter.
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 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?
If you like this article, visit my blog at bfilipek.com. I write weekly and share native/c++ programming stories.
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.
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.
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.
I remember that when I was a kid back in 1996, I've upgraded our family's x486 (66Mhz / 4 MB RAM / 100 MB HDD) computer from Windows 3.11 to Windows 95. It then took me several weeks, phone calls and bicycle rides to find a computer store that would provide me a floppy with Windows 95 drivers for the Hercules VGA graphics card, that was, without the drivers, only being able to display 640x480 in 16 colors anymore. These kind of issue disappeared a couple of years later with a 28.8 baud modem and AOL/Compuserve test accounts. :-)
I agree that being offline isn't the end of the world and it even had benefits (no distraction, making the best out of what's there, dealing with limitations in acreative way) - we did almost everything offline back until the late 90s. Including programming. However, there were still some issues that you just couldn't solve on your own. Like downloading a damn driver. :-D
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.