By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
437,708 Members | 2,055 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 437,708 IT Pros & Developers. It's quick & easy.

How to deal with problematic programmer on project

P: n/a
Hi all,

I'm working on a project through a consulting company, and I'm writing some
database code for use in another programmer's project in Excel/VBA. The other
programmer is working through the same consulting company.

I did not initially know this other programmer's experience level, but he
seemed down to earth and friendly. I saw some signs of trouble after having
him try to integrate some of my code, but chalked it up to him trying to wrap
his mind around how another programmer thinks, which can be hard with the best
of code.

Now, it has become clear this person has some serious problems as a
programmer, and I'm not sure the best way to handle it. it's going to reflect
badly on me if the code I deliver keeps working badly, but believe me, my code
is carefully designed and rigorously tested when delivered.

The code I delivered for this project encapsulates -everything- a user could
need from it in a few class modules. Create an instance of one class to
manage the database connection and ADO command object, set its properties to
assign parameters, and call its methods to get instance of more classes that
encapsulate result recordsets, provide type-safe methods for accessing
recordset fields, etc. Totally plug-and-play.

So he's having performance problems, though my tests run well, and he has me
look at his code. he took my tests module that is designed to thoroughly test
-everything- my code does, and he's calling it in a loop! That means, he's
among other things, recreating the conneciton and command objects each time
through his loop when it only needs to be done once, and running the biggest,
slowest queries my code can run each time even though his current code won't
need those results at all. He created string variables that duplicate the
purposes of my enumerated types, then uses both! He uses global variables to
pass parameters, and never specifies variable data types. he obviously never
compiles his code, because I can't try to compile mine to check for problems
because I'd have to comment out about 50 lines compile errors in his code to
do it, etc. He also fails to always use Option Explicit.

How should I handle this situation diplomatically, but in a way that protects
the project from total disaster?

Any thoughts?
Nov 12 '05 #1
Share this Question
Share on Google+
23 Replies


P: n/a
"Steve Jorgensen" <no****@nospam.nospam> wrote in message
news:ei********************************@4ax.com...
Hi all,

I'm working on a project through a consulting company, and I'm writing some database code for use in another programmer's project in Excel/VBA. The other programmer is working through the same consulting company.

I did not initially know this other programmer's experience level, but he
seemed down to earth and friendly. I saw some signs of trouble after having him try to integrate some of my code, but chalked it up to him trying to wrap his mind around how another programmer thinks, which can be hard with the best of code.

Now, it has become clear this person has some serious problems as a
programmer, and I'm not sure the best way to handle it. it's going to reflect badly on me if the code I deliver keeps working badly, but believe me, my code is carefully designed and rigorously tested when delivered.

The code I delivered for this project encapsulates -everything- a user could need from it in a few class modules. Create an instance of one class to
manage the database connection and ADO command object, set its properties to assign parameters, and call its methods to get instance of more classes that encapsulate result recordsets, provide type-safe methods for accessing
recordset fields, etc. Totally plug-and-play.

So he's having performance problems, though my tests run well, and he has me look at his code. he took my tests module that is designed to thoroughly test -everything- my code does, and he's calling it in a loop! That means, he's among other things, recreating the conneciton and command objects each time through his loop when it only needs to be done once, and running the biggest, slowest queries my code can run each time even though his current code won't need those results at all. He created string variables that duplicate the
purposes of my enumerated types, then uses both! He uses global variables to pass parameters, and never specifies variable data types. he obviously never compiles his code, because I can't try to compile mine to check for problems because I'd have to comment out about 50 lines compile errors in his code to do it, etc. He also fails to always use Option Explicit.

How should I handle this situation diplomatically, but in a way that protects the project from total disaster?

Any thoughts?

Stab him in the eye with a sharpened pencil.
Leap up on to his desk.
Stomp all over his keyboard.
At the top of your voice, scream:
"I am the Database Queen around here!"
"Have you got that, bitch?"
HTH

Jim
Nov 12 '05 #2

P: n/a
Hi, Steve!

Having been in the position of your colleague not so very long ago myself, I
can feel your pain, but also guess at his.

Excel permits a user to record a macro which duplicates the actions of
keystrokes -
in many cases, minor modifications of such code is all that it takes to
"program in Excel/VBA".
My guess is that your colleague is a high-end Excel user, who has also
learned to record and modify macros.
The whole concept of classes is not something such a user would necessarily
be familiar with; it certainly sounds as if he hasn't fully grasped it.
(In Access, we work with Forms all the time, so it's fairly easy to expand
from that concept. In my experience, UserForms, although they exist in
Excel, are not commonly used.)
I'd also mention that if you've learned mostly by modifying recorded macros,
Option Explicit and data types are not necessarily issues that would have
arisen.
And if you know of a way to compile Excel/VBA code other than running it,
I'd love to learn!

I think the significant question here is how interested he is in learning.
His interest level, of course, may be strongly influenced by how
diplomatically you make the suggestion.
You could offer to spend a half an hour with him covering concepts like
variable declarations, data types, and Option Explicit. Such a session
should be enough to tell you whether he's able and willing to do such
learning, and is short enough that nobody should get too upset about who's
paying whom for it.
If he still just doesn't seem to be getting it, you might want to talk to
your supervisor at the agency -
expressing a good deal of respect for his non-programming Excel
abilities, but indicating he'd need some organized coursework to be the kind
of developer they want.
If he does get it, he's probably salvageable.
One tactic I sometimes use in such cases is to say you need to provide
some documentation with your code, so folks like him can use it
appropriately, so you need his input on what should be in the documentation.
This gives you a chance to explain its use thoroughly to him.
If you know a good tutorial that explains classes and how to use them,
you could refer him to that, and possibly save yourself some time.

I don't know what the talent pool is in your area, but in the smaller city
where I live, I've run into one - well, maybe two - competent Excel/VBA
programmers in my decade or so of experience. It's not a common skill.

HTH
- Turtle

"Steve Jorgensen" <no****@nospam.nospam> wrote in message
news:ei********************************@4ax.com...
Hi all,

I'm working on a project through a consulting company, and I'm writing some database code for use in another programmer's project in Excel/VBA. The other programmer is working through the same consulting company.

I did not initially know this other programmer's experience level, but he
seemed down to earth and friendly. I saw some signs of trouble after having him try to integrate some of my code, but chalked it up to him trying to wrap his mind around how another programmer thinks, which can be hard with the best of code.

Now, it has become clear this person has some serious problems as a
programmer, and I'm not sure the best way to handle it. it's going to reflect badly on me if the code I deliver keeps working badly, but believe me, my code is carefully designed and rigorously tested when delivered.

The code I delivered for this project encapsulates -everything- a user could need from it in a few class modules. Create an instance of one class to
manage the database connection and ADO command object, set its properties to assign parameters, and call its methods to get instance of more classes that encapsulate result recordsets, provide type-safe methods for accessing
recordset fields, etc. Totally plug-and-play.

So he's having performance problems, though my tests run well, and he has me look at his code. he took my tests module that is designed to thoroughly test -everything- my code does, and he's calling it in a loop! That means, he's among other things, recreating the conneciton and command objects each time through his loop when it only needs to be done once, and running the biggest, slowest queries my code can run each time even though his current code won't need those results at all. He created string variables that duplicate the
purposes of my enumerated types, then uses both! He uses global variables to pass parameters, and never specifies variable data types. he obviously never compiles his code, because I can't try to compile mine to check for problems because I'd have to comment out about 50 lines compile errors in his code to do it, etc. He also fails to always use Option Explicit.

How should I handle this situation diplomatically, but in a way that protects the project from total disaster?

Any thoughts?

Nov 12 '05 #3

P: n/a
DFS
Education and communication is the key. Have you told him what you've told
us (in a nice way, of course)? He'll probably appreciate the chance to
learn a better way.

OOP and classes can be difficult to understand and use in a spreadsheet/db
interface environment. Are they necessary to the project? I'm sure in your
mind they are, and I don't doubt your approach is clean and efficient, but
he might not understand their usage. I've personally written classes and
used class instances only a handful of times in 8 years of VBA coding
(though on a couple of Java projects I worked on it was OOP from the start).

Another option: you're a much more advanced developer than he is, so maybe
it's possible for you to "step it down a notch" and make adjustments in your
work to compensate for his knowledge base? "dumb it down" as it were...

You should document the issues - summed up well by your 4th and 5th
paragraphs - and make sure your consulting company project manager is aware
of them. Maybe they'll split your assignments up differently, so there's
less (or no) mingling of code, and fewer potential problems.


"Steve Jorgensen" <no****@nospam.nospam> wrote in message
news:ei********************************@4ax.com...
Hi all,

I'm working on a project through a consulting company, and I'm writing some database code for use in another programmer's project in Excel/VBA. The other programmer is working through the same consulting company.

I did not initially know this other programmer's experience level, but he
seemed down to earth and friendly. I saw some signs of trouble after having him try to integrate some of my code, but chalked it up to him trying to wrap his mind around how another programmer thinks, which can be hard with the best of code.

Now, it has become clear this person has some serious problems as a
programmer, and I'm not sure the best way to handle it. it's going to reflect badly on me if the code I deliver keeps working badly, but believe me, my code is carefully designed and rigorously tested when delivered.

The code I delivered for this project encapsulates -everything- a user could need from it in a few class modules. Create an instance of one class to
manage the database connection and ADO command object, set its properties to assign parameters, and call its methods to get instance of more classes that encapsulate result recordsets, provide type-safe methods for accessing
recordset fields, etc. Totally plug-and-play.

So he's having performance problems, though my tests run well, and he has me look at his code. he took my tests module that is designed to thoroughly test -everything- my code does, and he's calling it in a loop! That means, he's among other things, recreating the conneciton and command objects each time through his loop when it only needs to be done once, and running the biggest, slowest queries my code can run each time even though his current code won't need those results at all. He created string variables that duplicate the
purposes of my enumerated types, then uses both! He uses global variables to pass parameters, and never specifies variable data types. he obviously never compiles his code, because I can't try to compile mine to check for problems because I'd have to comment out about 50 lines compile errors in his code to do it, etc. He also fails to always use Option Explicit.

How should I handle this situation diplomatically, but in a way that protects the project from total disaster?

Any thoughts?

Nov 12 '05 #4

P: n/a
"DFS" <no****@nospam.com> wrote in message
news:10*************@corp.supernews.com...

OOP and classes can be difficult to understand and use in a spreadsheet/db
interface environment. Are they necessary to the project? I'm sure in your mind they are, and I don't doubt your approach is clean and efficient, but
he might not understand their usage. I've personally written classes and
used class instances only a handful of times in 8 years of VBA coding
(though on a couple of Java projects I worked on it was OOP from the start).


Within this newsgroup, you sometimes get the impression that classes were
the only proper way to get anything done. Therefore, your best bet would be
to rush out and get the Access Developer's Handbook and do everything how it
is done there.

Now what happens when you want some simple functionality like open an
existing file. If you did it their way you would create about 1000 lines of
code in a class module and about 250 lines in an associated module (although
there is supposed to be some redundant code copied from other modules so
perhaps not needed). Include heaps of extra functionality and roll it
together with something that you can use to select colours, use callback
functions etc. and sprinkle with copyright notices and heaps of developer
notes.

If you distribute .mdb files (so the code is available to the customer
should you get hit by a bus) do you include these notices advertising the
fact that it is not your code? Do you modify it sufficiently so that it is
your code? Or do you say that putting a whole heap of code in your
application which you didn't write and don't have the time to go through
line by line, simply so that you can say you have achieved the Holy Grail of
using a class in your application is not worth it.

Even once you have written the class module and associated public functions,
etc just look at the fun you have just to get the path to an Excel file (see
below). I currently have a fraction of the number of lines of code in a
module modOFN which includes a function:
Public Function GetOFN(AccessOFN As MSA_OPENFILENAME) As String
Would any sane developer recommend I replace this clearly inferior public
function with a vastly superior class module? If so, do I re-write it using
my coding conventions and remove the ADH notes and copyright notices or
perhaps modify the code but leave the notices, or perhaps just accept that
it was
written by more experienced developers and so not touch the code?

I am genuinely interested. What do you folks do? It's a very popular
book - is anyone using the ADH class modules?

Private Sub cmdTest_Click()

On Error GoTo Err_Handler

Dim objDlg As CommonDlg
Dim strPath As String

Set objDlg = New CommonDlg

With objDlg
.CancelError = True
.hWndOwner = Me.hWnd
.OpenFlags = cdlOFNHideReadOnly Or cdlOFNEnableHook
.DialogTitle = "Select file to import..."
.Filter = "Excel Workbooks (*.xls)|*.xls"
.CallBack = adhFnPtrToLong(AddressOf GFNCallback)
.ShowOpen
strPath = .FileName
End With

MsgBox "Holy Cow!" & vbCrLf & strPath

Exit_Handler:

If Not objDlg Is Nothing Then
Set objDlg = Nothing
End If

Exit Sub

Err_Handler:

Select Case Err.Number

Case cdlCancel
' Do Nothing

Case Else
MsgBox Err.Description, vbExclamation, "Error No: " & Err.Number
Resume Exit_Handler

End Select

End Sub
Nov 12 '05 #5

P: n/a
I'm a big fan of the ADH, but no, I do not use the classes from the ADH, at
least, not directly - I use them as learning tools to figure out how to do
that stuff myself when I need to.

And, no, I don't use classes for most things. I use them only when I need
the code to be widely re-usable - reusable by me in other applications, and
reusable by my colleagues.

When I write code solely for my own use, in one application, I can make
certain assumptions, based on the way that I like to do things, that I can
not make when writing code that may be used in other applications, or by
other developers who may prefer to do things in other ways. The alternative
to using a class in the latter situation is often a very complex procedure,
with a large number of optional arguments and lots of conditional loops to
take different actions depending on the values of those optional arguments.
In that situation, the procedure becomes more complex and difficult to
maintain than a class would have been.

--
Brendan Reynolds

"Eric Schittlipz" <er**@schittlipz.com> wrote in message
news:c1**********@hercules.btinternet.com...
"DFS" <no****@nospam.com> wrote in message
news:10*************@corp.supernews.com...

OOP and classes can be difficult to understand and use in a spreadsheet/db interface environment. Are they necessary to the project? I'm sure in your
mind they are, and I don't doubt your approach is clean and efficient, but he might not understand their usage. I've personally written classes and used class instances only a handful of times in 8 years of VBA coding
(though on a couple of Java projects I worked on it was OOP from the

start).


Within this newsgroup, you sometimes get the impression that classes were
the only proper way to get anything done. Therefore, your best bet would

be to rush out and get the Access Developer's Handbook and do everything how it is done there.

Now what happens when you want some simple functionality like open an
existing file. If you did it their way you would create about 1000 lines of code in a class module and about 250 lines in an associated module (although there is supposed to be some redundant code copied from other modules so
perhaps not needed). Include heaps of extra functionality and roll it
together with something that you can use to select colours, use callback
functions etc. and sprinkle with copyright notices and heaps of developer
notes.

If you distribute .mdb files (so the code is available to the customer
should you get hit by a bus) do you include these notices advertising the
fact that it is not your code? Do you modify it sufficiently so that it is your code? Or do you say that putting a whole heap of code in your
application which you didn't write and don't have the time to go through
line by line, simply so that you can say you have achieved the Holy Grail of using a class in your application is not worth it.

Even once you have written the class module and associated public functions, etc just look at the fun you have just to get the path to an Excel file (see below). I currently have a fraction of the number of lines of code in a
module modOFN which includes a function:
Public Function GetOFN(AccessOFN As MSA_OPENFILENAME) As String
Would any sane developer recommend I replace this clearly inferior public
function with a vastly superior class module? If so, do I re-write it using my coding conventions and remove the ADH notes and copyright notices or
perhaps modify the code but leave the notices, or perhaps just accept that
it was
written by more experienced developers and so not touch the code?

I am genuinely interested. What do you folks do? It's a very popular
book - is anyone using the ADH class modules?

Private Sub cmdTest_Click()

On Error GoTo Err_Handler

Dim objDlg As CommonDlg
Dim strPath As String

Set objDlg = New CommonDlg

With objDlg
.CancelError = True
.hWndOwner = Me.hWnd
.OpenFlags = cdlOFNHideReadOnly Or cdlOFNEnableHook
.DialogTitle = "Select file to import..."
.Filter = "Excel Workbooks (*.xls)|*.xls"
.CallBack = adhFnPtrToLong(AddressOf GFNCallback)
.ShowOpen
strPath = .FileName
End With

MsgBox "Holy Cow!" & vbCrLf & strPath

Exit_Handler:

If Not objDlg Is Nothing Then
Set objDlg = Nothing
End If

Exit Sub

Err_Handler:

Select Case Err.Number

Case cdlCancel
' Do Nothing

Case Else
MsgBox Err.Description, vbExclamation, "Error No: " & Err.Number
Resume Exit_Handler

End Select

End Sub

Nov 12 '05 #6

P: n/a
"Eric Schittlipz" <er**@schittlipz.com> wrote in
news:c1**********@hercules.btinternet.com:
Within this newsgroup, you sometimes get the impression that classes
were the only proper way to get anything done. Therefore, your best bet
would be to rush out and get the Access Developer's Handbook and do
everything how it is done there.

Now what happens when you want some simple functionality like open an
existing file. If you did it their way you would create about 1000
lines of code in a class module and about 250 lines in an associated
module (although there is supposed to be some redundant code copied from
other modules so perhaps not needed). Include heaps of extra
functionality and roll it together with something that you can use to
select colours, use callback functions etc. and sprinkle with copyright
notices and heaps of developer notes.

If you distribute .mdb files (so the code is available to the customer
should you get hit by a bus) do you include these notices advertising
the fact that it is not your code? Do you modify it sufficiently so
that it is your code? Or do you say that putting a whole heap of code
in your application which you didn't write and don't have the time to go
through line by line, simply so that you can say you have achieved the
Holy Grail of using a class in your application is not worth it.

Even once you have written the class module and associated public
functions, etc just look at the fun you have just to get the path to an
Excel file (see below). I currently have a fraction of the number of
lines of code in a module modOFN which includes a function:
Public Function GetOFN(AccessOFN As MSA_OPENFILENAME) As String
Would any sane developer recommend I replace this clearly inferior
public function with a vastly superior class module? If so, do I
re-write it using my coding conventions and remove the ADH notes and
copyright notices or perhaps modify the code but leave the notices, or
perhaps just accept that it was
written by more experienced developers and so not touch the code?

I am genuinely interested. What do you folks do? It's a very popular
book - is anyone using the ADH class modules?


Vague Ramblings ...

I restrict my use of class modules to the following situations:

1. I may require more than one concurrent instance of a procedure which
uses modularly scoped variables. An example is a class which saves the
current values of some form properties/controls in modularly scoped
variables and, later, reopens the form with those property/control values
set to those saved values.
2. A procedure uses many variables which must be initialized and the
procedure will be used many times. An example is a procedure which
translates numerical data to words, as in 156 -> one hundred fifty-six.

Classes seem slow and unnecessary in other situations. I have my own
GetFileName Procedure. I don't know if it's longer or shorter than that
commonly referenced here. I use it because it allows me to use the same
procedure to search for a Directory.

I distribute only ADPs and (not recently) MDBs. If someone steals
something, it is he or she who is the lesser, not me. My contract quite
clearly states that the purchasing organization may do whatever it likes
with the application, except sell, transfer or otherwise make copies of it
available to any other organization, or individual. If someone changes
something and the project needs to be repaired, then he or she must pay for
my time. My current ADP hovers around 1 megabyte (at this moment Explorer
shows 1019kb) in size. I like it that way.

I read the ADH many years ago. It is no longer one of the books I keep
close by for immediate reference.

--
Lyle
(for e-mail refer to http://ffdba.com/contacts.htm)
Nov 12 '05 #7

P: n/a
Steve,

It seems like the responses have gotten pretty far off topic. One thing to
take from that is a moment to think about whether or not the way you're
going about things could be way over the head of someone and who is,
nevertheless, capable of doing this job in a reasonable and reasonably
efficient manner. If so, then I think there's good reason to think about how
you two can find a middle ground, which might involve him hitting the books
a little and you using techniques that are a little easier for him to grasp,
even if they're a little less efficient, and even a little less bulletproof
(to the developer, not the user).

On the other hand, if this guy is just not going to be able to cut it, I
would say that it's important that you go to the company through which
you're working and let them know your concerns and how you would like to
approach the situation. Probably best if you have a plan that gives the guy
a chance and also makes clear where the problems lie. Definitely best if you
talk to them before he does. Very important that you talk to the company
with a huge amount of diplomacy, and probably even some humility (that's not
a comment on what you've posted here or elsewhere). I'd try to approach it
from a perspective of seeing this guy in over his head, wanting to help him,
but looking out for the client, and not being 100% sure the guy is going to
be able to make it through.

Jeremy

--
Jeremy Wallace
AlphaBet City Dataworks
http://www.ABCDataworks.com
"Steve Jorgensen" <no****@nospam.nospam> wrote in message
news:ei********************************@4ax.com...
Hi all,

I'm working on a project through a consulting company, and I'm writing some database code for use in another programmer's project in Excel/VBA. The other programmer is working through the same consulting company.

I did not initially know this other programmer's experience level, but he
seemed down to earth and friendly. I saw some signs of trouble after having him try to integrate some of my code, but chalked it up to him trying to wrap his mind around how another programmer thinks, which can be hard with the best of code.

Now, it has become clear this person has some serious problems as a
programmer, and I'm not sure the best way to handle it. it's going to reflect badly on me if the code I deliver keeps working badly, but believe me, my code is carefully designed and rigorously tested when delivered.

The code I delivered for this project encapsulates -everything- a user could need from it in a few class modules. Create an instance of one class to
manage the database connection and ADO command object, set its properties to assign parameters, and call its methods to get instance of more classes that encapsulate result recordsets, provide type-safe methods for accessing
recordset fields, etc. Totally plug-and-play.

So he's having performance problems, though my tests run well, and he has me look at his code. he took my tests module that is designed to thoroughly test -everything- my code does, and he's calling it in a loop! That means, he's among other things, recreating the conneciton and command objects each time through his loop when it only needs to be done once, and running the biggest, slowest queries my code can run each time even though his current code won't need those results at all. He created string variables that duplicate the
purposes of my enumerated types, then uses both! He uses global variables to pass parameters, and never specifies variable data types. he obviously never compiles his code, because I can't try to compile mine to check for problems because I'd have to comment out about 50 lines compile errors in his code to do it, etc. He also fails to always use Option Explicit.

How should I handle this situation diplomatically, but in a way that protects the project from total disaster?

Any thoughts?

Nov 12 '05 #8

P: n/a
On Fri, 27 Feb 2004 11:15:44 -0500, "Jeremy Wallace"
<ab**********@AlphaBetCityDataworks.com> wrote:
Steve,

It seems like the responses have gotten pretty far off topic. One thing to
take from that is a moment to think about whether or not the way you're
going about things could be way over the head of someone and who is,
nevertheless, capable of doing this job in a reasonable and reasonably
efficient manner. If so, then I think there's good reason to think about how
you two can find a middle ground, which might involve him hitting the books
a little and you using techniques that are a little easier for him to grasp,
even if they're a little less efficient, and even a little less bulletproof
(to the developer, not the user).

On the other hand, if this guy is just not going to be able to cut it, I
would say that it's important that you go to the company through which
you're working and let them know your concerns and how you would like to
approach the situation. Probably best if you have a plan that gives the guy
a chance and also makes clear where the problems lie. Definitely best if you
talk to them before he does. Very important that you talk to the company
with a huge amount of diplomacy, and probably even some humility (that's not
a comment on what you've posted here or elsewhere). I'd try to approach it
from a perspective of seeing this guy in over his head, wanting to help him,
but looking out for the client, and not being 100% sure the guy is going to
be able to make it through.

Jeremy


In response to all.

First, I used class modules in this case precisely because it was clearly the
-easiest- interface I could deliver, and the test code clearly demonstrates
how to use the classes. The recipient of my code doesn't need to understand
anything about how my classes work internally, and it's similar to haow the
other object models provided by VBA work.

Second, with regard to this programmer's profficiency, a programmer who never
compiles his code and fails to use data types for variables, and doesn't use
Option Explicit religeously? Sounds like a VBScript programmer, but I digress
<g>. No, this is obviously a -very- low-level programmer.

I do have no desire to attack this person, and I do assume until I know
otherwise that he does want to improve. I think I will take the approach of
trying to arrange to work more closely with him, and tutor him up to speed,
but I wonder how I should broach the subject, and to whom first to get the
best response?
Nov 12 '05 #9

P: n/a
Steve,

Especially because you are so willing to work with this guy, I think it
makes sense to let the company who hired you know what's going on. Tell them
that you don't want to place the guy's job in jeopardy but that he's got a
lot to learn and that you can teach him this stuff quickly, if he's willing
to learn. Then approach him. There's no need to mention that you spoke to
anyone else about it, and I wouldn't think he would ask. It's a difficult
conversation, but it sounds like you have a fairly calm head about it.

"Can I show you why I did it that way" might be a decent way to lead into a
conversation about this kind of thing.

Jeremy

--
Jeremy Wallace
AlphaBet City Dataworks
http://www.ABCDataworks.com
"Steve Jorgensen" <no****@nospam.nospam> wrote in message
news:n2********************************@4ax.com...
On Fri, 27 Feb 2004 11:15:44 -0500, "Jeremy Wallace"
<ab**********@AlphaBetCityDataworks.com> wrote:
Steve,

It seems like the responses have gotten pretty far off topic. One thing totake from that is a moment to think about whether or not the way you're
going about things could be way over the head of someone and who is,
nevertheless, capable of doing this job in a reasonable and reasonably
efficient manner. If so, then I think there's good reason to think about howyou two can find a middle ground, which might involve him hitting the booksa little and you using techniques that are a little easier for him to grasp,even if they're a little less efficient, and even a little less bulletproof(to the developer, not the user).

On the other hand, if this guy is just not going to be able to cut it, I
would say that it's important that you go to the company through which
you're working and let them know your concerns and how you would like to
approach the situation. Probably best if you have a plan that gives the guya chance and also makes clear where the problems lie. Definitely best if youtalk to them before he does. Very important that you talk to the company
with a huge amount of diplomacy, and probably even some humility (that's nota comment on what you've posted here or elsewhere). I'd try to approach itfrom a perspective of seeing this guy in over his head, wanting to help him,but looking out for the client, and not being 100% sure the guy is going tobe able to make it through.

Jeremy
In response to all.

First, I used class modules in this case precisely because it was clearly

the -easiest- interface I could deliver, and the test code clearly demonstrates how to use the classes. The recipient of my code doesn't need to understand anything about how my classes work internally, and it's similar to haow the other object models provided by VBA work.

Second, with regard to this programmer's profficiency, a programmer who never compiles his code and fails to use data types for variables, and doesn't use Option Explicit religeously? Sounds like a VBScript programmer, but I digress <g>. No, this is obviously a -very- low-level programmer.

I do have no desire to attack this person, and I do assume until I know
otherwise that he does want to improve. I think I will take the approach of trying to arrange to work more closely with him, and tutor him up to speed, but I wonder how I should broach the subject, and to whom first to get the
best response?

Nov 12 '05 #10

P: n/a
Steve Jorgensen <no****@nospam.nospam> wrote in
news:ei********************************@4ax.com:
How should I handle this situation diplomatically, but in a way
that protects the project from total disaster?


Talk to the people you're working for, the contracting consulting
company. Tell them what you just told us.

Let *them* sort it out, because they are the responsible party.

--
David W. Fenton http://www.bway.net/~dfenton
dfenton at bway dot net http://www.bway.net/~dfassoc
Nov 12 '05 #11

P: n/a
"Eric Schittlipz" <er**@schittlipz.com> wrote in
news:c1**********@hercules.btinternet.com:
Within this newsgroup, you sometimes get the impression that
classes were the only proper way to get anything done. Therefore,
your best bet would be to rush out and get the Access Developer's
Handbook and do everything how it is done there.


Because your major premise here is totally false, everythigg that
you wrote that followed is also false.

No one in this newsgroup is recommending coding class modules for
every task, only where the benefits of a class module are
appropriate.

--
David W. Fenton http://www.bway.net/~dfenton
dfenton at bway dot net http://www.bway.net/~dfassoc
Nov 12 '05 #12

P: n/a
rkc

"Eric Schittlipz" <er**@schittlipz.com> wrote in message
news:c1**********@hercules.btinternet.com...
"DFS" <no****@nospam.com> wrote in message
news:10*************@corp.supernews.com...

OOP and classes can be difficult to understand and use in a spreadsheet/db interface environment. Are they necessary to the project? I'm sure in your
mind they are, and I don't doubt your approach is clean and efficient, but he might not understand their usage. I've personally written classes and used class instances only a handful of times in 8 years of VBA coding
(though on a couple of Java projects I worked on it was OOP from the

start).


Within this newsgroup, you sometimes get the impression that classes were
the only proper way to get anything done. Therefore, your best bet would

be to rush out and get the Access Developer's Handbook and do everything how it is done there.
You're right about everyone echoing whoever it was that first suggested you
can't
be an Access peogrammer without at least one copy of the ADH. As far as the
widespread use of class module by participants here, I get exactly the
opposite
impression. There are only a handful of people that ever mention them at
all.

Now what happens when you want some simple functionality like open an
existing file. If you did it their way you would create about 1000 lines of code in a class module and about 250 lines in an associated module (although there is supposed to be some redundant code copied from other modules so
perhaps not needed).


The code I see suggested most often for the open file dialog is a function
not
a class. It would be easier to understand and use as a class in my opinion.

Nov 12 '05 #13

P: n/a
RE/
I distribute only ADPs and (not recently) MDBs.


In an ADP suppose that, for some perverse reason, you had a combo box whose
dropdown had to be populated with 1,200 lines and using a callback procedure
make is just too slow to react

In a .MDB, I'd copy the box's rowsource to a work table in C:\Temp and just base
the .RowSource on the temp table. This gives an almost-instant dropdown.

Any idea of a similar workaround in a ADP? Something with some sort of
disconnected recordset so that MS Access functionally does the same thing?

I've felt ADP pulling at me for quite a few months now. My current contract is
up at the end of June...and I guess it's going to be learning ADPs and maybe a
little .NET then...
--
PeteCresswell
Nov 12 '05 #14

P: n/a
"(Pete Cresswell)" <x@y.z> wrote in
news:or********************************@4ax.com:
RE/
I distribute only ADPs and (not recently) MDBs.


In an ADP suppose that, for some perverse reason, you had a combo box
whose dropdown had to be populated with 1,200 lines and using a callback
procedure make is just too slow to react

In a .MDB, I'd copy the box's rowsource to a work table in C:\Temp and
just base the .RowSource on the temp table. This gives an
almost-instant dropdown.

Any idea of a similar workaround in a ADP? Something with some sort of
disconnected recordset so that MS Access functionally does the same
thing?


I suppose that if I really had to do this I would create a form with some
filter buttons on it for, example, a-z, or whatever, which when clicked
would filter the form. Then selecting (current event) a record would set
input parameters on the (pseudo) sub form and filter (requery) it in
accordance with the (pseudo) main form. I've used this (but not with
anything like 1200 rows), and it is very fast. In my opinion, ADP input
parameters make subforms redundant.
--
Lyle
(for e-mail refer to http://ffdba.com/contacts.htm)
Nov 12 '05 #15

P: n/a


"Steve Jorgensen" <no****@nospam.nospam> wrote in message
news:ei********************************@4ax.com...
Hi all,

I'm working on a project through a consulting company, and I'm writing some database code for use in another programmer's project in Excel/VBA. The other programmer is working through the same consulting company.

I did not initially know this other programmer's experience level, but he
seemed down to earth and friendly. I saw some signs of trouble after having him try to integrate some of my code, but chalked it up to him trying to wrap his mind around how another programmer thinks, which can be hard with the best of code.

Now, it has become clear this person has some serious problems as a
programmer, and I'm not sure the best way to handle it. it's going to reflect badly on me if the code I deliver keeps working badly, but believe me, my code is carefully designed and rigorously tested when delivered.

The code I delivered for this project encapsulates -everything- a user could need from it in a few class modules. Create an instance of one class to
manage the database connection and ADO command object, set its properties to assign parameters, and call its methods to get instance of more classes that encapsulate result recordsets, provide type-safe methods for accessing
recordset fields, etc. Totally plug-and-play.

So he's having performance problems, though my tests run well, and he has me look at his code. he took my tests module that is designed to thoroughly test -everything- my code does, and he's calling it in a loop! That means, he's among other things, recreating the conneciton and command objects each time through his loop when it only needs to be done once, and running the biggest, slowest queries my code can run each time even though his current code won't need those results at all. He created string variables that duplicate the
purposes of my enumerated types, then uses both! He uses global variables to pass parameters, and never specifies variable data types. he obviously never compiles his code, because I can't try to compile mine to check for problems because I'd have to comment out about 50 lines compile errors in his code to do it, etc. He also fails to always use Option Explicit.

How should I handle this situation diplomatically, but in a way that protects the project from total disaster?

Any thoughts?

I thought morons liked company?

Nov 12 '05 #16

P: n/a
I think you might be replying to a (the?) troll. Look at his last
name (phonetically).

On Fri, 27 Feb 2004 21:08:45 GMT, "David W. Fenton"
<dX********@bway.net.invalid> wrote:
Because your major premise here is totally false, everythigg that
you wrote that followed is also false.

No one in this newsgroup is recommending coding class modules for
every task, only where the benefits of a class module are
appropriate.


Nov 12 '05 #17

P: n/a
On Fri, 27 Feb 2004 21:05:24 GMT, "David W. Fenton"
<dX********@bway.net.invalid> wrote:
Steve Jorgensen <no****@nospam.nospam> wrote in
news:ei********************************@4ax.com :
How should I handle this situation diplomatically, but in a way
that protects the project from total disaster?


Talk to the people you're working for, the contracting consulting
company. Tell them what you just told us.

Let *them* sort it out, because they are the responsible party.


Well, yes, but it isn't always good politics to go over someone's head without
warning.
Nov 12 '05 #18

P: n/a
On Fri, 27 Feb 2004 21:05:24 GMT, "David W. Fenton"
<dX********@bway.net.invalid> wrote:

I agree with David. You should first inform the responsible party.
Assuming the agency is, talk to them first.
Suggestions I've read here to sit down with the other programmer for
half an hour are not going to take someone from clueless to brilliant.

But also review your own actions. Did you really serve the project
best by going off on your own developing this code base the other team
member can't use? In hindsight it would have been better to first
establish common ground, then divide the work. This is the project
manager's job, but also that of the senior developer, in my mind.

If it comes to the point where a head has to roll to salvage the
project, then that is what should happen. The successful completion of
the project should be paramount. That's what everyone is being paid
for.

-Tom.

Steve Jorgensen <no****@nospam.nospam> wrote in
news:ei********************************@4ax.com :
How should I handle this situation diplomatically, but in a way
that protects the project from total disaster?


Talk to the people you're working for, the contracting consulting
company. Tell them what you just told us.

Let *them* sort it out, because they are the responsible party.


Nov 12 '05 #19

P: n/a
Eric Schittlipz wrote:
I am genuinely interested. What do you folks do? It's a very popular
book - is anyone using the ADH class modules?


Haven't really read it since v2, I use the screen resizing code out of
there that appears to be updated each time (more object types to resize).

I have a module with this at the top:
' From Access 97 Developer's Handbook
' by Litwin, Getz, and Gilbert (Sybex)
' Copyright 1997. All rights reserved.

Then comments further down when I changed something, I usually prefix my
comments with my initials and a date, e.g.

' TB 10/09/1999 comment
As for OO, I'll use classes where I think they're useful or better than
any other method but my primary goal is to solve a problem and not try
to bash everything into object shaped holes (to coin a phrase I read in
comp.databases recently). When working with others, I can take their
methods on board, e.g. OO, etc. but if the other is a buffoon then I
tell him/her straight, no point in beating around the bush, I tell him
what he did was wrong, why it was wrong and what to do to put it right.
If he doesn't play ball I then re-think the whole situation, if it's his
project and I'm helping out I may just leave the project. IF it's my
project I may end up kicking him off the team.
Nov 12 '05 #20

P: n/a
On Fri, 27 Feb 2004 22:20:23 -0700, Tom van Stiphout <to*****@no.spam.cox.net>
wrote:
On Fri, 27 Feb 2004 21:05:24 GMT, "David W. Fenton"
<dX********@bway.net.invalid> wrote:

I agree with David. You should first inform the responsible party.
Assuming the agency is, talk to them first.
Suggestions I've read here to sit down with the other programmer for
half an hour are not going to take someone from clueless to brilliant.
Surely not. I was thinking, rather, to make sure I spend a measurable
percentage of time working with the person for the remainder of the project to
help keep him on track, and perhaps communicate some better practices and the
reasons for them.
But also review your own actions. Did you really serve the project
best by going off on your own developing this code base the other team
member can't use? In hindsight it would have been better to first
establish common ground, then divide the work. This is the project
manager's job, but also that of the senior developer, in my mind.
The following sounds like a definsive response, so perhaps it is. I'll think
spend more time considering it, but here's my face-saving, knee-jerk
reaction...

I was the database expert, and I was asked to spend months developing the
database schema, then provide a means for running queries against the database
by programmers who are not versed in database programming. Since the database
schema is complex, the logical approach seemed to me to wrap everything in
classes that would be trivial to employ, and that hide both the complexities
of ADO and of the schema, and that's what I did. For various reasons, it was
not practical to work closely with the other developer. For one thing, the
workstations at the client site would have crippled me by now.
If it comes to the point where a head has to roll to salvage the
project, then that is what should happen. The successful completion of
the project should be paramount. That's what everyone is being paid
for.


It's not a contentious atmosphere, and I don't think anyone is out for heads
or looking for people to blame for problems. Frankly, the client may be happy
with the staus quo, having no basis for comparison. I'm just trying to figure
out how to deal with the issue while navigating the social landscape in the
best way practical.

Nov 12 '05 #21

P: n/a
On Sat, 28 Feb 2004 08:17:13 GMT, Steve Jorgensen
<no****@nospam.nospam> wrote:
On Fri, 27 Feb 2004 22:20:23 -0700, Tom van Stiphout <to*****@no.spam.cox.net>
wrote:
On Fri, 27 Feb 2004 21:05:24 GMT, "David W. Fenton"
<dX********@bway.net.invalid> wrote:

I agree with David. You should first inform the responsible party.
Assuming the agency is, talk to them first.
Suggestions I've read here to sit down with the other programmer for
half an hour are not going to take someone from clueless to brilliant.
Surely not. I was thinking, rather, to make sure I spend a measurable
percentage of time working with the person for the remainder of the project to
help keep him on track, and perhaps communicate some better practices and the
reasons for them.


It's a trade-off. You would likely have to make this investment
yourself. It would be laudable if you did and if the other team member
was willing to learn, but you could be dragged in pretty deep.
Personally I would love to discuss best practices with him, go over my
test app etc, but I would likely sraw the line at Option Explicit and
the use of data types.
But also review your own actions. Did you really serve the project
best by going off on your own developing this code base the other team
member can't use? In hindsight it would have been better to first
establish common ground, then divide the work. This is the project
manager's job, but also that of the senior developer, in my mind.
The following sounds like a definsive response, so perhaps it is. I'll think
spend more time considering it, but here's my face-saving, knee-jerk
reaction...

I was the database expert, and I was asked to spend months developing the
database schema, then provide a means for running queries against the database
by programmers who are not versed in database programming. Since the database
schema is complex, the logical approach seemed to me to wrap everything in
classes that would be trivial to employ, and that hide both the complexities
of ADO and of the schema, and that's what I did. For various reasons, it was
not practical to work closely with the other developer. For one thing, the
workstations at the client site would have crippled me by now.


Your laptop was in the shop?
I'm not thinking of spending weeks there, but a few days. Mostly not
writing code, but getting to know the team, divide the work, ...
Again, hindsight is 20/20. If you had lucked out with a Steve2, the
project would have been done by now.
If it comes to the point where a head has to roll to salvage the
project, then that is what should happen. The successful completion of
the project should be paramount. That's what everyone is being paid
for.


It's not a contentious atmosphere, and I don't think anyone is out for heads
or looking for people to blame for problems. Frankly, the client may be happy
with the staus quo, having no basis for comparison. I'm just trying to figure
out how to deal with the issue while navigating the social landscape in the
best way practical.


The fact that the client doesn't know things are going eh..
suboptimally doesn't take away your responsibility to let the
responsibile party know.
Nov 12 '05 #22

P: n/a
Steve Jorgensen <no****@nospam.nospam> wrote in
news:0h********************************@4ax.com:
On Fri, 27 Feb 2004 21:05:24 GMT, "David W. Fenton"
<dX********@bway.net.invalid> wrote:
Steve Jorgensen <no****@nospam.nospam> wrote in
news:ei********************************@4ax.co m:
How should I handle this situation diplomatically, but in a way
that protects the project from total disaster?


Talk to the people you're working for, the contracting consulting
company. Tell them what you just told us.

Let *them* sort it out, because they are the responsible party.


Well, yes, but it isn't always good politics to go over someone's
head without warning.


I'm not so sure about that.

I would do a "head's up" to them off the bat.

Whether you ask them to fix it or tell them you'll try to work it
out is your choice. But you ought to tell them as soon as you note a
problem.

Of course, diplomacy is important. You can report the problem in the
narrowest possible way "he isn't experienced with using class
modules" might be a starting place. I don't know any good way of
informing the boss that the coder doesn't know about Option Explicit
or about typing variables, or any of the other things you mentioned,
but I'd say it's necessary.

Why?

Because for all your best intentions, you may fail in your training
efforts the project could end up as a mess.

Unless you're the designated project leader, you don't want to take
on the responsibility to fix it if you're not going to get credit
for that, and especially if you're in danger of having your
reputation damaged.

When there are problems in a project, the people where the buck
stops need to know as soon as possible, both for themselves and for
your future employment prospects with them.

If this were your own client, it would be different, because in that
case, the buck really would stop with you. Since it doesn't, you
have to be careful what responsibility for fixing the problem you
take on yourself. But if you do take any responsibility, be sure
that the boss knows what you're doing -- that you're trying to fix a
problem so he doesn't have to deal with it. If it works, you get
credit. If it doesn't work, then you won't get blamed for causing
the problem in the first place.

If you don't bring the boss on board, you get neither the benefit
from fixing it or the blamelessness if it goes bad.

--
David W. Fenton http://www.bway.net/~dfenton
dfenton at bway dot net http://www.bway.net/~dfassoc
Nov 12 '05 #23

P: n/a
Steve Jorgensen <no****@nospam.nospam> wrote in
news:cf********************************@4ax.com:
On Fri, 27 Feb 2004 22:20:23 -0700, Tom van Stiphout
<to*****@no.spam.cox.net> wrote:
On Fri, 27 Feb 2004 21:05:24 GMT, "David W. Fenton"
<dX********@bway.net.invalid> wrote:

I agree with David. You should first inform the responsible party.
Assuming the agency is, talk to them first.
Suggestions I've read here to sit down with the other programmer
for half an hour are not going to take someone from clueless to
brilliant.


Surely not. I was thinking, rather, to make sure I spend a
measurable percentage of time working with the person for the
remainder of the project to help keep him on track, and perhaps
communicate some better practices and the reasons for them.


This would be a lot easier if you were lead developer on the
project. I believe you described the clueless one as lead developer.

When I've been in the situation you've described, I've always been
in charge, and in those cases, I make it an iterative project:

1. work in parallel on different parts of the project.

2. give your work to the other developer to integrate into his part
of the project.

3. examine the results, then work together teaching him what the
better practices are for integrating what you gave him.

4. lather, rinse, repeat.

I've raised unacceptable developers to a level where they were
usable for other projects.

I've also worked with people who were equal or better in skill level
(Hi, Jeremy! Hi, Larry!), and in those cases, I *still* had to do a
level of training, as I had to educate them to *my* idea of best
practices.

But since you're not lead developer, that wouldn't work so well.

However, surely this guy knows your Access chops vastly exceed his?
If so, you should be able to go back to him and show him what he's
doing wrong.
But also review your own actions. Did you really serve the project
best by going off on your own developing this code base the other
team member can't use? In hindsight it would have been better to
first establish common ground, then divide the work. This is the
project manager's job, but also that of the senior developer, in
my mind.


The following sounds like a definsive response, so perhaps it is.
I'll think spend more time considering it, but here's my
face-saving, knee-jerk reaction...

I was the database expert, and I was asked to spend months
developing the database schema, then provide a means for running
queries against the database by programmers who are not versed in
database programming. Since the database schema is complex, the
logical approach seemed to me to wrap everything in classes that
would be trivial to employ, and that hide both the complexities
of ADO and of the schema, and that's what I did. For various
reasons, it was not practical to work closely with the other
developer. For one thing, the workstations at the client site
would have crippled me by now.


You've just described the requirements *from your point of view*.

Perhaps you misinterpreted the requirements?
If it comes to the point where a head has to roll to salvage the
project, then that is what should happen. The successful
completion of the project should be paramount. That's what
everyone is being paid for.


It's not a contentious atmosphere, and I don't think anyone is out
for heads or looking for people to blame for problems. Frankly,
the client may be happy with the staus quo, having no basis for
comparison. I'm just trying to figure out how to deal with the
issue while navigating the social landscape in the best way
practical.


The boss still needs to know there's a problem.

If you don't tell the boss, then you may end up working under
exactly the same bad circumstances of a future project.

It's also in the other developer's interest to have his boss know
his limitations so nobody overpromises.

Yes, it all requires diplomacy and you have to be careful the way
you present it so you just don't end up looking arrogant. If the
boss has any coding experience in anything, you may be able to make
your case objectively. If not, you have to be careful.

But the boss still needs to know there are potential problems ahead,
for the reasons I outlined in my other reply to you
(credit/responsibility).

--
David W. Fenton http://www.bway.net/~dfenton
dfenton at bway dot net http://www.bway.net/~dfassoc
Nov 12 '05 #24

This discussion thread is closed

Replies have been disabled for this discussion.