A Long Overdue Update

I haven't posted an article in over 2 months, but I assure you that is not for lack of interesting development thoughts racing through my head. It is merely a side effect of switch from a web developer role into a software / firmware developer role - a lack of confidence.

When I wrote articles on PHP, I spoke as a 5 year veteran who was comfortable enough with the full scope of the language to speak on just about any facet of PHP development with at least a moderate degree of experience. As a software developer, I feel unsure of myself and still feel like I'm barely treading water. The subject matter of this blog was never meant to be purely tutorial or informative content, but it gradually shifted in that direction during my years as a web developer.

The purpose of this blog is to track my thoughts, my progress and to act as a portfolio. And I can't do those things without speaking of my missteps and troubles adapting to the new paradigm of being outside of web development.

Since making this transition, I have spent the majority of my time working in VB .NET on the software front. As I said in my last post, I actually like VB, even though it appears to rival PHP for whipping-boy status. Yes, the language is extremely verbose and the scoping can be prone to horrible confusion, but that doesn't detract from my enjoyment of a strongly typed language with a robust (albeit sluggish) IDE. VB has some features that I craved in PHP, such as attributes and well integrated unit testing.

I love strong typing. I'm still learning to utilize it properly. Each day gives me new opportunities to test the limits of when it is good and when it is not. One such limitation deals with the PHP concept of variable variables. While this isn't truly a strong typing issue, I bundle it in with strong typing since my solutions often involve strongly typed dictionaries. I didn't realize how useful I found variable variables until I used a language that didn't support them. That isn't to say I relied on them, but they were a tool in my toolbox that I'm now learning to live without.

I've spent a small amount of time in C# .NET as well, but this is for a relatively small library that doesn't require as much maintenance as the VB work, so I don't have too much to say on it. It seems extremely similar to VB, though. That makes me wonder why doesn't it get as much hate as VB does. I can say that I would prefer C# for new projects, if only for the syntax being much more familiar to me than VB's.

One particular challenge of software development is handling libraries and includes. Keeping track of a shared or dynamic linked library is more of a pain than I had realized. Unfortunately, my company still uses subversion and so I can't make use of git's amazing submodule features. I would like to switch to git, but that is a huge undertaking that I simply don't have the time to do.

Thje other aspect of my new workload is firmware. That firmware is mostly written in C, but some legacy code is write in Basic that I must occasionally fix. Basic has been a huge paradigm shift for me - the lack of scoping and reliance on global variables has made me think and analyze programs differently. I haven't written any new code in Basic, and doubt I ever will, but it's an experience I'm glad I'm having. It is a very frustrating experience, but a useful one.

I much prefer C for firmware. It is very low level and I highly enjoy that. I wouldn't want to be that low level when dealing with software or the web, but when working on PIC microprocessors, the limitations aren't too severe. I simply enjoy the feeling of being that close to the machine. I have written some new firmware in C, and have much more experience in it than in Basic.

The final thing that I have been working on lately is electronic engineering. The resident engineer at work has been giving me a crash course in EE and I have been doing breadboard prototyping for some tests. These tests are partially a learning exercise on my part, and partially recording data for new projects that my team is developing. Ever since I made a robot a few years ago, I've wanted to delve more into hardware and I am finally crossing that threshold.

To advance my hardware knowledge further, I'm considering picking up a NinjaBlocks set and testing my ability to build new sensors and effectors. I've already succesfully built a vibration and a motion sensor and would love to do something more complex with them than turn on an LED.