Fog Creek Software
Discussion Board




PM Tries to do The Right Thing

A bit of advice please. I'm a project manager, with about 5 years experience of managing mostly web-based software projects.

I'm from a non-technical (general management) background, and while i think i have a good grasp of technical issues, i have decided that i really need to learn to program to fully understand the problems that my team encounter. Most of my projects use ASP/SQL, with movement towards the .Net platform. We also do some stuff in straight Vb and C++.

I've put together an ASP site myself, but feel that i've learned little more than copy-and-paste skills.

What i'd like, is some recommendations as to 1) what books you recommend to enable me to learn to program -- something that is hands-on and practical hopefully - and 2) how important is the choice of language that i choose to learn. For example, i've been working through the excellent OpenCourseWare lectures on the MIT website -
http://ocw.mit.edu/6/6.170/f01/index.html - but i'm not sure if Java is the best choice for me to learn: although .Net is moving towards OO, i wonder if the differences with the majority of the 'MS' languages will make learning it less useful.

Don't tell my team.
Tuesday, November 05, 2002

Learning to program - what works for Sosay

- have a real life task.
 
  Don't complete lots of small academic excersises.  Think of a small project that would actually be useful, design and build it. 

This will force you to over-come many small real life
problems and hassles that the text books deliberately avoid, considering them trivial details.

Even if you have no idea how to begin "I want to build a web based diary with ASP" is 400% more advanced a stage to be at than "I want to learn ASP". 

- have a real life teacher.

  I personally learned more about programming in a couple of weeks of instruction from a good programmer than in 6 months of reading and playing by myself with many books.

They can point out what is important, and when you reach those problem points where you make little progress they can suddenly bump you through them with a few words of advice.

The initial frustration is "learning how to find out". 

Watching a teacher work out the answer is enlightening.

I know many people have a very different epxerience with regard to teachers Vs alone with books.

- Stay positive.

True for all learning.  If you start to attach negative emotions to the activity you will stop giving it enough time and eventually give up.  Learning to program is a difficult thing to do.  Congratulate yourself on any progress, spend the time and you will get there.

sosay
Tuesday, November 05, 2002

Gee, this is a interesting question. Should you read the classic English novels before becoming a writer?

Perhaps you should read some of the computer classics. (Donald Kunth for example).

Do you want to learn to get real good at writing neat algorithms? I mean a good developer is quite good developing algorithms to solve problems. IN fact, that is why I believe a good many people with strong math backgrounds wind up in the programming field.

However, I am not sure that learning about writing algorithms will help you as a program manager. Are you involved in the design process, or just general management of the team that does this now?

I think you might want to concentrate on what problems the programmers have. I will also assume you have read books like peopleware. That would be the first thing I do!! It is a light read, and something you can do by the end of the week. Read that book, and you might figure out that you don’t need to have developer skills.

To me, the most important “thing” to get right is to distill the requirements of the project. Once that is done, then translating that into workable designs of course is the most difficult part.  That translating into a workable design generally does mean you need some very good development skills. If you don’t, then you can’t know what kind of designs the team can, or can not work with.

Also, it depends on what kind of software you write? To me, one of the most valuable skills I have is being able to normalize data. That means strong database design skills ranks very high in my list. In fact it is near the top. The real deft of this skill is knowing how far to normalize data, and when you should not. It is not practical, or even useful to normalize data too far. However, too little, and you kill program flexibility. Again, this is balance between cost, and skill of the team (the better team can handle more normalizing in data designs, and will come to expect it).

Certain development tools might for example limit the amount of lookup tables you use (this in turn will reduce the number of tables you use in your design). However, learn this skill, and learn it well. Every system in the world for the next 100 years will have some type of data.

I do actually think that spending some time at the “open courseware” site is a good idea. (did any of your developers come from MIT??). However, as mentioned, you can start learning about normalizing data, but then kill a project because now you insist that all of the data must be normalized beyond 3nf (3rd normal form). Sometimes, having some, but not a lot of design ability can make the project worse (this is not generally the case, but don’t want one to fall for that kind of trap).

I can remember about one year a tech fellow suggested that I should be using MySql for a project.  Like, yea…man? I mean MySql 1 year ago was not even considered a relational database. You delete a invoice, and none of the child records get deleted for you (you have to write code!) It is only just now that the Inno db extensions that can enforce some RI with MySql (anyway, the list of shortcomings in MySql is too long to list here, but for projects of a certainly complexity, MySql will send costs through the roof). My real point here is that all of a sudden the tech person had discovered MySql, and thought that it might be a solution. It takes years of experiance to know that kind of answer.

I would learn the database stuff first, and keep reading and learning a few little tid bits here and there.

And don’t forget the peopleware book…

Albert D. Kallal
Edmonton, Alberta Canada
Kallal@msn.com

Albert D. Kallal
Tuesday, November 05, 2002

This is a reply to the previous post.

<flame>
That is some seriously stupid advice! I can't believe that anyone who has cracked open Knuth, would ever recomend it to a novice.
</flame>

To follow your classic novels analogy, it would be like teaching a child to read by forcing him through Dostoevsky.

<flame>
stupid-head
</flame>

JD
Tuesday, November 05, 2002

Learning the Data stuff is a good idea. It is always useful.

The problem is, there is no simple answer to your question. Because if you want to learn enough to 'technically manage' your team, only years of experience will do.

I suggest you begin with general understanding about software architecture and design (Design patterns - MVC concepts - stay cool, don't loose yourself!).

Then, be as close as you can to your technical team, to learn from your current projects and to see what hurts.

I wish you good luck.

Ralph Chaléon
Tuesday, November 05, 2002

Perhaps I should been a little more clear. I asked the question does one need to read the classics to write a book (the obvious answer is of course not!!!!)….no more than reading Donald Kunths books!!

I can’t imagine that Tom Clancy bothered reading the classics, but I could be proved wrong, and I doubt they helped him write books!

I am more surprised that actually my comments are mis interpreted.

I mentioned Donald Kurnth, and he has tons of writings on algorithms (they are great, but not what a new person needs….no more than what a person just learning to write English for the first time needs to read the classics!)

In the next paragraph, I then mentioned that algorithms are not probably what ones needs in his case! (I should have guessed that many people here might not realize who Donald Kunth is).

I think I am assuming too much here for the viewing audience to follow my train of thought here. I shall work on my delivery

And to the original poster: I am suggesting that you don’t need to read the classics. I am suggesting that you don’t need to read up on algorithms.

I am suggesting that you read people ware. .


Albert D. Kallal
Edmonton, Alberta Canada
Kallal@msn.com

Albert D. Kallal
Tuesday, November 05, 2002

PM,

Personally I recommend going for the Microsoft Certification.

The curriculum is very relevant to Microsoft Products, and their are no shortage of practical books and courses to help you.

You also get certification out of it, which can't do the CV any harm.

Ged Byrne
Tuesday, November 05, 2002

I would strongly second sosay's advice in the second post on this thread.

I assume you're already read Peopleware and some other similar books (e.g., Mythical Man Month).  Those will give some appreciation for how a manager should manage programmers, but do next to nothing to help you with what you really want: to learn how to program.

I also wouldn't bother with a certification program.  Too much of that is memorizing stuff you'll need to pass a test.  Again, not bad stuff, but not very helpful if your goal is to learn to program.

sosay suggests that you have a real life person who can help you learn.  I agree that this is very helpful.  But, if you're serious in your sig ("don't tell my team"), you may not have anyone readily available to do it.  In that case, you should find a good online technical site or newsgroup devoted to whatever language you choose and friendly to newbies.  That way you can post messages asking for help with problems you run across.  (www.tek-tips.com has forums on many languages, and there are several prominent asp/asp.net sites: you could start search at http://www.4guysfromrolla.com/).

But I actually think it would be better to get help from your own team members.  I think they'd be impressed that you're taking the time to learn real programming and would be glad to help you.

As far as what language to learn, why would you not want to learn the same combo as your developers are using? 

Herbert Sitz
Tuesday, November 05, 2002

I would ask why are you trying to learn how to program?

If you want to then that's fine - but if you're doing it because you think it'll make you a better manager then turn again Dick Whittington. You'd be better off improving your project management and generic management skills than getting your head around geek talk.

Yan Woo
Tuesday, November 05, 2002

Sosay has some excellent suggestions, which I second entirely.

Key for me is to have a particular project in mind.  I'm learning C# now, and while I'm working through a book to get some basic exposure to all the different parts of the language, I won't bother putting it on my resume until I've used it to rewrite an old app.

Writing your own diary/weblog system is also a great place to start -- there's not too much to it, but it's complicated enough to expose you to the major issues.  Be warned, though, that ASP is pretty far from being the most elegant platform out there, so if you find yourself confused, don't despair -- it's not all your fault.  The language sucks, and it almost necessitates a lot of copying and pasting (or use of include files, which is one of its saving graces).

Don't expect to make progress very quickly.  You're learning a(t least one) completely new way of looking at problems, and it will be difficult.  Do expect that if you continue to program, you'll go back and look at old code you've written and think it's pure crap, and want to rewrite it on the spot.  This is a very good sign; it means you've learned something!

Comments are your friends: leave them anywhere you think they may help.  If you start having more comments in your code than code, though, consider keeping a diary of problems solved in a Word document somewhere.

Remember also that when you get stuck on a particular problem, you can use Google to search the DejaNews archives.  This has been invaluable to me.

As for languages, Java may or may not be useful to you if your team works with MS languages.  Personally, I think C# might be a good place to start: it'll get you used to looking at curly-brace syntax and give you some hope of following along with the C++ stuff you do.  Alternately, you could start with VB, which is very easy to read, and of course ASP pages can use VBScript, so you can get some mileage out of that.

One last thought:  Until you've been programming for a few years, you probably won't ever *fully* understand the problems your team encounters.  You're not supposed to -- if you did, you might as well be a developer, not a PM.  I've always thought that a manager's job was to hire people who were smarter than they were, run interference, and let them do what they're best at.  (=

Sam Gray
Tuesday, November 05, 2002

I teach ASP now and then.

Id say, learn proper relational datamodelling first. Its a great skill to have these days.
Then learn proper SQL including JOIN, DELETE, LIKE and UPDATE, INSERT.
Then learn how to catch data from HTML-forms and put it into the database.
Then learn how to retreive the data and present it with formatting.

Then give your self a project that lets you practice all this.

ASP is a good language to start with if you want to learn web app development since its not very hard. .NET is tricker, as is Java.

Eric DeBois
Tuesday, November 05, 2002

What do you mean when you say you do not fully understand the problems that your team encounters?
I am assuming it is not your intention to become the technical wizard of the team, so is it just a matter of trust? e.g. They tell you "can't be done in X days", while your gut feeling says it should be easy, but you lack the basic knowledge to talk the talk and lure them out? Then expect to get in deep because these things often aren't resolved at the surface level, and come down to hard experience and details. even those of us with a serious tech background have a hard time keeping up at that level while doing other tasks.

OTOH, if you are seeing this learning as a goal in itself, because you would like to know more, then by all means go for it.

Just me (Sir to you)
Tuesday, November 05, 2002

Don't tell, you're presuming that you have the skills to be able to program. Lot's just can't do it.

Also, forgive me, but your post seems contrived. If you really were a project manager with five years' experience and were in charge of several developers, you would be able to ask them for advice.

BH
Tuesday, November 05, 2002

Albert: I can't speak to Clancy's reading habits, but Stephen King certainly reads the classics, even if he doesn't write Grate Literary Fiction(tm).

If the only people who read Knuth were people who do genuinely challenging work - writing compilers, optimising standard library algorithms, developing operating systems, and so forth - they'd have a very small market indeed.

Rodger Donaldson
Tuesday, November 05, 2002

Wow guys, what a lot of great feedback. I suppose the best thing for me is that i've been forced to re-examine my reasons for doing this.!

Maybe i'm being unrealistic that i can become a good enough programmer, especially to the level that Just Me refers to, maybe that's not where my skills are at. I have worked hard to improve my project management skills, but have got to the stage where i find myself suggesting solutions/workarounds to my guys, and not always understanding the reasons why it can't be done like i'd suggested. We have a close working relationship, and i've always felt that it was something technical that i was missing.

I realise it's not necessary to be able to write 'neat' algorithms. I am heavily involved in the requirements and design process, so i take the point that learning to normalize would be very useful for me.

Don't tell my team.
Wednesday, November 06, 2002

Role of the manager: to ride the horses, not to outrun them.

You'll only suffer discouragement trying to gain more depth on specific topics than your experts.  Its as futile as the jockey trying to outrun the thoroughbred.  Ride the ponies, don't race against them...

Nat Ersoz
Wednesday, November 06, 2002

I can't imagine why you want to avoid telling your team about your problems and ambitions.

Also you say you want it to keep up with what your team is doing, but you asked whether it matters what language you learn ... perhaps you would want to learn whatever your team is or will be working with.

The "right thing" for a PM to do is to improve your team and their work process.

Christopher Wells
Wednesday, November 06, 2002

A gradualist approach might make it easier for you to learn.
If you already know how a language works, it will be much
faster to learn another one, so if you start with the easy
ones and work your way up to the difficult ones, it will be
faster than starting with the hard ones straight away.

Start with the business oriented aspects first, like systems
analysis, requirements analysis, data modelling and user
interface. Do this without doing any programming at all, but
just by reading e.g. "The Mythical Man Month" or pick an
interface book by Alan Cooper.

Then start with an interface oriented language (Visual
Basic) and a data oriented language (SQL). These are easy
languages, yet if you learn these you are already a
developer and can stop here if you want.

Now, you can learn harder languages way more easily,
like C#, Delphi or Java. They're all good. If you manage
these, you are already an advanced developer and won't
realistically need to learn any more.

If you really want to get into advanced systems
programming after this, read up on CS theory:
operating systems, cpu architectures, compilers. Then learn
assembler (try a simple chip like 68000). Don't bother with
C or C++ until after you are already confident of your
computing abilities.

I'm very impressed that you want to do this, my hat off to
you sir!

Ali
Wednesday, November 06, 2002

You say there are times when you've been unable to understand the reasons why suggestions you made couldn't be implemented.  I'm not a project manager, but if I were I think I'd want to have enough technical expertise that my programmers could at least explain the basics of why important design decisions were made. 

It's not like you need to become an expert who's as good or better at doing this stuff than your programmers are.  It just seems like you could do a better job if you had a deeper understanding of the programming stuff. 

Apart from some study on your own, why not just ask for more detailed explanations from your programmers?  Just tell them that you trust that they're right but that you don't understand things fully, and that you think you can do your job better if they spend a little more time educating you about the important design issues.

Herbert Sitz
Wednesday, November 06, 2002

*  Recent Topics

*  Fog Creek Home