[Mono-list] Mentoring new developers with Mono
Robert Scott Horning
robert_horning@netzero.net
Tue, 03 Jun 2003 15:41:57 -0600
I've been lurking on this list for some time now, and I decided to try
and wade in a little bit.
I've noticed that there are occasional messages that pop up every now
and again from new people who want to join in the efforts of developing
Mono, but don't know where to begin. This can be very intimidating,
especially when you got seasoned developers who are annoyed with the
same (FAQ like) questions over and over again.
In addition, trying to ramp up and digest everything that has been going
on with a project the size of Mono can be very tough, and is going to be
even tougher as time goes on. Every time a new file or an additional
line of code gets committed to CVS, it just makes it that much harder
for somebody new to come in. This isn't a problem with just Mono but is
an aspect of just about every open source/free software project that
I've ever seen. There are a variety of ways to get this accomplished,
but I'd like to take a stab at it if there are no other takers.
My own background is that I've been developing in Borland Delphi for
about 8 years now on Win32 platforms archiving software using MS-Source
Safe. It is a culture clash to say the least to switch to GCC on Linux
using CVS. I still have problems along those lines, and finding a spare
box (or Bochs) to install Linux, especially as my professional
involvement is still strongly tied to Microsoft software development.
I also have a small little project that I originally did as part of a
U.S. Department of Education research grant that involved multi-media
software development for educational purposes. This project was
originally written with Visual Basic 3.0 on Windows 3.1. A small
attempt to port it to Windows 95 using Borland Delphi was done, but this
was only a half-hearted effort and the grant ran out. The
non-disclosure/non-compete agreement with my former employer has run
out, and I'd like to get that project going again. I've also developed
and matured as a software developer, and I've been keeping my eyes out
for a really good development environment that has the following
requirements:
1) Cross platform capability. I no longer want to be tied to a single
operating system environment, and want to keep a common software
development base. I also want to avoid like the plague (Really! or
anthrax, SARS, what have you) any "#ifdef Win32" or "#ifdef LinuxDev"
statements in the software base. This may be acceptable in very, very
limited exceptions, but I have seen those statements breed like mice in
Australia and quickly overrun a project unless you keep hacking them down.
2) Modular plug-in capabilities. This used to be a much bigger issue
in the past than it is now with most modern OS environments allowing
this capability, but I would like the ability for this software to add
extensions to the environment without having to recompile the main
program. Distributed object oriented behavior is a big plus, and I'd
like to make it a requirement as well. The plug-ins must pass objects
to the main program, not simply expose a common plug-in interface.
3) Multi-media capabilities. This really is a requirement of the
software itself, and again most modern OS environments give this ability
very easily. The depth of media formats available is going to be a big
plus factor here. I would perfer native code implementations of the
media import/export, even if I have to write them myself.
4) Access to source code of the development environment. As I stated
earlier, I have been using the Delphi Professional environment for about
the total existance of Delphi, which always included all core compiler
source code. While I never had to recompile the System unit in Delphi,
I did pull things out of other core units and make bug fixes to things
that Borland (or Inprise or Borland again) didn't get right for a
particular application. There have even been a couple of patches to
Delphi that some of these fixes have helped contribute. More on this in
a moment. Compilers are complex programs, and by this nature will
always have a bug or two left to pull out, even if it is very well done.
Simply put, you need the compiler source code in order to really push
and tweak performance in some applications.
5) Open Source friendly development environment. This is really a
bigger factor than I considered originally. There are a number of open
source efforts that are being done with Delphi, but it is very limiting
when the main compiler that is being used is being distributed under a
propritary license, even one with a good programmer friendly reputation
that Borland has. Indeed, of the propritary compiler vendors, I would
say that Borland is perhaps one the the most generous to the Open
Source/Free Software movement. This still doesn't keep things
frustrating when bugs don't get fixed.
6) Self-hosting. This doesn't seem like that big of a deal, but trying
to fix a compiler that is written in a different environment than the
main development environment requires at the very least a shift of
paradygm. And if you aren't familiar with that development environment
it is even more difficult. Plus, I like the clean symmatry with a
self-hosting development environment.
I've looked around at several environments. Here are some I considered:
Java: I like the cross-platform capabilities and plug-in situation for
the most part. The performance issues with Java are a real killer
though with multimedia content, especially for full-motion
video/audio/rumble seats/fog machines running simultaneously. When I
say multimedia, I don't mean simply DVD-Video. I also don't like the
strongly web-centric nature of most Java development (which I know to be
a myth, but the perception that it is only used for web page development
is still there). Dispite the best efforts of Sun microsystems, it is
also not very open-source friendly, but there are some open source
alternatives that can fill the bill.
Borland Delphi: I won't add much to what I said above, but this was a
hard one to cross off the list if for no other reason than I have a
bunch of experience with the environment and am very comfortable with
the quirks of the compiler. I guarentee that I can get anything
developed in Delphi in about 40% of the time somebody can do it with
Visual Studio C++. I also love the Pascal programming language (insert
your favorite programming language holy war statement here) and will
continue to be a defender for that programming language until the day I
die. Just because everybody else is using C++ doesn't meant that it is
the best language ever invented by the best minds of computer science.
This doesn't mean that I'm not open to new environments, but I think
most C++ programmer are closed minded about the issue.
NASM/SpASM: Hey, if you really want to go hard-core, go straight to
assembly. Believe it or not, you can do some impressive multi-media
applications using a good assembler, and I would say the time cost
penalty would be about 20%-30% more than a typical C++ application for a
seasoned developer who knows and uses assembly. Performance is
outstanding, and in fact better than anything else you can possible do
with any other platform. Platform independance is a big issue here,
however, and the intimidation factor for trying to recruit new
developers to help with the project would be incredible. Good GUI
development environments are lacking, but not totally unheard of.
Lazarus/Free Pascal: This was a strong contender. Essentially, this is
a group of Delphi programmers who have gone to Open Source programming
and trying to port Delphi to Linux. They started way before Kylix was
even dreamed up by Borland, and unfortunately they don't seem to have
the momentum behind them to get what I want done. The compiler
self-hosts in both Linux and Windows, but the GUI environment is
progressing at a snails pace. The GUI platform they are using is GTK,
and there has been some cross-polination between the two projects,
particluarly with the Windows GTK environment. If you havn't seen this
project before, at least take a look at their website:
http://lazarus.freepascal.org/
Macromedia Authorware/Flash/Director: I've actually used this
environment, and it does great cross-platform PC/Mac development (which
is where I used it). It is kludgy to the max, extreamly bloated
(particularly Authorware), and doesn't have many features that
traditional programmers like in traditional sense. Source code is
non-existant, and very unfriendly toward Open Source projects.
Code Warrior: This is another cross-platform development environment,
and is particularly strong on a Mac. The problems with propritary
compilers still apply, but it is a good development environment in
general. I've looked into developing with this, but I've always been
pulled away to do other projects in other environments every time I got
to cracking open the software or manuals. I really don't know their
Linux support, but with Mac OS X I suspect that supporting Linux would
be relatively trivial for them. I havn't kept up with this compiler,
but it certainly is a contender.
GCC: This runs on both Windows and Linux, but I didn't know if I wanted
to make this big of a leap. Development tools for Windows are somewhat
lacking, and I havn't seen good GUI environments for this, at least that
I liked. Programming using GCC is wide spread and has quite a bit of
support. One problem I saw going this route is that the old #ifdef
problem would be widespread with multi-platform development, and as I
also said, I havn't been satisified with C++ as a programming language
(another strike against it for myself). It is still something that I
won't dismiss completely.
MS-Visual Studio: I guess I can't leave major development platforms
without mentioning the dreaded Microsoft. I have used their compilers
for decades (yes, plural decades) now, and I believe them to be one of
the few products that Microsoft can competently make. IMHO Microsoft is
a compiler company that just happened to end up with an operating
system. The history of MS-DOS spells this out even more, as IBM was
only interested in their compilers originally. The push to dotNet for
Microsoft is rather interesting, but is for me a side issue compared to
other problems with this environment. Cross-platform capability is
almost prohibited according to the EULA. That and source-code access is
very limited. I also wish their compilers actually did what was
documented as well (they don't). I could live with Visual Basic for the
most part, but there still are things that bug me about this
environment. It gets crossed off the list totally.
DotNet/Mono: If you want to know why I'm writing this here, I feel that
Mono has just about everything I am looking for and more. In addition
to the other problems I discussed, I also looked into distributed object
models like COM/DCOM and Corba. I have used COM/DCOM extensively in my
professional experience on some very large projects. Miguel has also
written and spoken extensively about this issue, and I'd have to agree
that dotNet is doing this in a much cleaner implementation of
distributed object models than most other platforms. What I love about
Mono is that the development environments for Mono is also self-hosting.
This really is a big deal. I have actually found it as easy or easier
to write applications in C# than Delphi. This isn't by accident or
mistake, as one of the architects of C# was one of the early architects
of Delphi. I can see his influence all over the place and if you are a
dotNet developer you may not even be aware of it, because it is very
subtle but it shows up in places that really make a difference.
This is my epistle to the Mono group. I was originally intending to
keep this short, but I thought it would be a good opportunity for the
developers in this group to see where I was coming from and see if I
might have a place to fit in with the development of Mono. I knuckled
down and printed up ECMA-334 and am now trying to learn C# the hard way:
Straight from the specifications. I'm right now in the process of
writing a simple database application for my wife to try and learn this
language and learn about the environment in more detail. I love Mono,
and I've already influenced a couple of other software developers to at
least take a look at it and try to consider it as a software development
environment.
What I'm proposing is possibly the formation of a mentoring
group/mailing list where no question is asked too often and seemingly
stupid questions can be asked. I also think that some baby steps need
to made before wading in and doing some significant development. If you
can think of some other ways this can be done (including working on the
Wiki), I'd like to step in. I also know that with open source projects
sometimes some leadership needs to be had, and I'm willing to take on
this task if necessary. Of course, this will be the blind leading the
blind, but I'm willing to do that.
Robert Horning