New Blog Site!
Warning: This post is outdated. It is here for reference purposes only.
How Will I Know When it Works?
If you are writing code I would assume that you're always writing it for a purpose. Sometimes the purpose is only to experiment or learn but you always have a purpose. You are creating something, solving a problem, or doing something fun. More importantly, your code should have a purpose and a reason to need to be written in the first place.
The first thing you [should] ask is "How will I know that I have solved the problem?" If you don't, how do you know when you're done? Also, what if The Problem was solved but you (or someone else!) just made a change elsewhere in your code base and now your code broke. How would you know? More importantly, WHEN will you know? Will you find the bug before your code goes out the door, or will you have a customer complaint about a bug that should have been discovered months ago?
Right Tool for the Right Job
My dad taught me as a young child that there are different tools that are appropriate for different jobs. Don't use that flat-head on a Philips head screw. Is that a nail? No? Then why the heck are you using a hammer?
As a programmer I find that more than ever, the right tool for the right job is vital for productivity. About two years ago I switched to a MacBook Pro as my main machine and I couldn't be happier. For me, that's one of my "right tools", I love it and I have no plans on switching back. There are occasions where I feel the difference in trying to find a cheap/free tool to get something done where a slew of options are available for PC users, but I can't say it has affected me too much. Throughout a given day I will likely use a huge assortment of tools, below is my list of frequent tools that I use pretty much every single week for various tasks as a programmer.
- NetBeans IDE
- Notepad++
- SourceTree
- Git
- BitBucket
- Microsoft SQL Server Management Studio (SSMS)
- VirtualBox
- Firefox
- Firebug
- Chrome
- Internet Explorer
- Filezilla
- Mantis Bug Tracker
- Trello
- Jenkins
- Phing
- Kompozer
- MySQLWorkbench
Phew, that's 18 different tools, and only a couple (such as Kompozer) don't get used every week. Sure, 3 of them are browsers and it doesn't include iOS Safari, but I have tasks I can only do in IE (shudder), I prefer to use Firefox for web development, and I use Chrome as my searching browser to keep Firefox from having 30 open tabs. This is just a quick list of what I happen to be using at this time, I'm open to suggestions to try as well!
What are your favorite tools for the trade?
"How" is Temporary
Jeff Atwood said "In our field, how only lasts about five years, but why is forever" and I agree. I love learning so much that often I get distracted from a real task with a real deadline because something I saw, read, or thought about interested me at least a bit and I want to know more.
Learning is fun, and in IT related fields, constant learning is a requirement to not being left in the dust. I've gotten to where I am today based on my ability to learn, my ability to take on new challenges, and my ability to say "we should be able to figure something out" and then figure something out.
Getting Organized and Low Maintenance
It's been a while too long since I've posted. All of the systems I've been building for the last 18 months or so are starting to tie together very nicely. So why has it been a while since I've posted??
Like I said, the systems are starting to come together, which means I'm getting really excited and I want to accomplish everything, but alas, I'm only one person. I have recently started using BitBucket to host my private repos. I discovered that their FREE accounts are limited based on # of contributors, not # of private repos like GitHub. I've always wanted to use GitHub but the majority of my work is not something I can share openly, and therefore I don't use it at all. Unlimited private repos is exactly what I need right now, and knowing that I can have up to 5 contributors (including myself) is a high enough limit for now. If I need more than four others I should be able to justify the minimal expense of $10/mo.
Anyway, the feature that has me the most excited is the built in Wiki. The real feature in there that I really love is the ability to clone the wiki to my local machine, edit it there and push it back to update the wiki. The other awesome thing is I'm now going to use Pandoc to build the Wiki in HTML format and load it directly to our VPS. Nothing against the Wiki in BitBucket, and I wouldn't mind making it public... but it would require me to have a lot of non-technical people creating BitBucket accounts just to view the Wiki, that's not easy to use for them.
Here's how easy pandoc was to get up and running.
Installing pandoc on my development VM (Debian):
sudo apt-get install pandoc
A simple command to convert one markdown (.md) file to HTML:
pandoc Home.md -o Home.html
The good news is, now that I know how easy this was to do, I will start setting up all of my documentation in these Wikis, and I will create build scripts using Phing and Pandoc to generate whatever documentation I need to make available. Simple, fits into my workflow, and easy to maintain multiple formats of documentation within source control. It also encourages me to load all my projects to BitBucket, because a) no cost, b) another place my source code is stored, c) makes it easy to collaborate as new developers come on board!
Life is good!