Podcast: Play in new window | Download | Embed
This week on CIO Playbook with Jeffrey Hurley, we are discussing what it takes to be a great programmer: being a great team player! The reality of programming is you will work in a team environment on existing systems and solutions looking for incremental improvement for greater business opportunity. Which is great, because you are a contributor to bettering your organization and advancing the business its competes in. How do you become a better team player and a better programmer? I am going to give you eight ideas that you can put to work today and move further down the path toward personal excellence.
Learn to Communicate
Contrary to the images we see on TV and in the movies of computer programmers being loner geniuses. The image that comes to my mind is that off Jimmi Simpson playing Gavin Orsay the “Hackivist” in Netflix’s House of Cards. One of my favorite shows, however, not really relevant to being a great team player, though I could have some fun with the lessons learned from three seasons of House of Cards.
If you are a programmer, you probably had to learn to program on your own even when you took programming classes. The first level of learning to code is often on an individual basis as you begin to understand the requirements of the language you are learning and thus the projects tend to be stand alone and very point focused to aid in the learning process.
The next level of programming is not an individualist’s domain. When you begin solid project work you will need to be a part of a broader team and will be expected to work well as part of this team. Learning to communicate effectively with your co-workers and teammates is vital for a programmer to be successful. I have had numerous times when I have had to work with my programming teams on communication skills, working toward getting everyone to explain their work effectively.
If you can write and speak clearly you will accomplish much more as a programmer. Much of the communication challenges you, as a programmer, will face in the work environment is explaining something that you “just get” and others seem to not be able to follow the analysis and conclusion. This will of course be frustrating because the ideas in the programming space probably come very easily to you, however, it is the ability to share your ideas effectively that will be the measure of your success.
How can you go about developing your communication skills, especially, when they don’t come as naturally as your programming skills? I highly recommend Toastmasters as a safe environment to develop your communication skills and get feedback on how to improve. Communication is something you will have to work as hard on as you do your development skills.
Now that we have discussed the importance of communication let’s move into some more tactile items
Exercise Your Problem Solving Skills
Programming is really about problem solving. Yes, you are coding in a particular programming language, however, anyone who has coded for period of time will agree that most of our time is spent thinking through a particular approach to solving a problem. This is often figuring out how to connect to an API, a database table, a socket, etc.
Problem solving is a skill that is developed. None of us are born with fantastic problem solving skills, however, they can be developed and honed over time. Focusing on the logic behind the program code, especially when you are reviewing the code of others will help breakdown the approach and begin altering your thought process.
Version Control, Version control, Version Control
I cannot say this enough, version control. The only way to be effective both as an individual programmer and as a team programmer is to use version control tools. GitHub is a great start for your projects and if you are working for a company they should have some version control tool. These can include GitHub, Windows SVN Subversion, Apache SVN, and so on.
The steps for using version control are pretty consistent and LifeHacker has a great post on how to use GitHub here and they have a cheat sheet link here. It will take some practice to learn these tools and GitHub has a huge number of users and open projects to explore and learn from. In addition as you are learning your language I suggest working with GitHub as your personal source control tool, it is free for use as long as you are willing to keep your work public. If you want to set up a private environment you can purchase the capability.
Of all of the professions technology is the one that requires the most consist lifelong learning construct from those who chose it. Information technology is dynamic and thus as a developer you should also evolve. Programming languages, software, and hardware are updated regularly and thus to remain relevant (employable) you will want to keep up with the changes in your field.
This does not mean memorization, rather you should have a good system for acquiring information and then cataloging it for future reference. Yes, this does require a knack for reading technical documentation, which can be “dry”.
Learning new languages, technologies, tools, and hardware will give you the ability to adapt to new opportunities and lead innovation in your organization. Grasping the essence of technology is what has enabled you to get to where you are today. Continue to embrace your curiosity and absorption of new information and you will be able to translate these new developments into your organization.
Learn to Quickly Consume Documentation
There are two types of documentation that I am referring to in my statement. The first, is the documentation you place inline while coding. Learning to effectively document your code is needed. I was, for the most part, a self-taught programmer and learned about the importance of documenting my code the hard way. I started out in finance and wrote budgeting systems, which we would rewrite every year and then leave alone for a year until the next budgeting process. Thus I started the new budgeting year and pulled out my code base to begin making the updates for the new season only to wonder what the heck was going on in my code. Effectively, losing critical development time to re-learn what I had already written. There are numerous articles written on how to document your code all of which are beyond the scope of this episode. You can start with stackexchange or stackoverflow.
The second, is documentation on how to do things in the code. It is impossible to memorize every aspect of a particular coding language, however, there is loads of documentation on every aspect of the coding language. Thus learning to quickly locate information will give you the ability to implement complex algorithms through the discovery of work already done on them. Every language has official documentation and then there are forums where you can search for specific needs or ask for help in solving complex questions. In episode #129 I identify numerous forums you can leverage as a programmer.
There is a saying that even the best plans do not survive the first encounter with the enemy. Thus you should be adaptable and flexible if you want to succeed. As I have already brought up, you will need to consume documentation, be a lifelong learner, use version control, communicate, and be problem solver. All of these relate to the need to accept change.
The most common refrain I hear when talking with business leaders is they want a flexible and adaptable organization to meet the emerging demands of the marketplace. As a programmer you will find that no matter how much testing you do and no matter how much testing your users do, when you officially roll into “production” things will change. These changes shouldn’t be critical, as in no one can get their work done, because that should have been tested for. However, often the real world problems can be missed no matter how effective your pre-development analysis was. People forget things and thus there will be capabilities missing when you deliver your code. This is no one’s fault it is a reality of the environments we work in. Thus it is important to accept that change will happen.
In the entrepreneurial space they have a term called minimum viable product (MVP). This is what you should work for knowing that market opportunities in the modern world are limited because without a doubt your organization is not the only one to have identified the potential. Thus getting to market and maximizing the benefit early can be a significant difference maker for your organization. Working with your business partners in this manner will deepen your relationship and improve overall performance. To get there you will have to accept a lack of perfection to gain a measure of speed.
Programmers will most often spend their time working in existing environments. This is as true for the Google, Facebook, and Twitter programmers as it is for the corporate programmers. In 100% of these environments you job will be to add a feature or fix a bug. You have to be able to work within the existing architecture and framework even if you can write a better one or there appears to be no rhyme or reason to it. I can say with certainty you will not get an opportunity to rebuild the entire system.
I still get programmers today who tell me they can write a better solution than the one we have or the one we are buying. My answer is always the same, “Then quit and go write the better system. When you have it I will buy it from you.” The answer I get in return is always the same aren’t you going to pay me to develop it? And the answer is no, that is why I am paying to buy a system or why we are using our current system, because it already exists. In the industry a system that solves all my problems and has yet to be built is called “Vaporware”.
If you want to be a great developer become adaptable and learn to make incremental improvements in existing systems and frameworks!
Finally, my last recommendation is to be creative. The most successful companies set aside time for developers to work on new projects that may or may not see the light of day. The reason we want our developers doing this is to provide them a creative outlet. Some of the best tools in the marketplace started out as side projects. If you are a programmer and you want to increase your value to your organization, take some personal time to explore for the sake of exploring and you may find you have invented the next great opportunity for your business.
In addition to setting aside time for personal creative time the use of hackathons is another creative outlet. A hackathon is an event that focuses on a specific problem for an intense couple of days to a week. Usually a number of graphic designers, interface designers, and software developers will come together and work on a software project. Venture capitalists tend to be the most common sponsors of these events though regular companies are adopting the idea more often as well. These events are powerful ways to develop new software and technologies and explore innovative ideas rapidly and at a fixed cost and time.
Slinging buzz words, arguing frameworks, or languages was not my objective in this episode. There are numerous forums where we can argue the nuances of development environments. What I hope you take away is that programming is not just knowing the programming language, it is about solving business problems. Programming is a tool to get a job done, pick the right tool for the job and often that means working with the tools you already have in your repertoire. Yes, we have to continuously learn and grown, that is for your personal projects or the throw-away projects that solve point problems are for. Do not use your learning path to experiment with your organization’s mission critical systems. But do make time for having fun learning the new technologies and testing them with real business problems.
Photo credit: Iversen, Daniel. “Top Programming Languages.” Flickr. Yahoo!, 31 Aug. 2014. Web. 21 Mar. 2015.
Dachis, Adam. “How the Heck Do I Use GitHub?” Lifehacker. Lifehacker, 13 Feb. 2013. Web. 21 Mar. 2015.