Programming Languages, Markup, Software I Know
One tricky part of writing a resume is guessing how much detail to give. By
definition, it's a "resume" - a summary - so i aim to keep it to one or two pages.
I'm one of those hyphenated people, so i can easily add a lot of detail,
but don't want to cut it short by lopping off major areas of talent and experience.
Keeping my current resume shorter means i can't list in detail *all* the
computer programming languages, markup languages, software tools, techniques, etc
that i know. So i put them here.
A detailed list like this doesn't belong on a resume, not just to
keep the resume brief, but because no one really cares. Once someone has learned
four or five programming languages, the next few are easy. Some languages i know
are archaic or very specialized; no reason to bother 98% of my resume readers (potential clients and employers)
with such stuff. Of course, if relevant to particular project, these can be mentioned in a cover letter.
This page lists every programming language, markup language, software tool, etc, that
i know anything about, including ones i've studied but not used for everyday purposes.
This page does not cover physics, electronics, art, photography or other areas.
UNFINISHED! Work in progress....
Programming Languages
- C++
- Expert, experienced. learned back around 1991. I like it overall, but it
does have a few ugly spots. I often avoid the fancier features like
templates and dynamic casting that turn out to cause more problems
than they solve. You could say i'm programming in "C+" where i take advantage
of half of its features, but avoid the others.
- D
- Interested, but inexpert. A new and improved C++ from Walter Bright
Compiler, documentation, forums available at Digital Mars
Mostly it looks like it truly is better than C++, with the ugly legacy compatibility junk lost,
and anything you might want to do in practice easier to code. I haven't worked on any
major software projects in a long time, only small-scale stuff, and for those i've
been using Ruby, Python and maybe C++. But there are a few projects growing
in my idea garden i'd like to use D for.
BTW, i know nothing about another proposed future-of-C++ language, C++0x, other than
with a name like that it's doomed. read more at InformIT,
or watch a video presentation by Bjarne Stroustrup.
Comparing to D, i prefer the loss of backward compatibility for a cleaner language,
and i strongly prefer the more sophisticated features built into the language and compiler
rather than entirely through macros/templates/libraries. Reasons are explained
in the overview and other pages at DM
- Java
- Barely competent - I can't write "Hello World" without a cheat sheet.
But i have studied the language, considered it for some past projects (at employers,
not for personal projects), and have actually modified or fixed bugs in
existing mission-critical Java software. It is an important language every
software engineer should have some knowledge of, just because it's
all over the place, even in high energy physics.
For my own work, it just doesn't have any advantage over any of several other languages.
Good place to visit: Java Ranch
- Python
- Competent at basics, mystified by the edgier esoterica.
First learned the basics in 1995 or 96 when i was trying Linux the first time,
reading about technology jobs in astronomy, and found that astronomers, some of them at least,
really liked Python. At first i liked the indentation, but now i find it a bother, since
it makes cutting and pasting code difficult, especially to past a short snippet
of code into an interactive session.
Also, when writing OO code you've got to explicitly state "self." everywhere,
as if there were no concept of being inside the context of a object.
Overall, a well-designed language for casual programmers, powerful enough for
real work, not feeling too fuzzy-mitten to professionals but easily within
reach of rank beginners and occasional programmers. A few annoying blemishes
aren't showstoppers, just Pythonic thinkinig, and don't spoil the overall pleasure of programming in the language.
Good book:
The Quick Python Book -
is good to learn Python if you already know a language or two, and retains
usefulness as a reference for the following years. I use python for a short while, then
ignore it for a few months, so i'm always needing to refresh my knowledge. This book is perfect for that.
- Ruby
- Fairly competent but unseasoned - i hardly know all the tricks yet. A very appealing
languages with only a few basic concepts yet so powerful. OO at its finest.
Matz, the inventor, took ideas from perl, smalltalk, python and others and made
a nicely conceived language. Main complaints others have about it are
it's weak in libraries (but no longer true; beware old comments!) and
that it's slow - but it's so easy to write extensions (DLLs or Shared Objects)
in C/C++ to crunch the numbers or pixels fast. Already used Ruby at work
to fetch image data from our databases, and it turned out to be amazingly
easy, once i got past certain obstacles having more to do with my ignorance
of databases than with Ruby. Ruby is catching on among scientists, is used
at JPL, and is getting attention in many field, even finance.
There's a local group meeting here in Boulder, but haven't been
to a meeting yet (as of this writing)
- Pascal
- Expert but rusty. Turbo Pascal, Delphi. I once used the "official" Pascal
on a DEC machine, long long ago, and it sucked long and hard. Pascal was
designed as a teaching language, for in class use only, training wheels, but
at the time structured programming was the "in" thing, the "object oriented"
of its day, and caught on everywhere. But the mainstream version was
lacking in many ways, and made limiting assumptions about how it would be
used and what kinds of files users would read and write. Borland bent
it into better shape when they came out with Turbo, which i used a lot
for projects ranging from site radiation monitoring to ray tracing around
black holes. Now it is dead and gone. Last time i used Delphi was in 2001.
- IDL
-
Expert at language, never used some of the fancier features. The Interactive Data Language from ITT-VIS (used to be RSI), popular in science
and engineering. I use it heavily every day to calibrate and enhance Cassini images.
First contact was back in the 90's when i studied the syntax, but not actually using it beyond
tiny sample code, along with MATLAB and other interactive languages when designing a new
language for a project. IDL, with all the varied extra tools, has something for every
kind of scientist and engineer, but no one individual is likely to use even 1/2 of it all.
- Assembly/Machine
- Expert/genius, sorta. x86, Motorola 6800, and 6502. Oh yeah, and the old RCA 1802 chip. Maybe others.
My first programming language ever, not counting a certain paper toy, was binary
machine code for the 6800. Memorized the whole set of opcodes, thanks to its
nice orthogonality.
I know so well the actual electronics and register -level functioning of CPUs, it's the
infrastructure of my thought even when working with Java, Ruby, IDL, etc. I know what's
really a pointer to a virtual method table, and see it all clearly in my mind as i
grok the high-level language's concepts. A good understaning of assembly code in the 1970'-1990's
does not translate into a good understanding now, with SIMD and register renaming and multiple
pipelines, branch prediction and other funny stuff (and i mention only
technologies that have been around already 7+ years) - all the old rules must be replaced with new ones about
best ways of optimizing assembly code.
Fun stuff, but in practice i rarely find anyone willing to pay for that kind of work.
- Actionscript
- The language used to create Flash files. I haven't used the actual Flash
creation application, but have been using mtasc which compiles
Actionscript 2. (The new cutting edge version is Actionscript 3)
Specialized
These may or may not count as programming languages.
- Makefile
- As experienced as any C++ programmer.
Seemed like a great idea back in the 1980s. Most makefiles now are generated automatically
by strange tools and are unreadable by Humans. I write Makefiles by hand and keep them simple,
to the point. Well, i used to - now i use only Rakefiles (see next) Specific makefile variants
i've used include Borland's make, Microsoft's make, and GNU make. I assume Zortech had a make program too, but
i don't remember much about it. Or the others.
- Rakefile
- Becoming expert. Like make, but includes a real language - with for, if, arrays, and everything. It's really
a Ruby program with some extra syntax to describe dependencies and rules for updating.
- Cook
- Competent but not a genius, and out of practice.
From Peter Miller, a replacement for Make with a nicer syntax, more power, and just simply
works for most everyday tasks - so few people ask questions online, making it appear less popular than
Make and other systems that are harder to use. Sometimes good tools fade away because
the lack of problems leads to a lack of websites to help people get around the problems... but i digress.
Cook files used to be my normal build system, but now i'm flirting heavily with Rakefiles. I may
resume using Cook for larger projects as they come up, or work on things that don't involve Ruby.
Info on Cook at Peter Miller's page.
Markup
Funny codes one stick into text files, so that some interpreter
can know how to display the content.
- TeX
- Popular with the physicists. invented by Don Knuth,
one of the great and original minds in computer science. Invented a long time ago, when
memory was small, CPUs slow, and deeper thoughts on programming languages
and markup yet to form. An amazing work, written in Pascal by the way, and
certainly better than the only similar sort of thing one had before: troff (or
groff for us open-sourcers)
I used it a bit in the past but have abandoned it for the slicker Lout system.
- Lout
- Invented by another great mind of computer science, Jeffrey Kingston,
as an improvement over TeX with some other good ideas mixed in. Is much
easier to learn, less cryptic, capable of more complex layouts than TeX, easier
to add custom keywords, so on and so forth, praise gush praise, on and on....
This is what i used to write printable documentation for clients, explanatory
blurps for artworks, flyers, covers for notebooks, anything else that can be
dealt with by a markup language like this.
- Postscript
- Expert except for esoteric features and the latest version.
This is really a full-blown programming language, not a markup, but belongs here
because it's used mostly for creating pages to print out. Easy language
to learn, with the only stumbling block being the stack-oriented operation, which may seem
weird to most coders today, but i had already written my own version of a Forth-like language.
I don't use Postscript much, but on occasion i find it
easier than using a vector
illustrating app to make electronic diagrams or technical plots, where a "for" loop
makes quick a task i'd hate to do point-and-click by hand. I designed a multi-scale
ruler using a hand-written postscript program - no way would i want to place all those tic marks
by hand!
Graphics - 3D
I'm interested mostly in ray-tracing and radiosity techniques. Almost never
do old-fashioned scan-line rendering or OpenGL, but know about such things.
- POV-Ray
- Expert. Excellent ray tracer, though these days overgrown, having accreted features over
the years. Several years ago i added the color dispersion feature. Know the source code
quite well, have looked at all of it. I write POV-Ray scene files by hand and sometimes
parts of complex scenes generated from Python or Ruby programs.
- Blender
- Started toying with this 3D modeller back in 1999 or 2000, when it was a BeOS app.
Graphics - 2D
- Inkscape
- Moderately skilled but not pro.
Freeware vector drawing app. Similar to Corel Draw, Adobe Illustrator, etc. Used for one or two of the images released by CICLOPS, to mark
arrows etc on images. I haven't used it much more, this past year ignoring 2D in favor photography and 3D artwork.
When i do need to make a 2D drawing, Inkscape does great, and i've tried nearly every feature
at least for experimental toying around purposes.
Audio & Music
- Jamin
- For mastering audio before burning to CD or other final form. Excellent, full of
features. I'm not a professional mastering engineer, but certainly i can use this
to accomplish what i need as an amateur. Compressors to mush those peaks in
different frequency ranges, equalizer, etc. When i'm done with other projects
and get back to something involving music or sound effects, i look forward to
putting Jamin to the test. (Linux/unix only, requires JACK system)
- Audacity
- Have used on occasion. not expert. Audio editor, multiple tracks, effects bus
and all the usual you'd expect to find in, say, Sonar, just not quite a slick polished
or as many specialized filters and effects. But, as a linux programmer, i could
write my own plug-ins as needed, should i need any. A basic tool any audio hacker using
Linux should have, because it is widely used if not the best available.
- Ardour
- I like this audio editor better. Relies on the JACK system
for you incorporate filters and special processing modules in your edit/mix process.
It took me a while to grok JACK but once i did, it made tremendous good sense. I drool at the
prospect of doing some serious audio work in the future, but i've got plenty of software, photography, and graphics
projects for now. Ardour's GUI seemed better than Audacity. I've not done much with it
due to discovering it some time later than Audacity.
- Rosegardent
- Drooling at, not expert. Nice-looking and easy to use editor for MIDI. Couldn't get MIDI to make sounds
on my main machine, so i don't use it much. Looks great, though...
Operating Systems
- BeOS
- Excellent OS from Be Inc. I was impressed with how easy it was to install, get all
the essentials running. Started with the version 4 demo disk, quickly upgraded to version 5.
Be Inc went downhill rapidly when they decided to focus on "internet appliances" and software for them.
Yellow Tab and OpenBeOS (who have change their name) carried on the flame, but by now
there's no great reason to use these.
- Linux/GNU
-
Using Ubuntu at home now, have used or tried for more than an hour: Fedora, Slackware, Gobo,
Knoppix, and Linux from Scratch and maybe some
others i found on freebie CDs that came with magazines.
- Microsoft Windows
- Since 3.0, or actually the version just before that, whatever it was called.
Learned programming on Windows from Petzold's book. Very limited, slow, and
crashy. Most recently used: earlier today, if you want to count running Windows programs in WINE.
For real: just a few days ago, fiddling with Sonar to get it to hear the Alesis Multimix.
Some Computer Programming Links
Having not much to do with the above, but no where else better into which to put...