Catherine Gracey

Living Life, One Misadventure At A Time.

Testing a New Approach

Last month I had my first in-person interview for a programming job. I had almost a week to prepare for it, so I decided to spend the time looking into a few of the tools and JavaScript libraries that I’ve always meant to look into but have never made the time for. It was an intense few days where I picked up a lot of new skills and mentally kicked myself for not doing it earlier.

My favourite new skill is testing. I worked through a course on Mocha.js and Chai.js. Mocha is a test framework and Chai is an assertion library, and together they tie in very nicely with behavioural driven development. In English, that means that when I plan to write a section of my program, I can tell the tests what it should do and then the tests will tell me if my program succeeds or not. This might sound like doing double the coding work for no additional functionality, and in a way it is, but it means that every time I want to test my code I can just type a single command and the program will check itself. If I write my tests sensibly, it means that I can make changes without worrying about breaking something else that I don’t realise is connected to the part of the program I’m working on. If something does break, my tests will tell me what and where it is broken, so I don’t have to spend hours trying to hunt down the problem. It’s pretty neat.

Adding tests to my sandbox websites was simple. Writing the test and the code to go with it was straight forward when I wrote the tests first. My structure just worked naturally, and I was thrilled to see that test driven development was considerably faster for me than manually testing as I went, even with the additional coding required.

After a few weeks of practicing in the sandbox websites, it was time to try adding tests to languagelearning.ninja. This was a very daunting proposition, because I have spent months coding this particular project. It is the most complex thing I have ever attempted, and in the process of writing it I’ve come up with quite a few little work-arounds that I’m not particularly keen to revisit. I did not structure the site with testing in mind, which is painfully obvious in almost every file that I open.

I decided to begin small, with the library module. My first tests just checked if the test suite could access the library files and if the correct languages were present. I expanded the tests to check if each language had entries in each genre that I plan to include. Within the first day I had already written hundreds of tests and refactored my code considerably. As I wrote each new test, I was conscious that these tests would have to handle future developments to the site. This is where I am learning how to scale.

Nine days of intense coding later, and Mocha reports that I have written well over 1000 tests. To come that far has meant restructuring most of the website, and I have barely started drilling into specific modules. So much has been broken down, modularised, and reassembled in a way that is much more predictable. Theories and methods that I have encountered over the past year and never found a use for seem vital now. Business level decisions that I have struggled with for years suddenly became obvious in the test environment. I stopped asking “how can I keep track of this?” and started asking “how can the computer track this for me?” Most importantly, I can now see how other people could work on the project without disrupting my own work. I don’t have to keep everything in my head any more, and it’s giving me the space to finally think again.

I didn’t end up getting that programming job, but I’m not disappointed; there are still a few questions the interviewer asked that I didn’t have good answers for, and if they turn out to be as helpful as testing has been, I will be too busy learning to work for anyone else for quite some time.

Advertisements
Leave a comment »

The Crystal Ball of Hindsight

I firmly believe that hindsight is the most powerful teaching tool that we have. Paths and possibilities that are hard to see now become so obvious when they move to the unchangeable safety of the past. Decisions can be reassessed, playing what if becomes easier because so much more information is available, and what was known at the time is simpler to weigh up and properly measure.

The past year has been very educational. Not a day has gone by that I haven’t looked back and wanted to kick myself for what is obvious today that I didn’t do yesterday. Every time I let my thoughts drift to the past it shows me another strategy that I didn’t use. Time is blurring into a frustrating sequence of could have, would have, should have.

It would be easy to berate myself and get negative about this process, but I also understand that it is something I need to be doing. No matter how I view this time in my life one year from now, I will not regret the lessons I am drawing from my mistakes, some of which have been spectacular. This reflection has shown me options that are still available, options that I might otherwise have missed entirely. Life will be very different in another 12 months.

Today I had my first session with a German tutor. We discussed the problems I have with the language, the strategies that I tried in the past, and what my capabilities with the language are. At the end of the session she told me that she doesn’t often have students who are as motivated as I am, and that I am clearly prepared. In that moment I paused, reflected, and decided she was right. I am incredibly motivated, and I am incredibly prepared. Then I quipped that preparation doesn’t do much good if you never get past the preparing and into the doing.

Things derailed for me a long time ago, and I have spent years since then preparing to make things better. I put an incredible amount of effort into the preparation, and I burn out just before I would achieve what I set up. There is always a new problem, something more urgent to take care of, and I hope that the old things I have prepared for will sort themselves out. Sometimes they don’t, but they do with enough frequency that I never notice my pattern unfolding again. The only thing that is guaranteed as things are is a life cluttered with half-finished projects.

The solution to resolving the tension in my life is to follow the path that allows me to finally and consistently act. Progress inspires progress; it becomes a habit that is harder to break with each passing day. Progressing defines you as someone who can, rather than someone who wants. It soothes regret and erases bitterness.

I should take all of this wisdom and do something great with it. I could work through the grammar exercises that I have. I could finish the pair of pants I am making for my daughter. I could work on my coding project. There are dozens of paths available to me. They all look equally promising; they all look equally terrifying. I just need to start walking and remember what I’ve learned.

Leave a comment »

Passive Aggressive Fossilisation

Last year, when I began learning JavaScript, I decided to dust off my language learning ideas and turn them into a computer program. This isn’t the first time I have tried to do this, but it is definitely the most successful so far. My various failed attempts over the last three years have taught me a lot, and that understanding is finally coming together.

This project consists of two main parts: a range of modules to learn the language through, and a database that supports the modules with language data. In the past I have been most excited about building the database, carefully reading grammar books, and making sure that the exercise to write a program teaches me more about the German language than the programming language of choice.

Since beginning the project last year, I have noticed a dramatic shift in my priorities. This time I took a database that I had already started, converted it into a form that would be useful for the current project, and have barely touched it since. I am enjoying the programming far more than the language, which seems odd since learning the language is the ultimate goal of the project.

I decided to take a few days off from the project last week, to explore my emotional state with German. I felt no hesitation playing games in German, talking to my partner and child in German, or browsing through German books. I simply resisted when it came to the point where casual interactions might have turned into focused study.

It has bothered me for months that my language skills have fossilised, but this week showed me why: it isn’t that I have reached my natural limit for German, that my study skills are ineffective, or anything else on a long list of possible failings. The problem is that I no longer want to improve.

Emotionally, I have the perfect level of German skill. I understand more of the language than my daughter does. I can make my way through Germany without too many issues as a tourist, and I am skilled enough that I can use German as a lingua franca in other countries. I already get as much social credit for trying to learn as I am going to. But, most importantly, I have stopped at a level where I am incapable of communicating about anything beyond pleasantries with certain people I know in Germany.

My last trip to Germany was difficult for me. I understood enough German that I knew when people were being rude or unkind, but not enough to respond. There were dozens of times when I found myself at the centre of a highly critical discussion about various failings that I was perceived to have, but I did not have the ability to answer those criticisms. If I learn more of the language then I will need to do something about these little attacks, because I won’t be able to hide behind the defence of hoping that I simply misunderstood what was said.

Defending myself verbally is going to require a very different vocabulary to the one that I have been trying to learn. Calling someone out on their behaviour requires very particular phrases if you don’t want to cause even more offence. Broken German won’t be sufficient; it has to be fluent or nothing at all. Learning to talk like that isn’t a philosophical problem for me, but focusing on it feels like waiting for the next run in that I don’t want to have.

If I am going to keep working on my program then I need to deal with my current reluctance to learn more. There is still a lot for me to improve with German, and I can always pick up additional languages. I have a wealth of available options, I just need to get past the fear and get back to enjoying the process.

Leave a comment »

Switching to Anki

I recently downloaded a copy of Anki for my language practice. It is a flashcard program that utilises spaced repetition, which means that each time you are correct the program will delay showing you the card for increasing intervals of time. It is freely available on Windows and Android, which are the only platforms I looked into. With their server, AnkiWeb, my laptop version and my android version can sync independently of each other, so I can work offline and update when I’m ready.

Language practice has definitely taken a hit since Shroomi was born. It isn’t that I don’t have the time so much as I don’t have the type of time that I was used to. Computer games are fine, but I need her to be in an accommodating mood to play them. Duolingo is quick, although it is so painful since the new website design that I’m losing interest in it. I need something that I can use for one minute or one hour, which doesn’t come with stupid sound effects that are guaranteed to wake up my child. Anki ticks these boxes.

AnkiWeb has a lot of free user decks available for download, but I didn’t want to check the quality of someone else’s data. After a few misadventures with Memrise, I’ve learned not to trust random word sets from the internet. Keying in the words that I want to learn and doing a thorough proof read is a great way to introduce myself to the material, so I created my deck from scratch.

Setting up Anki took a bit of work, and I relied heavily on the manual, but now that it is up and running it is brilliant. Users create notes in the program, and then determine the cards that they want generated. This means that you can quickly set up multiple types of cards from the same data set, so bulk edits are fast. Cards based on the same note are linked to each other, so if you have multiple cards the program will mix up the way your data is presented to you.

I began by deciding how I wanted my cards to be designed. Verbs were the first area I tackled since the type of information I need here is quite different to nouns and adjectives. I want to learn the infinitive of each verb, but also the conjugations for the past tenses. To do this I took the list of verbs that I want to learn and typed everything into an Excel spreadsheet (a lot of my data was already in Excel). I exported a few lines into a CSV file and then resaved in Notepad to get the correct encoding (because we love it when Microsoft removes important functionality). After checking that my fields lined up correctly, I imported the full list into Anki. Verbs are in their own note type, which I can filter or edit without touching the rest of my deck.

Because Anki is so easily controlled by the user, unlike most web applications I have come across, I can dictate how new data is introduced. My first group of verbs had 130 different words. Some of these verbs I am already familiar with, and others were new. I told Anki to display every card that showed the German infinitive and asked me to translate it into English, because this is the easiest translation for me. Normally there are three options for new words: Again, which repeats the word quickly; Good, which repeats the word at 10 minutes and then one day; and Easy, which repeats the word in four days. In the settings I am able to change Easy to repeat the word with a longer interval, so for my first run through while setting things up I could push revising those words to a much later date. After the first run through I can then return the setting to four days. This delays the conjugations I am confident with in my regular practice, so Anki will show me the conjugations I am less confident with earlier and more frequently.

My full word set has primarily come from a first year German text book, and contains approximately 3500 words. As I encounter new words that are not in my list I can just create a new note in Anki to include them. This means my word list is much more organic than a single training program. It also means I am unlikely to forget words because I am no longer exposed to them, which solves a big problem I have faced since my last trip to Germany.

Anki has a lot of benefits, but as a new mother there is a single feature that makes it fantastic: no time requirements. If I can’t finish today’s cards then the program will reschedule tomorrow’s cards to prioritise the ones I am most likely to forget. If I don’t have time to add new words I can include them later without disrupting my progress. I can study during stolen moments and those long hours where I’m stranded in a chair. Other new mothers might be resorting to daytime television, but I’m making use of those otherwise unproductive hours. I might not get everything done during the day that I would like to, but I can always feel a sense of accomplishment by the time my partner gets home.

Leave a comment »

Parlez-vous anglais?

Several years ago I asked how I wanted to define myself as a person. One of the labels I wanted to be able to use was ‘bilingual’. With no particular language preference in mind, I bought a few CDs on learning French and spent a few weeks listening to them. Some of it even stuck.

A few weeks into my French experiment, my aunt asked if I would join her on a three week tour of Germany. I had taken German classes in high school, and some of that had stuck as well. I abandoned French and focused on brushing off my rusty German skills. Two weeks before we left I met my German partner at a party. French became history, and I have spent the last two and a half years learning German as a result. Combined with the two and a half years I spent learning the language at school, the maths astonishes me.

Over the last year I have begun to review my desired personal definition. No matter how confident I feel about my skills in German, I can honestly call myself bilingual now. My conversations might not be scintillating in that language, but the range of topics I can touch on is impressive. I can make myself understood in most situations, and I can easily survive by myself for weeks at a time in the language.

During the Christmas break, I decided that I was no longer content with the goal of being bilingual. Polyglots have captured my attention, and I want to see if I can join those ranks. It feels like an exciting label to apply to myself. There are dozens of practical reasons to learn, but most importantly it just sounds cool. This is perhaps one of the worst motivations in the history of bad motivations, but it is enough for now.

Without a particular language to focus on, I decided to return to French. We have French friends that I could practice with, several French language resources that I can study from, and a list of potential countries we might live in that have French as either a primary or secondary language. Not having to read so many subtitles is also attractive.

I began studying with enthusiasm. My goal was to complete one skill and one word review session in French on Duolingo every day, and to then spend the rest of my study time practicing German. I decided this would be my new year resolution, so on January 1 I began.

After failing at the second lesson repeatedly, despite the French I already knew, I decided to scale back my Duolingo goal. One lesson per day instead of one skill per day seemed far more achievable. I want to progress with French, but not at the expense of my German studies. Frustration began to set in as I failed at lessons consistently, and after 10 days I missed my first daily practice entirely. Today marks 14 days, and I have only succeeded at 8 lessons in total.

The last two weeks have taught me a few things. First, and most importantly, I know far more German than I had ever suspected. I have gone from hoping I would be able to pass the A1 examination to being confident I could tackle the B1 examination with only a few hours of practice to fill in the gaps between my vocabulary set and what is on the test. Secondly, the introduction I have to a language is just as important, because it shapes my perception of the difficulty level. I know that I am capable of learning a new language thanks to my practice with German, so this is clearly a method problem rather than an inherent inability to learn.

Duolingo is not working for me with French because it is too much, too soon, and too irrelevant for my early needs. As an English speaker I have a vast French vocabulary, and as an owner of a bilingual dictionary the rest of the word set is literally within my reach since the book is on the coffee table beside me. Unfortunately, books and robots do not teach me how to hear the language, to follow the sounds and the flow of a voice, to shape my own mouth to speak it myself. I do not have an understanding of how to build sentences or to deconstruct them. The bits of language are still fragmented and useless to me.

I have decided to quit Duolingo in French until I am skilled enough to need daily practice with what I already know, and to gradually add new vocabulary to the mix. I will return to the Rapid French CDs from earworms that I began with and finish learning that content before I move on to the next language course, which will probably be Michel Thomas.

Regardless of how my adventures in French go, I am much happier now to continue adventuring in German. A little bit of genuine perspective can do wonders for a woman’s confidence.

Leave a comment »

How to Make a Foreign Language Scrabble Tile Set

Scrabble is one of those games that never seems to get old. The game forces you to consider words in new ways, stretching your ability to see patterns in letters. Not only does it challenge you, but it also offers a chance for smug linguistic superiority, and who doesn’t love that?

In my household is a very lovely, very overpriced Scrabble set. Unfortunately, it never makes it out of the box. English is my native language, but German is my partner’s native language, and playing with my tile set doesn’t seem fair to either of us.

Since playing in English is unfair, I decided to even things up by playing in German. The first problem is that German has a few characters that English does not, and letters occur with different frequency. This was an easy problem to work around: make a German tile set.

What I Needed

  • A list of the letters and their point values in my target language.
  • A tile from my existing Scrabble set.
  • A ruler.
  • Something to make the tiles with. I ended up using two pieces of cardboard in different colours.
  • A pair of scissors.
  • Wide but thin double sided tape.
  • Something to write on the tiles with. I used a pencil for the outlines and then pens of different thicknesses for the letters and points.

Scrabble Supplies

How To Do It

Step One: Look up the letter set in the target language. For this I went to Wikipedia, which has more than 40 tile sets. I chose to go with the modern German set, rather than the original.

Step Two: Measure my existing Scrabble tile and then draw up a grid of squares that size on my pale sheet of cardboard. I added a few spare squares to my grid in case I made mistakes, then cut the grid free from the larger piece of card so it would be easier to work with.

Step Three: Write out your letters and their values.

Step Four: Layer the double sided tape onto the back of your tiles. I found it easier to measure lengths with my ruler and cut, rather than trying to do it directly on the card. Make sure the tape covers the entire back, or you might have problems with the tiles peeling apart at the end.

Scrabble Tiles TapeStep Five: Peel the backing from the tape and stick the card to the back piece.

Step Six: Cut apart your tiles. I had five blank squares; two for the blank tiles in the tile set, and three for spares. I left the spares together so that they are easy to find if I need to use them later.

Scrabble Tiles

The tiles I created are quite thin but very sturdy. By using different coloured card I have created a matched set that I can easily differentiate from any future languages I might also decide to create tile sets for.

To balance out our language skills, we have decided that I can play with a dictionary while my partner can’t. Now we just need to solve our second problem: finding the time to play.

3 Comments »

Du verstehst mich!

My efforts to learn German have fluctuated over the last year. There are times when I am very keen – such as on the plane heading to Germany, or when I don’t want to clean the kitchen – and other times when I’m a bit less diligent. The pattern of increasing and diminishing interest seems to be fairly stable, and I am convinced that I need a certain amount of time to consolidate what I have learned before I can acquire new words and phrases.

This weekend I impressed myself with how much I am able to communicate. I have finally reached a point where I am able to articulate quite abstract and complicated concepts, and be understood clearly. My sentences are coherent enough that native speakers are able to supply the missing verb or noun for me. It is an exciting stage to be at.

I am convinced this improvement is because I have found ways to interact with the language that do not feel like study. When I am relaxed I do not struggle with the grammar, I just accept it and move on with my life. I can see connections with English that are otherwise opaque to me. I am willing to blunder through and make mistakes, which means I can try things I was previously too timid to say.

Dialect continues to be my biggest hurdle. My boyfriend is using it more often in his conversations when he doesn’t want me to understand what he is saying. This is frustrating enough to compensate for my newly found relaxation, but if he isn’t careful then his new tactic won’t last for long.

As always, my challenge is to find new ways to expand my vocabulary. Most movies and games that I have access to are in High German, which won’t help me much with the dialect. Despite this very minor drawback, every new word will help. If nothing else, I will be able to isolate the slang terms. Sometimes a bit of context is all it takes to know he’s in trouble when I get my hands on him.

Leave a comment »

Language at the Multicultural Festival

My boyfriend and I decided to volunteer at the Multicultural Festival over the weekend. It is one of the largest events in Canberra, with free entry, free entertainment, and over 400 stalls ranging from embassy stands to ethnic foods. More than half of the city’s population will turn out for the event, so it is crowded, noisy, and a lot of fun.

For my first shift, I was sent to the information tent. It was a fairly simple job: hand out maps and entertainment programmes to people, and pretend I had a clue what was going on. I can fake it until I make it with the best of them, so this was a good level of challenge for a Friday afternoon.

While I was there, a group came looking for maps. The two women happily chatted to one of the Asian volunteers while the men stood in the middle of the walkway. Their conversation was loud, so it was easy to follow what they were saying.

The taller man protested to his friend that if people are going to be in this country, then they should speak English. He looked around the nearby stalls as he said it, and I wondered who had prompted the statement. Ordinarily I would agree with this position, but it sounded out of place at a multicultural festival. After all, the point of the festival is to celebrate cultural differences and diversity. One of those differences will always be language.

While listening to his overly loud statement, I noticed the linguistic difference between my opinion and his. I am a firm believer that you should be capable of speaking the local language; I never require that people do it when they are talking between themselves. As an English speaker in an English speaking country, I will go out of my way to speak a different language in a private conversation.

By changing “should be able” to “should”, a significant shift occurs in meaning. Being capable acknowledges that you will have other valuable skills that have a place in the locality. Being expected means that alternative skills lose their value.

People who can speak the local language will always have an advantage over those who can’t. It is easier to gain employment, go shopping, and find help in an emergency. You can communicate with your children’s teachers, understand warning signs, and engage in the local culture. Presumably you are in that place for a reason, and to be incapable of interacting effectively with those around you is a rapid strategy for misery.

Thinking of his statement, I can’t help but wonder about the context. Did he simplify a common statement said between friends, or was he responding to a particular incident that had frustrated him? Did he speak so loudly because he feared his friend would not hear him, or because he wanted everyone to listen? Whatever his intention, it is unfortunate that a valid social concern has been lost under the impression of a loud, opinionated bogan.

1 Comment »

Where To From Here?

My partner and I are in a predicament. He is currently completing his PhD in physics, and expects to submit his thesis early next year if everything goes well. At that point, he plans to find a job doing a whole lot of stuff that I don’t understand. It could be work with particle accelerators, it could be work with semiconductors, it could be work with energy research (is that the same as semiconductors?), or it could be some additional science field that I’ve probably heard of but already forgotten. This means he wants to have a new job in 12 months.

In the shadow of his future career path is my own. I am able to work in two careers at present: writing/editing and administration. I am highly skilled in these fields, and I know that I could walk into a job doing either of them tomorrow. These jobs would pay well, and my financial worries would be over the moment I put on a suit and walked into the office. The trouble is that I never want to put on a suit and walk into either of those roles again. The issue here is not the suit. To do anything else will require retraining.

Our predicament? He is unable to tell me which country we will most likely be living in. We are looking at the global job market, and if you have ever looked at the requirements between countries you will appreciate how unpredictable they can be. I could spend an expensive year here learning something, only to arrive at our next destination and discover that my efforts are not recognised and will need to be repeated. Alternatively, I could spend a year waiting to migrate before studying only to see him secure a job here in Canberra.

We had initially focused our research on countries where the official language is either English or German. Both of us quickly eliminated the USA as an option, because it is too dangerous a place to live. (I’m sorry, dear American friends, but your country is insane and I sincerely hope that you are never shot by a lunatic while taking your children to school or going to work.) As his research continued, additional countries that officially speak neither English nor German were added to the list.

Now I not only need to train in a new field, but I probably also need to learn a third language. Learning German isn’t too bad, because I know that it’s on the list. But our third language? Short of picking up a few key phrases in every European language, I have no idea where to start. I assume I’ll have several weeks to begin once we know where we are moving to, but those weeks will include packing up our lives in Canberra and shifting them to another country.

The internet tells me that French is the third most common language behind English and German, with 24% of Europeans speaking it. Portuguese is fairly far down the list with only 3% of Europeans able to converse in it, but if we moved to Brazil it would become rather important. Dutch is a possibility, but only 1% of Europeans speak it as a second language; as with most of the likely languages, it is essentially spoken only in its native regions.

For the next year, we are potentially trapped: he won’t know which jobs are possible until he has written his thesis, and I won’t know which path to follow for my own life until I have a better idea of where we will be living. Without that information, I can’t look up professional requirements, and I would not be able to navigate a job interview in the local language. There will be an obvious and satisfactory answer out there about what to do for the next year, but at this point I’m stumped and can’t see it.

4 Comments »

Die Sims 3

After my recent success with Civilization IV in German, I sacrificed a few hours of my life uninstalling The Sims 3 with the hope that I could reinstall it in German. The mission was a success and, after a few more hours of my life were sacrificed putting it back on, I was ready to experiment.

The main attraction for playing The Sims in German was simple: this is a game that deals with everyday life. My sims need to find jobs, acquire new skills, and cook dinner. They need to wash their clothes, clean the toilet and, depending on their personalities, they have different wishes that they want fulfilled. Some of them want to go fishing before 6am, others want to stay inside for 48 hours. Many wishes are subtly different, so if I cannot navigate the nuances of the requests then I will fail at them.

It wasn’t until I tried playing the game in German that I realised just how wretchedly complex it is when the expansion packs are installed. My sim wants to chat with someone? That’s great, but I have 30 different options for interaction available to select from. Is this interaction going to cause my sim to slap the other one, or to passionately kiss them? Neither option is what I want when the sim in question is the father-in-law.

There are so many new language constructs that I am being exposed to in the game. It is filled with jokes, and some of the references are so obscure that my partner can’t translate them for me. Literal translations are not helpful. A particular nightclub “flies the cow”; what on earth does that mean? We’ve asked a few other Germans, and they’re also clueless. While I feel a bit better that the natives don’t understand, it doesn’t help me much.

If I hadn’t progressed so far with my current family, I would probably uninstall all of the expansion packs until I had a good grasp of the base game. There are a few more packs that I haven’t bought, and I think I will delay buying them until I can play for a few hours without asking for help. I imagine that seasons would be a simple addition, but there will probably be so many seasonal activities that it will just be a new way to overwhelm myself.

With several weeks of gameplay now behind me, I finally feel as if I am wasting time instead of quietly putrefying my brain. My sims have had some unfortunate experiences that I don’t normally subject them to, and I’ve felt obliged to make it up to them by cleaning their house while they sleep, but there is definite progress. I won’t know how much this game has helped until I am next in Germany, although I suspect it will be considerable.

Leave a comment »

%d bloggers like this: