Practice Makes Perfect
The best part about the foundational items of programming is that they cannot be avoided. Every day you code you will get more comfortable with many, if not all, of the items listed. Over the years you will write thousands of loops, create millions of variables and use all sorts of methods to read and write to files. The only worry in dealing with these foundational skills is automation. An automated solution is not going to be useful in building your skills.
There are code generators and IDE utilities that help take a lot of the work out of these items. They can make your programming skills deteriorate through lack of use. Of course, regularly working in new languages will force you to go back to the basics. This repetition will strengthen your core knowledge as you grow its breadth. Thus, we have a perfect cycle.
Learning a new language is best accomplished by mastering the core concepts of a language. All coding environments share these core concepts to some degree. So, every new language has us use a core skill in a slightly different way. This step reinforces and extends our mastery of the core concepts. Thus, leading us to be able to master new languages faster. Then the cycle repeats.
Targeted Growth
The options for maintaining and building your skills are almost endless. With that in mind, a good question is “what is the best way to proceed?” In answering that question, allow me to start with a step back. We only have two paths for growth, wide or deep. Therefore, we have the option of learning more about a language and mastering it or expanding our skills into other areas. Both of these options will move us toward the goal of being better developers. Which option to choose varies by where we are at in our progress.
I think of the best path for growth as a sort of stair step. We grow out and deep, out and deep. Sometimes the out portion is a new language. However, this move can also be taken within a language. I think an example will help for this concept.
Introducing Chris The Developer
Chris just graduated with a four-year degree from a respectable school. There was a balance in the classes taken although the focus was Java for most classes. Along the way, Chris learned C, C++, C#, shell scripting, did a little web development and had an introduction to SQL. Foundational concepts like those listed above were all covered although mastery has not yet been achieved. As we go through becoming a better developer Chris will be our playing piece for describing situations. This will make examples easier but do not kid yourself, you can place yourself in these situations as well by making adjustments to the skillsets mentioned. It does not matter where we start. The goal is the same and, by the way, we will never achieve it since it changes every day.
Chris landed a job at the local widget manufacturer in the IT shop. The team is small with only a few developers, a couple of infrastructure people, and some support staff. There is a lot to be done so Chris is asked for input on where to begin.
The Early Focus is Breadth Over Depth
A degree has set Chris up with a good foundation for coding at the cost of having many skills that are in demand. Java is a good start but with only a little database, web, and C# experience those are all areas that can provide a big payoff with a little effort. Almost every organization needs database and web skills these days so it will be easy choose tasks that utilize them. This is a step deeper into these skills.
A step out into a new set of skills could be taken, but without solid experience in these core skills that step is a larger one to take. Chris can build on that base of knowledge gained in school to increase web and database skills. Thus, Chris will get better every day by adding experience in both of these areas while also learning more about each.
Start Simple Then Improve The Process
A key to doing this right is to avoid the trap of one year of experience times the number of years on the job. There are always repetitive tasks and challenges in IT. For example, Chris is asked to create a report of customer activity each week. One approach is to look at the data in a browser application like DB Visualizer or Toad, copy that to a spreadsheet, run some calculations and then enter them into a report format. This approach would take time every week and Chris would become very good at the steps mentioned.
That does not create a useful skillset beyond this task. Instead, Chris can see the steps that repeat each week and automate those through a saved query with parameters for the date range. Then add a report template that loads its data from the query results. After a little bit of work, Chris has a solution that does not take up anyone’s time after it has been created. This allows Chris to move on to another problem and continuous self-improvement.
As you can see, building your skills requires effort. However, proper planning can incorporate this growth into your daily routines and limit the drain on your work-life balance.