15 Almut's meanderings among electronics, psychology and programming

[ Sorry about the length... but eh, when do you ever get the chance
to talk about yourself in front of such a large audience? ;)
For those of you who feel I'm overly verbose, I've enclosed the less
important sections in brackets, like this paragraph. Those sections
contain further details and thoughts that occurred to me along the way.
You can safely skip them without losing the main thread.
If you like, you can save the mail and run the following command on it
perl -i -pe 'BEGIN{undef $/} s/\s*\[\s.*?\s\]\s*/\n\n/sg'
to get an abridged version. Or restart me without --verbose :) ]


OK, I'm a 39 year old woman from Germany. I started off as an
electronics geek, and ended up as a software developer, which is what
I'm doing full-time now, since about seven years. Some time in between,
I studied psychology, and worked a few years in that field (research,
not applied psychology or therapy). With respect to programming, I'm
the self-taught type, without any formal qualifications.
That's the summary, the long version follows.

How it all started

I don't remember exactly how and why it began, but at the age of about
eight, little Almut had begun collecting all kinds of electronic parts.
I had access to those things, because some of my parent's friends were
working in that field. They were doing me a real favour by bringing
along old or defective circuit boards for me to disassemble. At first,
I didn't have the faintest idea what to do with those parts, but they
looked interesting - all those funny shapes, and so colourful...
(It may sound foolish, but if they'd been all grey, I guess I might be
doing something entirely different today :) Well, merely collecting
them got a bit boring over time, so I soon got myself lots of technical
literature at the local library, and started playing around.

[ BTW, as you might imagine, the looks I got when I went up to that
counter at the library were characterized by - at least - mild surprise.
This general problem persisted for quite some time. Believe me, a young
girl who walks into an electronics store to order some obscure parts is
just not being taken seriously... And there were no internet online
shops at the time.
In hindsight, I find this amusing to some degree, but it wasn't very
funny, then. I can really feel with any cross-dressing men wanting to
buy women's clothes at the mall -- if you know what I mean... Getting
at my objects of lust sometimes needed quite a bit of courage ;) ]

During the following years, this hobby evolved into a real obsession.
I built all sorts of electronic circuitry and devices. For example,
as I'd always been magically fascinated by electronic music production,
I started designing and assembling my own synthesizers.

To earn myself a little money, I began mending TV sets, radios, HiFi
equipment and whatever other electronics stuff people brought along.
I had gotten tired of begging my parents every time I was in need of
something expensive. [ They were generally supportive wherever they
could, but I wasn't born into an excessively rich family, so I had to
find some good justification for why I needed that new oscilloscope or
whatever... Taking matters into my own hands just felt good. And I had
all the freedom to get myself what I wanted -- no longer any objections
from my parents. I think they were even a little proud of me.

That was running quite well. Actually, it got a bit out of control,
quantity-wise - with dozens of electronic devices piling up in the
last empty corners of my cave - until I had learned my first lesson
in market regulation principles, and had raised my prices...

At this time, locating defective components and repairing stuff was
still possible with a basic set of equipment, if you had a general idea
of the inner workings and had somehow gotten hold of an appropriate
circuit diagram. Nowadays, you can't really do much in that respect,
as everything is highly integrated, with lots of proprietary ICs
without any documentation, which are about as bad to reverse engineer
as any closed source software binary. ]

From electronics to computers

At about the same time, some of the boys in the neighbourhood had
gotten their first home computers. Computers in general was something
which was still under-represented in my portfolio of competences...
That was chipping away at my self-esteem as a techie. So, what does
an electronics geek do? Well, she gets herself a pile of books on
processor architecture. At least that's what I did - and I consumed
them from cover to cover. Then I knew for sure, I needed a computer.
That sounded like endless possibilities to play around!
[ No gaming, though... I've never ever been a gamer. Dunno why. I had
later occasionally tried a few computer games (because everyone else
was doing so), but always had that strange feeling of wasting my time
without having any real fun. Kinda weird. So, I just stopped it. ]

At first, I enjoyed dabbling around with a C64 and a Sinclair ZX81
but soon found them a bit limiting in what you could do.

Then, I got myself an Atari ST. 8MHz 68k-CPU and 1MB RAM. Wow! :)
That was a lot at the time (I think it was '85). But no harddisk,
just a single sided 360KB floppy drive, from which the OS and every
program you wanted to run had to be loaded. And, as I had purchased
the very first model that had appeared on the market, it didn't ship
with any decent software - not even a semi-decent text editor. The
only programming tool available was a buggy BASIC interpreter...
You also couldn't buy any other 3rd-party software, simply because
there was none at all for that CPU and OS, yet.
So, my first real challenge was to use those limited tools to put
together something that you could actually work with (like an editor).
That was quite a pain, but I was highly motivated, and so I learned a
lot - even 68k assembly language programming. I experienced first hand
what the concept "bootstrapping" really means. During the following
years, availability of good software rapidly improved, and in the end
(after several hardware upgrades) I really loved my ST!

But then, support was dropped, so I eventually had to switch to the
then-emerging PC architecture. First model I had was an AT-286.
With DOS. That was a bit of a shock at first (in UI inconvenience).
But nothing was gonna stop me now that I had already managed to survive
even worse circumstances. And I kept on programming...

[ Roughly at the same time, I had to finish school. For me, school
had always been more of a place to have fun with friends and socialise
with peers, than a place to acquire knowledge.
I always liked languages, physics and maths, so that didn't pose too
much problems. The remaining stuff didn't interest me all that much,
but I got along somehow by learning things by heart immediately before
I needed to know them... Anyhow, I usually got good marks without
investing too much time -- which I needed for the more important
things, like hacking ;) ]

Years at University

It came kind of natural that I began studying electrical engineering.
I'd been passionately pursuing this hobby for years, so I didn't
reflect much about whether it might be a good idea to turn it into a
profession... Well, it wasn't. Not at all.
Unfortunately, the atmosphere was far from being welcoming to women.
And we were only four geekgirls among nearly a thousand male students.

Most of the guys there simply ignored me completely, told silly jokes
or found other ways to make ridicule of me, just to get a laugh from
their friends - or I dunno what... Worst of all, I never felt being
taken seriously, whatever I said or did. Not much difference between
my fellow students and the teaching staff, in that respect.
[ With only few exceptions, those who talked to me were only interested
in my long legs, but didn't give a damn about my other qualifications
and interests. (Don't get me wrong: nothing against the former
in principle, if it's in the appropriate context, just not each and
everywhere!) They were obviously assuming I had enrolled only to go
hunting for a husband -- which was complete nonsense, in several ways.
I do feel tempted to go on, but I won't, as this is getting off-topic. ]

I stayed there for a few semesters, hoping things would get better with
time. But they didn't. I finally resigned and concluded it would be a
better idea to go and study something else. Although computer science
would've been an option, theoretically, I was so thoroughly fed up with
studying something technical, that I decided to rather go for my next
best interest, which has always been psychology.

Well, it didn't take long, and profs and research staff had discovered
I was a techie in disguise :) People with technical skills are always
needed and welcome - if not desperately sought-after - in the social
sciences, particularly in research-oriented psychology, where computers
are increasingly being used in all stages of carrying out a scientific
experiment (stimulus presentation, data recording, data evaluation,
statistics, data presentation, modeling of theories, etc.). So, I was
given many opportunities to work in various projects and develop my
skills. It was the first time I realised what a tremendous advantage
it is to possess some knowledge reaching beyond the immediate subject
I had enrolled in. It definitely opened up many doors for me.

[ I carried through a number of computer-aided psych experiments that
involved a computer "game" in one way or another. I wrote those games,
ran the sessions with the subjects, evaluated and tried to interpret
the data collected. In other projects I wrote simulations trying to
model cognitive theories. Some neural net stuff, too. All in all,
many possibilities to engage in programming...
Also, I regularly taught introductory programming and computer courses,
"Statistics with the SPSS / SAS Package" classes, and, of course, also
the statistics tutorials[1], because I had never feared maths...
I enjoyed doing this a limited number of times, but I also realised
I'm not a teacher by nature. The idea of doing it for the rest of my
life brought up feelings of subtle dislike. Maybe I just don't have
the patience required. ]

Eventually, after six years at Uni (or 8 y altogether, including EE),
I finished and got my degree. As I had been working as a student
research assistent during all those years, and as my oddish skills
profile had always been attracting attention, some influential people
had come to know me. The director of a newly founded research institute
asked me whether I would like to work for them, and I said yes.
No interview, nothing. Getting my first job was as easy as could be.

My first job: the programming psychologist

During the first two years or so, I actually mostly did psychological
research, but then I more and more got back to programming.
Being awfully lazy when it comes to repetitive work, I wrote myself all
kinds of scripts to automatise my work. Eventually, I was able to feed
in the raw data on the one end, and the glossy diagram prints popped
off the other end of the tool chain. That allowed me to get things done
faster, so I in turn had more time at my hands for further hacking...
(Too bad I didn't find a way to compose the obligatory text around the
diagrams automatically... ;) My collegues discovered what I was doing,
and found many of those tools useful, too. So, I ended up maintaining
what grew into a complete data evaluation package -- I'd always been
willingly integrating ideas and wishes people had uttered.

[ As I had no obligation to do all this, people treated me favourably
to keep me going on :) Being wanted and needed led me to invest much
more time and energy than was expected of me. But it simply felt good.
It was more than a compensation for those less pleasant times I had
experienced during electrical engineering.

For scripting, I almost exclusively used Perl (well, what else should
I have been using at the time? Under DOS). For the other programs I
mostly used Turbo Pascal. I never really liked the language, but the
IDE with its seemlessly integrated debugger and turbo linker was great
for the time. And you could conveniently inline assembly code.
In phases of uncontrolled nerdiness, I actually went to the trouble of
profiling and hand-optimising sections of code in assembly language (we
had some massive number crunching needs, so it partially made sense).
Later, I switched to C. That made me feel like a real programmer :)
Also, I became an expert in PostScript programming to generate all the
diagrams we needed, fully tailored to the scientists' special needs. ]

Moving on to Linux

By lucky coincidence, there was a sysadmin at the institute who'd
brought up the idea - and was able to convince everyone - it would
be beneficial to migrate all desktop PCs of the scientific staff to
Linux (which was just kernel 2.0.x at the time). So far, we'd been
using DOS/Windows on the desktops. Unix was in use solely on the
server side, for statistics, simulations and other number crunching.

[ It was real fun to work with him. We were the perfect team.
I admired his geekiness and sysadmining expertise, and he admired me
for my programming skills (not only my long legs, this time - yay :)
And that's how we divided the responsibilities. I did the porting of
the various programs people needed, and he set up and configured the
systems and network. I didn't have much Unix experience then, but had
come to dislike quite a number of things about DOS, and particularly
Windows (WfW 3.11 at the time). So, I was rather enthusiastic about
that step. After all, my Perl scripts would finally feel at home.
And there were many exciting, new things to learn.

Funny thing is, that, according to my job description, I should've
been carrying out psychological experiments, predominantly. But this
was like in my childhood. No one felt like objecting. Apparently,
people realise rather soon that things turn out best, if they just let
me proceed, even if what I do is not exactly what I'm supposed to be
doing. ]

I really enjoyed this Linux migration project, and I learnt a lot of
Unix stuff during that time.

Getting serious with Programming

Despite all the freedom and fun I had in this environment, first time
in my life, I seriously started thinking about my career, and whether
I could possibly go on like this until retirement. Problem is - in
that scientific field - you only ever get time-limited contracts,
usually 1/2 - 5 years. Then you have to look for some other job, move
to some other place, etc. (depending on what you find, of course, but
usually there's not much choice...).

[ I anticipated I would be getting tired of this rather soon. Some
long-term position, where you can actually settle down at some place,
appeared considerably more attractive to me. In addition to hacking, I
also have a few other interests and passions I'd like to pursue. And,
I'd rather spend time on those than having to repeatedly waste my time
on recalibrating my job and life... Also - with a scientific career -
there's always the problem of having to resync your home place, if you
live with a partner. With my then-partner, I had already exercised
this unpleasant procedure a few times so far (I had switched Uni two
times, then had to move to yet another place for my first position).
We'd been lucky that she always had found a job (with a certain delay)
at the place where I had moved to. But how long would that work?
I was beginning to feel bad at the thought of having to continue this
ruthless practice of one-sidedly deciding on where to live... Also,
it is somehow expected of you to steadily climb up the ladder until you
end up as a professor -- which didn't look all that attractive to me. ]

In short, I figured I'd have to get out of this research environment,
however interesting it was. But what do you do as a psychologist?
The only real option that looked like fun to me was to try to promote
my programming activities and ambitions into a full-time IT job.

I began searching the Net on a regular basis for something appropriate.
After a while I'd found something that looked interesting.
They were hiring a software developer, and my abilites profile matched
surprisingly well with what they wanted. And it was in the Unix/Linux
environment. It was 500 km away, but well, why not just go and see.
I decided to send in my resume. I was a little unsure about how they'd
react to my entirely absent formal IT qualifications. But I had nothing
to lose (still had two more years to go in my current job), and so, I
was quite relaxed when I then went to that job interview.

I essentially told them what I've just told you (well, a bit more
technical details - less blurb), and - to my surprise - they still
seemed interested. So, they went on to the technical tests part of the
interview. They came up with a sample task out of their daily problem
domain, and asked me how I would approach it. Free choice of tools.
I sketched down about ten lines of compact Perl code, which did exactly
what was required. Other questions on networking etc. followed, and
some "small talk" on various Unix architectures. I guess I managed
to manoeuvre myself through that part without showing any obvious
deficiencies.
Later, in some quiet hour, my boss confessed to me that my little Perl
script and my pragmatic hands-on approach had impressed him.
In other words, I had the job. In contrast to what I'd expected, it
did not matter I was lacking formal qualification -- though, I felt
it was important I have _any_ degree at all. After all, most of the
people in the company have an academic background.

My current job as a Software Developer

The company I work for is roughly 200 people, predominantly doing IT
service, i.e. keeping other people's IT infrastructure in good shape.
Our clients are mostly from middle- to large-size companies in the
engineering environment. So far, the OS landscape has largely been
dominated by traditional Unixes -- which are now successively being
replaced by Linux, and - to my regret - XP (but we're trying to uphold
and foster the Unix/Linux side!).

I work in the software development group of the company, which consists
of about 20 people (two of which are women). Half of the group is
developing the software products/applications we sell, while the other
half (where I'm in now) are "allround" people, doing whatever comes in.
Initially, I was involved in some larger projects. But design phases
that extend over months is not exactly what tickles my fancy. I tend
to get bored after while and my productivity drops. My boss realised
that, and quickly came up with more suitable work for me.

Currently, I'm mostly writing "glueware", i.e. tying together existing
apps and data formats into a coherent workflow that people can actually
use to solve their daily problems. This can manifest itself in both
backend and frontend tasks, and both low-level and high-level stuff.
Rather often, it also involves complex, tweaked webserver setups, and
database stuff. Project size is typically medium. I find this kind of
work thrilling, because you often have to creatively combine all your
knowledge to solve a task that initially seemed nearly undoable. And
if you're good, the challenge is followed by some sense of achievement,
within a reasonable stretch of time.

The programming languages I typically work with are (roughly in that
order): Perl, C, Java, C++, Python. And, of course, web/HTML stuff.
There was a time when everyone wanted to have their application "run
in the browser" -- without knowing what that meant for the poor
programmer, when the application got complex! But that's slightly on
the decrease now. (BTW, Perl is not in the #1 position, in absolute
numbers. That's only because Perl projects sooner or later end up on my
desk, or I deliberately choose Perl -- I'm kinda the Perl guru here...)

I generally very much enjoy what I'm doing now, and I wouldn't mind if
things went on like this for a while. The tasks are very diverse and
challenging, and the vast majority of my co-workers have come to accept
me as an equal (well, they better do, or else they're gonna solve their
next Perl problem on their own! ;) Even my (engineering!) clients are
accepting me as a woman in this field, once they see that what they get
is in no way inferior to what they'd get elsewhere. I typically work
on my own, or in small teams (2-3 people) where I usually play the
senior role.

Often, I initiate my own follow-up projects. This gives me some control
over what I do next, and my boss is happy too, if he doesn't have to
do the acquisition... So, I not only try to deliver high quality work,
but always keep my eyes open as to what little problems are bugging my
clients... When you casually mention during coffee break that you
spotted room for a minor improvement in whatever they're doing, you
often get "Could you have a look at this? Could you do this?". -
"Sure!"... (It's important the improvements be _minor_ - you wouldn't
want to imply they were doing things wrong so far! :)


A few random thoughts and conclusions:

As strange as it may sound, I'd say it was a lucky coincidence that
there was hardly any usable software available at the time I got my
Atari ST. There was a real incentive to write it myself -- and thus
I learnt programming along the way.
[ Nowadays, I find it harder to come up with the inner drive to really
engage in some project. The "entry level" you have to reach before
it gets fun, is much higher now. I imagine this can be off-putting
to aspiring programmers who don't perceive themselves as ubergeeks
already. At least, if I was to get into programmming now, I guess I'd
have a hard time finding something that seems both useful and doable to
me, which doesn't exist already. So I probably would never get off the
ground with this endeavour, but look for some other adventure instead.
Undoubtedly, I learn best, if I have some _real_ problem to solve.
In this case, it comes natural that I dive into all the nitty-gritties.
Writing dummy programs just to practice has always bored me to death.
Somehow, I need to feel I'm doing something important, rewarding,
useful to myself, and so on, instead of reinventing the wheel, or
adding some marginal improvement or gimmick I don't really need.
After all, why should I write my own editor, graphics program, desktop,
window manager, MUA, webserver, HTML templating system, programming
language, ... when there are plenty of good ones to choose from?
I guess I don't have a good answer... How do others feel about this? ]

Due to my shifting focus of interest over the course of my life, my
background of experiences happened to extend beyond the field I was
currently operating in. This generally was an advantage (although
there are also some people, who are apparently having difficulties
with you, if they can't nicely fit you into any one category -- well,
I guess I'm a bit unwieldy in that respect, too bad for them. :)
[ Escpecially in psychology, it was a huge advantage to have a technical
background. Without it, I would never have received the favourable
treatment I got. But even nowadays, as a software developer, my
engineering background has generally proven beneficial. Sometimes,
when a new project is being discussed, clients who I've already worked
for, explicitly want to talk to _me_. Apparently, because they feel
that I better understand their problems ("read their minds") than some
computer-science-only expert. They're expecting to get a creative,
perfectly tailored solution without having to explain every last
detail. At least that's what I figure.
And my psychology background sometimes helps too, to make them believe
I can read their minds, even though I can't... (just kidding!) ]

All in all, my path to becoming a software developer somehow reminds of
that well-known motto of my favorite programming language: There's more
than one way to do it.
So, if you plan to get into programming, why not study psychology? :)
OK, semi-seriously, if you prefer the unconventional approach: in
research you'll likely find many ways to engage in programming.
It's fun. And even with only moderate savviness you'll feel like a
king, I tell ya whut. ;) You'd better be an autodidact, though, as
there are hardly any experts around to guide and teach you...
Well, maybe I was just lucky. Might not work for everyone, at another
time and place. So, don't blame me if you mess up your life, having
followed the advice of some silly chick!

What else? Take life into your own hands -- before someone else does ;)
And know when to stop doing something you don't enjoy, even if fear of
the unknown is trying hard to hold you back. There are many ways...
And, most importantly, do it _your_ way!
Enough well-meant tips. I'll leave it up to the reader to draw further
conclusions. Thanks for having come along with me right down to here.

Almut


-----

[1] Not sure whether "tutorial" is the correct English term. I couldn't
find an obvious 1:1 translation... The German word is "Tutorium".
It's neither a seminar, nor a lecture. Maybe exercise or just class?
It's something an experienced student leads, attended by around 5-20
lower-grade students, where problems that have arisen during lectures,
seminars or homework are being discussed, and sometimes, exercises are
being worked through... Any suggestions for its proper name?