We’re (finally) re-launching our developer interview series, and are happy to start it back up with Ken Cochrane, Site Reliability Engineer at dotCloud. You can find him on Github, Work for Pie, Twitter, and at KenCochrane.net. Enjoy!
Who are you, and how did you get started programming?
My name is Ken Cochrane and I’m a site reliability engineer for dotCloud. I started programming when I was in grade school, my dad bought a computer (don’t remember the model) that only had a few programs on it, and he bought my sister and I a book that had a bunch of BASIC programs in it. We would sit there and copy the programs out of the book and then run them to see what they would do. When we got tired of the program, we would start playing with the source code to see what would happen when we changed some things. We got pretty good at it, and before we know it we were writing our own little programs. This got me hooked on computers and programming and the rest is history.
How and why did you start working on open source projects?
When I first starting working on open source projects, I did it mostly to learn. I learn best by example, so when learning a new language, I like to look at software written in that language to see how to do it right. The best place to do this was with open source projects.
As I get more and more comfortable with a project, I try and find a way to give back to the project, as a way to thank everyone who has put their time into the project already. A few ways you can give back easily is to write some documentation or a tutorial, donate some money, or fix a bug. Fixing bugs is a great way to learn the code, and give back to the community at the same time.
What kinds of projects do you work on at dotCloud?
At dotCloud we just open sourced a project called Docker, it is Linux container manager written in Go. Docker is based on the closed source code that currently powers the dotCloud platform, which is written in python.
When we originally started working on it, we knew we would use it, but as we started talking with other people, it became clear that others had a need for this was well. We worked up a prototype and gave a lightning talk at pycon US this year and the response has been crazy. There was so many people who wanted to play with it, we decided to open source it early, and now we have people from all over helping back the project even better then we could have imagined.
If we would have kept Docker an internal project, there was no way it would have been as good, or have moved as quickly as it has. This just shows you the power of open source, and how cool it is.
What open source projects do you admire or recommend?
I really admire Django, and how they are able to produce really nice code, with very little backwards incompatible changes, it makes it so much easier to upgrade applications. The best part is that they have really nice documentation, so it makes it real easy for someone to learn compared to other frameworks.
The other project I admire is the Linux kernel, how Linus manages it, I have no idea, but it is really impressive. Every new release is better then the last, and it is only getting better.
Any advice for a novice programmer who wants to improve?
I would recommend starting with a language that is easy to learn. Python is great for this, you can do a lot without having to explain too much. Once you have your language, you should pick up a book, or find a tutorial online that will explain the different parts of programming. If you find a good book/tutorial, they will do a good job of showing you something a little at a time, so that you are not overwhelmed.
I personally learn best by example, so if you know someone else who is a programmer, ask them to help you write a simple program together, and then use that program as a guide for when you are ready to write your own program. Make sure you write lots of comments so when you need to reference that program you will know what it is doing, and why.
How about advice for more seasoned developers?
The best way to get better is to learn is from experience, and the best way to get lots of experience is to write code. Here is something I did that was pretty helpful.
I had a program I wanted to write, so I wrote it, it took about 4 hours. When I was done, I sat back and asked myself, if I was going to write this again, what would I do differently. I then started over, and wrote the program again, I got it done in 2 hours this time, and it was much nicer and cleaner. I did it one more time, and then compared my first program to my current program and noticed how much better the code looked, and how much I learned in a short period of time.
This will only get you so far, so you will need to learn from others as well. If you can take a class, or read a book, that is great as well. One of the better ways of learning from others is to look at their code, and what better way then to look at source code from popular open source projects, it will show you what is considered good programming techniques usually from programmers much better then you.
After you do all that reading and learning, go back to your program you wrote, and see if you can make it better, normally you can.
What technology gets you excited these days?
It looks like concurrency is becoming more popular these days, it will open up a whole new set opportunities, especially on the web front, with web sockets.
And your preferred language/stack?
My favorite programming language is python, it has a really clean syntax and the core language has a lot of things built in, that make it really powerful. It also has a great community of people around it.
What advice would you give employers who are trying to hire folks like you?
I prefer an engineering driven learning environment. A place where you are free to try new things, that will make your job/work better. If you let people learn new things, they will be happier then having to use the same old tools day in and day out.
What’s the one mistake employers make that they shouldn’t?
One common mistake is to box in a developer, put up all this red tape and process that limits the developers ability to do their job to the best of their ability. Give the developer the freedom to do what is best to get the job done.
Some companies are clearly doing it right. Which ones (besides dotCloud, of course)?
Google, Rackspace, Netflix, and Github are all great companies.
What’s your favorite app/site/project right now?
GitHub.com, it makes it easy to build up a community around an open source project, and for people to work on projects together with minimal effort.
What’s the one thing (besides programming) that you love or would love to do?
Travel, there are so many cool places in the world I would love to visit.
Our thanks to Ken for doing this. If you’d like to be interviewed for the series, email firstname.lastname@example.org and let us know! If you haven’t yet checked out Work for Pie, you can do that here.