Masha Reko - Apprenticeship Blog

What we have to learn to do, we learn by doing. (Aristotle)

Day 3: Self-Evaluation

Today I had to fill in a self-evaluation sheet.

To tell you the truth, I hate self-evaluations. It has always been hard for me to realistically assess my knowledge. I find that the more you learn about something, the more you realize how much you actually don’t know. So I keep staring at this Excel sheet and these terms listed there, and I think: well, I know this stuff. I studied about it. Probably even got a good grade at the exam. But how much do I really KNOW? I thought that maybe writing a blog post about it could help in finding out.

Testing

Even though my fellow coleagues at the University bashed their heads against the desk every time the professor mentioned it, I fell in love with testing from the very beginning. Not sure why. I always found some weird satisfaction in breaking other people’s code. Or my own, for that matter. That may sound evil at first glance, but it really is not. Actually, in my head it has never been about breaking the code - but rather about finding places where it could be fixed and improved. Every failed test means a chance to do better in the next version. Kind of like in real life, right? :)

With that said, I do have some experience with testing. My bachelor thesis was a system for learning white-box testing techniques. I did some unit tests, mostly with JUnit. I tried TDD (Test Driven Development) too, on a seminar in Italy last summer. In all honesty I don’t remember much of it. It was 8 in the morning after a night spent on a balcony of the student dorm, with amazing people and cheap beer. However, I know the concepts. Wouldn’t say I’m a total novice. Headless Browser Testing, Visual Regression Testing and Property-based Testing are the terms I might have heard of, but don’t know much about. So, plenty of room for improvement.

Software Design

In one of my interviews at HolidayCheck, I was asked what I imagined my ideal job to be. I didn’t think for a single second. Easy question. I want to be a Software Architect.

I always thought that architects are the complete package. They need to know everything. Think about every little detail. Understand how to apply every style, pattern, idiom or principle. It takes a lot of experience, and I, as an apprentice, am still so far away. But I’m getting there. With a speed of a snail - maybe - but getting there.

OOP principles I can recite in my sleep: Abstraction, Encapsulation, Inheritance, Polymorphism. Same goes for design principles: SOLID, DRY, YAGNI, KISS… I suck at FP principles, mainly because I never did functional programming (maybe I have a chance to change that now?). Microservices are a huge passion of mine. I’ve spent the last 6 months studying about them for my Master thesis. When it comes to databases, I did both SQL and NoSQL, being probably a bit more fluent with the former. All in all, not too shabby. Definitely something I can work with.

Communication

Ah, this is the area that I probably need to work on the most. I’ve never been much of a talker. Always prefered to listen. That maybe makes me a better friend, but certainly not a better engineer. I get nervous talking in front of people, especially if I don’t know them well. Even these daily meetings we have here at HolidayCheck are somewhat difficult for me, but it gets better every day. Public speaking is my biggest fear. People tell me that I am not bad at it at all, but they have no idea how much effort it takes me to do it every time. Blogging is fine, though. I write a lot in my spare time, but have never shared it with anyone. Was too scared, I guess. Scared of not being good enough. Scared of being laughed at. But not anymore. I am making progress at this very moment and it feels amazing!

Agile Methods

Agile, agile, agile… How many times have I heard that word in the past 6 years? Probably too many to count, but still not enough to be an expert at it. I said so before, and I’ll say it again: knowing something in theory does not mean that you can apply it in practice. I have a pretty good idea about XP, its cycles, practices, supporting techniques. I did pair programming many times, but only for student projects (even a couple of times when I wasn’t supposed to, but shhh…). Furthermore, I can probably tell you all about SCRUM, its roles, activities, artefacts. I know all about Sprints and Backlogs and Increments. I even know the history behind it, and how it got its name (for those that are interested: it originated from rugby, where players pack closely together with their heads down, forming a ‘scrum’). But have I ever done it? Do I know how it actually looks like in a real company? I have no idea. I glance over to the Scrum Masters’ desk and all I can see are post-it notes and Legos. Honestly, I am dying to see how they actually use them. I am dying to be a part of their team.

Learning

This has to be one of my strong areas, I think to myself. I worked as a Student Assistant at my University for 3 years. I helped people study, moderated laboratory excercises and even graded homeworks and exams. Teaching people is what I do. What I love. Back in Bolzano, a couple of friends of mine made a website called askmasha.com, as a joke (it doesn’t work anymore, unfortunately). It only had one functionality: to redirect you to Google Serbia when you enter a query. But it was nice. It showed that people liked how I explained stuff. And that they trusted me. I was always a team player. ‘No man is an island’, John Donne would say, and I agree. Especially in software development. I never cared about being the sole hero, the one that gets all the glory. There were times when I hated myself for it. Maybe I would have been much more successful had I been more selfish. But I don’t regret it anymore. I realized that I am so much happier sharing fate with other people, whether it’s success or failure. I managed to do what many still struggle with - to get rid of ego. That, at the end of the day, also counts as success.

Tools

And finally, the last and least (at least in terms of my knowledge) category: Tools. Not counting Git and Docker. I did my fair share of Git over the years and I believe I know it well. Docker was so scary to me in the beginning, but I’m starting to find my way through it. It’s fun though, and I certainly wish to dive deeper into it and discover what more it has to offer. Bash, vim, tmux, Nix & NixOS are all things that I always wanted to learn well, but never got around to. Now is the perfect time, isn’t it?

Instead of a Conclusion

I did it! I managed to do the self-evaluation. Don’t know if I did it right, though. Only time will tell. But what I can say right now is that there are plenty of stuff to learn, still. Some to improve. A few to maintain. But I’m not scared of the unknown. One of my favorite Serbian writers, Miroslav Antic, wrote that ‘ignorance is the start of a thousand new beginnings’. I can’t wait to see where they bring me.