My Internship at smartive: Six Months and Quite a bit Smarter
In the beginning there was curiosity.
I had graduated in linguistics, qualifying me to articulate implosives, explain peculiarities of Swiss dialects, and have an opinion about Chomsky’s grammar theory. Besides my studies I had worked as a supporter and admin.
In IT as with language I was driven by the desire to look behind the curtains and find out how things work. I enjoyed disassembling language, but I was also attracted by coding, so I joined a three-months’ bootcamp to bring my skills up to a reasonable level. This is where the contact to smartive was established, leading to them accepting me as an intern for six months. 🎉
This is water
First day. New location, new faces, new challenges. The team seems well attuned, very professional, but still easygoing. My respect is huge.
At this point, the world of coding looks to me something like this: water all around, and on a small island in the middle there’s me and my not-so-long-ago found buddies JavaScript, Node and React.
“Do you have an eye for design?” I’m asked before finding myself in the water, tasked with brushing up and finishing Tindaval, “an app a bit like Tinder, but for Digital Festival visitors”.
My first approach is cautious, fearing I’m going to break something. I’m stumbling as I try to make sense of this:
I’m explained that it is an example of the render prop pattern and I feel stupid because I haven’t heard of it yet. But once I have added some lines of code I start to regain confidence, and soon I get the hang of it, become familiar with the render props pattern and learn to handle styled-components and storybook. I keep my hands off the GraphQL part though, thinking “that’s for the pros”.
Some weeks later, I incorporate a HOC after trying different patterns and its beauty and power manifest themselves to me. You could call it a milestone.
Types, really? 😕
The next project I collaborate in uses TypeScript. My five-months-ago self is a devoted fan of JavaScript because of its “anything goes” approach that facilitates getting quick results, and I’m not overly excited about having to deal with types. But well, I’m here to learn something, so let’s dive into this.
One month later, my scepticism has shrunk to a wee little sigh when TypeScript stands in my way, but my appreciation has grown immensely, because hey! This thing guards me from my own mistakes! That’s quite cool, actually.
I overdo it a bit, importing and combining interfaces until I can’t quite see what they contain anymore. Also, I discover Exclude-Pick and I’m quite proud that I get what it does. With the help of the internet, I add a typed HOC:
Epiphanies and milestones
In the following weeks and months, I can add many firsts:
- I’m completely comfortable to git stash, merge, and commit, and in a sudden epiphany it becomes clear to me why I have to force push after rebasing.
- One of my merge requests is approved without any comments and I do a short improvised dance on my desk – well no, in my mind.
- I can relate to the quirks and pains of an increasing number of patterns, libraries and tools, get jokes about TypeScript’s any and have my unpleasant encounter with Internet Explorer, a seemingly inevitable part of the web developer initiation rite.
Rocket science
My last project is a frontend for a GraphQL API. I casually greet the holy trinity of React, Storybook and TypeScript, knowing them quite well by now. The only one new to the party is Apollo Client which handles GraphQL communication and state management.
Water, again. My first encounter with GraphQL and Apollo had left me assured that it is some kind of sorcery that is for the grown-ups to deal with, and now I’m expected to handle it.
I remind myself that I once thought the same about storybook, TypeScript and styled-components. Indeed, after some initial confusion, the demystification succeeds and I get Apollo to do what I want. Eventually I realise that I know things about it that my co-workers don’t know — Further evidence that they are merely human, too, and that I should probably stop seeing them as masters of all sorcery.
From tinkering to building
Half a year ago, programming meant to me: Come up with something and try to — somehow, anyhow — make it work. This makes perfect sense, as my initial fascination was to make appear in the browser what I had cooked up in my mind.
Coding obviously is about making things work, but that is not the whole story. “Me against the machine, whatever works” is not an approach that works longterm, let alone in a team. Questions that come up quite quickly will be, for example:
- What technologies do we base our project on? — What library? TypeScript? What about state handling? Package A or B?
- How do we structure the project? — How do we split the code into files? How do we connect data, logic and UI? Do we prefer containers, HOCs, or render props?
- Can we agree on good practices? — This is less a question of flavours than one of fighting temptations: Don’t fuse two tasks into one component (separation of concerns). Write code that reveals its purpose immediately. Destructure objects if possible.
Long story short, conventions are crucial. A recognisable structure equals a maintainable code base and helps enormously in the long run. This can be read in many places in the internet, so it wasn’t news to me. But there is a difference in theoretically understanding a concept and seeing it at work. As with TypeScript, instead of just accepting someone’s word on it, I had to get there myself.
Learning to code
The advice offered to the coding newbie comes in two flavours:
- The case for exposure: Jump in. Stick to it. Be interested. Get involved. Ask. Listen. Don’t be afraid to make mistakes.
- Dealing with the unpleasant sides: Don’t think you have to know it all. Some self-doubt is normal. It’s a ride with ups and downs. As an intern, you naturally don’t have as much experience as the people around you.
Both are trivial, yet true.
Coding often means keeping several things in mind at the same time. This is part of what I like about it, but I’ve also seen it unravelling into mental chaos. Sometimes I get caught up in a detail, sometimes I spend too much time looking for the obvious (in hindsight), and sometimes I just miss something crucial. For example, I did not think as far as I should have when building a URL copy function — Turns out, accessing the current URL from within an iFrame is not something you can do when your widget is integrated from another domain 🙈 — My bad. Lesson learnt.
Being around people who have more experience is great, but can also spark self-doubt. When it hits, I’d recommend to take a deep breath and remember that there’s no secret your colleagues are in possession of, they’re just in the business way longer. There is no way to avoid spending a lot of time making your own experiences and mistakes. Take your time. Coding — trivially — is not different from anything else that has to be learnt. It is not a question of swimming from one island to another, rather it is getting to know many of them, the water between and the nasty spots.
A particular dilemma I encountered was the “try/ask dilemma”: (How long) should I try by myself? Will they think I’m stupid if I can’t do it on my own? Or will they get the impression I should be more proactive if I don’t get anywhere faster? Turns out (a) people are happy to help if you ask politely and present your considerations and (b) if you need some time to run against a wall until you find the door, they will also understand, because they don’t watch your evolution by the hour but over the weeks.
This highlights another point: Learning to code requires a good environment. I’m extremely grateful to the folks at smartive for giving me the time to learn things my way while ensuring that I feel I’m recognised as a full member of the team. This included a bi-weekly talk where I would get feedback and could speak my mind, which was immensely helpful as an opportunity to relieve any doubts — To know that you’re not as experienced is a different matter from actually hearing that you’re doing okay. So thanks a lot to everyone at smartive for giving me that leap of faith and the space which allowed me to grow my skills! 😍 (Yes, they are standing behind my back with knives in their hands.)
On we go
When you first approach a new field, you have a good portion of respect and a desire to do everything right. But that’s hardly possible. You will make some mistakes. But you’ll also lose some of that overly big respect. More islands will come in sight, so to say.
In conclusion, I’m very happy how the internship turned out. It was a intense time, positively so. Looking back half a year now, I can see a lot of progress made, confidence gained and so many things I have revised or developed a better grasp on — and yes, shrunk my respect to a healthy amount.
What’s still as big as in the beginning though is my curiosity and the appreciation for the team. I’m looking forward to continuing building as well as learning, from January on as a permanent member. 🏊♂️ 😊 🍾