Looking outside of the window

With my daughter, we play a game. We look outside of our apartment’s window, on the street. We try to guess the color of the next car that will cross in front of us. We aren’t allowed to consider cars that are already visible.

I know the optimal strategy is to always pick the same color.

I know I can look up online to find the distribution of colors.

I know I can create a simple Bayesian model on my mind and update it based on the cars we see, so I can incorporate local knowledge.

I know that it is not the models that fail to give me an answer, but the models I was taught glossed over on how I pick my utility function. I can adjust them to give me an answer that also incorporate the excitement of randomness. But that’s not why we play.

Because all of that is arbitrary and an excuse to play. We just want to play a game with my daughter and see her smile or happy despite the argument on whether the car was white or grey. That’s why we play.

Blue. Orange. Red.

How to travel cheap to Kalamata

Kalamata is one of the two best cities in the world. Zurich is the other one. This is a post about how to find a cheap connection between Zurich and Kalamata and a public note for my future self.

Desired properties/limitations

  • The trip must take place within a specific time interval (e.g. school holidays).
  • Avoid cars or buses.

State of the world

  • Kalamata has no train connections.
  • Zurich is well connected.
  • Night trains from Zurich go to cities that also have airports.

Proposal

  1. Find all Kalamata airport arrivals within a week.
    Assumption: Kalamata is a small airport. Not too much work.
  2. Keep a note of the (departing airport to Kalamata, day of the week) pairs. Filter out departing airports that are far from Zurich.
    Assumption: By looking at the arrivals within a recent week, we can find most of the airports that have direct connection to Kalamata.
  3. On flights.google.com, enter all the airports that have departing flights to Kalamata on a specific day (e.g Monday) as origin. The date should respect the day (e.g. Monday) and be close to the beginning of the interval we want to fly. Put as destination Kalamata. Try with one-way tickets or choose as return date the same day of the week as the departure date.
    Assumption: (a) Airplanes go usually A -> B -> A, so if we have a departing flight on Mondays, we also have an arrival flight on Mondays, connecting the same airport. (b) The schedule of the flights is somewhat regular.
  4. Repeat the process on step (3) seven times, each one for the different days of the week.
  5. Take note of the 2-3 best options you have found.
  6. Refine the list from step (5). For return tickets on step 3, if an airport has flights to Kalamata in multiple days of the week, you can try also those as return days.
    Assumption: This step is not as thorough as the previous ones.
  7. Check for train connections. Don’t forget to consider the night trains by visiting https://www.nightjet.com/#/home. See also: https://www.seat61.com/trains-and-routes/nightjet.htm
  8. Book train tickets at the beginning of the intended vacation period, accommodation until the flight to Kalamata, and similarly for the way back. At the end, we should cover the whole intended vacation period.
  9. Enjoy a few days in a hopefully new European city + an amazing stay in Kalamata!

Experimental results

Following the above process, I found that the tickets Zurich -> Vienna (by night traing), Vienna -> Kalamata (by airplane), Kalamata -> Paris (by airplane), Paris -> Zurich (by train) were quite cheap and also allowing to visit two other nice European cities for a few days.

Conclusion

Zurich, and a big part of Europe in general, are very well connected by train. This allows a lot of flexibility in choosing airports. This works great, when someone is in mood of vacation and happy to explore cities.

Gerechtigkeitsinitiative — Einfach mit Zahlen erklärt

Möchtest du, dass der Kanton Zürich jemandem gibt:

  • 300 CHF mehr, wenn er 200k pro Jahr CHF verdient.
  • 70 CHF mehr, wenn er 50k pro Jahr CHF verdient

Wenn du glaubst, dass es OK ist, solltest du für die Gerechtigkeitsinitiative “Ja” abstimmen. Anders solltest du “Nein” auswählen.

Die genauen Zahlen kann man auf der Steuerrechner Webseite finden. Wie man sie berechnen kann oder warum das so ist, was die Gerechtigkeitsinitiative bedeutet, erkläre ich im Text.

Obwohl der Name der Initiative das Wort Krankenkasse enthält, handelt es sich um eine Steuerreduktion. Weil die Krankenkasse in der Schweiz obligatorisch ist, müssen alle Krankenkassenprämien bezahlen. Wenn wir Abzüge wegen der Krankenkasse haben, sind sie relevant für alle.

In der Schweiz haben wir eine progressive Besteuerung. Das bedeutet, dass man für die ersten 10,000 CHF, die man verdient, keine Steuern bezahlen muss. Für die nächsten 10,000 CHF zwischen 10,000 – 20,000 muss man 200 CHF bezahlen. Für die nächsten 10,000 zwischen 20,000 – 30,000 muss man 500 CHF bezahlen. Für jede 10,000 CHF, die man bekommt, muss man mehr und mehr Steuern bezahlen, bis fast 50% des Einkommens. Die Idee ist, je mehr man verdient, desto mehr kann man bezahlen. Die Zahlen hier sind nur ein Beispiel, aber nicht sehr weit von der echten Zahlen. Die Steuern in der Schweiz verändern sich nach Gemeinde.

Ein vereinfachte Beispiel:

EinkommenProgressive Steuern
0 – 50,0000%
50,001 – 100,00010%
100,001 – 150,00030%
150,001 –50%

In diesem Beispiel muss man keine Steuern bezahlen für die ersten 50,000 CHF. Danach muss man 10% von 50,000 bis 100,000, 30% von 100,001 bis 150,000 und 50%, wenn man mehr als CHF 150,000 verdient, bezahlen.

Das bedeutet, dass man die folgende Steuern bezahlen muss:

EinkommenSteuern
40,00040,000 * 0% = 0 CHF
90,00050,000 * 0% + 40,000 * 10% = 4000 CHF
180,00050,000 * 0% + 50,000 * 10% + 50,000 * 30% + 30,000 * 50% = 35000 CHF

Ein steuerlicher Abzug bedeutet, dass man für einen Teil des Einkommens keine Steuern bezahlen muss. Ein steuerlicher Abzug ist relevant für den “teuersten” Teil des Einkommens.

Wenn ich 200,000 CHF pro Jahr verdiene, muss ich für das Geld zwischen 150,000 – 200,000 CHF 50% bezahlen. Das heisst in diesem Fall fast 25,000 CHF von diesen 50,000. Wenn mein steuerbares Einkommen nur 199,000 CHF wegen des steuerlichen Abzugs wäre, müsste ich 50% von 49,000 bezahlen. Das ist 24,500. Der steuerliche Abzug beträgt 500 CHF.

Wenn du 60,000 CHF pro Jahr bekommst, musst du für das Geld zwischen 50,000 – 60,000 CHF 10% bezahlen. Das ist 1000 CHF. Wenn dein steuerbares Einkommen nur 59,000 wegen des steuerlichen Abzugs wäre, müsste du 900 CHF bezahlen. Der steuerliche Abzug von 1000 CHF gibt dir 100 CHF.

Die genauen Resultate der Initiative berechnen kann man auf der Steuerrechner Webseite. Die Initiative verlangt einen Abzug von 1,000 CHF und der Gegenvorschlag einen Abzug von 300 CHF.

My experience from the course for National Arbiters

Back in April, a two day course for national Arbiters in chess was offered, taking place in Magglingen. (announcement) The course had towards its end also an exam. If someone passed the exam, they would become a national arbiter.

When I learnt about it, I thought of it as a great opportunity to combine a favourite hobby of mine combined with an immersive environment among like-minded people, where I could listen to a lot of German, while deepening my knowledge around the game. On the other hand, the reasons that were making it exciting, were also factors of uncertainty for me. My German was not that great (B2 level but still learning) and my chess knowledge was mostly practical as a player in local tournaments and from tournaments that I had organized at my local club Letzi.

First order of business for me, was to make sure that the course is (also) offered in High German, so I had a realistic hope of understanding. Then, I had to improve my quite limited knowledge knowledge in specialized terms around chess and its rules. I thought it will be a good idea, to first learn the rules of chess from the newly published FIDE Arbiter’s manual 2022. So, I downloaded, put it on my e-ink tablet and started reading it. A benefit of having the book on a tablet is that it doesn’t look as intimidating as the 200+ pages suggest.

Later on, I discovered that I shouldn’t have been intimidated anyway, because many of these pages are reference material, forms, a sample exam or anti-cheating rules that someone may have already picked up. Nevertheless, there was quite a lot of material that was new to me or that I hadn’t really thought about it. Examples. I started reading it, and somehow I managed to read most of it before starting the course. The manual was in English and even though it was in a quite boring format, reminding of how actual laws are written, it was digestible and made sense.

The days were, though, approaching and in the meantime we had received a red booklet, with the same title “Arbiter’s manual” but in German, that I was ignoring for the time being. My plan was to read it once I understood well enough the rules in English, so I could better map the unknown terms in German to an already familiar meaning. Unfortunately for me, I finished the English version of the book, only a few days before the trip to Magglingen. Once I opened the red booklet, I discovered that it was shorter, not only because the font was smaller and some of the reference material (like sample exam or some tables useful for arbiters) were not included, but because it was based on a different older version of the FIDE rules! The rules I read were essentially just released and some of them not yet in effect. There was still not always a 1-1 mapping to the English text, which was confusing for me.

That increased my stress levels on whether I would be able to understand the course. Thankfully, the instructors were very friendly and they reassured me that the course will be offered in High German. Once we started on Saturday morning, I got again a bit stressed. It took me a few repetitions to understand what “Schiri” means (short form of Schiedsrichter — arbiter) which I had not encountered in the book. There were also more other words that I didn’t know yet. Thankfully, in one of the morning sessions we talked about the mechanics of different tournament systems, which was more technical (algorithmic/maths) in nature. That slowed down the pace of new unknown German terms and allowed me to slowly catch up with what was going on. I would say that at the very beginning I could understand perhaps around 60-70% of what was being told. Thankfully, chess was a relatively limited vocabulary and after a couple of hours that percentage jumped to around 80-90% and considering the context and the natural repetition that occurs during a course, an even higher percentage of understanding.

Despite that, at the end of the day, I still had to catch up and make sure I don’t have too many gaps in my knowledge for the next day. I wouldn’t like to fail the exam. So, I stayed until relatively late up (around 01.00 or so), reminding me of my student years, but I managed to go through the book sufficient times, so I was confident enough that I understand it sufficiently.

On the second day, we had relatively easier modules before the exam. How pairing software works, how to register the tournaments and results online, and how the Elo system works. Since most of it was either technical in nature (software or maths), I didn’t have to worry too much about the language. Then, came the time of the exam.

The exam had two parts: oral and written. During the written exam, we were called in groups of three and for few minutes we were asked to demonstrate that we know how to configure the clocks in some tricky situations, add bonus time (a frequent adjustment when some rules a broken) and answer a couple of questions. I was in the first group that got called. From one side, that was positive because it meant that I would have uninterrupted time for the written part, on the other hand, I was feeling a bit stressed. Thankfully, that part went well, even though the instructor had to repeat a part of one question to make sure I understood it right.

I have to say, I enjoyed the written part quite a bit. Some questions were challenging and required thought (for instance, is it in some particular positions possible to reach a drawn position?). I also had to write the answers in German. In some cases I didn’t know what are the articles of some words, and I had to look it up on the question itself, to make sure I write them correctly. Luckily enough, this part also went also well and I managed to pass the exam. For a couple of months now, I am a national arbiter in Switzerland.

A few weeks ago, I also volunteered to help for a couple of rounds to a qualification tournament for youngsters. There, I observed something that slightly surprised me, but in retrospect makes a lot of sense. Just by being there and having the label of arbiter on your t-shirt, you can prevent many problems from happening. The cases I had to even say something were fewer than I can count in one hand. For instance, people would stop making noise or trying to chat when they saw me arriving towards them, or they would move outside of the playing hall once their game was ready if they saw me standing next to them expectedly and so on.

Overall, I would say it was a quite positive experience. It helped me better my German, see chess from another perspective and I can now even organize some official tournaments! Magglingen is also quite nice!

A great view.
It snowed in the morning.

The imaginary part of experiences

There are many reasons why someone could call our lives complex. Here, I would like to focus on the imaginary part, along side the real one, that accompanies the perception of our experiences.

The main idea is quite simple: We draw conclusions based on experiences. Our experiences are based on how we perceive reality. How we perceive reality is affected by many factors. Instead of generalizing, I will give one example.

A phobia. I used to have a strong phobia when they were taking blood samples from me. Because of this phobia, every blood examination was a negative experience. I was imagining all the things that could go wrong and during the leading up and several minutes after the exam, I had to put conscious effort not to faint. It was always an event that I was perceiving strongly negatively, almost independently of the external factors. Every negative instance of this experience was reinforcing my fear. Despite my best efforts and my rational introspection, I couldn’t help myself to override the conclusion that my mind was making based on these experiences. I finally managed to do it, still not completely, and only after several efforts of focusing on the objective external factors, detaching them from my personal evaluation of the whole incident.

Like when we read a book, the story may be what the author intended, or at least as long as we were paying attention, but most of the colors and many other dimensions will be filled by our imagination based on our own (or lack of) experiences and knowledge. Eventually, we will judge the book by the experience we had while we read it. Since that experience has been heavily influenced by this imaginary part, there is a lot of room for variation that we can see projected on the opinions of different people for the same book/event/object/experience/…opinion.

My typical working day as Software Engineer

What I work on

I have a personal Google doc with a list of notes. For every task I am supposed to do, I have a small header and I dump my notes there in the form of a bullet list. When I finish the task, I delete them. I also keep a link towards the goals of the team/org.

This is handy for a few reasons:

  • Links to docs, related code snippets, code pointers, bugs.
  • Notes after asking someone.
  • Dump mental state at the end of the day.
  • Describe what I am supposed to work on next morning.

If the notes start becoming more than say around 10 lines, I consider seriously either polishing them and adding them to a bug for context, or writing a design doc. Otherwise, important details may go to the description of the code review request. My doc is currently about 3 pages, despite using it for quite some time.

When I work on what

I split my day in two parts: before lunch and after lunch. Mornings are output focused.

In the mornings, I disable almost all interruptions. That means no email, no chat, no meetings. Exceptions are code reviews and high priority bugs. During the mornings, I focus on more strategic and challenging problems, for goals towards the OKRs of the quarter, unblocking work for others, addressing the root cause of a some important issue, thinking about the design of a system that I don’t know yet how to approach and so on. With the exception of various communications I participate, I would say that mornings contribute to 80-90% of my output, despite being less than 50% of my working time.

After lunch I read and react on the various communication channels (email/chat/non critical bugs). I have the various meetings that help me reorient my work, learn what new is happening, ask or provide help and so on. Among these tasks, I try to do the more clear-cut part of work, like finishing some coding task, finishing some kind of documentation. I also update my personal doc with the various inputs, so I don’t forget them and I don’t rely on means (chat, email) in the next morning, where I don’t have access.

At the end of the day, I run my “shutdown” routine. I update my personal doc by taking notes of the unfinished tasks and writing at the top of the doc what I am supposed to do on the next day. A couple of words are usually sufficient.

Email

I receive several hundreds of emails every day. Not because I am so important, but because that’s how many async communications are conducted.

On gmail, I use filters extensively. Most mailing lists have a corresponding filter and a label. The label is hidden, unless it contains messages. I also have extra filters and separate labels for emails directly addressed to me, from my manager, from my management chain, and PMs.

I also filter out most emails from automated tools that I consider as redundant to a special label that I almost never look at. For example, I almost never look at emails for code reviews. I have a plugin that informs me of incoming code review requests or comments on my code and a customized dashboard so I can quickly look at what my peer group is working on.

When I skim through the titles of the emails under a specific label, the grouping already helps me adjust quickly my prior on how important this email may be and its broader context.

I try to be responsive within a day to the emails addressed to me. I try to read, or mark as read, all my emails within a week.

Meetings

I am based in Europe. Currently, most of my collaborators are either in Europe or in US. Therefore, afternoons/evenings is a common time for everyone. In my case, this is enough time for meetings, rarely reaching capacity. Syncing with people on the east coast of US is not a issue. It is much more challenging with people on the west coast, which in my case is mostly California. I try to limit these meetings to about 1/week because they are quite late for me due to the 9 hours difference.

Chat

I use it for mostly informal, quick turn-around communication. It takes about 10-15 minutes per day in my case, only in the afternoon/evening.

What I don’t do

I have a rule since essentially I started working full-time about 8-9 years ago. At work, I don’t browse non-work websites. This allows me to finish my working hours earlier than otherwise.

My particular situation

The above routine is personal, based on my circumstances. For context, I am a senior software engineer at Google located in Zurich.

It is quite likely that it doesn’t work well for others. Even in my case, it is possible that there is a much better way of organizing. I have been using this routine for about 2-3 years now, with small variations and to me it feels like an improvement compared to not splitting my day in two halves. I also tried to have a week of disabling interruptions, inspired by the book of “Deep Work” by Cal Newport, but that didn’t work for me, since a sufficient amount of changes/events happen that I need to consider or react.

Some chess rules for OTB play

I was recently reading some chess rules, and I bumped on cases which may be less well known:

  • Standard chess is at least 60 minutes per player.
  • Rapid is beyond 10 minutes.
  • Every second of increment counts as a minute.
  • For >2400 players, 120 min (or equivalent with inc) is the minimum supported time control for classical. For less strong players, faster is allowed.
  • Max 12 hours per day.
  • You only lose on the second illegal move.
  • Arbiter is supposed to intervene, even if players didn’t mention it, for illegal moves, if arbiter notices.
  • You have to write draw offers. You write them as (=).
  • You must write your moves after you have played them, and always before you play the next move.
  • For blind played, it is recommended to announce their moves using NATO alphabet and German numbers.
  • You can promote in most logical ways and it is legal. If you manage to promote in an illegal way, say by leaving the pawn on 8th rank and pressing the clock, the pawn becomes automatically a queen.
  • If a player asks how many more moves until time control, arbiter should NOT answer because that counts as advice.
  • If player asks if en passant can be played, arbiter should NOT answer with yes or no. Instead, explain the rule.
  • King + Rook vs King + Knight. If Rook is flagged, it loses. If instead of Knight, there was Bishop, it is a draw.
  • King + Queen vs King + Bishop. Queen’s side flag drop, then it is a draw.
  • King + Queen + pawn vs King + Bishop. Queen’s side flag drop, then it is a win for the other side.

Source

Standardization and automation of human interaction

I argue that we increasingly standardize our interactions. At the same time, we delegate bigger parts of the process to automation. The text is mostly observations in different settings.

~~

All of our cells share the same DNA, even though they may serve different needs. A cell in our heart looks and functions differently than a cell in our liver or skin. What we call I, Fatim, Nick, or Hina is mostly the collection and the macroscopic deliberation of all these cells working together. To form an individual, cell communication both in short and long distance is of critical importance. Sometimes, we do focus on the individual parts at different scales. Perhaps a specific cell is used as a proxy to find the common DNA or other characteristics of the body. Perhaps an organ needs special attention due to a medical condition. Nevertheless, at least at a conscious level, we spend most of our time discussing the behaviors exhibited on a macro level.

The scale of our focus is shifted by the particular needs. Perhaps due to a medical reason, or scientific curiosity, we employ our understanding of the inner workings of our body to draw some high level conclusions. For example, we know that if we meet someone on a suspension bridge, we may find them more attractive because we tend to misattribute the reasons for our physiological stress.

In everyday life, we are usually busy analysing our behaviors at an individual level. What did Duong mean, would Marie want to do that presentation, should I ask my host for a second serving, since I really liked the meal they prepared? For some of these questions, there are not always definite answers, but sometimes we refer to what we call “culture” or social norms to advise us on what is considered as acceptable behavior. There are many possible definitions of culture, but what is of interest to us, is that the existence and acceptance of this reference indicates strongly that there is a typically constrained set of behaviors whose existence we constantly use to calibrate our actions.

Indeed, there are many behaviors that we learn in some form and shape our everyday interactions that we rarely question or ask for their origin. We greet someone when we meet them, or before we leave. There are other behaviors that are harder to observe but we can easily verify them. People across different cultures and languages may refer to the same color (wavelength) as the most “typical” red or blue. More cities are closer to water, like lakes, rivers, or sea than not. Policy makers, investors, or just curious people may be more inclined to use these behaviors as predictors for longer trends or to affect future behaviors.

Sometimes, group behaviors are conventions constructed to facilitate a specific purpose. As an example, during war times, we may observe a reinforcement of the patriotic interests of certain populations. In an increasingly complex and interconnected world, we need a certain standardization level to navigate the various complexities. There are nowadays places where you go and say you want some kind of pasta. You are then allowed to sit there, enjoy your meal and as you are ready to leave, bring close to a machine a small card, have a machine make a beep sound, display some frequently seen drawings that we call letters, and go your merry way with a full stomach. At the same time, your counterparty will be satisfied that they had a nice customer like you visit their restaurant. A restaurant that may have a quite unique character, a cuisine rarely found elsewhere and an amazing view.

The level of standardization and the rules implied by it differ across settings. In heavily interconnected places (cities), where many relationships are ephemeral, roles and expectations are more well defined and more frequently promoted to formal, with written guidelines associated. For example, in a village, the day care may be handled more frequently by grand-parents or neighbors compared to a bigger city. In a city, there are more daycares that have the obligation to operate according to some standard rules. The way of enforcement also differs: In formal relationships, there are written outcomes based on previously specified rules. In more informal settings, things like reputation and personal relationships play a bigger role. Apart from the obvious situations that we describe, we can also observe some second order effects from the various levels of standardization. Cities tend to be more liberal minded, while the countryside more conservative. A distinction that seems to span across countries and cultures.

The previous observations apply in various organizational forms. Big companies usually have more well defined roles than smaller ones. Members of small teams, irrespectively if they are in a small sports team or in a company, are expected to display more protective behaviors towards their members compared to members of bigger teams who are expected to stick closer to the rule book. The way that someone interacts in a video call with a small audience is different from a stream to a large audience, even in cases where they want to put the same message across.

The time scale of which we operate and from which we draw our observations is unfortunately limited. On the other hand, a considerable part of humanity that has ever lived is currently alive and heavily interconnected. This gives a sense of observations in a world that moves at an accelerated pace. Values that we currently use to orient ourselves become obsolete in an ever changing environment. In certain contexts, we behave as single minded maximizers towards what we perceive as utility returns. In other contexts, we behave seemingly irrationally, guided by internal processes that pherpas we haven’t demystified yet. As we push forward, and with assistance from machines, we grow the framework of our standardization. In certain cases, the mechanical logistics may grow too complicated, or just too inconvenient, to handle them in our heads. As a result, we delegate at various degrees its details to automated systems that we understand, or not, to various degrees.

As we explore a bigger part of our common future through experience, it seems our lives become increasingly interconnected with each other and with the machines. At least in a naive level, I don’t consider myself equipped to fully understand the implications of this relationship, which seems born out of a need to experience and enjoy bigger parts of our world, beyond the limited capabilities of the unassisted individual. I wonder what someone who operates on a different time scale would observe.

Get infinite email addresses

How to get

There are a few different ways. One of the simplest could be:

  1. Get a domain from a service like https://domains.google/.
  2. Set up email forwarding to your existing account. https://support.google.com/domains/answer/3251241?hl=en#emailForwarding
  3. Use the wild card option.

Cost

Depends on the domain. Nowadays, there are many different domain endings available, which makes it possible to find a nice domain that is relatively cheap.

How to use

Register to every different service with a different email address. That can be easily done by following a rule like website-name@example.com, where example.com is your registered domain and website-name is the name of the service you use or a slight modification of the name.

To friends, and family you can always give a nice email address like name@example.com or fabulous@example.com.

Why

  • Security: If you register on different services with different mailing addresses you can easily figure out that a service leaked your address, because most likely, you start receiving spam on that address. This allows you to:
    • identify the website that leaked your address and:
      • change your password
      • change your email address there
      • redirect all new emails from the old email address to your spam folder.
    • make less obvious how you register an account on different services. This may be important, if you want to avoid someone trying to hack into your account.
  • Flexibility: Even if you change your underlying host of your email, you don’t have to notify anyone. The change will be transparent.
  • Organization: It becomes even easier to set up email filters. You have now another useful input, which is the email address that received the message.
  • Vanity: This is true only with a cool sounding domain name.

Maintenance

  • It either needs minimal or no maintenance.

Drawbacks

  • You need to remember to renew your domain. This may be possible to automate.
  • The cost. Usually, it is quite low cost.

Learning German (B1-B2)

Despite living in Switzerland, after my studies at ETH my German level plateaued for many years. There are many reasons for that: speaking English at work, birth of my daughter, and almost everyone in Zurich being able to discuss in English.

Here is what helped me get over the plateau and reach B2 and what I wish I had read a few years ago:

Goal

  • Being understood and understanding. Mistakes are OK, as long as you can express what you want and can understand others.

Motivation

  • Have a concrete goal. An exam for some certification works well.
  • Find a motivating teacher who cares and wants to see you progress.

Logistics

  • Have 1-1 classes.
  • Have them 2-3 times per week. Less and you forget what you learn, more and you may not have the time to study properly if you work full time.
  • Learn grammar by yourself. You will find more than enough resources online. Do the related exercises until you feel that you understand it. Bring up questions if you have. You can correct the exercises yourself. Don’t waste time that you could be listening/speaking.
  • Do the exercises.
  • Focus almost exclusively on discussions during the class and occasionally answering questions that come up as you solve exercises.
  • Read news articles for things that interest you in German.
  • Read books in German. Theatrical plays are accessible. Highly recommended: “Die Physiker” by Friedrich Dürrenmatt, “Siddhartha” by Hermann Hesse (much more difficult — I had in parallel the book in English).
  • Subscribe to youtube channels that produce interesting content in German. Some suggestions: ArtDE, Business Deutsch, Deutsch mit Rieke, Dinge Erklärt, Easy German, Easy Deutsch, Germania, Hallo Deutschschule, kathrin shechtman, SRF comedy, SRF dok, SRF Kultur, Swiss German for Beginners, The Big Greek, Y-Kollektiv
  • Turn the language of every device you have to German, if possible.
  • Always speak in German when you have the opportunity. Even when people realize that your German sucks and they switch to English.
  • If you have the motivation, Anki is the best way to learn vocabulary.
  • Use an e-ink tablet, optimized for writing and have your material for studying German there. It avoids the mess that is usually otherwise created and makes it very easy to share writings/random exercises you solved with the teacher. It also expands significantly the pool of available material to the whole internet, without having to print anything.

Note

  • None of the above is must-do that you need to feel guilty, if you don’t have time to do. That’s OK. What is important is that you want to learn the language and maintain this goal over an extended time period. The only way to do that, is to make it a priority.

I am currently trying to improve my German towards C1. In case, someone has any advice, I am always happy to hear.