Set any 2008 Resolutions or goals?
I am not one big on New Year Resolutions. Never have been. I have seen many people set them and motivate themselves for a few weeks, maybe a month, and then go right back to old habits. It takes more than a New Year to break habits, it takes discipline and patience. Right now is Epiphany and I think there is a lot to be learned from the word alone.
Epiphany - a sudden, intuitive perception of or insight into the reality or essential meaning of something, usually initiated by some simple, homely, or commonplace occurrence or experience.
I think as programmers we each have had a number of Epiphany moments over our careers. Remember the first time you heard about pointers? Egad, I do. I don’t think I really understood them for a good five years. It took an epiphany for me to truly “get it”. I already had all the facts, and I knew how to use them. I was programming in C++ fulltime in my work. But I was never really comfortable with them until then. I would like to share a few of my epiphanies about programming over the years, and then discuss my plans for learning this year.
Programmers are never done learning
To program is to be constantly learning. When I speak at college graduations and to people even considering coming into this field I usually ask them a few questions. Do you like to learn? Do you enjoy reading? Do you find brain teasers challenging and exciting? If you didn’t answer yes to all of them you probably will not enjoy programming for a career. I still read about ten hours a week specifically with the intention of learning more about my profession. One of my neighbors and I spoke about this about ten years ago. He is a heart specialist. He takes one week a year and goes to a refresher course on current diagnostics trends, etc, and spends about ten hours a month reading medical journals. He told me he reads mostly to keep up with the new medications and side effects. There is really nothing new in his field – the human heart is not subject to Moore’s Law. We don’t pump twice as much blood every 18 months, or grow new valves. He thought it was strange that I constantly have to relearn my profession. He couldn’t even fathom the idea that all the technical jargon changes that quickly. I rattled off just the current Microsoft alphabet soup I was trying to read up on, not to get competent in it, just to know what it was about. I spoke with him again this weekend and asked how things were going. He said he was bored with his career, nothing ever changes. I told him to count his blessings.
Programming is change
The PC industry as a whole may have the whole Moore’s Law syndrome for hardware, but I think that software is changing just as quickly. If you were to take the number of lines of code I write per year I think it has probably dropped drastically. But if you look at the number of instructions that code explodes into on the CPU I think I probably execute more instructions per line of code than ever before. Part of it has to do with the framework, but part of it is just all the libraries and encapsulation of complexity. My first SMTP mailer application was over 8,000 lines of C++ code. You had to open the socket yourself, handle buffers, dropped connections, etc. Now you can literally write an email in about 3 lines of code. Did it change how many instructions are run? No, in fact there are probably more today (IP6 / firewalls / proxies / etc).
Embrace Change – one day at a time
I stopped trying to fight it a long time ago. Embrace change, and even the alphabet soup of new buzzwords. I have a few things I do now to help me along in this sea of change. You probably already know most of them, but a few of these might help someone so here goes…
15 minute rule
I have a rule that anytime I have 15 or more minutes before a phone call, meeting, whatever to read something. I keep a stack of magazines on my desk that I have not read. If I know I have a few minutes before a meeting I will read one or two articles. If they are good I rip them out and file them, then throw away the magazine. All the good stuff is filed, all the bad stuff is trashed. No need to sort it again in the future. Doctor, dentist, pick up kids – Same thing applies. Take some of your quick reading material with you. Today with smart phones and more you can turn any chunk of time into a chance to read or listen. I have recently started listening to podcasts of technologists on my way to work. It helps me catch up on buzzword bingo, and I feel like the commute time was better spent than listening to traffic reports.
Check your list – Make a list of the technologies you want to learn. Not in depth, just a passing familiarity is good enough. If you read a little and like it, add it back to your list to learn more. I do this all the time with technologies. Heard a buzzword and don’t know what it is? I write it in my Palm. Then during some downtime I will Google it and read some articles. I even print out sample chapters from books on the technologies sometimes to read on planes. Saves me buying a book I am not sure if I will ever need, and almost always the sample chapters are the technology overviews. Then if I do want to know more I can buy the book.
Share your knowledge – talk to those around you. You might be amazed how much (or little) fellow programmers know about things. If you are the only one in your group or company seek out other programmers. Attend a user group meeting, online forums, anything. Keep learning and sharing what you know. I think I picked this up from the military, practical knowledge is best when it is spread around. Found a bug or a tricky solution, blog it, email it to your friends, something. Don’t let it be lost.
Embrace programming! If learning is a pain you have not embraced what it means to be what we are. Computers are not stagnant.
2008 - the year ahead
This year is exciting to me for a number of reasons. The biggest is that we now have a completed product (VistaDB 3.3) that we can look at again through fresh eyes. We get to go back and reexamine all those things we assumed before. Try new approaches to the same problem. Expand solutions to encompass more complex behavior. This is where a lot of programmers get stagnant. They view the exciting part of programming at the start of a project. I don’t. I always view the start of the project as mostly groundwork. You have a lot to do in order to get a system up to a base level. Once that level is achieved (and if you designed it right) it then becomes the challenge to take the application to a new level. Here is a partial list of things I want to learn or read more about this year, enjoy!
Workflow (WF) technologies – Workflow is core to most process based systems. But in almost all situations we programmers reinvent the wheel for each process. The WF framework looks exciting to me for automation of these processes and to build standardized solutions.
ORM (object relational mapping) frameworks – particularly how Microsoft is going to do it’s object mapping system. I think that is pretty exciting stuff.
Silverlight – I am interested to see how Silverlight 2 will integrate the CLR runtime. I don’t think VistaDB should run inside a Silverlight app, but I want to look into how Silverlight can use webservices to get and store data. That is where VistaDB could be used in a direct supporting role.
ZFS Filesystem – This is a new filesystem from Sun. It is interesting in that it is 128bit first off, but also it is supposed to allow realtime compression without performance impact.
Server Virtualization – I have read a lot on this in the past, especially when I was working on my PhD. But the new hardware support with shadow registers and the ability of the host OS to not require ring 0 in the CPU is neat.
Garbage Collection – There are a lot of algorithms on GC (dot net was not the first). I would like to read up on the ones used in Mono (I know there is more than 1) and why they chose them.
LINQ – Of course – huge topic.
Boo – the Dot Net scripting language. How can they do that when strings are immutable in Dot Net?
FastCGI – I know the basic of what it is, but that is it. How does it work and why is it going into IIS 8?
mySQL – I have not used mySQL for anything since the 3.x days. I was reading on Slashdot a while back on their new engine for 6.x. It sounded neat. I am sure I will come up with a huge sublist from this topic.
WCF (Windows Communication Foundation) – will this make network programming easier? I don’t know anything beyond the press release material I have read.
Direct X 10 - I don't know what the big fuss is about... New object model, new hardware rendering for parallel processing? Interesting. That is at the top of my list. So you can be sure I will be writing blogs about many of these topics through the coming year. I honestly hope you grow your list as a result of reading this. Take some time to read things you are interested in, even if they are not directly related to your job today. It will change the way you think about things in what you do today and tomorrow.
Similar Posts
- devLINK 2007 – post show analysis
- The GC does not solve all memory leaks
- Looking ahead to 2008, and back at 2007
