Teaching My Dad To Drive

Continuing my attempt to upset those nearest and dearest to me, it's dad's turn today, as I turn an analogy against him.

Here goes.

I've been wondering if the idea of me learning to code properly is akin to teaching dad to drive properly. Or are the bad habits too well embedded to ever hope for them to change?

Dad drove for a living and was once good at it. But now, as an OAP (ouch - double whammy) being his passenger can be a nerve-racking experience. To his credit though he's aware of this and has promised that as soon as he has an accident (that's his fault) he'll hand over his licence. A noble stance and perhaps one more "older people" ought to take?

Anyway, to the point. As I venture further in to disciplines other than Lotus Domino, such as C#, I find myself struggling with some of the base concepts of coding. Well, I get the ideas, but I'm not confident I'm doing it the right way. If there ever is in fact a "right" way.

Has ten years as a Domino developer left me in a position, aged 35, that it's too late for me to hope to become a real programmer?

A lot of what I've been doing with ASP.NET is in C# and based on objects I've created myself. This all feels very natural and good and lately I've been feeling quite pleased with myself as I created a subclass for the first time.

Still, I'm not sure I'm following the right conventions and kind of wish I'd take a Computing Science degree.

Short of going back to uni can anybody suggest how best to learn the very basics and core principles of coding?


  1. If you have time to spare, you could read Code Complete. It's a great book that isn't too bound to any specific language. Many best practices on coding. One of the best programming books I've read.


      • avatar
      • Jake Howlett
      • Thu 11 Nov 2010 05:46 AM

      Thanks Tommy. It's now on my Wishlist.

    1. I second Tommy's recommendation. Loved reading that book.

  2. I second Tommy's suggestion for Code Complete. I would follow that with "Beautiful Code". But what's wrong with "going back to uni" as long as you do that 21st century style. One excellent learning resource (I use that often as inflight entertainment) are the courses from Stanford Engineering Everywhere. They put their complete video taped courses including the materials on uTube, the web and bitTorrent. Download is free. The only catch: you can't take their exams (but that's not your goal isn't it).

    :-) stw

      • avatar
      • Jake Howlett
      • Thu 11 Nov 2010 05:49 AM

      Thanks Stephan. Another one for the Wishlist.

  3. This has been on my 'ToDo' list for far longer than I want to admit;


  4. Here's another vote for Code Complete.

    • avatar
    • Mitul
    • Thu 11 Nov 2010 06:11 AM

    I had to buy 'Design patterns : elements of reusable object-oriented software' as part of the reading list back at uni (over 10 years ago), and have since always referred back to it:


    Whilst the latest languages such as C# 4.0 provide new syntactic concepts to learn, the principals behind the design pattern in the OO world will rarely change - an excellent book, and great foundation if you're up for some bedtime reading.

    I have a slightly battered copy if you want to lend it - let me know.


      • avatar
      • Brian Miller
      • Thu 11 Nov 2010 08:27 AM

      For the record, there is considerable disagreement over whether the "Gang of Four" book is really good, or astoundingly bad, for programmers.

      Worth it to read it and judge for yourself. But, be prepared for the possibility that some of its lessons are really "anti-patterns".

      • avatar
      • Jake Howlett
      • Thu 11 Nov 2010 08:42 AM

      If our paths cross then yeah, that would be good. Or if our wifeys meet up send it along. I'll suggest to Karen she invites you both over at some point.

  5. Second anything to do with design patterns - in the same boat as you Jake and having to catch up quickly.

    As well as general design patterns the MVC pattern crops up allot so make sure you have a good handle on this.

    Dependency injection and Inversion of Control also comes up allot in the Java & Flex world - think Spring framework and various Flex frameworks and I assume its just as important in .net.

    Don't leave out source control / version control techniques and Test Driven Development (Unit testing & Continuous Integration).

    I admit it was hard coming from Domino but I am getting there.


    1. See above. 100% Agree. :-)

      • avatar
      • Jake Howlett
      • Thu 11 Nov 2010 08:40 AM

      Maybe there should be a website dedicated to helping the potentially-ex-Domino bad coders to transition in to the real world. Like some kind of rehabilitation programme.

      Unit testing? Hmm, heard of it.

    • avatar
    • axel
    • Thu 11 Nov 2010 09:03 AM

    Get used to hear some podcasts like Software Engineering Radio podcast or InfoQ movies while riding on your bike, driving your car, being in a train, visiting a gym, tidy up your room, etc.

    Try some fancy tutorial from real object freak author from time to time.

    Make yourself a friend with some really good information technology student in his last year in uni.

    Don't take this stuff too serious. Algorythms and data structures is kind of science, OO stuff something in between like your flavour of Notes and Web programming. I allways that notes programmers don't get used to oo languages, because they believe that its very serious and sort of a science.

    • avatar
    • Ferdy
    • Thu 11 Nov 2010 12:50 PM

    One more vote for design patterns. Well, first you may need a rehearse on OO theory. Design patterns then teach you how to apply OO best. I've found the recommended reading list of codinghorror quite good:


    Can't say that I've read all, but these books are considered classics. DONT go for the official Microsoft material as that teaches you things the wrong way.

    In general, the architecture, and not just the style and conventions of your code are crucial nowadays. Finally, find some good blogs to follow. I hardly do .NET coding but I at least follow Scott Guthrie's blog:


    He is the product manager of the .NET familiy and more, by following him you know what's going on in that community.

  6. +1 for Code Complete.

    Also, for a really excellent text, "The Elements of Programming Style" by Kernigham and Plauger. It's an old book, out of print, and written with examples in FORTRAN, but every single tip is just as valid for today, I thought. Very enjoyable.

  7. My first computer I soldered together from parts and programmed using toggle switches on the front panel. This was about 35 years ago.

    But I studies engineering, not computer science in collage. In my first programming course, Fortran for engineers, the taught us to start in the middle and work toward the beginning and end of the program at the same time. No subroutines at all.

    Over the years I've been reading and learning to be a "real programmer" and after about 10 years on the job I got away from designing hardware altogether. (Software is a lot easier.)

    The advice you've been getting here is very good, I think, but "learning to code properly", isn't the same as becoming a good programmer or computer scientist. Coding is a small part of the job.

    I think you are somewhat like me ... I now stick to small projects or I have a small independent part of a bigger project. If the government came and asked me to design the software for the new national air traffic control system, I know that I'm not the right person for that job.

    In fact, and this bothers me a bit, if someone wanted an e-commerce system that could scale to 500K transactions a day, I don't really know where to start. My education and experience on small scale projects just hasn't lead me in these directions.

    So I've focused on learning how to design small software systems, first for embedded applications, and now for low traffic web sites.

    To that end I have learned a bit about:

    - Data structures

    - Program structure (data hiding, object coupling, modularity, maintainability, extensability)

    - Algorithms

    - Design patterns

    - Structured design

    - Object oriented design

    - Object oriented programming (but don't use inheritance too much)

    - Database design (normalization)

    - Software life-cycle management

    - Project management and estimation (feature creep)

    That's all that comes to mind right now.



Your Comments


About This Page

Written by Jake Howlett on Thu 11 Nov 2010

Share This Page

# ( ) '


The most recent comments added:

Skip to the comments or add your own.

You can subscribe to an individual RSS feed of comments on this entry.

Let's Get Social

About This Website

CodeStore is all about web development. Concentrating on Lotus Domino, ASP.NET, Flex, SharePoint and all things internet.

Your host is Jake Howlett who runs his own web development company called Rockall Design and is always on the lookout for new and interesting work to do.

You can find me on Twitter and on Linked In.

Read more about this site »

More Content