
Be sure to check back in a few days for some new posts or subscribe to the RepeatGeek feed.

Be sure to check back in a few days for some new posts or subscribe to the RepeatGeek feed.
When it comes to down to it practice makes perfect. In order to become a successful programmer you need to keep your skills up-to-date and work on problems outside of those faced at work.
Luckily, there are numerous websites that provide the opportunity to practice. The following blogs comprehensively list most of the puzzle websites that are available to help you practice your skills.
There is one other website that is absent from the lists above that provides programming puzzles.

ITA Software is a company based out of Cambridge, MA that specializes in the development of airline and travel software. They use programming puzzles to attract and recruit new employees.
They won’t grade your solution if aren’t considering working for them, but that doesn’t mean that you can’t at least try implementing a solution. The puzzles are designed for those looking for a challenge.
If you are ready for the challenge, ITA has two sets of puzzles:
If you have attempted these problems or have been hired as a result of completing one of the problems, please share your experiences.
After reading several books (6 Books Every Programmer Should Own) for programmers on increasing productivity, you start to realize that a lot of it is common sense.
You even to notice a common theme amongst blogs about productivity.
Whether you are a programmer or not, here are 5 common-sense ways to remain productive:
Whatever is keeping you from doing your work: e-mail, instant message, phone calls, loud co-workers, etc.
Find a way to stop these things from disturbing you:
Look around at your desk. Are there papers thrown everywhere, food, or other junk laying around?
How about your desktop on your computer? Do you have 100 icons that you don’t know what half of them do?
Keeping items in a easy to reach location makes sense if you use them frequently, but having too many items defeats the purpose.
Start organizing both our physical paper and computer files in a logical location. Only keep those that you use very frequently out in the open.
Have you ever had a great idea or thought come to mind, but you didn’t have anywhere to record it?
With the technology that is available today, you should have no excuse. Most cell phones will have some of voice memo application that you can use. If not, you can purchase an inexpensive audio recorder (similar to Norm MacDonald “Note to Self”).
If you are old school, you can even carry with you a small notebook and a pen or pencil.
Have you found yourself in a meeting where you scribbled a bunch of information on a whiteboard?
I would still recommend recopying your notes to paper or computer, but before you erase the board make sure you take a picture with a digital camera or your camera phone – you never know when you might need to refer to it.
It’s easy to feel overwhelmed when you think of things that you need to do over the long-term (over 1 week deadline).
Don’t stress yourself our by constantly saying to yourself “I’ve got a ton of things to do.” Get a whiteboard at work and/or home and start to write down your long-term goals. Things always seem much more manageable once you write them down.
You can even use different color markers to indicate priority (e.g. Red-High, Green-Low).
Similar to having whiteboard for long-term goals, start writing down your short-term goals (less than 1 week deadline) on a piece of paper or post-it note – keep it next to you.
Over the week as you accomplish tasks, cross them out!
The sense of accomplishment that you feel by completing goals will motivate you complete the others.
None of these items are products of intense scientific research or even that expensive to implement – just common sense.

Screenshot courtesy of: The Secret of Monkey Island™
What comes to mind when you hear the terms: ‘Salesman’, ‘Salesperson’ or ‘Sales’ ?
If these are the type of words that come to mind, you have probably been dealing with some bad salespeople.
I do not work nor have I ever worked in sales, but I have taken sales classes offered by my employer.
If there was one thing I learned about sales, it’s that the sales process is more about having a conversation than it is about buying or selling something.
Before you see how to this relates to programming, you must be able to think like someone who is motivated more by helping people rather than by money.
The scenario to understanding genuine salespeople is to look at a financial planners. If you are unaware of what financial planners do – they advise individuals in making major financial decisions such as retirement, taxes, investing, etc.
When you visit a financial planner, you could tell him or her that you want to retire by age 50 and you want to invest $100 per month. Without any further discussion, a financial planner could come up with a solution for your retirement, but is it going to be the best solution?
Any good programmer can take requirements and a design and develop a solution that meets the needs that are laid out. But is this what the end-user really wanted?
What if you actually sat down with the end-user and had a conversation with him or her rather than rely on some specs that a business analyst obtained?
You might be thinking to yourself, isn’t that the job of the business analyst? In an ideal world it would be, but like the Game of Telephone (or Chinese Whispers) something is going to get lost in translation going from end-user -> Business Analyst -> Programmer.
If you have the opportunity to have a conversation with the end-user, take it. Establish a relationship, listen to them to find out what they really need, negotiate possible solutions and close by building them a solution.
The most important part about sales and also with programming is: listening.
Don’t be the used-car salesperson who wants to sell the heap of junk on the lot, without understanding the true needs of the customer.
No, I’m not talking about the millions of people who use the web, but rather they way that we access web content.
What do I mean by thin? I mean accessing and interacting with web information by the means of a single application: the web browser.
If you haven’t seen Google’s ChromeOS yet, it is the epitome of a thin client. It is like a stripped down Linux distribution with nothing more than a web browser.
When web 2.0 first introduced itself, we saw web sites that behaved like desktop applications. Technologies like AJAX and Flash combined with broadband internet changed the way we interacted with the web – the web browser was the primary application for accessing web content.
Web applications still had a few major flaws: the capabilities of the browser to adhere to web standards (HTML & CSS).
Who had an iPhone the first year they came out? If you did, you might remember that if you wanted to access sites like Facebook or MySpace (who uses MySpace anymore?), or if you wanted to play any games, you needed to do so with Safari.
That first year, the iPhone also teased us with some built-in applications like YouTube and Google Maps.
Web applications have been successful due to the convergence of web standards: XHTML and CSS, but are still dependent on the speed of the network and the capabilities of the browser.
Today, how often do you use the web browser on your iPhone?
There are over 100,000 custom iPhone applications that provide different ways to access web content. As a result, web clients are getting fatter and fatter.
Why apps?
Accessing web content via apps is a more pleasant user experience because we are relying more on the capabilities of the device operating system vs. the capabilities of the web browser.
How many of you access your e-mail through a mail application or read blogs with an RSS reader, or use Twitter through a desktop client?
Internet-enabled applications are not unique to mobile devices nor are they anything new.
Your web browsers isn’t as thin as it used to be
All of the primary browsers today support the use of extensions or toolbar add-ons to enhance your browsing experience. As a result, our web browsers are also getting fatter.
Our mobile devices are now loaded with applications for accessing web content: FAT, at the same time netbooks are becoming increasingly popular: THIN.
So where are we headed?
I believe that the application-based client will be the future of the web because it allows for the best user experience. The traditional web browser won’t go away, but will continue to supplement the application.
Because of the difficultly involved in maintaining software updates and new features – the success of web-enabled application will depend on the update delivery model. Applications will thrive if using push-notification models for updating like Apple’s App Store and Firefox’s Add-On manager.
What do you think? Will Google’s ChromeOS eventually have it’s own app store like the Android Market? Or will all future browsers adhere to the same web standards offering the same browsing experience?

I came across two blog posts today by @eriwen about why Twitter is a useful Social Networking tool for programmers:
When I first heard about Twitter, I thought – that sounds stupid, who cares about what I am doing?
I am relatively new to Twitter and after using it for about a year, am just now starting to appreciate its value.
Initially, my tweets looked like Facebook status updates:
Going to the airport
Going to the beach
Out to lunch
Unless you’re my mother, you could probably care less about what I do with my free time.
Imagine if you were networking at a real (in person) social event like a programming user group meeting, wouldn’t you be more interested in programming discussions rather than discussions about my personal life? So why should Twitter be any different?
As a programmer, I am interested in hearing about programming methodology, news articles and other interesting topics surrounding technology.
If you were to find someone with similar interests, you are more likely to start a dialog and establish a true networking connection.
The biggest challenge that I’ve faced with using Twitter, is finding worthwhile people follow. You could follow a programmer who is somewhat famous like:
But, unless you are about as famous as them, your tweets will probably be one-sided.
So where can you find programmers who share a similar social status as you?
JustTweetIt is a Twitter directory where you can find other users who share similar interests. You can browse different Twitter profiles within each category or you can add your own to as many different categories as you like.
Wefollow is another Twitter directory, where you can search based on different tags. Wefollow allows you to also add your own Twitter user based on an series of tags that you specify.
More and more programmers with blogs are sharing their Twitter usernames on their blogs. I welcome you to connect with me, if you find me interesting:
@dhirschl.
Where do you find people to follow?
There occasionally comes a time when you can’t sit in front of the computer any more and need to focus your energy on something else.
When you are stuck trying to debug some logic – the cure to working through your problems is to do something unrelated to programming.
I like to play a round of golf every now and then, even though I am not particularly good at it. Participating in sports not only takes my mind off programming, but forces me not to think about anything at all.
When playing golf, I tend to do a lot better when I am not focusing on hitting the ball or worrying about players behind me. By not thinking, I am ignoring self-doubt and what-ifs (what if I hit the ball too hard or what if I miss the ball entirely).
Sports can be relaxing if they played non-competitively.
I’ve written previously about being a member of Toastmasters. By belonging to an organization that promotes professional growth, you can work on skills to make you a more confident person and encourage you to become a leader.
The organization that you choose to belong to can really be anything: martial arts, a social club, etc. Just make sure it is something that piques your interest and makes you want to participate.
Sometimes doing nothing is the best way to take your mind off things. What’s doing nothing? Anything that doesn’t require you to think critically.
The purpose of doing nothing is to get lost in a book (fiction preferably) or watching a movie or TV show.
I like to look at movies and books as a way to take a break from my life and immerse myself in someone else’s story.
Most professional programmers will program for fun in their free time. While I support this behavior 100%, I believe that programmers need to sometimes break out of the programming bubble and focus their attention on something unrelated.
Besides programming what do you do?
I was introduced to DZone not too long ago and it has now become my #1 resource for reading about the latest programming news.
I noticed a trend of the types of websites that are submitted to DZone and after reading 10 Ways to get an Article on DZone, I thought I would expand upon this and add 10 more ways to get an Article on DZone.
Everybody (including myself) probably wants to work for Google given the numerous benefits their employees enjoy. Does reading about the interview process provide a way to beat the system by knowing what to expect?
Sample Submissions:
You can’t take life too seriously and not everything you read should be either. The funniest cartoon will be one that leaves non-programmers saying “I don’t get it.”
Sample Submissions:
When you don’t feel like looking through documentation or Googling for a particular solution, cheat sheets and reference guides are a useful tool.
Sample Submissions:
DZone has a large Java following courtesy of JavaLobby.org. Although more and more developers of other languages are using DZone, Java stories tend to carry some weight.
Sample Submissions:
Yes, free as in beer. Programming books aren’t cheap and it is great when you can find a free alternative.
Sample Submissions:
Heavy users of DZone are quick to point out DZone’s flaws and offer suggestions for improvement. I’m sure DZone also appreciates the feedback.
Sample Submissions:
Like bad singers on American Idol, bad programmers apparently cannot tell for themselves that they shouldn’t be programming.
Sample Submissions:
Requirements are never static and it only takes one time that you need to rollback changes on your code.
Sample Submissions:
Programmers want to know what others are up to in the field, particularly how to grow professionally and what mistakes to avoid.
Sample Submissions:
Social networking tends to attract the following people: those who have a lot to say and those who want to say more. Is there a better way to bring these two groups together?
Sample Submissions:
Update (12/11/2009): Added links to original content.
More Programming Books Recommended By Readers
Due the overwhelming success of one of my previous posts: 6 Books Every Programmer Should Own, I wanted to compile a list of books suggested by readers.
These books are programming-language neutral and are an effective tool to writing succinct code.
Clean Code: A Handbook of Agile Software Craftsmanship
Robert C. Martin
This book covers the best practices, case studies and first hand experiences with creating “clean” code.
Recommended by: Squirrel Hacker, Noroctal Labs and kodeninja
Refactoring: Improving the Design of Existing Code
Martin Fowler, Kent Beck, John Brant, William Opdyke, and Don Roberts
This book covers the best practices in modifying existing code.
Recommended by: kodeninja
How To Design Programs: An Introduction to Programming and Computing
Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram Krishnamurthi
This book is geared to the beginning programmer and focuses on the design and creation of programs.
Recommended by: Dave
Structure and Interpretation of Computer Programs
Harold Abelson, Gerald Jay Sussman, Julie Sussman
Picking up where How To Design Programs left off, this book explores ways to look at code from an object-oriented point of view.
Recommended by: Dave
If you were the original commenter, please contact me and I will provide a backlink to your website or blog.