Archive for the 'software development' Category


Learn how to apply, not how to copy/paste 0

When I’m learning something new, usually I just start out by reading about it.  Many times I will go look at the code that someone else has written, generally with open source projects, and attempt to follow it.  What I’m looking for is an understanding of how the concepts work, not just identifying them so that I can reproduce.  This may lengthen my initial time investment somewhat, but it pays off in the end.

Code samples are just that: samples.  They are usually not representative of real world applications, and in many situations they are not intended to be in the first place.  Likewise, code snippets of different strategies or techniques in particular areas of the application are often not pulled out of a real world application either.  The point I’m trying to make here is, before you copy and paste code into a real application, make sure you understand what’s going on with that code. If something were to go wrong or not work the way you intended, you need to know how to fix it.

I saw this a lot when I was in school.  There were people in the Computer Science courses who could not see the programming language as just a tool used to write software.  To them, it seemed to carry some sort of mysticism, the likes of which was not to be disturbed.  So what did they do?  Copy code out of the book, and hope to tweak it until they got it working.

Most of my understanding of software and programming languages comes from taking a concept that I’ve read about and writing my own scenario with it.  When doing so, I am given the opportunity to explore the code, see what each piece does, and modify the behavior in ways to get different results.  I experiment.  When I experiment, I feel a greater sense of accomplishment than had I just read a book or blog post about a subject.  In fact, reading normally gives me the itch to write code these days.

During my reading, I often come across comments on blogs or messages in a mailing list of people asking the authors directly for code that addresses particular situations.  I never respond to these people, because it’s never my place; they’re not asking me directly.  I always think though that these developers who need code samples for every particular situation must not be learning how to apply what they are reading.  After all, the example that the author showed explains how to approach it, why not just take the example and learn from it?

Does learning to apply have any other benefits?  Well, I, for one, like to do most of my development without having to Google every time I see something unexpected.  If I can’t figure it out based on what I already know, or if the code just smells bad, then I will ultimately resort to this, as there is obviously something I do not know and need to learn.  Learning is an endless cycle, and I would not have it any other way.

Reflections on myself as a software developer 1

About a month ago, I felt myself entering one of those periods in my life where I had to face my self-doubt and challenge my complacency.  It wasn’t the first time I’ve been challenged with this, and by far will not be the last.  Each time I am reminded how important it is to be passionate about what it is I do and how vital it is to keep learning, because new learning and constant challenge breathes life into what can quickly become a monotonous and stagnant career.

In the past, I have been asked why I try to learn so many things in my time away from my day job, and why I don’t put all that extra time into what I do at my day job.  Here is the answer: that is the one way road to becoming burnt out or complacent.  The constant challenge of learning new technologies and practices keeps me on my toes, and also opens my eyes to what software developers outside my shop are doing.  This constant evolution of my skill set also makes me hold my code and the code of others to a higher standard.

I am a .NET developer now, but that does not necessarily mean that’s all I will ever be.  I am a Software Developer first, my focus in .NET is merely the current “tool for the job.”  If I was told tomorrow that everything was being converted to Ruby on Rails, I’d jump on it in a heartbeat.  I cannot, and will not, limit myself.  That being said, as a .NET developer, I do not limit myself to just what Microsoft says or what tools Microsoft releases.  I use the best tools for the job, when I have a choice in the matter.  If I were a Java developer, my perspective on this would not be any different: not all of the tools come from Sun, and the ones that do may not necessarily be the best for the task at hand.

I do a lot of work in my personal time, some evenings I come home from a day of programming to do more programming.  Some of it goes unfinished, but I still learn from it.  Some of them are not meant to be “finished,” as they are just conceptual projects to help me learn and understand something new.  To be perfectly honest, I would rather be doing some of my personal projects for clients, so there would actually be some sort of deployment strategy involved, and so my work would actually mean something.  As I am still a young developer, this is an area I’m not too terribly experienced with, but would like to be.

This year my focus is on networking, and getting out to participate in workshops, conferences, and the like as much as possible.  This has been my weak area so far, because I don’t live in one of the bigger cities and have access to a much smaller pool of developers (in fact, I hardly know more than those in my own office).  This is definitely something I’m looking to change, and learn all sorts of new things in the process.

Bob Martin Presentation on Agile, Professionalism, and Software Craftsmanship 1

Sergio Pereira recently posted two videos of a presentation that Bob Martin (a.k.a. “Uncle Bob”) did at the February meeting of the Chicago ALT.NET group.  It is a very interesting and informative presentation, and highly recommend it if the above topics interest you at all.

One part I particularly liked is the talk about software craftsmanship with respect to a martial arts-style system, where you have masters, or black belts, who train their students, and when those students become black belts, they go off and some may further develop and create their own style, which then gets taught to more students.  The idea really resonates with me, but so does the idea of software craftsmanship in general, and I would very much like to see the industry move in that direction.

Presentation: Video – XP: After 10 years, why are we still talking about it?

Q&A: Video – Uncle Bob Q&A at Chicago ALT.NET

« Previous PageNext Page »