Understanding how computers work is essential in allowing us to use them as tools. We therefore need to translate some of their codes and numbers to things that we more naturally understand. Unfortunately, there’s no escaping the mathematics of it – converting binary numbers to decimal and vice versa is an algebraic operation. Though it can be done with a scientific calculator, the process is straightforward and can be done simply enough with a pen and some paper.
I’m a strong believer in learning by doing. I don’t think it’s necessarily the best way to learn because you invariably learn inefficiently, repeating well known mistakes and suboptimal practices. If you have a mentor throughout the learning process they can lead you away from bad habits and, crucially, explain why they’re bad in the first place.
But there are plus points to learning by doing. Firstly, you can’t argue with the results. It’s not a theoretical endeavour and if you manage to build a bookcase in two weeks, you can be fairly certain you’ve learnt a thing or two about carpentry. Additionally though, even though there is pain in learning the hard way that the bad habits are bad, there is no greater lesson learned than that which you learn yourself. Put bluntly, you’re more likely to remember to continuously save your work after you’ve lost six hours of content to a crashed application rather than someone simply advising you to, “Save your work frequently.”
The first Hackathon I ever did wasn’t an organised event but rather a weekend hanging out with a few other software developer friends. It was great fun and felt promising but ultimately, it has to be regarded as a failure: there was no end product. For those who are good taking lessons learned from others, here are my biggest suggestions to keep in mind when doing a Hackathon.
We’ve now established that knowing the base of a number system is crucial to counting, and that computers exclusively use the binary number system i.e. base-two. You may well have seen a calculator application on your phone or desktop computer that works perfectly normally using decimal. How can that be if everything a computer does is in binary?
Tags: CompSci in Plain English | Comments Off
The journey of learning about Computer Science will start by revisiting a simple lesson first encountered by most as a toddler: how to count. Indeed, it’s such an easy skill it’s hard to remember a time when you didn’t know how to do it. But one of the commonly known facts about computers is that everything is done in ones and zeros ie. binary. Just what does that mean though and how is any of this relevant to humans? Well, to understand how a computer works, you have to be able to work things out like they do. The first step is learning to count like them.
Tags: CompSci in Plain English | Comments Off
Earlier this year I helped out a random Hacker News commenter. This was covered in a recent blog post where I discussed the trade off between being an expert or a generalist. Realising my GitHub repository was littered with short, generalist introductions and experiments, I concluded that I should add the complex NP-complete constraint solver I had been working on for the past few years – an area in which I had some expertise.
At least, I thought that was the conclusion.
I feel embarrassed to mention this to people but I’m writing a book. It sounds just as pretentious aloud as it does written in text before your eyes.
Being an author isn’t something I ever thought I’d do and I’m not saying now that I’ll definitely see it to the end and publish a book. However, computer science is a subject dear to my heart and I feel constantly aggrieved by how misunderstood and misreported the discipline is by the media, programmers and everyone inbetween (see my complaint with University Challenge). Ultimately, I want to write an accessible book that explains computer science from the very basics, the most fundamental principles. I want everyone to know that computer science has nothing to do with technology and everything to do with, well, I’m about to explain exactly what…
So this is the first in a series of blog posts that will take excerpts from chapters I’m slowly working on from time to time. Feel free to chime in with comments and criticism about my metaphors, explanations, facts i.e. bug reports extremely welcome.
Tags: CompSci in Plain English | Comments Off
It’s that time of year again. Here is the updated Excel Spreadsheet for helping you choose a great Fantasy Football team that obeys all the team, position and budgetary constraints.
Education is changing in a big way. Whether you’re still in the education system or someday going to have children who will, it’s of prime importance you learn just how it’s going to change.
“My Name is Karl, Ich Bin Expert”
I don’t quote Karl Hungus lightly. When I began this blog back in the summer of 2011 it was because I thought I’d let my programming skills go rusty. I wasn’t starting projects and I hadn’t learned any significantly different technology or tools for a few years. Life Beyond Fife existed as a dumping ground for random ideas, quick trials and elaborate “Hello world!” examples.
But I’m not a twenty-three year old entrepreneur living in The Bay trying to get a startup off the ground. However cool it is to launch a micro t1 Amazon EC2 instance with a Node.js module using Heroku (yes, I’m doing Coursera‘s Startup Engineering class) I’m a C# programmer, and an experienced one at that. Recruitment agents don’t get in touch because I’ve tinkered with Iron Python, but because I have years of full development life-cycle experience on the Windows .Net framework. All my interviews begin with, “What’s the difference between a reference and a value type?” and end with “Explain the garbage collection process in .Net” or “How do you create an extension method?” etc.
Does trying out every new technology whim damage the focus needed to pick something and be an expert in it?
“Where is that drip coming from?”
Recently while in the staff kitchen, waiting a few minutes for my mug of tea to properly infuse – yes, I am that British – my absent minded thoughts were distracted by a repeating sound.
I looked over at the sink.
Nothing fell from the
tapfaucet (Ok, I’m British but most of my readers are American). So where is it coming from, I thought? I turned around and moved within the space of the kitchen trying to get a more localised area of where the source sound originated.
It almost certainly seemed to be emanating from the corner where the sink was, but I checked underneath the faucet and it was bone dry. I looked up to the ceiling and there was nothing. Puzzled, I stared intently at the plug hole.
Bingo! There was a build up of water in the complex plug hole that was dripping internally into the drain’s U-bend.
And I felt a wave of relief, picked up my perfectly brewed tea and left the kitchen.
Evolution and Metacognition
But then a thought struck me. If I hadn’t found the source of the noise so easily would I still be in the kitchen now futily searching? Or would I have left with the mystery preying on my mind?
The knowledge of where that sound, that drip, was coming from is completely useless. I could gain absolutely no advantage from knowing its location yet I was compelled to find out and felt satisfied when successful.
Humans have evolved to be curious. Indeed, our desire to know and understand has been instrumental in making us the most dominant species in the world. The greatest trick we learned though is that of meta-reasoning. Not only do we know we have an insatiably curious nature, we understand why.
Control Your Curiosity
So often as programmers we want to solve problems and understand technologies. We thrive on it and it helps us be more effective practitioners of software development. But just as frequently we’re figuratively walking around the kitchen trying to work out where the sound is coming from.
You worked out when that process was getting launched, how to setup a database reporting layer to see the order of server requests, constructed a complex event log filter to see when your app started paging. And after you understood everything you felt better because that’s how we’ve evolved.
Next time you find yourself attacking a problem with gusto because you want to find the answer to something, ask yourself, “Why do I need to know this?” “What would happen if I never found the answer to this problem?” If your answers are, “I don’t really need to, I suppose.” and “It would annoy me.” you have a different problem to address.
Rounding out your existing knowledge and gaining a better understanding of complex systems can be beneficial undertakings. But there is limited time in the world and when your curiosity is driving, it’s picking things on autopilot – not the most pressing or valuable problem. You need to fight evolution. You need to tell yourself that while your body wants you to spend time and energy finding the answer, the answer is of no use to you.
Walk away from the problem and do something more productive. I recommend making a cup of tea.