The creative programmer

12/08/2014

If I were to ask a non computer scientist to design a program to sort a large list of numbers [e.g. 43, 2, 10, 7, 87, 0, ...], they would probably design a program that resembles sorting a deck of cards, like this; pick up the first number in the list, place it in a new list, pick up the next number in the original list, place it in the correct order in the new list, and so on, until all the numbers in the original list were placed in the new sorted list. They probably would not come up with a scheme that randomly selects an element in the list with which to partition the list in two, moves all the elements that are smaller than the "pivot" element to the left of the pivot element and moves all elements that are larger to the right of the pivot element. And then does the same partition and move operation to the left sub-list and the right sub-list on and on until the whole list is sorted.

The former method has been coined in computer science as the Insertion Sort and is one of the simplest sorting algorithms in existence. The later method is known as Quicksort and is one of the more complex sorting algorithms but it has better performance for very large lists. Early computing was very concerned with sorting, therefore many came up with creative solutions to the problem of how to sort lists faster.

Programming is about problem solving, e.g. how do you search through the internet for a particular term, how do you automate the process of signing up for health insurance, how do cost-effectively handle seasonal and/or random spikes in demand for a particular piece of content on the internet, etc. When attempting to solve these or any types of problems, the best programmers are the ones that can think outside the box. You often have to get creative and/or inventive. Conventional thinking in problem solving scenarios often does not cut it as you are boxed in by those conventions.

I recently worked on a project in which a very intelligent co-worker came up with a scheme to use IBM Websphere Message Broker, which is a tool for enabling communication and transformation of data between heterogeneous systems, as a simple web server in order to avoid having to spin up a web application project. This got me to thinking; how does an up and coming developer go about in increasing their creativity in problem solving? Here are some of my thoughts in that area:

1.  Understand what a component / tool / library / technology does, how it works and what its properties are. Not just how it is used or how to use it. Regular developers understand the latter, great developers understand the latter. For example a regular developer may know how to use an XML parser, but a great developer may have a deeper understanding of how it works and use that knowledge to re-purpose it or use its underlying concept in another project

2.  Question assumptions / question everything. Ok maybe not everything, but ask more questions and certainly question assumptions. Some may hold up and others may fail. Still, you dared to challenge the status quo and that could pay dividends.

3.  Allow yourself to dream. Don't dismiss thoughts or ideas early in the process. E.g. "what if we could have a natural sounding conversation with a personal assistant or other apps on our phones", "what if I can incrementally push the results of a query to the client instead of having them pull it".

4.  Build on others ideas. The best ideas aren't always original, neither are they always revolutionary. They may be evolutionary. You can even combine two or more ideas into one.

5.  Test out little ideas. Build little prototypes; these will help you fully process the idea, encourage you to continue with a good idea or to dump / refine a not so good idea, and help you gain traction if you have to sell your idea to someone else.

6.  Don't be afraid to fail. This one needs no explanation.

This is by no means an exhaustive list, just a couple to get started. Here are some general thoughts on creative thinking skills from palgrave.com. Thanks for reading!

You Might Also Like

1 comments

  1. Very inspiring and informative...it has made me think about my life.

    ReplyDelete