Software Engineers + Computer Programmers = Successful Team
Software Engineers + Computer Programmers = Successful Team

Software Engineers + Computer Programmers = Successful Team

Surely there is no border between Computer Programming and Software Engineering lands and sometimes we can use these terms interchangeably. Also, there are other terms referring to these kind of jobs to make a difference between people working for software companies. For example Junior Developer vs Senior Developer, Coder vs Developer and Software Architect vs Programmer. We can see people use these titles to introduce themselves and sometimes use them incorrectly. On the other hand, companies use these titles for hiring people for their vacant positions. Moreover, there are so many people that have characteristics of both groups and they are able to change their role on daily base. But, all of these are not enough to not talk about differences between Software Engineers and Computer Programmers.

During these years, I worked with people that can be classified very well in these two groups, Computer Programmers and Software Engineers. Furthermore, I worked with people who could not be classified and they are something between these two groups. On the other hand, I found these two groups absolutely essential for a software development team and they complement each other very well. Based on complexity of the project at hand, there must be a adequate amount of them in a team to be successful. Lack of people from one of these groups may cause big problem for the project, so, hiring the right employees and appropriately grouping them together is a crucial task of managers of a software company.

I tried here to give you some signs of people in each group because I found it helpful to know that we are in which of them, as and employee, and which type of people we need to hire, as and employer. Furthermore, it is helpful for manager to form effective development teams with knowing each personnel in this way and grouping them together based on the project needs. Maybe I am biased towards one of these groups because I see myself in one of them.

Top-down vs Bottom-up

When you assign a task to a Software Engineer they often think top-down. They start by analyzing and designing. They love white-board and markers. The try to break the task to smaller sub-tasks. The try to create the software iterative and incremental but, at the same time, they are good at deciding what feature should be developed first. They could find a good point, for example a critical sub-system, to start development. They tell other people what to do next but they never forget the big picture of project. They focus on system, components, their integration, and how to make it scalable, reliable, reusable and high performance.

In contrast, when you assign a task to a Computer Programmer, they often run a text editor or IDE on their PC. They start by creating a bunch of code that compiles very well and do something very basic. Also, they create some functions or classes without actual implementations. They love keyboards. They always try to code something very fast and often they put as many feature as they can in their code from beginning. Don't ask them to start a big project from scratch. They could not find a point to start. Just assign a programming task to them and be sure that the requirements are clear to them because they don't like to waste their time doing something useless. Just tell them what to do next and wait some hours to get your working code. They always focus on code, code quality, how to produce code fast, and how to use most of their programming languages features.

Generalist vs Specialist

Software Engineers are kind of generalists. They know a little bit of anything but have not through knowledge of details of all the technologies, frameworks and libraries they use. Also, they have an intention to generalize solutions. When they have to create something new, they think about how to make it general so it can be used in other projects. The can see similarities between systems and sub-systems. They avoid using a special programming language when introducing themselves.

Computer Programmers are keen to know any details of their programming language or technology. They know the details very well. For each programming task, they have done something like that before so it is easy for them to copy and paste the old code and change it to something satisfying the requirements. They can see differences very well and they focus on how to alter a code to make it suitable for new usage. They often use a programming language name when introducing themselves.

Creative vs Productive

Most of the time, a Software Engineer do nothing related to creating real programs. They think a lot and always try to change something, for example they have some ideas about using a new technology in the next project to solve scalability issues. They could not do something that is time consuming and have so mush details for a long time. They always try to not accept these kind of task to have enough free time to do something new and exciting.

Most of the time, a computer programmer do real coding. Most of the time, you can find them just behind their desk, typing something with their keyboards in their text editor or IDE. They are real power of a software development team. They commit huge number of code every day. They can code almost 8 hours every day. Don't ask them to change their preferred technology and programming language very frequently.

Fundamental vs Fast

Software Engineers often try to solve a problem fundamentally. When something must be solved, they think about it all the day, every moment until they found a solution that may solve the problem. They encourage their coworkers to try new solution. Sometimes the solution is not good enough and they must start thinking again. They are not good at code maintenance and debugging. Sometimes they misunderstand the problem and instead of fixing a small bug in code, waste their time changing their design.

Computer Programmer often try to solve a problem fast. They immediately start coding and debugging and testing ideas to find a working solution. They are good at code maintenance and finding bugs. They don't try very hard to convince other people. They believe that a working code worth thousands of words.

My Recommendations to Companies

If you are in charge of a company with complex projects and you have to create reliable, scalable, extensible and high performance software products and you have hired some programmer, really good at the programming language, say Java, but you suffer some problem in delivering quality software in expected time and with expected budget, hire some experienced Software Engineer and make sure they now how to solve your particular problems. Trust them and let them to tell you how to solve your problems. But don't inspect them to code 8 hours a day for you; It is a waist of time and money.

On the other hand, if you are in charge of a company with simple projects and projects that seems like your previous projects, and you know how to solve your problem based on your previous experience and knowledge, stop paying for new Software Engineers, and hire expert Computer Programmers that know very well how to use their keyboards to create working programs. Just make sure they know the details and they are up to date about the programming language you are using. Be sure that they love their coding job and create a comfortable environment for them. Respect them because they create a huge amount of programs for you. Remove anything distracting them and let them to be focused on their programming task at hand.

Conclusion

To sum up, a Software Engineer is a generalist who solve the problem top-down and fundamentally, and is good at creative tasks. A Computer Programmer is a specialist who like to start bottom-up and fast, and is good at productive tasks. In my opinion, a development team needs both of them to be successful and the complexity of project determines their ratio.

It's critical to know that we belong to which group or we match more with which group and also to know this about our colleagues. It helps us to manage our expectations and to work with them effectively. It is also helpful when hiring new people and forming new development teams.

These are just my opinion and your comments are welcomed.

要查看或添加评论,请登录

社区洞察

其他会员也浏览了