Software Engineering vs. Computer Science
This article is designed to show how software engineering (SE) is different from computer science (CS), and what is needed to become a good programmer, regardless of the programming path chosen.
First, let’s identify what a software engineer is supposed to do. Helpfully, Wikipedia provides a number of definitions from several different sources. Basically, it comes down to using engineering principles in software development.
How does this compare with computer science? CS is figuring out how to make a computer do something — specifically how to program software to do a variety of things with computers. It also covers the theoretical aspects of computing, allowing the CS graduate to develop new solutions to computing problems.
Where scientists push the boundaries of knowledge by designing and testing theories, engineers take what is already known and do great things. Engineering takes current scientific principles to design and build “something.” In SE, that “something” is a computer program.
Basically, SE takes the programming aspect of CS and doubles down on it. Engineers need a broad scope of knowledge, and to be able to incorporate a variety of different disciplines to create the final product. Scientists tend to focus on a narrow, but deep, area of knowledge.
Another significant difference is that engineers typically earn degrees that are accredited by the ABET (Accreditation Board for Engineering and Technology). This guarantees that graduates have a minimum level of engineering and applied scientific knowledge, much like having a technology certification. If you want to prove your ability, you can earn a variety of professional software development certifications from IEEE.
This comparison shows that, as an SE, you will need to know how to program but in a particular, applied manner. Recognize that your education only provides the groundwork for this. All a college education is supposed to do is provide a base level of knowledge and education about a subject so that students can question the status quo and gain the skills to perform their own learning. During your education, you’ll only know the basic principles of your career field. It won’t be until you enter the job market that you will see how those principles are applied in the real world.
So, to the meat of the question: ”How do I improve my coding skills to be a great software programmer?” First, I recommend that you find something that you are passionate about that can be coded and use that as your motivation for learning to code better. Personally, I self-learned Python after learning C, C++, and Java in school. I hated those languages to the point where I didn’t want to be a programmer. But I still had a desire to learn how to program (my education didn’t really do that). When I learned that Python was a good hobbyist language, I decided to try it.
Because I knew just reading books wasn’t going to keep me motivated to finish, my impetus for learning Python was to recreate an old table-top role playing game in electronic form. That simple end-goal kept me going when I didn’t understand what was going on or how to do something.
If you are like many college students, you probably haven’t done a lot of programming for personal projects. A lot of students I’ve met simply do the homework and cruise through the classes until they get their degree. The best ones, however, have a personal project that they use to practice what they have learned. Completing a homework assignment doesn’t necessarily mean you understand what is going on. When you are on your own, with no guidance, you have to really understand your code and figure out how to best write the program and troubleshoot it.
If you can’t think of anything for yourself, then ask friends or family if they have any programming projects. This might be an even better option than a personal project, because now you have to work with a customer who may not know exactly what they want but is demanding anyway. This will help you learn how to deal with non-specific requirements, expansion of software requirements, and the basics of project management.
You can also look at participating in Open-Source projects that not only help you grow as a programmer, but will also teach you how to work with other programmers and the bureaucracy of coding projects. You’ll also gain experience by having other people reviewing your code and providing constructive criticism. Some people find out that they don’t handle criticism very well and either learn to deal with it or find another profession.
Ultimately, being a better programmer means you have to understand how to program. I don’t consider myself a programmer by trade. I have a BS in Computer Engineering Technology, a MS in IT Management, and two years towards a Ph.D. in Information Systems. The only reason I really know how to program is because I wrote my own Python programming book series. Despite the lack of formal Python training, this knowledge was sufficient enough to lead to two professional programming jobs and two instructor jobs.
To write those books, I had to delve into how programs are written and how the language works. Yet, even now, I’m still learning. Every job I’ve had, whether as a programmer or instructor, has taught me more about different programming aspects than I knew before.
Being a great programmer, regardless of whether you are a software engineer or computer scientist, is a process of continuously learning how to be better and building upon the knowledge you have in order to make new things. As long as you have confidence in your abilities and you continue to learn, you will do all right.