Many of you have probably heard stories about people growing up in the heart of Silicon Valley, people who started programming at age 7, who were geek and hacker superstars to their core. I must admit all of that used to intimidate me, as the narrative of my life is quite different. I was raised in a small town in Belarus, Eastern Europe, and saw a computer for the first time when I was 14 years old. But I have always loved math and logic, so choosing a computer science major felt natural to me. Right after getting my degree, I came to the very heart of the technology world – Mountain View, California. Emigration itself is a challenging process – switching from your mother tongue to English is the biggest change – and, in conjunction with growing your professional skills, it makes your life extremely interesting, rewarding and frustrating at times.
I’ve switched jobs numerous times, and despite the initial fear of change, every new job was always better than the previous one, bringing about more opportunities and things to learn. In 2009 I joined a startup named Vmops, which later became known as Cloud.com, and has since been acquired by Citrix.
Since that time I have worked on a CloudStack Infrastructure as a Service (IaaS) product, helping to build public and private clouds. A large number of the use cases and data center configurations force the product to constantly expand its features, so it never gets boring to work on. And since the entire code base was donated to the Apache Software Foundation in 2012, I witnessed all the benefits of being a part of the open source community, both for me as a developer and for CloudStack as a product.
I want to share with others what has helped improve my skills, and some daily inspirations and support.
Changes are Always Good: Force Yourself to try New Technologies, Tools and Programming Languages
Never get too comfortable with the tools you use. Force yourself to try something new – discover new functionalities of your existing setup, try to install similar software to see the differences. Adjustment might take time, but you always learn something new along the way. I’ve started developing on Windows, followed by Fedora Linux, and have finally switched to OS X. Trying Python along with Java, choosing Git over SVN, mastering new tricks in Sublime Text – all of that is a lot of fun and exercises your brain as well.
Don’t be Afraid to Seek Help, but Come Prepared
Sometimes you can find yourself stuck, and can’t see a solution for a problem you are working on. Don’t be afraid to ask for help from your peers. I know some people are too afraid to lose face by appearing not knowledgeable enough. It’s always good to remember – “being the dumbest person in the room” is the best thing that could happen to you. But come prepared when you ask your question – try to formulate it clearly, and do some research on possible solutions before approaching someone for help.
Learn From Your Peers, but Minimize Comparing Yourself With Others
Try to learn from everyone you are working with, but avoid too much comparison with others. It could be too discouraging and cause “coder’s block” – when you think that everyone is smarter than you, and your code could never be as brilliant as theirs. Rome wasn’t built in a day. If you make an effort every day and compare how you’ve changed since the last year, it would amaze you.
Write it Down and Present
Putting the things you do into words helps to structure your thoughts, see the flaws in the existing design and discover missing items. And when you present it to the public, you achieve several goals – simplicity and clarity in design, a broader view on the product after having gone through a Q&A session, and inspiring others, of course!
Know the Product you are Working On
The first question you should ask yourself when you start working on a feature is, who are the users and what are the use cases? How will the new feature integrate with existing ones? If this feature is expandable in the future, what will be the best design? Also, look at your software from different angles: from a developer’s point of view and from the marketing and sales perspective. Also sneak a peek at your competitors’ products. A broader view will help you shape the product to better suit your customers’ and users’ needs, keep up with the fast-paced market and expand your product faster.
Just Attending Conferences is not Enough
You get so excited after listening to presentations and meeting new people, and new ideas just flash before your eyes. But eventually inspiration will wear off, and you’ll forget all you’ve heard the last week. The best way to make conferences useful is by trying the things you’ve learned right away. Did you hear about new the Python library? Play with it. Did you learn some new functionality of the AWS Virtual Private Cloud feature? Think of how you could use it, or what could be done in your product to implement a similar solution.
Become a Part of the Open Source Community
When CloudStack became a part of Apache Software Foundation, it opened up a whole new world of open source community to me. You get to work with people from all around the world, each having a different background and skill set. You share your ideas with others, in a transparent format, with the minimum amount of politics involved. Plus, you witness how quality and security improves once code becomes open.
Want to join the open source community and don’t know where to start? Please check this link.
There is a Whole World out There!
Getting lost in coding is so easy, and sometimes it feels like you can do it 24/7 without a break, in order not to lose concentration. But it’s very important to do something completely unrelated to technology: read a fictional book, paint, exercise. Besides all of the obvious benefits, they can give you a fresh perspective and insight into whatever you are working on.
Alena Prokharchyk, full time software developer for Apache CloudStack, Apache Software Foundation Project Manager Committee. You can find her on twitter @lemonjet.