I have always insisted that getting started in IT is relatively easy compared to most other professions. I just can’t think of any other industry in which it’s possible to acquire so much practical working knowledge on your own with so little money, and it makes me wonder why more people (especially those who complain about being “stuck” in low-level tech support jobs) don’t take advantage of it. It’s my belief (and personal experience) that with a bit of time and motivation, anyone can gain practical, real-world experience (yes, the kind you put on a resume!) in their spare time, and have a lot of fun while they’re at it. This article is not really a step-by-step guide for getting a job in IT, but more of a list of simple things you can do in your spare time that will help you teach yourself the kinds of things you should know.
First, a few tips:
- Clearly, it’s in your best interest to learn as much as you can about as many different technologies as you can get your hands on. However, don’t ever expect to know everything about anything. Definitely don’t waste your time memorizing things like command line options and function call parameters. That’s what reference manuals and Google are for. It’s infinitely more valuable to have a good understanding of concepts.
- This is a bit of a continuation of the previous point, but you need to realize that what you know off the top of your head is a lot less important than knowing where to find the answers. Read the manual, learn how to use Google and IRC, and as frustrating as it may be, only ask for help as a last resort after you’ve done your own research and tried everything else. This will teach you how to teach yourself.
- Get in the habit of asking yourself “how would I do this if I had to do it 10000 times?” Computers are very good at performing repetitive tasks very quickly, but human beings are slow and error-prone. The sooner you learn how to leverage the computer to do your work for you, the better off you’ll be. Be lazy by eliminating as much manual work as possible. Your mantra should be “how can I automate this?”
- Never settle for “good enough.” Be a perfectionist, and strive to do everything the correct way according to best practices and/or accepted conventions. If you find that you’re doing something wildly different than everyone else, you’re probably doing it wrong, and in the real world, it will almost certainly come back to bite you or your successor(s) in the ass later. You might also end up reading about yourself on a site like The Daily WTF.
- Remember that the best solution is always the simplest and most elegant one. Avoid creating Rube Goldberg machines. Remember this quote by Antoine de Saint-Exupery: “A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away.”
And now the fun stuff:
- We’re going to start by building a network. In the unlikely event that you haven’t done so already, get yourself a broadband Internet connection and a cheap Linksys firewall/router. Make sure your ISP allows you to host a server (I strongly recommend DSL over cable for this reason alone). Contrary to popular belief, a static IP is not necessary, nor is lots of bandwidth.
- Build your own server from scratch. It doesn’t have to be anything really expensive or powerful, but it should be dedicated (i.e. a different physical machine from your primary desktop) and capable of running 24/7 for the foreseeable future. Don’t waste your money on an expensive video card. Use that money to buy a cheap interruptible power supply and/or a tape drive instead.
- Install Linux on your server. I don’t care what distribution you use, but you’ll find a lot more documentation for the more popular ones (I use Ubuntu server). Do the most minimal install for your distribution of choice (i.e. no optional packages). Do not install a GUI (or control panel) on your server under any circumstances.
- Once your server is up and running, you are not allowed to reboot it unless it’s to swap out hardware or to install a new kernel. Your goal should be to have the longest uptime possible (for reference, my home server’s record is somewhere around 450 days). When something breaks, figure out what went wrong and fix it. Don’t just reboot and hope the problem will go away, because that will be a waste of an opportunity to learn something.
- Without a GUI, you’ll need to do everything on the command line. Get familiar with Linux’s filesystem hierarchy. Learn about what files go where and why.
- Register a domain name, but do not purchase off-site email/web hosting. From now on, you’re not going to pay anyone else for anything you’re capable of hosting yourself.
- Make your domain resolve to your home Internet connection. If you don’t have a static IP address, get an account with a dynamic DNS provider and learn how to make this work.
- Install Apache and start a blog. You’ll use it to document things as you learn them. Learn how to open the necessary ports in your firewall to make your website available to the whole world. Does this scare you a bit? It should. Your server is now wide open to attack. Start learning how to secure your server. Be paranoid.
- Install SMTP, POP3 and IMAP servers, then tell everyone about your new email address. If you have other outside email accounts, forward them all to your new address and use it exclusively. Set up server-side spam filtering and learn how to defend yourself from spammers.
- If you haven’t already, get a cheap tape drive and learn how to back up and restore your files. Then learn how to take automated nightly backups of your critical data.
- Now that you’re your own webhost, give your friends accounts on your server and host their websites/email too (the more the better). Learn how to set quotas and secure your server on the inside so that your users can’t break it on you. Then test yourself by challenging them to break it on you.
- Turn off the crappy DHCP server on your router and install something more powerful (e.g. ISC-DHCP).
- Install BIND and use it in place of your ISP’s DNS servers. Learn how to edit zone files by configuring an internal DNS namespace and putting every device on your network into DNS. Don’t forget to create a reverse lookup zone. Learn how to use the dig command.
- Combine your knowledge of DHCP and DNS to set up dynamic DNS updates.
- Now that you know your way around a Linux box, back up your home directories and set everything back up again on a fresh install of Gentoo Linux.
- Learn a popular web-programing language (e.g. PHP, Python, Ruby) and build your own website/blog from scratch. For bonus points, start by creating your own MVC framework.
That aught to keep you busy for a few years! And once you’re done, you’ll have more working knowledge than 99% of the people out there applying for entry-level IT jobs.