Here I will provide brief description of my past experience. This page is not a resume, which is available here. On this page I concentrate my attention on general software development and project management issues as I see them.
Practical and realistic approach
When selecting a technology for a new or existing project I do not automatically choose my favourite or the one that I am most familiar with, and certainly not the trendiest one. I always try to consider other technical and business challenges, present in the project. It might include for instance:
- Compatibility - what other existing components need to interact with the new ones
- Portability - do we need to support more than one platform (where "platform" is not necessarily limited by just OS or hardware)
- TCO (total cost of ownership) - the money required to acquire and support the technology over the projected lifetime
- Availability of human resources, required to develop, deploy and support the solution
- Security - depending on the project, might be at the top of the list
C# and C++ are probably the software development languages I am most experienced with, Java coming next. However, I feel that no new language would be too difficult for me to master. So far I have used these additional languages and frameworks:
- Scala - a new functional strongly typed language. It compiles into Java bytecode and can transparently use any existing Java libraries, which immediately provides it with a wealth of practical APIs. I currently use it for some personal pet projects, but would love a chance to utilize it in commercial environment
- Perl - mainly for scripting and quick hacks, although I built quite a large log parsing and analyzing product using the language
- Python - a cleaner alternative to Perl for various scripting tasks
- PHP - used it, naturally, for web development. Although I was one of the earlier adopters of PHP, starting with version 3, over the years I grew disappointed with its non-existent type system and other drawbacks, which it shares with many other scripting languages
- VB - I created a few small projects in VB6 and VBA (VB for applications - mainly used in MS Office applications, such as Excel, Word etc.)
- OCaml and F# - these are my favourite languages. OCaml is an ML dialect, and, quoting from it's site is a "general-purpose programming language, designed with program safety and reliability in mind. It is very expressive, yet easy to learn and use. OCaml supports functional, imperative, and object-oriented programming styles". F# is a port of OCaml to the .NET platform, bringing together the advantages of strict type checking and general functional programming of OCaml and rich library set and language interoperability of .NET.
- Scheme - another functional language, which I like for its simplicity
It is amazing to observe, how many times the subject of the work force is ignored, although if asked explicitly, every manager would admit that the people, carrying out the actual work are ultimately the most imporant key to success of any project. There are many issues and questions, that need to be addressed, when considering a new project. Failure to do so might be disastrous. For instance:
- Can we find the right people to design and develop the product?
- Can we motivate them sufficiently to stay and do the job?
- How long do we expect all/some of them to be around after the development stage is completed?
- How do we organize the development process, so that the departure of one of the key people in the project does not jeopardise the whole outcome?
- Once the project has been delivered, will we have the right people to support and maintain it?
And many more of the same kind. I tend to consider these issues carefully before engaging in a project. It is obviously impossible to find the right answer to all of them before the actual work begins and certain amount of fire fighting is simply a part of project manager's way of life, but giving such things consideration in advance can really save your day.
I do not engage myself in religious OS wars. As mentioned earlier, I try to match project requirements and selected technologies, so in different circumstances I would choose different operating systems. So far I have used:
- Windows - all flavors, starting from DOS, through Windows for Workgroups 3.11 and up to Windows 7
- Unix - mainly Linux, starting from RedHat 4.0 more than ten years ago and up to Fedora Core 12, ocasionally looking at other distributions, i.e. Ubuntu and Slackware. I played with Solaris, AIX and a few others
During my career I worked with following non-trivial software packages:
- GIS software - ArcIMS, ArcView and other ESRI products. A few of my GIS-related projects: BioGIS, PhotoGIS. Please note, that I wasn't responsible for their graphical design
- Portals and CMS - Drupal, Liferay, Magnolia, Xoops. This site is built with Drupal, which recent releases are rather of high quality and easy to use and customize
- Mozilla/Firefox - I did quite a bit of extension development