Advise to software people

Many programmers believe software knowledge is programming languages or computing technologies such as: Java, C++, Linux, Windows NT,.Net, etc. Knowledge that allows programmer to build software that can be run in a computer. They believe that if company hires them to write program in Java, they have to know something about Java and if the company wants.Net then they need to know.Net and that is all they have to learn. Since programming languages and technologies change often, programmers must keep up with these changes because what they know today can be obsolete within the next few years. However, there is another kind of software knowledge that does not change much and last a long time called "Software engineering disciplines" and this is the key different between computer science and software engineer training.

Software engineering disciplines are the essential knowledge that people who work in software field must have regardless of the technology or programming languages. These “essential knowledge” are the ability to understand the business strategy, establish requirements specification, architect a computer system, design interfaces between hardware and software, implement and verify that the implementation meets the original requirements and understand the quality attributes etc. A good software engineer must have a broader view of software business than just programming languages. Today, it is easy to find people with programming skills, but finding people with the necessary software disciplines to guide a project to success is more difficult.

According to several studies on salary in the software industry, there is a growing view that there are many programmers in the world already, so the salary of programmers is almost stand still or slightly declining in the past few years. Today most U.S and European companies do not hire programmers anymore because it is much easy to outsource programming works to China and India where programmers work for a fraction of what people in U.S or European requires. What the software industry need is a shift from programming skills to “business-technical skills” and often these skills demand higher salaries because they are the ones who set the direction and guidance for the project's needs.

Many of you may think that because of outsourcing, programming jobs are good but this is short term thinking. If you only following the global trend, you never get ahead because today you are competing in outsourcing works with India and China but in the next few years you will have to compete with other people in S. America and Africa where they also have programming skills and require much less salaries. Following are my advise to people who work in the software industry:

I recommend that you need to get ahead of the trend, not to follow. To be successful, you should move up into more business-oriented software engineering positions such as systems analyst, requirements engineer, project manager, or systems architect to prepare for the next trends where companies will outsourced these positions. By having both programming skills and software engineering skills, you are positioning yourself to take advantage of both current and future trends rather than just following others. Of course, programmer can not just become a software engineer overnight. The transition takes time and requires the right experience and learning to be successful so you will need additional trainings.

If you are students in computer science and will graduate next year, your chance is good in finding works in the outsourcing industry but you should not expect good salaries as the competition is high and will be much tougher as more and more countries are moving in this business. However, if you take additional trainings in "business-technical side" of software engineer or information system management, you will have much better chance and could demand better salaries because today there are few people having these skills.

If you already worked in the industry as programmer, you could try to learn more about “Business –Technical” areas such as design, architect or management. You could learn about software project management and business analysis works by taking some short courses and apply the knowledge into your project. Over time, your managers will recognize it and give you more responsibilities or maybe a promotion. Nothing is better than actual experiences. The more you know the more you will realize that you need more training because learning is continuous and should never stop.

The key to succeed in outsourcing work is to understand customer's needs and be able to solve problems for them. I also recommend that you take requirements engineering training to work directly with the customers to know their needs. Your manager will be happy to find out that you are capable of identifying problems and solving them quickly and efficiently. The better you can work with customers, the more you will learn about their business and the more you know about business, the better you can improve your skills. As a requirements engineer, you work with project managers, architects, and customers to identify what must be done within time, cost and quality constraints, all of which are critical elements that can make the difference between success and failure. As requirements engineer, you will work with customers and it can be difficult to identify issues when you can not communicate well. I recommend that you take language courses, especially in communication as you have to discuss with customers directly. This is the chance to show management that you are valuable to the company.

If you do not like to work with customers but prefer technical skills then you may want to take additional training in the architecture areas. This is position that is highly technical involving key decisions to address how the new system will fit into the organization’s overall infrastructures. In order to be successful, the architect needs to understand and control the elements associated with the utility, cost, and risk factors of the proposed solution. System architects must make decisions how to decompose and isolate the different components that will be required, how to fit these components into the existing infrastructure, and in what order to implement each component. It can be a disaster to implement a system that isn’t compatible with the organization’s current systems.

Another skill in high demand is software project manager. This job is responsible for hiring the staff, setting the schedule, and keeping track of the progress through every phase of development. This person is also responsible for assigning the work, dealing with everyday problems affecting that work, and making sure each programmer is carrying his own task. The project manager can best carry out this function if he truly understands the work he is managing. The project manager must be both a "people person" as well as a "technical person" in order to succeed. This individual must work with technical and non-technical staff at every level of the organization in order to succeed in his goals. Additionally, the project manager has to manage his team effectively to produce the desired product on time.

Today, to get ahead you need to understand business and how to apply technology to make it better. Being able to follow management directions is good but being able to make your own judgments without a lot of support is more important. The key to success is to differentiate you from the others. I have advised you to improve your skills in acquire advanced knowledge but there are two important skills: communication and leadership.

Everyone can learn a foreign language but communication skills take much longer to develop. Communication takes the right mix of experience and training to become effective. Many customers do not understand the technical to describe their requirements in detail and many technical people do not understand the business processes because they can not communicate with the customers. Learning to communicate, and having the patience to gain knowledge from the customers, is an essential skill that many people don’t have.

Leadership skill is also not something you can learn overnight. You must start with an active attitude, instead of asking your management to help with a problem, take it upon yourself to find the answer to that problem. Before too long, you can be the one who others in project come to ask when there is a problem to fix or a new project to complete. Gaining problem-solving experience not only improves communication, it also improves your chances of moving into leadership positions.

The best way to moving up at any company is to let management know what you are capable of. Be able to answer customer's questions, solve problems, accept more responsibilities, and share a solution is a sure way to distinguish yourself from being "just a programmer" to the top candidate for management promotion.

Sources

  • Blogs of Prof. John Vu, Carnegie Mellon University