Tuesday, September 23, 2014

Life without a .Net

I wrote code exclusively on the Microsoft platform from 1997 until late 2013.  Sixteen years of ASP, ASP.Net, Visual Basic (4,5&6), VB.Net, wonderful C# and lots of MS SQL Server.  I could take a pile of computer parts, assemble them into a server, load the current flavor of Windows Server,  IIS and MS SQL Server, and assorted .Net Frameworks.  Then I could design a database, write the code(C#, assorted JavaScript add-ons), put it all together and Ker-Pow, a working software application/website/platform thingy.

And those applications worked!  And there were always more .Net jobs waiting for more things to be built.  And then, one day, while looking at Visual Studio 2013 I realized, I can't do this anymore.  I tried to slog through.  I know that everyone feels burnout from time to time, but I was starting to get a little worried at the thoughts going through my head.

Do you still want to be a software developer?  What else can I do?

I had recently moved from a startup (using .Net) to a big multi division company that had an Information Technology Department.  You know the kind of place I mean.  A cube farm that spanned an entire city block.  Bookshelves full for Wrox & MS Press titles.  Motivational slogans.  Well stocked Keurigs. Glass walled conference rooms.  End tables for network printers that had the \\unc\\ taped to the front.  My title was Senior Software Webgineer or some such.  The company was so big in fact, that the job I was hired to do had already been contracted out by the department that originally contacted IT.  Nobody told the hiring manager.  So after my on-boarding, there was not much for me to do.  I went to a few hackathons on the weekends.  That helped some, but the main problem was I didn't want to work in the .Net-corporate-IT-business-causal world anymore.  There was nothing wrong with the people at the company, it was all me.  I was tired of the dress code, the culture and the tech.  But at the same time I was scared to leave it.   It was all I knew.  That was part of what was bugging me.

I went to a meet-up for the relatively new programming language called Go (golang).  I had been messing around with the language in my free time just to break the .Net monotony.  The company that hosted the meet up said they were hiring and to talk to them if interested.  I was.  I knew this place would be different from what I had done in the past.  I also knew that I had zero skills in the tech stack they used.  At that point I'd written maybe 100 lines of Go, and they were primarily a Python/Django shop with a few projects in Go.  But I told them of my interest anyway and they suggested that I submit a resume.  I did.  Two interviews later I got the offer.  I was sitting in my cube in Corp-IT-Ville when I got the email.  I raised both hands in the air (clinched fists I think) and hissed, "Yessssss!"

I started out with new company with about 100 lines of Go code experience and a crash course in the Django tutorial.  But man, what a curve.  If it was just the language differences, that would have been easy enough, but it was more than that.  No Windows machines.  All developer machines were OSX.  And the development environment?  Well they used a tool called Vagrant, which housed a Linux build via Virtual Box with MySql and Gunicorn and Celery and Nginx and can you check out this feature branch and submit a PR that we can review?  Lots of command line...commands.  My head was spinning.  I was asking questions and Googling.  A lot.  I found myself thinking, "If this were on Windows, I'd do this thing this way!" But I wasn't on Windows.  Every day I was learning new things, which was great, but I was also finding out about new things that I did not know anything about.

And that was the worst part.  After about five months, I still was not able to turn things around as fast as I wanted to in my new job, but I also wasn't up to speed with the Microsoft world either.  New versions of C#, SQL Server and Visual Studio were released.  I did not know what the new features were.  I was trapped between the two worlds and I couldn't be productive in either of them like I wanted to be.  So what's a developer who is in over his head to do?

Slog through it.  Day after day.  Google dumb questions.  Ask dumb questions.  Get no where.  And then one day something makes a little bit of sense.  Slowly, I learned how to make changes to code that caused errors but...they were errors that I was expecting to see.  That's the Eureka moment.  When you can break source code in expected ways, soon you can make it do new things.  Things like, new features or bug fixes.  It's all the same thing, modifying the behavior of the code so that it responds the way it should.

Now I code in Go(golang) and Python.  I can form my thoughts into these new languages and produce thing that work.  Both of these languages have made me a better overall developer because they force me to think about code in different ways.  My pull requests still generate some chatter about how things could be improved, but then that's what pull requests are for.  Occasionally I'll get a, "oh, I didn't know you could do that" from some one.  It's cool when that happens, and not because it means I'm a big shot (ha!).  It's cool because, after having a team of developers patiently answer my questions for almost a year, it's nice to be able to give back, if only just a little bit.

To wrap this up, the journey was more than worth it.  Writing software is as fun as it's ever been.  It's hard to be a beginner in a field where you thought you knew a lot, but it's a necessary step if you want to continue to grow.




No comments:

Post a Comment