Welcome to our continuing series of Code Project interviews in which we talk to developers about their backgrounds, projects, interests and pet peeves. In this installment we talk to Alex Tatiyants, proud creator of JS.js, originator of the MoreSQL movement, and inventor of Guilt Driven Development.
Who are you?
My name is Alex Tatiyants and I live in Glendale, California, with my wife and daughter.
I work for Zynx Health, an amazing company which specializes in clinical decision support. My current title is “Director, Technology”, but my real job is to make software engineers happy. Great engineers are a rare breed and I’m truly blessed to work with the software development equivalent of Seal Team 6 (especially if Seal Team 6 was into salty snacks and soft drinks).
Though I don’t have as much free time as I used to, I do enjoy reading, painting, writing music, playing with new technologies, slow walks on the beach, and blogging. Among those, I dedicate the most time to blogging and my favorite topic to write about is geek humor. I’m also the proud creator of a revolutionary JavaScript library called JS.js, founder of the MoreSQL movement, and the inventor of Guilt Driven Development.
What do you do?
I’ve been lucky so far in my career because I’ve had the opportunity to work on some very different systems: large-scale back-end processing, EAI, enterprise data management and data warehousing, desktop and web applications, etc. At Zynx, our primary product is a web-based content management system called AuthorSpace. Among other features, it has a pretty sophisticated editing environment that’s built on native browser technologies. Needless to say, my primary focus for the past few years has been on web application technologies and patterns: JavaScript, REST, MVC, etc.
What is your development environment?
Our stack consists of Ext JS, ASP.NET MVC 3, Fluent NHibernate, and SQL Server. We use GitHub Enterprise (privately hosted) as our source repository and Jenkins runs our continuous integration. Our primary IDE is Visual Studio 2010 and Resharper, through we have a few IntelliJ and Eclipse installs around the office as well.
We do a lot of automated testing, so there is a whole bunch of testing frameworks in our environment. Our unit and integration tests are in MSTest (for C#) and Jasmine (for JavaScript), while our functional tests are written in Twist (a test management system from ThoughtWorks Studios) and Sahi.
As for hardware, my work machine is a Windows 7 box with a quad Core i7 CPU, 8GB of RAM, and an SSD drive, while my home machine is a souped-up Mac Mini. Both have dual 23" wide screen monitors, which is awesome.
What new tools, languages or frameworks interest you?
When it comes to emerging trends, I’m starting to get the feeling that a full JavaScript stack may be in a lot of folks’ futures. A combination of a good front-end library (Ext JS, Prototype, Backbone, Knockout, etc.) + Node.js + MongoDB can solve a lot of tough problems quite elegantly. In fact, I’d like to coin a new buzzword-compliant term to describe this new stack: JS Climist (JavaScript Client/Middle Tier/Store). Catchy, no?
What is your coding pet peeve?
For a coding pet peeve, it’s a tie between commented out code and TODOs because I really dislike clutter (as anyone who sees my desk will attest to). Furthermore, TODOs really bug me because it’s sometimes hard to tell whether they’ve been dealt with already or not.
As far as favorite naming convention, I personally swear by Bob Martin’s Clean Code book. His whole approach to writing clean, easily grok-able code has always appealed to me.
How did you get started programming?
My first computer was a Tandy. It had no hard drive, so you had to boot everything off diskettes. I remember writing my first program for it in QBASIC, a little Snake-style game. It was an amazingly empowering experience because suddenly I could make a computer do something. It also gave me a tremendous sense of accomplishment because I was actually creating something out of nothing.
My first paid programming job was writing ad-hoc queries in SAS for medical researchers. This was a college job and a couple of months before graduating I wrote a web application (in classic ASP) which exposed a simple interface to the underlying SAS environment. The app was very well received both by the end users (because they could very quickly get the data they needed) and my boss (because it essentially eliminated the need for my position).
How has the developer community influenced your coding?
I’m very impressed by the impact that the open source movement had on our industry. I love that one person (or a handful of people) with a great idea that solves a real problem can attract a strong following from the community and quickly lead to major breakthroughs: jQuery, CoffeeScript, Node.js, Rails, MongoDB, Sinatra, Backbone, and many others.
I’m also amazed by both the wealth of information available today and the pace of change in our field. Because of this, I spend a lot of time keeping up with technology. I regularly read the Code Project (of course), Hacker News, Slashdot, and DZone. I follow forward thinking technologists like Kent Beck, Uncle Bob Martin, Martin Fowler, Ayende Rahien, Jimmy Bogard, Miguel De Icaza, Jeff Atwood, Scott Hanselman, and DevOps Borat.
Finally, I try very hard to read one technical book a month in order to get a deeper understanding of an interesting topic (I’m currently reading Functional Programming for Java Developers). By the way, when it comes to technical books, Safari Books Online has been a great resource, especially now that they have a half-decent iPad app.
What advice would you offer to an up-and-coming programmer?
In my position, I do a lot of recruiting and get to talk to a lot of developers at pretty much every level, from interns to senior architects.
After a while, I started noticing specific traits that make developers great. Some are a set of aptitudes: ability to think abstractly, ability to reduce a complex problem space, attention to detail, etc.
Yet just as important is having the right attitude. Inevitably, truly great devs have real passion for software and they tend to invest significant energy into building their skills.
So, assuming that one has the prerequisite aptitude to become great, my advice is to focus on developing your skills. Part of that is learning and trying new technologies. Whether it’s self-study or working on other projects, today’s up-and-coming developers have many options available to them. After all, contributing to open source projects has never been easier and standing up a new site (using almost any technology you can think of) has never been cheaper.
Another part of skill building is practicing good development habits, whether it’s TDD, automated testing, CI, or even just writing clean OO code. If you’re lucky, you’ll end up in a place that believes in good engineering and expects it from everyone. But even if you don’t, there are other ways to learn. Join a user group, find a mentor, use it in your own projects.