When I was growing up, Software Engineer and Programmer seems same term to me.
Now after working a couple of years as a Software Engineer I think I can distinguish between the two terms.
Programming is a small part of Software Engineering.
Software Engineering include
- Understanding Requirement
- Designing Software
- Organising code
- Testing Software
- Collaborating with other software engineers
Writing good code is essential skill for being a Good software engineer but you can not neglect others skills as they are equally important for building good product.
I read something similar in Software Engineering subject during my graduation, but none of the above make sense than. I think reading about software engineering is not the great way to learn about it instead build a lots of software and you will get a grasp of software engineering.
What text books do not tell you about Software Engineering is :
- Understanding requirement is easy but always keep in mind that its going to change in future.
- Question everything, until it make sense to you.
Designing Software & Organising Code:
People don't pay much attention about organising code when writing software but its not healthy for software health. When Software grows old, non-organised software is difficult to take care off.
Keep It Simple
To check if you are doing it right, think with perspective of a person who does not know anything about your software. Now if you can still navigate through the software without anyone's help than you are doing it right else you need to step back and make your software simple enough to be understood by all.
Nobody can teach you the importance of testing until you realise it and it may be too late when you realise its importance, therefore its important to learn from the mistakes of others.
Like all other engineering department , software engineering is also about building product. Civil engineer design bridges, buildings and then act upon and make it happen. Similarly we design software and write code to make it happen. But the main difference is the change in requirement we get every now and than. People take it for granted that changes in software is not a big deal.
If your software is not automated tested than your software will surely break in future with all the inevitable change in requirements coming.
Collaborating with other software engineers:
Text books don't tell you that you will be working with other people on same software. Collaborating with others is essential and you can not run away from it. Collaboration helps deliver better product if people working together are passionate about the product.
Its always better to have different opinions and healthy discussion on possible solutions.
To all Software Engineer out there, lets collaborate and make something awesome. cheers :)