If you don’t know what the Exploratorium is, I highly recommend you take a trip to San Francisco and include it in your list of places to see. Today, when I saw a blog post come up with their name in it, I didn’t expect a story about email phishing, but there it was.
One of the key parts of my job as a Program Manager on the docs.microsoft.com team is to assess community contributions across different documentation repositories and areas. That might appear to be a very complicated task, and as we go, I will document more on the process. This post, however, is dedicated to setting up the core environment to make the task somewhat easy.
Written to the tune of:
A while ago Microsoft released this wonderful thing called the VSO agent – a cross-platform build agent that you can set up on MacOS X and/or Linux and hook it directly to a VSO or TFS instance to handle automated builds with a lot of customization options. You can get it here.
So here comes the challenge – more often than not, the build agent should be automatically set up, but the documentation mentions that the instance details, such as the service URL, username and password are manually entered. Not exactly what you want to do in an automated scenario. The good news is that there is a (not so) secret option to use command line parameters for the vso-agent:
node agent/vsoagent.js --u YOUR_USERNAME --p VSO_ONE_USE_TOKEN --s https://VSO_URL.visualstudio.com --a AGENT_NAME --l AGENT_POOL_CAN_BE_DEFAULT
Voila! All of a sudden, you can include this in your deployment scripts.
As someone who is almost (and by almost, I mean months away) from finishing my undergraduate program and starting as a full-time Program Manager at Microsoft, I feel like the past 4 years have really been life-changing for me, both from personal and professional standpoints. It’s been a rollercoaster, and I happened to be lucky every second that I’ve been on it. This is a story, that can be considered both a “thank you” letter to the university that welcomed me (I can easily thank Anthony Wu for giving me that idea through his post), and as a list of items you, the reader, might want to tackle before you graduate. If you already graduated, you can take a couple of minutes to go over the experiences I’ve had for purely entertainment purposes. It’s obviously reflected through my own prism of understanding and years of cultural and educational baggage, so I can’t guarantee that everything I put here will apply to you. As a matter of fact, maybe nothing will apply to you at all, so consider this as merely a reflection on how thankful I am for making sure that I got the outlined bases somewhat covered.
Let’s begin with some background information. I was born in Eastern Europe, in an academic family, where both parents insisted I knew how to use computers from a very early age. At age 7 I got my hands on my first PC, and so it happened that there was a Visual Basic 6 book laying around. That’s when I realized that making machines do big things should be my life goal. Fast forward to 2008, I got the fantastic opportunity through a program sponsored by the US Department of State called FLEX (Future Leaders Exchange Program), which gave me the possibility to spend an academic year in a high school in the United States. Moving across the globe was an adventure in itself, but what surprised me the most is how much opportunity there is in my field here, in the US. Nobody cared that I was a student, I could participate in a multitude of IT and CS competitions, build websites, get professional hands-on training right in the classroom. I was shocked. I had none of these opportunities back where I came from. I knew I could do more, so once I got back in Europe, I decided for myself that I want to go back to the States and pursue a degree in Computer Science.
Skipping the logistics, I ended up at Wichita State University. After tens of credit hours, two internships and with a full-time offer in hand, I though I’d put my experiences on digital paper, and it could be that the next Bill Gates will be reading these right now. So here goes.
1. Computer Science programs can be wildly different from university to university.
Maybe you already chose your university, maybe not. Regardless, the quality and focus of CS programs differs. Professors differ, the approaches differ, the way material is presented is different, and more than that – your ramp-up in the professional world might somewhat differ if you plan to mostly rely on the career resources offered by your university. More than that, your level of internal (academic) involvement in the field of Computer Science will depend on a lot of opportunities, such as undergraduate research, so make sure that you look at those when learning more about the program.
In my own opinion, the ranking of a specific program on a national level doesn’t really matter, as long as you know that you can be successful with the opportunities extended through your engineering department. I’ve been lucky enough to be a part of the Software Engineering Research Lab, here at Wichita State University, from which I benefited immensely. It gave me the possibility to play more in the field of NUI (Natural User Interfaces) and it introduced me to a software development field that I barely knew just a couple of years ago. Every university has a list of faculty, so reach out and find out how the CS program can be beneficial to you.
2. It’s totally okay if some classes seem “too easy”, but that doesn’t mean you should be easy on yourself.
I have to admit, a lot of classes seemed to easy when I started, some still are even though I am a senior. “Introduction to C programming”, where we learned to build “Hello World” programs, or “Introduction to Database Systems” that is technically classified as a grad/undergrad course, covering basic database structure and SQL syntax – all this does not seem extremely challenging. And that is okay. I’ve been lucky to have the resources to be self-taught, but not everyone is in the same boat. These courses are obviously a graduation requirement, there is no way around it. But it’s up to you what you’re going to make of it. Remember one thing – don’t waste your time. Playing Angry Birds in class might be fun, but while you do that, someone else will be building the next big thing. Instead, submit your assignments early and work on your own projects. There are millions of dollars waiting to be made through apps and other products, so might as well start early.
3. Learn on your own.
Stemming from the previous point, you should not limit yourself to just the material offered in class. I have to admit, what I know now didn’t come from class. Programming C#, C++, the fundamentals of DirectX and shaders – none of that was in my CS curriculum. Learn more programming languages, try different operating systems, create apps, contribute to an open-source project, read tech books, spend sleepless nights trying to debug that web service that fails every single time when someone tries to upload a video larger than 200MB. Learn. There are plenty of opportunities out there – Khan Academy, Coursera, Code.org, Stanford Engineering, MIT OpenCourseWare, Channel9 (shameless plug, I know). Everything is a click away. Learning the basics about binary trees and graph theory is important, but it’s even more important to be able to apply it in a real project. Consider classes as your basic “here is what you can do” guide, and it’s up to you to actually do something with it. During your interview, rarely will you be asked what is insertion sort – instead, you’ll probably have to talk about your extracurricular projects.
4. Projects > GPA. Build something.
As a follow-up to #3, when you’re going to interview for internships (or maybe full-time positions), you rarely will be asked about your GPA. Mine never made it on my resume. Grades are important, don’t get me wrong. I am not trying to suggest to ditch classes and instead sit in your room and code all day, not at all. If anything, your grades are a direct reflection of your efforts, and often times – knowledge (with rare exceptions). With that in mind, balance your academic effort with your passion for the field – really, just 30 minutes of brainstorming will give you a 2 page paper of what you can build. Don’t be scared by the fact that something is unknown to you – do your research.
5. Challenge yourself outside the field of Computer Science.
You’re passionate about software, building software, testing software and improving it. That’s great, but that’s rarely the only skill you will need in life. College is a great opportunity to get out of your comfort zone and build a set of skills that will prove invaluable in more than one area. Public speaking competition? Do it. Debate? Do it. Chance to MC an event? Do it. Every university will offer you a diverse set of opportunities that you can take advantage of, so make sure you glance at announcement boards outside your engineering department. More than that, join a student organization that isn’t necessarily related to engineering or computer science – there really isn’t a better way to make friends of all majors and backgrounds and be a much bigger part of campus life than you would be otherwise.
6. Participate in hackathons.
To give you a couple of big examples:
There are obviously more, and you can find a detailed (although, not necessarily complete) list here. Hackathons are a great way to build prototypes in conditions where you have limited resources in terms of time, and unlimited resources in terms of technologies. Look at those as both a social and learning experience, where you have the opportunity to improve your knowledge of a variety of hardware and software platforms, showcase your abilities to potential employers, start your own venture and maybe win some prizes and cash. For major hackathons, you can get partially reimbursed travel as well.
7. Find an internship as early as possible.
An internship has several benefits for you. First of all, you get to know what working in your field of choice is like. You might think that Computer Science implies one thing – you will have to be a software engineer (programmer), but there are more ramifications in the field than you might think. For example, Microsoft offers you three core paths – Software Development Engineer (SDE), Software Development Engineer in Test (SDET) and Program Manager (PM). You can learn more about them here. Each one has different sets of responsibilities and tasks, and an internship is a great way to experience each of these to see where you fit best. Even better, since we’re already following the Microsoft example, there exists the Explore Microsoft Program (limited to freshmen and sophomores), which essentially is a way to rotate you through all three roles in the course of a single internship period (12 weeks is standard).
Meeting Kurt DelBene, at the time president of the Microsoft Office Division.
I rotated through two roles – I started as a software engineer, working as vendor for DPE. The next summer, I switched to the Program Manager role in the Office division. Getting the experience from both sides of the spectrum made me realize that I can better combine my programming and communication skills in the PM role, so make sure you get an early start to have a better understanding of what you want to do post-graduation.
8. Write. Publish. Write some more.
I owe this blog more than one can imagine. To some extent, you can say that my professional career started from “den by default”, when I first got noticed by Clint Rutkas of Channel9 Coding4Fun for publishing a blog post, documenting the Zune Web API (now available here). Also, with a lot of Windows Phone content published here, I managed to become a Windows Phone Development MVP, which resulted in even more exposure and professional opportunities. It’s a relatively inexpensive investment in your future, with potentially large benefits.
9. Don’t be afraid to reach out and network.
One of the most important assets that you can get out of your college post-graduation is your network. There are different ways to do it. You can join your local user group, attend hackathons (refer to #6), help run campus events, attend conferences (a lot of them have academic discounts), reach out to project leads – if every other of the above mentioned 8 points is something you’re following, you are already starting to build connections. You would be surprised how much that will help you in the long run, whether you decide to start working full time or continue your academic career.
All in all, a single blog post is obviously not enough to outline all my experiences. Enjoy your time in college and make sure you are making the best of it, because that’s about the only time in your life when you will have such a vast number of opportunities in all fields imaginable.
As I am moving forward on my professional path, I would like to recognize the fact that I couldn’t have done it without the help of many people. Members of the Channel9 team helped me set my foot in the door at Microsoft, and the fantastic team I worked with at Microsoft this summer, that helped me understand the importance of technical knowledge being combined with good communication and presentation skills. I am thankful to every single professor at Wichita State University, that took their time to share their bits of knowledge with me. I am thankful to my two families, the one over the ocean, as well as the American one, that helped me every step of the way. I am thankful to my friends in Wichita and all over the United States, that supported me despite my preferences for blasting EDM all day and watching SNL at the highest volume possible.
I am lucky, and I hope that my experiences will be an encouragement for someone else.