Learn a new programming language

In the world of software development there’s always something new popping up. New languages, frameworks, operating systems, databases, you name it. The challenge for a developer is to stay on top and ahead of these new technologies. It can be very tempting to give up and not learn anything new, but I want to propose that learning new things like a new language or framework can be very helpful!

Learning begets learning

The more you practice the art of learning something new, the easier it is to learn new things. This sounds like tautology, but it is true. Continue reading

Deploying with Gitlab’s Continuous Integration

Have you seen the Gitlab Continuous Integration feature? It is pretty sweet. All you have to do is include a special yaml file and then when you check in new code it will build/test it for you. As awesome as that is, can it also deploy your code? The answer is YES!

Getting started

The first step is to create a .gitlab-ci.yml file in the root of your repo. This file is seen by gitlab and is used to configure a Continuous Integration (CI) server that will build and test your code. Continue reading

Coder’s block

Writer’s block is a problem that writers have when they simply don’t know what words to put on the page. Developer’s have this same problem, I like to call it coder’s block. Where does it come from, and how do we get rid of it? Let’s dive in.

Where coder’s block comes from

My theory is that coder’s block is the result of burn out. When you are so close to your work for so long burnout becomes a serious problem. At first you will start to make “simple” mistakes more frequently, and eventually most things start to take longer to finish. This all builds on itself and starts to erode your self confidence in your work.

Once your confidence is being questioned it is every easy for things to snowball to the point where you are afraid to write code for fear of it being another broken thing to fix. At this point you are deep in the throes of coder’s block. Nothing seems to work right, and it seems like it never will.

The worst part of this is that most of the damage is self inflicted. 

I’ve found that a lot of developers are unnecessarily hard on themselves. If given the chance to stand back and look at the situation most would recognize that things really aren’t that bad.

How to battle coder’s block

Identifying coder’s block is definitely the first step in recovering from it. Once you realize that it is happening the first step is to stop and ask yourself how you got to this point.

Maybe its a project where things are going well. Too many bugs are coming in, and there’s not enough people to work on it. We’ve all been there. Situations like that tend to silently spiral into worse and worse condition.

The next step should be to take a small break. Even if its just a walk around the building, getting physically away from the problem helps so much. Getting up and walking around, or even better doing some exercise, can help distract your brain from the situation. This allows your subconsciousness to process things. Its not that this will suddenly allow you to see what code to write, rather this will allow your brain to decide what the best course of action is.

For example: It could be that it is just a matter of re-prioritizing what you are working on so that you can tackle the root cause of the problems. Taking the small break to let those thoughts percolate can help boost your confidence by letting you think of a clever solution to your pain points. And isn’t that the best part of being a programmer?

If the problems are bigger then it might be time for a break. When was the last time you took a vacation? When was the last time you went more than 24hrs without touching a computer? Now might be a good time to do that!

Other tactics

Sometimes we just get blocked and we either can’t take a long break due to deadlines, or there just doesn’t seem to be any root cause. In those cases I’d recommend trying out these ideas to see if they can break up the logjam that is causing the coder’s block.

  • “What would this look like if it was awesome?” — This is an odd one that I’ve had a lot of success with. When I’m faced with code that is so ugly I’m scared to touch it, I’ll ask myself that question. It usually leads to some out-of-the-box thoughts that might not be the right or final answer, but usually lead me to something new and interesting.
  • Learn a new language/framework — Sometimes we are just in a rut. Forcing your brain to tackle a new challenge can be really invigorating.
  • Read some fiction (sci-fi specifically!) — I’ve been surprised by how motivating a good sci-fi story can be. Think about it, in those books the future is wide open and anything is possible. That is also true in our real lives, but sometimes it is hard to see. If you need a recommendation to get you started check out Accelerando. It is awesome and mindbending.
  • Work in a different physical location — This is a timeless tip. A new environment will shift your mindset just enough to make you think a little different. Go find a coffee shop or some other location. Even if you get zero code written, just being out and about can help you so much.

What are some of your favorite ways to get around coder’s block?

Doing the work

Sometimes it is painful.

The deadline that is looming closer. The code that just won’t work correctly no matter how much you cuss at it. The simple library upgrade that wrecks your program completely.

But it has to be done. And you need to do it.

At times like this you need to remind yourself that nothing great was ever created without some struggle. Everything that was ever created that is considered good involved some one doing hard work to make it happen. You are no different. If you are going to make something good, you will be working hard on it.

Take this blog post for example. I am writing it at the last moment. Way after it was scheduled to be written. Why? I could just give up and not publish anything this week. The world would continue to turn, life would go on. But I will know that I missed a goal. So I sat down and I am doing the work of writing this post.

You should too. When things are hard, do not give up. Do not quit. Do the work. Even if it is not your best, you will be better for having done it.

If you need help with this idea, I highly recommend reading The War of Art by Steven Pressfield. He describes the pain you are feeling, and more importantly he tells you how to get rid of it.

If you are curious what the secret is, but don’t want to read the book, I’ll help you out and tell you the answer. DO THE WORK.

That’s right, do the work.

No matter what the task is, set your resolve to get it done. Then go do it. Now.

It might not be pretty, but at the end of the day it will be. And that is more than most people can say about the things they have struggled with and abandoned.

Now, I’m going to go and follow my advice and do the work.

Adventures with minimongo

python minimongo is the best choice

Too many choices! https://flic.kr/p/5zVmy5

Over the last few years I have wound up using mongo as my data store on several projects. In fact, it has been a while since I have written any SQL! For my latest project I again reached for mongo to hold my data, but this time I decided to use the Python minimongo project as my ODM (Object Document Mapper).

What is minimongo?

An ODM is to no-SQL what an ORM (Object Relation Model) is to a SQL database. For Python, minimongo is a small lightweight wrapper around mongo. Minimongo is built on Continue reading

More Experiments: Traffic thoughts

The greatest waste of time ever invented by humankind is sitting in traffic.

My traffic thoughts? What a waste of time.

Think about it. You are literally just sitting. There are very few things you can realistically do other than just sit. Talking on the phone is possible, but who wants to talk to someone who is stressed because of their sitting in traffic? Reading, exercise, playing… all of these things are unavailable to you because you have to wait for the person in front of you to move up a half a car length.

One day as I found myself sitting in this situation, I had an inspiration about how I could turn this to my advantage. I would try my hand at video blogging.

After a quick MVP video or two, I invested the $20 in getting a phone holder. Now when I get stuck in a traffic jam I hit the record button and bust out “traffic thoughts”.

My thinking is that I just pick a topic (usually inspired by a podcast I just listened to or something I’ve read recently) and just go for it.

I have no real set objective for this experiment. I record them when I hit traffic, and then I’m speaking I try to just go from the gut. When I get home I upload the videos to YouTube and do some minimal editing of the description.

Things I’ve learned while doing this:

  • Having a list of ideas (usually just a word or phrase) is absolutely necessary. If nothing else, it will keep you from repeating yourself.
  • As soon as you want to record something, traffic seems to disappear. I wish I understood this phenomenon. 🙂
  • You might think you could rant for hours about a topic. I have found that if I talk for more than 2 minutes that I feel less confident about my stance on the topic.
  • Its an interesting way to pass the time when you are literally sitting in traffic.

Be sure to check out my play list with all of these videos: Traffic Thoughts


Finding a development job you will love

Finding a development job you will loveRecently a friend asked about where to find some employees for a company she is working at. Some others had suggested the usual job sites, but when I looked at them and had a flash of insight: These are jobs, but will she find the right people there? Where do the good developer look for new jobs? How do you find a development job you will love? Lets investigate!

The usual job sites will get you the usual results. To get extraordinary results, you need to work outside of the box a little bit.

Where the wild things are

People like to hang out with people like them. This fact can lead to bad things, but it can also lead to great communities. Key #1: Find the people you want to be like, find where they are, and hang out with them.

Continue reading

Why flask

“Why flask? Why not Django?”

Recently I was asked this after introducing a new subsystem at work. Originally part of a monolithic Django app, this was new micro-service was one of the first pieces to be split out on its own. I had chosen Flask to be the web framework, and now it was time to explain why…

I’m not anti-Django, but…

Continue reading