Saturday, September 6, 2014

Self Assessment


OK, self assessment time. I'm a 45-year-old software developer, working almost exclusively in C# and Windows Forms. I like my job, my reasonably high responsibility level, my coworkers. Assuming that my workplace doesn't change much in the next 10 years, I hope to still be working at the same place I am now when my youngest graduates high school.

We had a VAX in college, and that was mostly what I used: a mainframe that seemed reasonably powerful for its time (was it? I'm not even sure), but would be put to shame by most of today's laptops. I got a job at the help desk. People would come in with random problems, and I'd try to help. I knew BASIC and Fortran when I was hired, and not much else. There were a handful of things we were trained for specifically, like creating accounts. After that, though...maybe you knew the answer to some questions, and maybe you didn't.

So I poked at languages. I took classes that used Pascal. I picked up some other languages on my own, like C, Prolog, Lisp, TeX (yep, it's a full language!), and C++. Most of them I only picked up well enough to write simple programs. C was the exception – I knew everything that was in the standard library, and used this as my native computer language. I learned things that people had questions about, like the editors people used on the VAX, the language behind one of the editors, DCL (the command line interface for the VAX), a graphing package, and a statistics package (and just enough statistics to use it).

There were other machines around campus that I didn't use so much: Macs, PCs, and Unix machines. I didn't learn much about them while I was in school.

Since then, I've worked on Windows in all my jobs. I learned a fair amount incidentally, and picked up a reasonable amount of knowledge. C# is now my native computer language, and I know it pretty well. I'm a better developer than most. However, I haven't picked up as much as I could have if I had been more actively seeking improvement.

When I thing about things that I've learned, it strikes me that at the time I didn't know whether that information was going to help me or not in the future. I know DOS to a reasonable level, but not as well as if I had known 20 years ago that I'd still be using it on and off today. Several of the languages that I learned I haven't used since learning them, unless you count knowing them well enough that when we hit them in a Computer Languages course in college I didn't have to worry about it. The graphing package? Useless. The stats package? Useless. The VAX, DCL, and the editors that I used there? Useless.

The trick here seems to be in two parts. The first part is that you don't know ahead of time what pieces of information are going to be handy later. I learned some things in college that were useful, and have built on a foundation that I'm still using today. The second part is that it makes sense to focus on something that you think may be useful in the future. A cheap way to do that is to put some of your effort into something that hasn't changed much over time.

While the VAX has pretty much died off, Unix is still around in a bunch of flavors. OS X is a Unix-based OS, and Linux is a free Unix clone.

So here's my plan for the year (which I've already started on):
1) Install Linux as a virtual machine on my PC.
2) Learn Python.
3) Learn one of the text editors for Linux.
4) Use source control even when poking around on simple tasks, even if it means replacing one trash file with another.
5) Document what I'm doing, more or less. Explicitly evaluate what I think of Python, the text editors, etc. My opinions will be ill-informed at first, but they'll hopefully evolve as necessary. Sometimes it's not as easy to evolve. For instance, you need to pick a text editor: it doesn't make sense to me to learn VIM and Emacs well. I've already chosen a “winner” on this one, which I'll discuss in another post.

I have installed Linux. I've starting poking at Python on Windows, but I'll do  future work here on the Linux VM. I've also scratched the surface of the two most popular text editors (I can open, change, and write files). I haven't used source control yet on Linux: I understand that git will be my friend.

For each of these, I'm going to go through a book (probably an online book) or document from beginning to end. I don't want to pick up a fair amount and then say, “Hey, look! There are all these shortcuts that I never knew” two years later. I'm not looking to race through anything: this isn't supposed to be a checklist, but things that I'll have as solid skills when I'm done.

No comments:

Post a Comment