Monday, October 14, 2013

Marek and Micha : A summer of coding.

This summer, Codility had the joy of working with MAREK RUSINOWSKI and MICHAKOWALCZYK. Both not only made it through our vigorous recruitment process distancing dozens of other applicants but also made substantial contributions to our work and company culture. Before letting them go - to start university (!) - our CEOsat down with them to talk about their internship and lessons learned.



GJ: WHY WERE YOU LOOKING FOR AN INTERNSHIP?




MK: To gain experience. I had not had many opportunities to work for a real company under real conditions, or to see processes such as software deployment in action.

MR: You can do lots of software development yourself, but if you are on your own, you are limited by your own methods and habits. I wanted to see how things are done in teams.

MK: I had opportunities to work in software development teams in programming and hacking competitions likeand , but these teams were just three people. Here it is different: the team is larger and it is not enough to write the software once, as it needs to stay maintainable.

GJ: WHAT WAS THE MOST INTERESTING ASPECT OF YOUR INTERNSHIP AT CODILITY?

MK: Hacking! :-) Generally, things related to security: audits and scanning for security holes in the safe execution sandbox. Also bug hunts, like when we discovered that under rare conditions the Java VM unpredictably hangs for 2 seconds. Is this something at our end, or have we perhaps traced down a bug in the Java VM? For me, this is super-interesting and I am really curious about the outcome.

MR: It is hard to pinpoint just one thing that was most interesting. There were many. Either I was annoyed that something seemingly simple was not working perfectly, and I was motivated to make it shine, or I was making something new. I was really frequently surprised how much you can achieve within a limited time and with limited resources.

GJ: OF YOUR OWN CONTRIBUTIONS, WHICH DO YOU VALUE MOST?

MR: For me, this was the data visualization project. I created charts for several statistics extracted from the main database. It was a quick project, I employed several cool components Highcharts, jQuery, Ajax and a back-end serving data in JSON, it turned out pretty well, users were happy, and once I had finished it I did not have any urge to improve it further. With other projects I had a feeling that, despite their having launched, I could have added a few more features or even rewritten parts from scratch.

MK: I like my contribution to the safe execution sandbox: this was my largest project, I am happy with what I did and we improved security and modularity a lot.

MR: Thinking about my contributions, I realized that it was very important to me that I was working on real project for real people. My code was not ending up in a dusty drawer, but was immediately deployed and used by employees and clients. It gives you this great feeling that your work is really useful.

GJ: HOW DO YOU FIND A GREAT INTERNSHIP?

MK: Well, ask us in six years; we have just enrolled at university ! :-) Seriously, the opinion of people who work at the internship provider is very important. I always ask around before I commit to anything. With internships I've heard a few horror stories from my colleagues, so for me it is a must to check the employer diligently. One of my pals ended up in an internship in a large software corporation, but it turned out to be so bad that he terminated it early. He encountered a hopeless atmosphere at work, with everybody feeling anxious all the time, people rushing each otherhe has no good memories of that place. Always check the references of the prospective employer!

GJ: HOW WOULD YOU ORGANIZE AN EXCELLENT INTERNSHIP? WHAT ADVICE WOULD YOU GIVE TO SOFTWARE COMPANIES THAT WANT TO CREATE AN OUTSTANDING INTERNSHIP PROGRAM?

MR: Don't make interns fetch you burgers! :-)

MK: Treat interns as almost equal with employees, but at the same time teach them a lot. For an intern, the main value is in the education. Show them how things should be done in a professional way. My colleagues who complained about their internships frequently described situations in which interns had much lower positions than employees and were entrusted only with menial, boring assignments. To make a great internship you need to show interns that one can do exciting things on the job. Do this and they are likely to come back as loyal employees.

MR: Trust is important. An intern needs to feel that he or she is trusted.

MK: Yeah; not that you get an isolated project just to prove that you can program.

MR: Absolutely. An intern needs to see that his or her work is useful, not just an exercise: that one can have an impact, even as just an intern.

GJ: WHAT DID YOU LEARN AT CODILITY?

MK: Linux. Before the internship I worked mainly on Windows. In the first week of my internship I ordered a great book, The Linux Programming Interface, and it really helped me to understand possible pitfalls in the safe execution sandbox. Also Python and C. I had to do some real coding and improved my skills greatly. For instance,made me realize the dangers of "def f(d={})" in Python. And Git. I had not used Git before I did some SVN. Now I both know the tool and also begin to understand the strategies: how to deal with multiple repositories, branches, multiple committers, code reviews, merge requests, and why and when development branches are useful.



MR: Python. I started my internship with just 1.5 weeks of Python practice



GJ: YOU ARE KIDDING ME



MR: No, seriously. I had done very little Python before. Also DevOp, which databases work best under what conditions, what tools to use to set up the whole stack efficiently etc. I learned some technologies like Angular.js, Node.js, Django, MongoDB (although I did not have much luck with the latter; I had to drop it in favor of PostgreSQL). I also learned a lot about how to debug JavaScript code in a browser, especially when I was trying to achieve the serverless integration of in-browser JavaScript with Google Docs.



MK: I learned a great deal about testing; in particular, how Selenium works. I had no idea that there were ready-made tools like this.



MR: Before this internship I could hardly imagine how software is tested. When you test your submission at an Olympiad in Informatics, you write generators and verifiers, but that's easy; that's just "in-out". But how do you test a whole interactive system? I really had only vague ideas before.



GJ: IT'S GREAT TO HEAR THAT! YOU'VE GOT ME SO INTERESTED THAT I THINK I'LL APPLY FOR THIS INTERNSHIP NEXT SUMMER [ATTENTION: SALES PITCH!:-) ].



MK: Highly recommended!



MR: Brace yourself for a good deal of coding!



MichaKowalczyk is a bronze medalist of the Polish Olympiad in Informatics, a participant in multiple programming and hacking competitions (e.g. Capture The Flag contests) and co-organizer of - a summer camp for gifted high school students. During his internship at Codility Michaworked on projects related to security and execution sandboxing.



Marek Rusinowski is a finalist of the Polish Olympiad in Informatics and organizer of workshops for high school students[1]. During his internship at Codility Marek worked on intranet services, data visualization and back-office automation.



Interested in joining Codility or doing an internship with us? Contact us on jobs@codility.com



[1] http://mokik.ayz.pl/
Full Post

No comments:

Post a Comment