January 2004 - Posts
I’ve been programming for more than 20 years now and I’m as passionate about it today as when I started. I’m one of those fortunate people that found what they loved to do and then succeeded at turning their hobby into a successful, well paying career. So why do I feel so unsatisfied?
I have a theory or three, so I’m going to share them and see if anyone else feels the same way. If you have any words of wisdom I would love to hear them. Keep in mind that I’m VERY thankful for where I am, so please don’t lecture me along those lines.
My first few jobs out of school were fun jobs. I did a lot of factory floor automation stuff and had the opportunity to bring a lot of ideas to life. I typically didn’t work from a project spec. Instead, someone had an idea and I had to implement it.
As I got more experienced I moved away from writing automation apps and into writing business apps. This was fun for a while, but then started getting boring as I started working on existing systems rather than bringing ideas to life. Getting tired of the boredom, I decided to become a trainer. I thought I could train part-time and do some small development jobs during the off times, so I got my Microsoft certifications and became an MCT. For the next 18 months or so I taught VB 6 and several other classes in various cities. This was fun for a while, but I really wanted to use what I was teaching rather than just teaching it. Unfortunately, living in a rural Kentucky town, I wasn’t landing any side jobs.
Once the economy started heading south and the training gigs were tapering off, I didn’t have much choice; my family and I had to head south too. We relocated to Nashville and I started working as a consultant for a Microsoft Certified Partner creating applications for their clients. I was finally doing exactly what I wanted - it was awesome! After about three months the owners decided to drop the Microsoft development end of their business and focus on PeopleSoft consulting. At about this time one of their clients needed a VB/SQL developer, so they contracted me out to them for a year. Once the contract expired I was promoted to Director of Technology for the consulting company. Having both a network engineering and software development background made me an ideal candidate for the position they had available. But about six months into the job I was missing doing full-time development so badly that I had to move on.
That gets me to where I am today. I work for an investment analysis and reporting company. I started as a developer doing heads-down programming, but after four months was promoted to development group leader. I was given the responsibility of overseeing our migration to .NET. This part of the job has been really fun, but now I’m spending about 60% of my time managing five programmers that spend about 60% of their time doing support rather than development. The other 40% of my time is spent programming, but it’s not “fun”. I spend more time learning about investment analysis than anything else. There is no real “development” involved because everything we do is add-ons for our existing system. The real challenge is interpreting the business spec!
I’m as passionate about programming today as when I started 20 years ago. I love what I do (the development part of it) and I’m constantly striving to learn more. I’ve worked with dozens of developers – lots of them smarter than me - but I’ve never worked with anyone as passionate or eager to learn about technology as I am.
I’m beginning to think that my “dream job” is just that – a dream. I want a job where I can bring dreams/ideas to life. I don’t want to maintain existing systems. I don’t want to waste 60% of my time doing things that don’t make me a better developer or have a direct impact on my future. I don’t want to spend days pouring over stored procedures trying to figure out what the last developer was doing just so I can rearrange what he has already done. I don’t want to be a “programmer”; I want to be a “developer”.
I have a handful of my own project ideas that I would love to bring to life, but with a wife and two kids, it’s difficult to discard our primary income to chase a dream. My wife is also developer, so she understands how I feel and would support me (literally) if I decided to start my own business. I’m just not sure that I’m ready to take that risk…at least not without a lot of planning.
Surely I’m not the only developer that feels this way. How about you? Maybe you were passionate at one time, but have since adjusted your expectations to accept the reality that not all jobs are “fun”. If so, tell us about it.
Is my “dream job” simply that – a dream? Do I need to adjust my expectations and accept what I’m doing as the “real world”? Or do I need to be like Joel Spolsky who recently said “I wanted to work in a real software company so much I started one.”?
As you probably know, it's easy to sort an array in .NET using Array.Sort(). But what if you want to sort an array of structures on a particular field defined in the structure? It can be done, and what follows is the approach I took.
I created a structure to represent a file:
Private Structure SuccessFile
Public Name As String
Public Created As Date
Public Hidden As Boolean
Then I created an array to hold a list of files (and of course, I populated the array, but I'll leave that code out):
Dim SuccessFiles(FileList.Count - 1) As SuccessFile
At this point I needed to sort the items in the array by the Created field. I tried Array.Sort(), but it threw an exception, so I went to MSDN.
The MSDN description of Array.Sort says:
"Sorts the elements in an entire one-dimensional Array using the IComparable interface implemented by each element of the Array."
That sounded like the array of structures could be sorted if the structure implemented the IComparable interface. Cool! .NET structures can implement interfaces, so this should work.
I modified my structure as follows, and the Array.Sort worked perfectly.
Private Structure SuccessFile
Public Name As String
Public Created As Date
Public Hidden As Boolean
Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo
Return Me.Created.CompareTo(CType(obj, SuccessFile).Created)
I hope you find this useful.
I'm involved in the hiring process at our company and I deal with the certification issue frequently. What follows is my take on certs.
- Certifications have been good to me and my family, but they aren't for everyone.
- I'm turned off by people that try to sell themselves as experts because they are "certified".
- I'm turned off by people that completely dismiss certifications as useless.
- I like when a person has a certification AND has a good reason for having it.
Let me explain...
I started off with a very poor impression of certifications. Around 1994 I worked with a Novell CNE who was nothing short of a walking Novell reference book. Although he had a head full of knowledge, he couldn't write a login script to save his life. As an employee, he was worth about as much as the red Novell books on the shelf. Like the books, he couldn't do anything other than offer information. This was my first impression of IT Certification. Needless to say, I wasn't impressed!
Until 1999 I refused to get my certifications because of this guy. But finally I decided I was tired of people with no experience getting more attention simply because of the letters after their names. So, I decided to get my certification. Within a year I had my MCP, MCP+I, MCSD, and MCSE. I followed up with my MCDBA in 2001. (I actually enjoyed studying and testing.) These certs opened the door for me to do something I had always wanted to do - train! So, I got my MCT and became an independent trainer. I taught the MCSD track for about a year - until the economy and changes to the MCT program forced me to find a "real" job. Because of my certs I found a great job as a consultant with a Microsoft Certified Partner in Nashville. Without the certs I wouldn't have had a chance with them.
After being a stay-at-home mom for seven years my wife wanted to go back to school to finish what she started before getting pregnant. She had helped me on several small contract jobs that I had taken, so she decided she wanted to be a programmer, not a teacher like she had thought in the past. But rather than going to school, I suggested she let me train her and help her get certified. She agreed to try it and in about a year she was certified (and knew what she was doing!)
She landed a job after her first interview - not because she was experienced and not because she was educated, but because she was certified. She stayed there for about a year and then started looking for something more challenging. Today she is a VB.NET developer for a company that develops legal software. This time she was hired based on experience and recommendation, not just certification.
She wouldn't have had either of these opportunities without a certification.
So, to wrap it up I'll say that certifications are good if you have a reason to need one. For me, certification was a requirement to become an MCT. For my wife, certification allowed her to get her first development job. Certifications have their place in this industry, and contrary to what most of my job candidates believe, it's not to tag the holder as an "expert".
I recently needed to set the TopLevel property for a form but intellisense didn’t indicate that this property existed. The documentation said it existed, and, indeed, it does.
However, because VS.NET's default behavior is to hide “advanced members“ for VB projects, intellisense didn't display it until I went to Tools->Options and cleared the option to “Hide Advanced Members”. This option can be found under Text Editor->Basic->General.
These aren't hidden by default for C#. I guess MS assumed “Basic“ developers don't need the “Advanced” members.
By default, Visual Studio.NET sets the AssemblyVersion attribute of an assembly to "1.0.*". (This attribute is defined in the project’s AssemblyInfo file.)
The MSDN documentation implies that using an "*" as shown above will cause the <build number> and <revision> to be incremented each time the assembly is rebuilt.
It works exactly as I would expect for a C# project - rebuild the project, get a new version number. However, for a VB.NET project the version is only incremented the first time the project is rebuilt after being loaded into VS.NET. Any subsequent rebuilds will not result in the version number being incremented. To increment the version number again you must close the solution, reopen it, and then rebuild it.
It seems to me they should both operate the same way.
So, here I am. After more than a year of reading and benefiting from other blogs, I'm making the first entry of my own.
But what should I talk about in this first entry? My job? My hobbies? My wife (also a .NET developer)? My two rowdy boys (8 and 10)? Tootsie, my dog? Nashville? No, probably not any of those...at least not yet.
The purpose of this blog is to share what I know and what I'm learning about .NET development. Hopefully you will find this to be a place where you can pickup those little nuggets that make your job easier and/or more fun.