Software Engineering is a discipline much maligned by a fair number of people. Actually - what bothers most people is the idea that developing software is an 'Engineering' practice because it places software developers on a level playing field with civil, chemical or materials engineers (or any engineering discipline). Engineering disciplines require certifications and testing and a great deal of knowledge that all gets boiled down to 'permits' and other legal documents that determine an individuals qualifications to be labeled an 'Engineer' none of which software ENGINEERING has currently - all you have to do to be labeled a software engineer is 'develop software', that is it - no fancy diplomas, no permit tests, no other qualifications required.
There are some indications however that this is changing from the inside out. Software engineers would like to be considered highly professional people and are talking about what it takes to have professionalism in software engineering and have it represented as a top notch profession.
1) Your code must be clean
Take this point as you will - your code must be clean, easy to read, and easily maintained. You shouldn't have overly complicated methods, unrecognizable variable names, and just plain nasty nested if, else statements. Think twice about class files that are over 1000 lines long, methods that are over 5-10 lines long... take the time to take pride in your work (like me editing this ... again).
2) Your code should always include unit tests
Unit tests do two things - one they help you to validate that what you have written is what you intended and two they provide a way for you to verify after you re-factor to get to the first goal of having clean code that you have not broken anything. Unit testing provides a very critical safety net - you are lost without.
3) You should practice
Programming like anything else requires practice to make you better and to keep skills sharp. Doing programming katas in your spare time to exercise the skills needed to have clean code and always have unit tests is of vital importance to being professional. If you were in the NFL or baseball or any other sport or musical profession you would need to practice to keep your skills up - programming is no different.
4) It pays to be multi-lingual
The basics of programming are essentially the same no matter the language that you typically program in. Because of that - lots of programming languages often look very similar but have subtle differences in their syntax or effect when they are executed. It can be beneficial to know several ways to skin a given cat as well as to understand what tools are best suited to a given job.
5) Pair Program where possible
Learning can be a two way street (and often is) so it pays to pair with someone when you are doing work - you can have one person writing failing tests that the other person makes pass. It can be eye opening and enlightening to have someone to talk with and discuss ideas with while you are working on coding out the solution to a problem. you may find your self writing far less code than you may have otherwise if you include a partner.
Is it possible to be professional without the above items? Yes - I imagine that it is, but I believe that if you want to call yourself a professional software engineer, you should be doing the items above at a minimum and including everything else as just common place.