PyDev of the Week: Vasudev Ram

This week we welcome Vasudev Ram (@vasudevram) as our PyDev of the Week. Vasudev is a freelance developer who blogs on lots of different software topics, including Python. He is the creator of xtopdf, which you can read more about here. Let’s spend some time getting to know him better!

Can you tell us a little about yourself (hobbies, education, etc):

Sure. I’m based in India, and currently an independent software consultant, after having worked for various companies, US and Indian, for some years. Music (various genres, including Western and Indian), hiking are some of my hobbies.

I studied mathematics in college. Got into computers in the 12th grade of high school, via the route common to many: learning on personal computers, of many makes.

A school friend (an electronics hobbyist) showed me a Casio pocket computer one day, with BASIC in ROM. It came with a manual and example programs. It even had a 4-line graphical LCD display.

I was interested in this new device, and borrowed it from him for a few days. I played around with it and wrote many programs – for things like arithmetic calculations, statistics, string manipulation, simple games, and graphics – the usual kind of things that people with a math / physics / logic background might try programming. That was what got me interested in programming. (Later worked, on many different types of computers, and a few different operating systems – many flavors of UNIX, both PC-based and higher-end, and Windows – and DOS and Netware for a while, early on.)

Then in my college days, I took many computer courses, on programming languages and other topics; also did a lot of programming in various areas that interested me, including math, graphics, sound, etc.

Started working as a programmer after college. Actually worked as a freelancer right at the start, on a couple of small but interesting projects, in dBASE III and Turbo Pascal (both hugely popular tools and fairly powerful tools at the time.) Then joined a small software house as a programmer. (Later grew into roles of a system analyst, project manager, etc. in larger companies, Indian and US-based, getting to work on a variety of projects over the years, and also getting (and sometimes giving) good training on various fundamental software topics; and am now a developer again, back to freelancing a.k.a. consulting, from some years ago.) Did a lot of C programming and shell scripting on UNIX, early in my career. Learnt a good amount of system level stuff from that, which has been of help throughout my career. Also, I’ve always been interested in systems level work and the development of tools and utilities. Published an article on IBM developerWorks on the topic of “Developing a Linux command-line utility” – see the links section below for links to it.

As far as companies go, I’ve worked for, or consulted, to various companies in my career, large and small, Indian and American, enterprises and startups. Due to the variety of companies I’ve worked with, and the different roles, I got to work on many different technologies and business domains. I’ve also worked on some software products (as opposed to consulting projects), including being team leader on a successful middleware product in C, and my xtopdf product has some users. Areas that I’ve had industry exposure to, include: software and database design, project management, configuration management and good software engineering
practices, and UNIX system administration. Used to have a bit of a flair for UNIX admin, worked in the field (on call) as a system engineer, and apart from routine admin work, solved many tricky problems in that area for customers of my employer, a large UNIX vendor, earlier; the systems strengths and troubleshooting skills acquired in that phase have been of help throughout my career)

I’ve learned different things from all of those experiences, including something about what works and what doesn’t, and am still learning 🙂

Why did you start using Python?

I started learning Python several years ago, initially as a hobby, after coming across it via some articles on the Net. I was working on Java and C at the time, professionally. Found Python very readable and productive, you know – “executable pseudocode”, and of course the “batteries included” thing, though it has many more libraries now than when I started, and is also at higher versions; I think it was around v1.5 then. Over time I started using it in freelance consulting projects, and also because of its high-level nature, started using it to prototype some project / product ideas, and it often turns out that the prototype is good enough to be the final product too – in the sense of not needing to rewrite it in another language for performance or other reasons.

What other programming languages do you know and which is your favorite?

I’ve liked most of the languages I’ve learned and used, to some degree at least. You can learn something from each language you work on. But to answer your question, going roughly chronologically, from earlier to later:

Turbo Pascal was great fun – used it a lot, near the start of my career. It was an incredible environment for the time – a blazingly fast compiler (like Turbo C and Delphi later) and editor in under 40KB, yes K, not M. Did a lot of UNIX C at work and some for fun, Turbo C too, earlier, also a lot of fun, a lot of basic graphics programming in Turbo C and Turbo Pascal; Borland tools were almost the ultimate (to me), for a period; Java, at work, earlier, was good too; I love the elegance of servlets, which I worked on very early, before J2EE was a thing, though JSP – not so much, and to this day, Java Servlet Programming (1st edition) by Jason Hunter, remains one of my favorite programming books – extremely well written, IMO. Then used Ruby (and Rails) in dot-com projects, and for some years now, a lot of Python, for both web and non-web work, as well as for my own open source projects. I’ve used SQL (in various relational databases, both proprietary and open source) and shell (sh/ksh/bash and friends like sed and awk) pretty much throughout my career. I’ve also done some Visual Basic, for real life projects and small tools, and like it (as with Delphi) for its speed of GUI app development, though I’m not much of a fan of VB syntax).

I don’t have a single favorite, but Python is probably first – for a while now – due to its productivity, readability, community, user-friendliness, and its very large number of libraries (though as with all languages and tools, it has its issues). I think it was Dennis Ritchie who was asked, if he was stranded on a desert island, with only one programming language, which one he would want, and he said C. I’d probably want Python as well as C. My other favorites are C (evergreen) and Delphi (though Delphi is more of a complete development environment than just a language). I’ve written a couple of small tools in it earlier. Not an expert on it though.

Ruby is fun too. I was an early Ruby user, and I like its somewhat greater focus on object-oriented-ness than Python, but am not a language lawyer, so don’t quote me :). Haven’t used it much lately, though I was good at it some time ago. I also dabble in other languages now and then, in my free time, out of interest and to learn other ways of doing things. Have tried out Lisp (also Scheme) a bit, via tools like Franz’s Allegro CL and LispWorks’ tools, read some of Peter Seibel’s Practical Common Lisp and a few other Lisp books, and like the language. For anyone who is interested in new/old/offbeat languages, some that I have checked out in the past include Pike, Elastic, Icon and Forth.

What projects are you working on now?

Apart from professional consulting work, which often involves Python, Linux and databases (for web or non-web apps), I keep working on xtopdf (see: and some other product ideas. I announce my new product releases/versions on my blog:

Anyone interested, feel free to subscribe to its feed, or the subset consisting of Python posts.

Which Python libraries are your favorite (core or 3rd party)?

As with languages, there are many. xtopdf is my own Python library for PDF creation. It builds on ReportLab, providing a few higher level abstractions for a subset of ReportLab’s functionality. That’s one I enjoy working on; somehow, I keep on finding new applications / uses for it.

I think that has to do with the fact that I applied some constraints when first developing it, in the sense, I didn’t try to be everything to everyone, or have too many features (at least to start with). Maybe as a result, I’ve found that it is orthogonal (I love that word and concept) to, and can play well with many other libraries – something like the UNIX philosophy (of creating small tools, that do one thing well), which has probably influenced me, since I’ve worked on UNIX a lot. Got to mention here that the ReportLab guys have done a great job. Among other libraries, I love the simplicity of XML-RPC (for lightweight distributed computing), for which there are client and server libraries in Python, and I’ve also checked out a few other technologies in the same field, such as PYRO and RPyC. DB API, for sure – bread and butter stuff. SQLAlchemy. Liking PyDAL, which I found recently. It is like SQLAlchemy Core – the layer below the ORM proper. wxPython, requests, json, some XML libs. csv, tablib (seen recently) – as a guy who enjoys data munging. I like to check out Internet-, Web- and multimedia-related libraries now and then. And I keep on exploring new ones – in fact many posts on my blog are about new Python libraries that I come across, and then write demo programs that show / explore how to use them; see:

Is there anything else you?d like to say?

Yes. Thanks for inviting me to this series! I’ve been reading the other posts in the series; they are interesting. I’d like to mention that I’m a reader of your blog, and have found many good posts there. Finally, I figured that you are the person who hangs out on the IRC channel #wxpython (with the nickname driscollis), and many others, as well as I, have found your answers on it helpful. Thanks!

Thanks so much!

The Last 10 PyDevs of the Week