Possible Duplicate:
How do I approach a coworker about his or her code quality?
I started working with him almost a decade ago and back then I had never really programmed before, being a young hardware engineer. Right now however I have made quite some progress in all areas being part of software design and i am much, much more skilled than my co-worker who is 15 years older and has been programming more than twice as long. He is super nice and definitely smart enough, but lately his lack of skill and performance are starting to drag me down because we're more and more working on the same codebase. And soon we are going to do a quite ambitious start from scratch creating a whole new hard/software system. I feel it is time to address all issues now, but i do not know how to start.
Here are some of the things that I would like to see him improve on:
no consistent usage of style, spaces nor tabs (eg if(something ) a =b )
adds newlines around pieces of code to make it easier to read, then commits those with messages like 'no changes made'
overall commit messages are useless and so are most of the comments, if there are any (eg 'remove solves for bug Rik' if Rik reported a bug). There is no function/class documentation.
lots of spelling errors, in both English and native language, which sometimes are mixed
6/7/8 level deep deep nesting is no exception, a lot of functions start with one level already like if(ptr!=Null){ even when ptr is the result of allocation via new in the constructor
numerous source files have over 10k lines
of those lines, a major part is simply a result of copy-pasting functionality instead of using a function. This includes copying comments so we end up with 50 occurrences of var=NULL; //TODO TEST this!!!!!!!
another part is hundreds of lines of dead code
knows what versioning does, yet comments out old code and places new code underneath it when making changes
coding skills are below par, especially for the type of rather high precision applications we do. Yet somehow, after a lot of trying and testing, stuff starts to work. But then breaks again some time later because every change casues a waterfall effect.
violates every single item in the C++ FAQ lite, practices every bad practice I can think of
still doesn't know how to properly use the debugger, but spends hours inspecting messy logfiles in notepad on a tiny laptop screen. Does not make any adjustments to the settings of the software he uses. Never uses keyboard shortcuts.
does not seem to progress or learn new things at all. Work rather slow, mostly due to the lack of planning and incorrect usage of tools.
How does one deal with this? For starters, how do I make him aware of all these problems? Should I tell the staff about it? And the next step, how to get him to learn new things and adopt another way of working?