There are a ton of CS books out there; how do you know which ones to actually sit down and read? The answer could depend on the topic you wish to study and learn more about. I have a fairly large collection of links to well-reviewed Computer Science books that seem to be commonly recommended. As you may already know the Books, Articles, etc. section already contains a list of a few good CS books, however, I try to limit the list to (usually) only free books. This article will focus on all books which contain good “must read” information from both paid and free sources.
Starting off learning Vim is easy, but understanding the actual purpose of modal editing can be easily overlooked by most people. Even some of the most dedicated Vi/Vim users overlook the point of modal editing.
It’s been 25 years since C++ was first released by Bjarne Stroustrup. Wired.com has an interview with him discussing the language and his thoughts its creation and impact. C++ is one of the most used and universal programming languages out there. Bjarne comments on the popularity factor by stating that he does not believe that there is a single perfect language for every problem out there. However, in my opinion it is pretty amazing that C++ is available on just about every single hardware/software environment out there. Check out the full article for more interesting commentary from the creator of C++ here: Oct. 14, 1985: C++ Adds to Programming.
I’m constantly in search of more software and tools to increase my productivity and also to play around with. I thought I’d share some of my discoveries by posting a new page, Software and Tools, on the website. If there’s anything you’d like to contribute send me an email with your ideas!
Have you ever been interested in learning more about operating systems, specifically how they work at a very low level? I’ve always been intrigued by hobbyist OSes and have came across a couple of interesting ones that I thought are worth your time to take a look at. Hobby OSes aren’t necessarily the most useful tools from productivity or entertainment standpoint, but rather they serve as useful tools for learning and education. They can also be really fun to play around with and tweak! Here is a list of interesting ones I’ve come across:
- MikeOS - An x86 OS written entirely in assembly that serves as a learning tool to teach how OSes work with well commented code and great documentation.
- xv6 - A simple unix like OS from MIT. This learning OS was developed to help students learn about the low-level details of operating systems and hardware architectures.
- MenuetOS - This one isn't as much of a learning tool as the others, but it is a great "hobbyist" OS. It is written entirely in assembly and features a full GUI and a few simple applications.
- LoseThos - An operating system with a goal of "programming as entertainment". This OS was developed in C/C++ and seems to be oriented toward video games.
There are many many other educational and hobbyist operating systems out there. Check out some of these resources for more operating systems and information on OS development.
What is it? Big O Notation describes the limiting behavior of a function when the argument trends toward a certain value. Basically, it helps to describe the complexity and performance of an algorithm. This notation can also help to understand the execution time needed or space required by an algorithm.
Lately I’ve been exploring the possible career choices of having a graduate level degree (M.Sc. or PH.D) in Computer Science. For me, I’m interested in not only theoretical Computer Science, but also the practical applications of the field. I came across this blog post on scienceblogs.com where three different types of work for Computer Scientists are described and compared. It seems to provide a pretty good background on what you can expect with having a graduate degree.
I’ve been messing around with rsync lately on one of my linux machines. I’ve been looking for a simple solution that would provide something similar to Apple’s Time Machine software. There are obviously some open source packages that could provide this functionality for me, but I just wanted something really simple that could be automated. I came up with a script which utilizes rsync and is automated with cron. This script will produce incremental backups between two local directories or between directories on remote servers. In essence I guess you could say that this script succeeds in mimicing the ‘core’ behavior of Apple’s Time Machine software for Mac OS X. Rsync is available on nearly all Unix-compatible operating systems (BSD, linux, solaris, etc.), it is easy to use, and can be automated via a combination of this script and cron.
Object oriented languages dominate the modern programming landscape. The object oriented arrived in the 1960’s with ideas such as data abstraction, polymorphism, and modularization. At this time, procedural languages were the dominant languages. These new ideas were then being applied to the procedural paradigm, leading to full blown object oriented languages.
Check out this infographic which describes many of the Computer Science pioneers, various facts, algorithms, statistics, and other information. After reviewing it for a few minutes I noticed that it is by no means ‘complete’, but its really interesting nonetheless. Also, I’ve linked to a full-size version of the infographic and also a smaller one for easier reading.