Sergey Pisarenko

personal home page

Madrid Marathon 2017

To complete a full Iron Man is still an important milestone for me. I really dig endurance challenges. However, I reluctantly decided to reduce the number of hours of training per week and let the ultimate deadline slip a year or two into the future. I don’t want to spend 15 hours per week of training on it yet. There are ongoing projects that I am not willing to sacrifice. In a way I’m adapting to the opportunities that currently present themselves instead of forcefully pushing a preconceived plan against the reality.

I’m going to run a few marathons first. In the fall 2015 I ran my first half-marathon. I crossed the finish line but broke a leg in the process. The recovery was relatively slow and painful. For the first 6 months I have not run at all so I transitioned into cycling and swimming. Eventually, I started doing short but regular runs (about 2km) and then interval runs (running combined with walking). My next goal is to finish a half-marathon without breaking any parts of my body!

For the past 4 weeks I have followed a simple half-marathon training plan. It’s the same plan I used in 2015. I figured to try it out for 4 weeks and see if any pain resurfaces. Fortunately, I’m feeling great and excited. I chose Madrid as the running location. First, I’ve only visited its airport and I would probably never go there otherwise. Second, the climate is dry so the chance the weather will be foul is reduced, unlike say, in Vienna. The training program is simple. It’s 14 weeks long. There is one long and three shorter runs per week. The distances grow incrementally each week. I have adapted it by dropping one run and made the whole program longer by 1 week.

While the training program is almost the same I changed my running shoes. I had shoes with almost no support — one of those Nike Free. I think that may have been a contributing factor to the injury although everybody has their own opinion about the issue. I have been a strong supporter of barefoot running and minimal shoes. But I prefer to keep my bones intact. A running shoe with support should reduce the load on the bones. Perhaps it’s a good idea to occasionally cycle through different shoes. In anycase I’m set on running the half-marathon in the new shoes.

In addition, I intend to introduce 2 cycling workouts per week. I feel I’m not getting all the exercise I need. Cycling is convenient choice for me because I already have a tailored setup at home and there’s almost no overhead — just hop on and spin. Occasionally, I’ll do rides outside. Nothing beats climbing a pass or riding around a lake. Swimming will have to wait as it has become unaffordable lately. I’m proud of myself as I’ve grown my crawl technique immensely — from complete incompetence to a poor mediocrity. Unfortunately, there are no group courses in the vicinity and the private lessons feel too expensive for what they offer right now. Plus, doing all three disciplines gets me in the “15 hours per week training” territory.

I also considered supplementing my program with strength workouts at a gym. The problem with the gym is the other people. Since I only do free weights with a barbell I need the rack (for safety and convenience). Most gyms have just one proper rack. It’s impossible to know if that single rack will be occupied. Even if I come in the middle of day. It takes only one other rack user to ruin the whole experience! It makes for a very stressful experience — never knowing if the rack is occupied. Plus, I feel awkward and guilty when I occupy it for a whole hour. In short, the gym is a mostly broken idea for people like me who need a rack. I’m going to start my own business in the field with a network of gyms that let clients reserve individual pieces of equipment so that when a client gets to the gym he can be sure to have the rack to him. I will also have more than one rack in the gym. But I digress and I probably shouldn’t spill my strategic plans.

Resuming purposeful training reminded me of mental benefits. I have flip flopped around usefulness of the idea of goals in life a couple of times. Since my first half-marathon I am deeply convinced that having goals is the right attitude. Sports and training are excellent tools for growing one’s capacity to achieve goals. One may think he’s just running or training but he’s also doing the sets and reps for getting ahead in life.

Finally, I’ve been thinking about my training and attitude lately. Some of my friends have a very nonchalant attitude to sports and hobbies. They can get away feeling that it should be casual and “fun”. I can’t do anything like that. When I do something irregularly and for “fun” I’ll abandon it very quickly. I’ll simply be too bad at it to continue. Hence, I take training somewhat seriously. I would not call my training “fun” but it’s pleasing and rewarding in a profound manner. I also wouldn’t call it a hobby. A hobby is something one does when he has too much time on his hands. Training for me is more like sleep or food. I can’t live neither productively nor peacefully when I don’t regularly put my body through physical strain and pain. Training makes me feel great. So it’s not a hobby. It’s part of life.

Photo report - From First to Bussalp

This week we went to the Grindelwald area for hiking. Getting there wasn’t easy — a relatively long 4-hour train journey each way plus additional delays due to an accident on the tracks. The accidents seem to become common as the same happened the week before. Anyhow, Grindelwald is vast with hiking routes. I’ve been to Grindelwald several times before and even stayed overnight once. Our hike wasn’t difficult but very pretty.

Day’s track on Strava:

Total distance walked: 9.6km

Vertical ascent: 440m

Total time: 3:35:00

The area is quite popular with tourists and especially so on a weekend. Most tourists, though, don’t venture too far away from the cable car.

At first we were greeted by friendly cows and mountain goats:

Then we arrived at the beautiful Bachsee lake:

From the lake we went higher…

and higher…

still higher…

Until we climbed over a ridge and began a descent to Bussalp:

The descent was accompanied by drizzling rain and piercing cold wind. We didn’t have windproof jackets with us (or any jackets, for that matter) so we caught mild cold in the coming days. However, we were not disappointed with food like the week before — proper mountain Rösti and our favorite Möhl drink.

The many faces of my consumerism addiction

Just like junkies deny their addictions I denied mine for as long as I could. Perhaps I am predisposed to addictions as I notice just how quickly obsessions form in my mind from even the most remote sparks of excitement. Mainstream drugs — alcohol, nicotine, etc — have never caught my fancy but the more subtle hijackers haven’t left my brain’s reward system untouched. In this post I’m going share my struggle against a deeply rooted consumerism addiction that I have only recently taken a hold of. Overcoming consumerism, along with personal growth in other areas, was high on my priority list entering an ongoing sabbatical. And similarly to the recognized addictions I find getting oneself free of consumerism is a continuing challenge. I made a habit of writing personal checklists for repetitive tasks and also memos for tackling difficult situations. A couple of months ago I outlined concrete steps to take when I find myself again in the inevitable grip of the addiction. That memo is essentially the backbone of the post you are about to read.

What does “consumerism” actually mean? At the most basic level it is the insatiable preoccupation with acquiring shiny new things. Consumerism has many faces and forms — it is a true chameleon. It hides behind many facades and is called many names, such as “gear acquisition syndrome”, “shopping”, hobby”, “upgradeitis”, and, as paradoxical as it may seem, even “minimalism”. The big issue with consumerism is that most people, myself included, are typically unaware of their strong addiction. Very few admit that their burning desire to buy something is a symptom of an illness. Instead, the need is perceived as part of a hobby or as a strong belief that the purchase will significantly enhance something in one’s life. In fact, I see now that some of the hobbies I had pursued were fueled almost entirely by an attraction to the complementary gear, such as camera lenses or bike upgrades.

“So what?” one may ask. Isn’t that harmless behavior, or a part of someone’s (lack of) character? I find the various forms of consumerism a dentrimental habit that saps one of energy and focus. It is not just the burden on personal finances. It disrupts life and detracts attention from meaningful but difficult undertakings and realities to a form of immediate gratification. Consumerism is so deeply established and widespread that it’s almost impossible to discuss it with anyone. It’s like something everybody sees but doesn’t want to talk about or address. Based on personal observations I see consumerism forming due to following triggers:

  • Emotional fulfillment — shiny new things soothe (albeit temporarily) pain in times of emotional discomfort, be that stress at work or unfulfilled ambitions. The common wisdom is that possessions don’t bring long-term happiness. I naively believed that my purchases were purely rational and had nothing to do with the pursuit of happiness or emotional comfort. Yet I eagerly anticipated every courier delivery and experienced an intensive but a short-lived rush of joy upon receiving the object of desire. How ironic.

  • Escapism — similarly, an urge to buy arises often when faced with difficult obstacles. Ambiguous long-term projects (e.g., at least few months long), fatigue from training, overload from too many priorities and an inability to change current negative circumstances are all examples of such obstacles. Consumerism diverts the attention from solving problems to thinking about the next best thing.

  • Daydreaming — typically almost every purchase is accompanied by fantasies of improved life circumstances, exciting work opportunities, some kind of consistency and order (e.g. speakers in every room, Apple devices), amazing creativity, new ways of travel, better self-image or doubled productivity. A new minimalist wallet is so convenient it will immediately make my life focused and organized. A new camera lens will make me take ten times more pictures. New racing wheels will make me ten times faster. A computer upgrade will make me ten times more productive. It sounds ridiculous when put into words but images like that run through almost everyone’s mind at one point or another.

The difficulty of addressing consumerism is its obsessive and impulsive nature. Once an impulse arises in the mind it is next to impossible to get rid of it. Once established, every second thought races to the idea of getting that one thing and the improved existence it brings along. It is the obsessive character of the consumerism that prevents productive existence, stifles creativity and detracts from the present moment. Typically, it all starts with an accidental glance at a product review, an ad or a random article. At times I initially found the thing even ridiculous or useless. But as the time went by the planted seed grew into a monster. Rational measures against consumerism are futile because the roots of the problem are emotional. No amount of budgeting or prohibition helps. There is always the “one last purchase and then I’m all set” argument, as if the purchase completes some kind of a perfect inner world or a survival toolkit. Naturally, the state of equilibrium is brittle and doesn’t last very long — there are accessories to add and new “minimalist” gear to replace the old stuff with. I have mentioned “minimalism” many times in the context of consumerism. I don’t have anything against the ideology of getting by with as few things as possible. At the same time I see that the noble pursuit often turns into an infinite buying spree. Something is fundamentally wrong when the ambition of minimalism is realized through even more acquisitions.

It is difficult to overcome any addiction, be that smoking or something as seemingly benign as consumerism. Even when I finally admitted to myself that I have an issue I couldn’t quit the habit. The process took years and the recovery is still in progress. Deep down I know that I can fall into the trap anytime again if I’m not careful. As I already mentioned, rational measures are ineffective. I couldn’t fully address the problem without solving underlying emotional problems. For me that meant a sabbatical and a complete change of circumstances. Once the major problems were taken care of I could watch myself more closely and establish a set of checks to recognize early symptoms and avoid forming an obsession. It is important to recognize the emotional state associated with consumerism to resist it. In my memo have outlined the following steps:

  • Recognize the feeling — it is an unmistakable rush, with elevated heart rate and total obsession with the purchase. It often feels like the purchase is the last one ever as if I’ll be completely set for the future (for who knows what!). It feels like I’m incomplete, incompetent, weak without the new thing. Once recognized, following the impulse is a clear weakness and an inability to resist.

  • Recognize unhealthy minimalism — there’s nothing wrong striving for fewer possessions and simpler living but most of the time for me it means more purchases. Once the one or few small items are sold I dream of something better, “more minimal”, to replace them with. It is like a purge before the next big wave of purchases.

  • Postpone purchase for later — the impulses are unavoidable. What is avoidable is acting on them. That very moment it feels like the new thing is ABSOLUTELY necessary, it makes life simpler, better BUT it’s WRONG. It is next to impossible to completely disavow the purchase but scheduling it for future will ensure that the purchase is emotionally cool and not a perverted way of compensating for personal inadequacies.

  • Emotional purchases as rewards — some purchases are completely emotional and I know that there’s no practical reason for them. That moment I feel like I still want it, like a kind of ornament or jewelery. Then, postpone such purchases as rewards for significant accomplishments. Something, that is far in the future and difficult (completing Iron Man, for example, or completing a difficult project at work).

  • Eliminate immediate triggers — whenever the impulse arises it is necessary to avoid any reminders of the new shiny thing. Don’t read web articles, reviews, forum posts, auctions or ads. Just accept that you’ll get the thing later either as a reward or just simply later. There will be opportunities and sales, especially one year later. You’re not losing it and nobody is taking it away so you can relax and stop reading.

In conclusion I think that completely abstaining from any kind of purchase is not healthy either. Certain purchases improve well being and enable opportunities (although honestly very slightly and very seldom). When the mind is not infected with consumerism a purchase is not viewed as desirable but as necessary. When a purchase is needed there’s no rush to buy it. It feels I’d rather postpone the purchase for as long as necessary or even find a way to do without the new thing. I am happy to report that during the last 6 months I have avoided potential traps and shed more things than I acquired. May further purchases be emotionally cool and the mind clear!

Farewell, BMW F800GS Adventure!

Yes, my beloved motorbike is gone to another owner. This leaves me with zero motorized vehicles. At the outset of 2016 I have decided to part ways with a BMW F800GS Adventure I had purchased brand new about two years ago. With a little help from my matchmaking the beamer and the new owner successfully found each other and left the garage not to be seen again. I’ll keep fond memories of the wonderful spaceship-like machine that enabled an epic and life-changing 8000Km tour of Northern and Central Europe and left positive emotions. I don’t intend to completely quit riding bikes but I have no intentions to own another motorbike in foreseeable future.

The sale came as an indirect consequence of a sabbatical I have taken last year. I had plenty of time to reflect on my ways of living and to reassess whether the things I did brought me joy and contributed to my well-being. In fact, the revelation that I don’t actually enjoy motorcycles that much came rushing to me, along with other thoughts, as I was laboriously approaching snow covered peaks. That very moment I became very honest with myself. How many other hobbies and directions was I pursuing that actually left me disengaged? What kept me blind in the face of growing dissatisfaction and emptiness? The inquiry has set me on a path to slash and eliminate everything from my life that’s not essential. The many hobbies I had were the first obvious target.

How did I stumble into the world of motorbiking? I was fascinated with bikes and being always told that bikes are dangerous and forbidden by everyone around me set the desire in stone. Plus, the ubiquitous images of fancy bikes and ride reports don’t help an impressionable mind running with wild fantasies. I feel these contagious fantasies are often at the root of many misguided pursuits and a heavy weapon in marketing’s arsenal. The desire to ride bikes for me came as a desire to become the images I have seen. It was a desire to become something else. And in there lies the problem. It is not the desire to be something or someone but the actual joy of doing that drives positive pursuits. When an activity brings true joy it shouldn’t matter what kind of image it invokes. Many non-bikers don’t know about “waving” – a subtle gesture every motorbiker does when seeing another biker in the opposite lane. The custom immediately makes bikers, especially newcomers, feel part of a club. Seeing other bikers off-the-bike I regularly caught myself thinking that I can’t wave and, hence, demonstrate to everyone around that I’m also a biker. It almost felt I’d like to wear some kind of badge that would make everyone realize I also belong to the club. And the same thought ran through my mind when I was doing one thing but seeing others do something else. Like hiking but seeing mountainbikers. Or touring and seeing road bikers blaze by.

But during the same pivotal mountaineering tour, maybe for the first time in my life, I felt I couldn’t care less about other activities I wasn’t doing then. It didn’t matter anymore if I’m perceived “correctly”. I cared only for what was directly in front of me. And I truly enjoyed the activity for itself. Not for the gear or the popular images of famous climbers or explorers. I think that a dichtonomy for “being” versus “doing” fits in nicely. “Being” is like striving to become something: a motorbiker, a badass climber or an iron-strong athlete. “Doing”, on the other hand, concerns itself only with the activity itself: riding, climbing or training. “Being” sets us on an infinite and empty chase for secondary attributes, like possessions, never deeply satisfying. Many an activity in “being”-mode consists of little but internal complaints and racing thoughts towards the next step or level, whatever that might be. “Doing”, however, focuses on the activity and nothing else. “Being” makes one worry if he’s doing enough. “Doing” concerns only with the present — mastery is gained eventually. I don’t think it’s possible to judge easily if someone is in “doing” or “being” mode — that could only be revealed through honesty with oneself. I’m also not saying that ambition and possessions are unnecessary or somehow evil. In fact, it feels great to find oneself in a need of a new shiny thing that could be put into immediate and useful purpose.

Driven mostly by the “being” outlook I followed a long list of interests, many of which I have since given up. Frankly, some of the pursuits transformed from “being” into a “doing” mode, such as hiking/mountaineering and photography. Other hobbies went the way of dodo. And boy, I had lots of those: climbing, mountain biking, road cycling, rc helicopters, motorcycling, weight lifting, wind surfing, not to mention various side projects and pastures I don’t recall anymore. Not only were these numerous hobbies unsatisfying but they kept an additional pressure to keep up in all of them. Any free time would be a source of contention and uncertainty — what should I be doing right now? Should I train mountain biking skills? Should I practice new photography techniques? Am I doing enough of this or that? Motorcycling actually came as a symptom. As a typical weekend approached I would almost never choose to ride a motorbike over riding a bicycle. That was a clear signal that motorcycling is not my thing and that I’m knee-deep in unnecessary struggles I produced myself.

I mostly see extraneous hobbies as a distraction from dissatisfaction now. For me personally it came from a disconnect between what I was doing everyday at work and what I would rather be doing. Money buys a lot more distraction than any available time can offer. It’s all to easy to fall into a trap of visualizing joy after viewing colorful magazines, website and ads. But no amount of stuff can compensate the emptiness and discontent. I am extremely grateful for an opportunity to stumble upon all these realizations and make a change in my own course. I have just one hobby now and that’s triathlon. I came into it through love of cycling and trying my hand, or should I say legs, at competitive running. How does one find what truly interests him? As contradicting as it may seem but trying out things is the only way to figure out. But it’s important not to chase everything at once. There’s nothing wrong with giving up a hobby and replacing it with another. Indeed, one of joys in the world is its diversity. Finally, there’s the attitude — not to take any of it too seriously. Nobody truly cares about one’s interests and pursuits. When something clicks and the activity brings joy everything else will eventually follow — passion, ambition and, with good fortune, results.

Do I regret the motorbike purchase? Not a bit. I thoroughly enjoyed touring across Europe. Just that one month-long ride was the gateway into my decision to take a sabbatical and change my life. Due to lack of confidence and experience I couldn’t stomach renting a bike at the time — I was certain I will drop it. However, I haven’t actually dropped my bike once! I improved significantly as a rider and with many dealerships in Switzerland offering rentals I can now simply grab a bike whenever I fancy without paying out regular expenses associated with ownership.

Photo report - Silent Nanztal Valley Crossing

This past Sunday I hiked a fantastic route together with my wife. It’s the first real hike this year and given the busy times it’s unsurprising. But it wasn’t just the first of a season. It was the most difficult hike my wife has ever completed and I was left totally impressed with her pace and endurance. Not only we walked for more than 15 kilometers but we also climbed almost a thousand vertical meters. For my wife, who normally prefers flat walks along ridges or lakes, it is a considerable accomplishment.

Day’s track on Strava:


Total distance walked: 14.7km

Vertical ascent: 968m

Total time: 5:35:00

The day started early as we had to make it to one of the most remote places relative to our home. All in all, about 4 hours of public transport to get there. For me it’s the second weekend in a row of visiting canton Valais. There was an accident on the train tracks along the route so our arrival was delayed for about an hour which made us understandably cautious given that our way back depended on a chair lift and chair lifts don’t run 24/7. Still we sticked to the original plan and started walking.

It was scorching hot almost everywhere in Switzerland. One of the benefits of staying at higher altitudes is the cooler weather. There was a pleasant breeze throughout the route.

Despite the numerous hikes I am still amazed at the scale and the magnificence of mountain landscapes. My mind simply can’t grasp the distances. It needs something to put the size into perspective. Nothing gives a better sense than a huge panoramic shot with a tiny human silhouette somewhere in the picture.

For the first time ever we brought trekking poles with us. They were a real boon for my wife. Sadly I’ve got none of that as we own just one pair. The poles provided significant support on the way up as well as on the way down. I see now that trekking poles allow us to take more challenging routes. The tactical advantage also evens out our walking paces. Perhaps we could rely on the same strategy for future difficult hikes.

Closer to the end of the hike we stumbled into a herd of cows.

I dislike walking fast. When I was much younger I had a tendency to walk so fast that I almost ran. It took me years of deliberate practice to get away from it. It feels great to walk slow and to contemplate the present instead of racing towards yet another passing thing. Still, it’s important to keep planned estimates and actual walking speeds in mind. Astonishingly, we have finished quicker than the official signposts suggested! For our dynamic duo it’s a remarkable achievement given that we normally arrive 1-2 hours later than any kind of estimate.

The arrival at the chair lift was disappointing to say the least. We were looking forward to eat a typical mountain Rosti but the kitchen in the restaurant at the lift was already closed. We had no other choice but to scout for food upon descending into the valley. In any case, it was yet another great day in the mountains!

Full photo album available on Flickr.

Cube Cross Disc Mk3

I have purchased the Cube Cross Disc bicycle second-hand back in 2014 as an ultimate do-it-all machine to replace somewhat petite BMC hybrid bike I had started cycling on. No other bike in my stable went through as many alterations as the venerable Cube, transitioning from an object of admiration to almost scrap and most recently getting resurrected to fulfill a pragmatic new purpose. It was the bike I rode during the legendary Rhine tour. Perhaps it is also the bike I’ve learned most of the bike mechanic skills on.

Originally intended as a noble cause to minimize the number of bikes I own the project turned into an ugly obsession to combine the most exotic parts in a wild chase to build the perfect bike. Following the purchase I stripped the bike to the frame and rebuilt it with custom chosen components. Barely finishing the Rhine tour I went into another frenzy, adding and replacing a good chunk of parts again. A disaster happened one evening when I was fiddling with the bottom bracket. Being distracted by a conversation I have inadvertendly destroyed the thread where the bottom bracket is screwed in. Very often that’s the death of the bike frame. And at the time I assumed the bike was gone. I took it apart and, eschewing the faux minimalism, purchased the marvelous Fargo touring bike and the BMC road bike I’m currently training on. The experience taught me a good lesson about minimalism. It is not always rational, nor cost effective, nor even meaningful. In pursuit of a do-it-all bike I’ve ruined the bike by squeezing too much into it. There were panniers… and aerobars. A lot of parts were installed simply because of hype. Months later, when I brought the destroyed frame to a local bike shop I didn’t expect the fatal mistake to get fixed. But it was! The mechanics were able to get the threads rechased. Not knowing what to do with the sudden fortune I left the frame to marinate in the cellar.

Until one day it occurred to me that I have accumulated so many spare bike parts from all the upgrades and replacements that I could probably rebuild the Cube without purchasing much. I also didn’t have a city bike that could be left at train stations and public places without too much worry. With the priorities clear I decided to move forward with the rebuild. The priorities were: cheap (as few new parts as possible), disposable (no high-end components) and safe to leave. I am happy to report that I’ve been riding this workhorse for more than half a year. It is not sleek nor glitzy but it’s a pleasure to use everytime I’m off to the swimming pool or to run an errand. I would like to share a couple technical challenges along the way as well as few cool things I came across when putting it all together.

Guided by the cost I built the drivetrain with a combination of Shimano Zee and Shimano XT components. This being an errand bike I chose to forego the front derailleur and use 10 speeds in the rear for simplicity’s sake. The gear range was nicely extended by a spare Wolf Tooth Components 42t sprocket I had. That’s how many of the components ended up on the bike – I simply had them already. The 1x10 system didn’t work flawlessly though and I have done lots of small changes to make the chain slide smoothly. The underlying issue was the chainline — the chain was too skewed in the largest rear sprocket. One could feel the tension. The front sprocket sat too far from the middle, relative to the cassette. That meant that smallest sprockets worked well but anything in the upper middle didn’t. Getting the chainline right took many iterations.

At first I moved the bottom bracket spacers from the drive side to non-drive side. A free and noticeable improvement. Next, I have replaced a part of the Shimano XT derailleur with something called a GoatLink. I am not completely sure it made a big difference. The derailleur itself is quite important for the 1x10 drivetrains — it should be equipped with a clutch mechanism. I’m personally using Shimano RD-M786. The final step was to install chainring spacers. That required longer chainring bolts and appropriate spacers. I found it somewhat difficult to track these parts. I found the fitting bolts on CRC although their original purpose seems different: Race Face Poly Bashguard Fastener Bolt Kit. The spacers must have inner diameter of 10mm. I found those at OneUp. Most recently I replaced the stock 36t Zee chainring with a 38t one. All in all, it works well enough now. I look forward to a time when internal gearboxes, such as the brilliant pinion, become more widespread and affordable.

The rest of the bike was put together similarly. The wheels are the cheapest 29” wheelset I could find on the market at 120 eur for a pair. Similarly, the saddle was only 20 eur. When any of these cheap parts gets stolen I’ll just replace them with equally inexpensive alternatives. Knowing that I’m going to leave the bike in public spaces I equipped the bike with a few theft deterrents. The first obvious deterrent was a heavy lock. I didn’t spare cash on the lock. In fact, it might be the most expensive part of the bike. Secondly, I splurged for a set of Pitlock parts: skewers, stem bolt and the seat post collar bolt. Basically, Pitlock replaces standard skewers and bolts with specially shaped ones that require one of 256 individually-shaped locking tools, called “Pits”. Here’s a visual demonstration how these Pitlock parts look like (front skewer, rear skewer, stem cap):

At the moment the bike has no original parts left except the frame and the headset. It may be the only Cube Cross Disc in the world with such a long history. Here’s the complete list of parts from the build:

  • Frameset: Cube Cross Disc 2013 59cm (stock)
  • Wheelset: Mavic Crossone 29” (new part)
  • Headset: FSA Orbit Z-t, top 1 1/8”, 44mm, bottom 1 ½” (stock)
  • Tires: Specialized Trigger Sport 33-622 (left over from an abandoned project)
  • Brakes: Shimano Deore BR505, 180mm rotors (left over from an upgrade)
  • Stem: Ritchey WCS C260 25° 31.8 (left over from Mk1)
  • Handlebar: Ritchey 580mm (new part, added recently)
  • Grips: ACROS Bike24 (new part)
  • Chain: Deore XT 10 speed (spare part)
  • Derailleur (rear only): Shimano XT RD-M786 (new part) + Wolf Tooth Components GoatLink (new part)
  • Crankset: Shimano Zee 68/73mm w/ Bottom Bracket (new part) + Wolf Tooth Components 38t (new part, added recently) + OneUp chainring spacer ID 10mm kit + Race Face Poly Bashguard Fastener Bolt Kit
  • Cassette: Shimano XT CS-M771-10 (left over from an abandoned project) + Wolf Tooth Components GC 42 (left over from an upgrade)
  • Gear lever (rear only): Shimano Zee SL-M640 (new part)
  • Saddle: Selle Italia X2 (new part)
  • Seat post: Cane Creek Thudbuster ST (left over from an upgrade)
  • Extras: Pitlock set (skewers, stem cap, seat post clamp), ABUS Granit CityChain X-Plus lock (new parts)

Head past to the photo gallery.

First 4000m climb

I am not a peak collector by any stretch of imagination. Indeed I avoid “the best” like plague. I leave “the best” for the unsuspecting tourist crowds and boastful blabbers. But the fact is that I’ve climbed to the highest altitude in my life. And I’ve already paid my dues by feeling the wrath of Gods — reaching the peak left me untouched and the corresponding up-and-down motions were anything but mindful. Yet the purpose of this 2-day mountaineering trip has been fulfilled — I am now formally skilled in the basic skills of alpine walking and climbing.

Ever since my first true alpine adventure last year the pasture of trekking mountains and glaciers attracted me. I have not gone crazy about it and I don’t currently have ambitions to get exceedingly great at it. Instead, hiking and mountaineering remain for me a gateway into a state of mind where little matters beyond what’s immediately in front of me. I don’t care about having the best gear. I also don’t care about perceived challenge of this or that route. And I’m definitely not going to train for it, say, by attending a climbing wall regularly.

With that said when I saw an opportunity to attend a 2-day mountaineering tour at SwissAlpineAdventure aimed at educating beginners I couldn’t pass. A little bit of structured knowledge and training couldn’t hurt. The tour brought me back to region of Valais. Our starting point was the town of Saas Fe. The planned itinerary was not difficult. The goal of the first day was to get acquainted with the basics in a sandbox environment and then ascend Allalinhorn (4027m) the following day.

This is how our movements looked like:

Our schedule was generous with late starts, plenty of idle time and lots of help from lifts and cable cars. We didn’t come up all the way from the valley. Instead we arrived by cable car to Felskinn station (3000m):

The way from the station to the Britannia hut (3030m) was a short and mild stretch of slushing through snow. Our guide from bergundtal Stephane Tuni engaged us regularly by educating about the hiding dangers.

There’s a baby peak Klein Allalin (3070m) opposite the Britannia hut which we have used throughout the first day to practice. We learned how to correctly hold the axe, how to tie the ropes and how to safely walk with crampons.

The views from Klein Allalin are grand:

Seeing Ilya on this tour was a true serendipitous encounter. We haven’t coordinated our participation. It just happened by chance. Ilya rightly complained about a recent trip to our beloved outdoor gear shop Transa and how much it cost him. I can relate easily as I’ve done that trip last year. Right now I’m all set with the gear.

The Britannia hut is relatively large and quite modern. I admit I’m spoiled by great huts. Last year’s trek was accompanied by huts that were as good and as modern. The hut is situated close to the cable-car station so it attracts a lot of visitors, especially during a weekend. It feels more like a hostel that just happpened to be in mountains. It was packed.

Knowing that I wouldn’t fall asleep easily I decided to take a tripod with me and stay on Klein Allalinhorn until it gets dark to see the stars. The sky was relatively clear.

Unfortunately, I did not stay long enough to make worthwhile pictures of a starry night but I enjoyed the sight myself. Fantastic. When the complete darkness fell upon the mountains I felt a bit uncomfortable. Movements behind my back stirred alertness. A running marmot was the final drop on my nerves so I decided to get back to the hut and sit on a bench, marvelling at the sight.

My predictions about inability to sleep came true. I could hardly sleep that night with so many people in the room. Perhaps there was also part of altitude difference playing its role. In any case we got up relatively late at 5am to have breakfast and left the hut at about 6am.

There was no rush as we were going to take a lift to Mittelallalin (3457m) station and walk from there. As it turned out, the lift opened later that we had expected so we had to wait. Furthemore, the Metro Alpin lift broke down. We waited in suspension hoping for the best. Fortunately, the team of mechanics departed with a helicopter and all technical problems were adressed in a couple of hours. Since our plans had sufficient slack even a significant delay like this didn’t prevent us from completing the tour.

After the ride with the lift the tour turned bitter. Especially on the way down. I found the way to the summit and back uncomfortably fast. At times I felt that the rope is pulling me forward, dragging the ground from underneat my feet. I still don’t understand why we had to rush so much. There were also too many other groups on the way. These two factors somewhat spoiled the atmosphere. The tour didn’t feel good anymore. It felt like we were a tourist group shown around a popular sight somewhere in a middle of a large city.

Reaching the summit did not feel anything special. It was not deserved — we cheated our way through cable cars and lifts. And there were so many other folks!

Our crew at the summit:

I’m not sure I’d like to visit such popular peaks again, especially during a busy time like the weekend. I am also not sure about going with groups of people I haven’t met before. It’s certainly nice to meet new people but I think I prefer to go with the people I already know and trust. Despite certain mental dissatisfaction I’m already signed-up for a follow-up trip in August. Let’s hope we’ll avoid some of the issues.

Head past to the full gallery.

Getting Better at Solving Coding (Interview) Problems

This is part 2 of a series of articles themed “Preparing for Software Engineer Interviews”. My goal with the series is to document the steps I took while preparing for interviews for a software engineering position after working six years in predominantly support-leaning roles. I won’t break new ground here but rather share personal experience — anything you see here is an echo of what you can find elsewhere on the Internet. But too much of a good thing could be bad. Too much advice obscures itself and makes it hard to navigate. In part 1 I explained how I improved my knowledge of algorithms and data-structures as well as introduced a regular coding exercise. In this part I will explain how I went about improving interview coding skills.

When I was originally confronted with preparing for interviews I pulled many online resources together: posts on quora and stackoverflow, blog posts, articles and forum discussions. Some of the posts were quite detailed and comprehensive. There is lot of common advice but I struggled because there was just too much to do and too many ways to go about it. I decided to follow a simple plan which I will shortly explain below.

What is so special about software engineer interviews? The basic premise of most coding interviews (we’re talking about interviews at mostly large tech companies here) is to present a candidate with a novel problem that he has never seen before to see how good his reasoning and problem solving skills are. Presumably, a coding interview is a good indicator of candidate’s abilities and real-world productivity. Seeing how the candidate struggles under pressure, comes up with brilliant solutions and communicates with the interviewer is a telltale sign of his future success at the company. Unfortunately, that’s only a presumption and the reality is complicated but at the moment most tech companies stick to the same format which means that candidates must eventually go through it. So let’s look through some preparation ideas and shed some bullshit along the way.

First, there’s the novelty issue. It is not feasible to come with a completely new coding problem for every interview. Instead, inteviewers usually rely on a limited repertoire of problems. These problems eventually leak out and get shared online. More importantly, though, many problems share similar problem-solving strategies. Once the insight is known to a candidate the problem reduces to relatively painless translation to code. I’ve seen judgements against candidates that try to memorize solutions. But how can a solution be memorized? There are not 10 or 20 problems out there. There are hundreds, even thousands. Nobody would try to memorize the solution code line by line. But it is fair to assume that candidates memorize ideas and patterns behind the problems. How else could the candidates do well on interviews? Let’s take mathematics. Undeniably there is lots of memorization involved when learning any subject in mathematics. We can’t assume that candidates come up with algebra concepts from scratch during their short stay. Why then would it be fair to expect candidates to come up with algorithms that took very distinguished and persistent computer scientists and engineers to come up with?

In short, obtaining the insight and patterns behind coding problems and memorizing the right things is in my opinion the essence of interview preparation. Even the most distinguished engineers admit that in their day to day work they rarely get a chance to tackle difficult algorithmic challenges. I’m not saying that advanced skills are unnecessary and everyone should be an API coding monkey. I’m saying that candidates must work through typical coding problems, extract vital problem solving patterns and approaches. The fact remains, though, that some amount of memorizing is unavoidable. If a candidate didn’t have a need to optimize things at a very low level it’s unlikely he’ll come up with a good solution for bit twiddling questions even though he understands the underlying concepts well. He just wouldn’t have enough time. And certain efficient solutions are very clever to the point of being obscure and unintuitive. There’s little chance of coming up with one during 45 stressful minutes.

In fact, I would go as far as to say that some solutions must be memorized almost to the point of line by line. Okay, maybe not that far. But there are a some smaller-sized questions that interviewers like to ask as a warm-up. For example, to implement a power function or the greatest common divisor function. The thing is, interviewers expect flawless and, most importantly, quick (read immediate) implementation. Even if a candidate understands the idea it might take too long to translate that idea into code on the board. Plus, there are many possibilities for subtle common bugs, such as off-by-one errors, out-of-bounds, etc. Normally, a programmer is not rushed so there’s sufficient time to think, sketch pseudocode, implement and take care of edge cases. Because the problem is not difficult the interviewer will pick apart even the smallest mistakes and attach disproportionate weight to them. Clearly, candidates that prepared well will look more capable although it is debatable if their performance difference would translate in anything measurable in the real world.

Once a candidate gets exposed to a sufficient amount of problems (in the range of hundreds) there comes a plateau point. That’s completely normal and expected. Despite the acquired experience many problems won’t seem any easier. That’s also normal. In fact, this discourages many aspiring competitive programmers from further pursuing the challenge. Certain kinds of problems do not fall under neat patterns and require a different mindset. I personally haven’t yet managed to overcome this plateau. The good news is that such problems are rarely, if ever, asked in interviews. The bad news is that getting good at difficult problems worsens performance at interview problems. And the reason is that one tries to apply unconvential and complex data-structures and algorithms whereas most interview coding problems are centered around a set of relatively simple tools. Dead-ends are time consuming and reduce chances of solving the problem. After going through many rounds of mock interviews (which I discuss in the 3rd part of the series) I realized that I must recalibrate my toolkit and stick to simplest tools unless everything else fails. When my first thought reaches for a suffix tree I resist and instead try one of the following (not exhaustive): sorting, using a queue/stack, traversing, reversing, doing binary search, recursing. I also find it helpful to think of a brute force solution first. The lesson is that most coding problems are simple and rarely involve anything exotic. When they do the interviewer is prepared to almost immediately spill the beans on the magic insight.

So how to go about actually preparing? I have taken a whole month of full-time effort to specifically practice interview coding problems. There are many popular sources with coding problems, to name a few:

  • TopCoder — not suited well for interview preparation because of the nature of the problems, weird problem classification and an arcane UI. TopCoder is really a tool for competitive programming and it’s not designed for practicing interview problems. Given time constraints and different goals in mind I wouldn’t spend time on TopCoder.

  • UVA judge — automated system for submitting solutions to various competitive programming problems. Suffers from similar problems as TopCoder. Also, just like with TopCoder, it is hard to keep track of progress or to cover all topics.

  • Cracking the Coding Interview book — extremely popular book with around 150 coding problems and solutions. I went through an earlier edition years ago. Haven’t seen or used the recent one.

  • interviewbit — a well designed system specifically for preparing for interviews. Problems are classified by topics. There’s search functionality that lets, for example, to search for problems asked at certain companies. interviewbit also has an excellent gamified progress tracking functionality. Unfortunately, I found out too late about it. Otherwise, I would have likely used it as a primary preparation tool.

  • Elements of Programming Interviews in Java (EPI) book — this is my choice! The books comes with hundreds of problems with clear explanations of brute-force and optimal solutions. C++ edition is also available.

  • HackerRank — feels like a system which serves both competitive programming and interview preparation well. There are many practice problems classified by topics and regular hosted competitions. I have used HackerRank as a complementary resource.

  • GeeksForGeeks — a daily blog of coding problems. I have yet to come across an interview coding problem that is not published there.

Once I settled on a primary source I’ve done two passes:

  1. Go through every problem in the EPI book and solve them algorithmically without writing any code. I’ve set a time limit of 10-15 minutes per problem. Once the time limit expired I consulted the solution. I think it’s better to have a time limit rather than get stuck for hours on a problem. Generally, I think it’s great to sometimes persist on a problem until it cracks but given the goals of interview preparation it’s more effective to absorb as many concepts as possible. For every problem I wrote down the main insight. It took me about 2 weeks to finish the whole book.

  2. Go through every solved problem and write code for it. This is where I realized that my previously-written notes were terrible so I often had to solve the problems again. I wrote code on paper and I felt that writing code with the insight in hand is easy. I’m sure there are folks for whom finding the insight is easier.

I complemented EPI with problems from the HackerRank site. Finally, during two weeks leading to interviews I also solved every problem marked with the company I was applying for on interviewbit. You’d be surprised just how often widely publicized problems are still actively asked in interviews so it pays to go through them. I haven’t actually used interviewbit as a platform. Instead, I just read the problem descriptions and solved them on paper. Whenever I got stuck I consulted the hints or complete editorials (solutions).

After putting so much effort in the preparation can I say it was worth it? Did it help to get an offer? Getting good at solving coding interview problems takes a considerable effort and it is not a sure guarantee of success. However, a lack of such preparation is a sure guarantee of failure. There are too many factors vying for the final hire/no hire decision and success is anything but guaranteed. Just like with the algorithm and data-structure study I feel this effort made me a little bit better as a programmer. And just like with algorithm katas I would like to adopt a habit of regularly solving coding problems to improve further.

In the concluding part 3 I will talk about the final interview preparation steps and also talk about the psychological challenges that many candidates such as myself face before and during the interviews and the ways to tackle them.

Triathlon progress update

I enjoy training for triathlon immensely. The sport attracts me with multidimensionality and the numerous skills involved. There is so much room for growth. It’s an art really. I will regularly share some of my observations as I progress towards my next triathlon goal – completing a half Ironman.


After raving about Zwift and following its 4 month training program I chose to continue my training using TrainerRoad software instead. These two programs cannot be directly compared because they serve completely different purposes. While Zwift provides a 3D virtual world to make indoor rides exciting TrainerRoad focuses instead on a quality selection of training programs and virtual coaching.

What do I mean by virtual coaching? During each session TrainerRoad guides you with advice regarding correct technique and the training session itself. The implementation is very simple – just regular text messages. But for a newbie like myself getting bite-sized pieces of fundamental cycling wisdom is invaluable.

For example, I had a bit of a toe-numbing problem. My toes would get numb by the middle of the training session. I have partially solved the problem by sliding my feet forward in relation to the pedal spindles and also by moving the saddle slightly forward. However, numbing did not disappear completely. Out of despair I contemplated buying road-specific shoes and pedals. But during one of the first sessions TrainerRoad addressed the issue by explaining the correct kick-and-pull pedaling technique. The idea was reinforced by the single-leg cycling intervals. Numbing went away once and for all!

Same goes for other basics, like breathing and body position. Explanations are brief and to the point. The ideas are regularly reminded and reinforced through practice.

Initially, I chose a medium-volume training program and sticked to the assessed FTP value of 204 watts. After a couple of training sessions I realized this is above my level so I reset my FTP at 190 watts and chose the most basic training program. There’s no point trying to jump ahead of myself. Overtraining leads to exhaustion and loss of motivation. I’m in this sport for the long-haul so I must not torture myself if I want to go on.

I’m all set with cycling for the next 3-4 weeks. Afterwards I’ll choose a training program that builds on top of the current one. I feel TrainerRoad will provide me with sufficient training material for the next couple of months.


I started with swimming in October 2015. I went for a week worth of private coaching. I never trained so my form was as bad as it gets. At the time I had no idea how front-crawl works but I knew an efficient swimming form is vital for competition. Following that session I made a habit to visit a local swimming pool 3 times a week. I alternated sessions between doing crawl-related exercises and longish 2k breast-stroke swims. The latter also improved my breathing and endurance.

In March 2016 I signed-up for a front-crawl course. At the moment I can swim crawl 50 metres non-stop and actually feel relaxed and enjoy it! The next step is to do 200-300m stretches without any rest. During a typical training session I combine exercises (e.g. kickboard) and training intervals, typically 200m long. In a few months I’ll need further coach input to improve my form but at the moment I have plenty of practice to complete on my own.


This is the saddest part. While my fractured tibia seemed to be completely recovered it started to act up again. About two weeks ago I started with 4 short runs per week (each 3km long). After the 5th session I felt my tibia again. It’s nowhere close to the pain I experienced during the half-marathon when it actually fractured but I must be careful not to make it worse. I wouldn’t even call it pain. It’s more of a whining feeling.

I have decided to space out the runs until there’s no pain remaining. I’m looking at a run every two weeks right now. I definitely won’t make any aerobic advancements with such a tempo but my primary target is to get the bone strong again. I also consider incorporating intervals into the sessions. And by intervals I mean interleaving walking with running.


As I mentioned in the cycling section I wanted (already a wrong attitude) to buy road-specific shoes (likely black SIDIs) and road-specific pedals (likely Shimano 105). Better pedaling technique solved the problem so for now I can keep my trusted Shimano XT pedals and Specialized Rime shoes (which are walkable off the bike).

Despite previous discomfort I re-installed a proper racing seat — Brooks C13. Turns out I had incorrectly kept my body on the seat. The correct posture keeps both siting bones in contact with seat wings. Instead, I had been leaning my hips too much forward, causing too much stress on the pubic bone. Once I changed my posture comfort issues went out of the window!


I’ve done a first pass through “The Triathlete’s Training Bible” — an excellent book for anyone who’s seriously interested in the sport. It’s much better than a few titles I had previously laid my eyes on. The book is ripe with subtance and with experience distilled from a career of coaching. I feel I’m getting a little bit ahead of myself. Most of the advice in the book applies to experienced athletes with at least a couple of years of experience who are aiming at improving performance. My current goals are far less ambitious. I want to gracefully finish a half Ironman. But I figure there’s no harm knowing what lies ahead and avoiding common pitfalls.

Since I’ve started regular triathlon training (roughly January 2016) I’ve lost 5 kg. The current weight seems to be stable at about 74kg. I’m not yet doing anything special in regards to nutrition yet but I’m planning to introduce a post-training recovery drink next month.

That’s about it for now.

The Kata of Code

This is part 1 of a series of articles themed “Preparing for Software Engineer Interviews”. My goal with the series is to document the steps I took while preparing for interviews for a software engineering position after working six years in predominantly support-leaning roles. I won’t break new ground here but rather share personal experience — anything you see here is an echo of what you can find elsewhere on the Internet. But too much of a good thing could be bad. Too much advice obscures itself and makes it hard to navigate. In this part I will explain how I went about refreshing and improving knowledge of algorithms and data structures.

A fancy word makes even the most mundane things sound legitimate. Enter ‘kata’ — a fancy way of saying that one does something mundane, regularly. Originally, the Japanese word ‘kata’ stands for a very specific kind of practice in traditional arts. But in the programming world it’s synonymous with a repetitive coding practice. I have no opinion in the linguistic department but I believe the practice might have some substance. Let me rewind a little bit.

Exactly one year ago I left a wonderful job in one of the best places to work on this planet. With such a drastic move there’s a multitude of reasons. One of the major ones is my ambition to become an excellent software engineer and steer away from the technical support role I had so far pursued.

The first obstacle on the way are the well-known and sometimes wacky software interviews that most respectable companies seem to rely on for choosing among candidates. To prepare myself for the challenge I devised a multi-month plan. About 3 months ago, as I was done with another full-time endeavour, I put the plan through its paces. In this article I’ll do my best to explain the first step of the plan — the study and practice of algorithms and data-structures.

It’s not like I’ve never studied algorithms. In fact, I hold a computer science degree and have completed several excellent online algorithm-focused courses with top marks (Algorithms Part I, Algorithms Part II). But annoyingly if you had asked me to implement a path-finding algorithm or even an O(N*LogN) sorting algorithm I would have struggled without referring to technical books or articles. Should you have asked the same question straight after I had just completed the courses I would have absolutely no issues. From a limited personal survey of fellow engineers it is a very common situation. Few keep algorithms in their heads.

Clearly, without an excellent understanding of algorithms passing a coding interview is unlikely. Besides, algorithms and data structures are the cornerstones of computer science and software. Without the understanding of basic structures it’s not possible to solve most of the coding challenges. So I dedicated the first month of preparation to the study of algorithms.

However, as I’ve already learned, the chosen method of study is critical. It’s all to easy to complete a course or a book and then forget everything few weeks after. It is also not sufficient to merely browse through a book or a bunch of articles. Superflous reading creates a perilous illusion of understanding. It is imperative to work through. That’s why going through one algorithms book takes a month of full-time effort and not an afternoon. I also emphasize that I had completed algorithm courses before starting this effort. Otherwise, it would make sense to study through the online courses mentioned above first. It would also significantly lengthen the plan.

As there are many more algorithms than the time available to me I had to optimize. It makes little sense to study the most esoteric and domain-specific algorithms for the purpose of preparing for software interviews. I made a survey of interview-related Q&As and websites and came up with the following initial list of algorithms and data structures (in no particular order):

* Stack/Queue (based on LinkedList)
* Selection Sort
* SeparateChainingHashST
* LSD/MSD sort (Radix)
* Graph/Digraph/WeightedGraph
* Edge/EdgeWeightedGraph
* Binary Search
* Weighted Quick Union
* Insertion Sort
* Shell Sort
* DFSPaths/BFSPaths
* Cycle detection in undirected graph
* Connected Components with DFS in undirected graph
* Bipartite check in undirected graph (two color)
* Merge Sort
* Bottom-up Merge Sort
* Quicksort
* 3-way Quicksort
* CountSort
* Min/MaxPQ
* Heapsort
* Red-black BST
* LinearProbingHashST
* Cycle detection in directed graph
* DFS order and Topological sort
* Kosaraju-Sharir Strong Connected Components in directed graph
* Kruskal MST
* Prim MST
* Dijkstra SP
* Acyclic SP
* Bellman-Ford SP
* Knuth-Morris-Prath search
* Boyer-Moore search

It is debatable if some of the algorithms in this list are already too complex for general software engineering interviews (knowledge of esoteric algorithms might be required for more senior or specialized roles). In fact, as practice went by I added a few additional ones and removed a few.

The book I chose for my study is “Algorithms, 4th edition” from Robert Sedgewick at Princeton University. It’s written by the same professor that teaches the corresponding online courses. What sets it apart from other famous algorithm texts is the focus on visually illustrating algorithms and doing algorithm-tracing exercises. Working through an algorithm on paper and tracing all the steps helps to grasp what the algorithm really does. Through these exercises I uncovered that my mental models for some of the algorithms were wrong. The other huge benefit of this book is a complementary codesite with lots of high-quality and clearly-written implementations of algorithms in Java.

My daily routine consisted of reading about one topic and related algorithms and then trying to re-implement the algorithms myself. As soon as I stumbled I looked-up the text. The complementary code is extremely readable. The implementations may lack some of the fanciest and trickiest optimizations but are invaluable tools for learning. Once I implemented the code I erased and started from scratch, testing thoroughness of my understanding.

As the days went by and I progressed further I felt that I no longer remembered the details of algorithms I had already worked-through. That’s when I decided to introduce additional regular algorithm coding practice — katas. I grouped some of the algorithms together. Then during each practice session I would implement algorithms and data-structures from the top of my head, copying only test cases from the reference implementation. At times I would get stuck. In those moments I learned a little bit more about each algorithm. Often, I would get confused and need to look-up the reference implementation. Next time, though, the practice would become easier and more automatic. Katas keep the algorithm knowledge functional and fresh. Furthermore, being able to implement some of the tricky algorithms from the top of my head on a napkin increases confidence which may sometimes shake under the many stresses of interviews. Finally, being able to implement many algorithms quickly pays off in coding competitions.

I don’t know if the original katas are canonical. My coding katas are certainly not. They evolve and change with time. At some point easier algorithms and data-structures become trivial and it no longer makes sense to practice them. I don’t practice writing a stack/queue anymore. Sometimes I realize how similar few algorithms are so I leave one of them out. Many graph problems reduce to DFS. Occasionally I study through new algorithms and add them to katas. For example, I’ve recently added SkipList and SuffixArray. I also group algorithms so that each kata is of similar size. At the moment I have 5 katas in my repertoire. It takes about 30-60 minutes to complete each one. I aim to complete all of the katas once a week — on average less than one kata per day. I’m also timing my practice now to see how long each kata takes.

Here’s a distilled version of the algorithm study plan (~1 month of full-time effort):

  1. List algorithms/data-structures you need to learn deeply. When in doubt leave it out. Make it as short as feasible. Can always add more later.
  2. Choose an algorithms text. I recommend “Algorithms, 4th edition” by Robert Sedgewick.
  3. Schedule sufficient time each day to read the text and implement algorithms by hand. Keep premature enthusiasm at hand and keep the workload manageable. There’s a reason it takes a month.
  4. Collect algorithm implementations and group them into katas.
  5. Regularly perform katas by reimplementing algorithms.
  6. Revise katas, remove trivial algorithms and add new ones as you see fit.
  7. Repeat 6, 7.

I’d like to believe that this study of algorithms and practice of katas will pay off. It is hard to say, taking into account the many factors that affect a hiring decision. Doing a comprehensive study like this won’t guarantee success but doing nothing almost certainly guarantees failure. The study of algorithms is just the first interview preparation step. I’ve introduced katas as means to not forget what I’ve just learned. But as I’ve practiced and grown my personal collection I see myself continuing with katas.

In the next part (2) I explain my strategy for getting better at solving coding problems.