By Michael Woloszynowicz

By Michael Woloszynowicz

Sunday, February 13, 2011

Practical Advice for Computer Science Students

Throughout the numerous rounds of hiring I've conducted, I often to reflect on the skills I wish many programmers had and how this relates to the university experience. When thinking back to my own university experience, many of these things were not very obvious to me, so I've put together this list of suggestions for CS students. Although the below points are geared towards students, they apply equally to experienced developers, it's never too late.

Learn about usability and design
Most programmers view usability and aesthetics as the domain of designers, and that their focus is purely engineering. While it's true that your ability to write high quality code should be a key goal, usability is hardly a something you can ignore. In order to write applications that people love to use, the user experience must be ingrained in the culture of the firm and transcend departments. Too often engineers and designers are at odds with one another since making a usable system requires more work on the part of engineers. If you accept that front-end is as important as the back-end, the dynamic of the development team will improve and you'll end up with a drastically better product. After all, if nobody wants to use your software, it doesn't matter how brilliant your back-end algorithms are. Because your own application always seems obvious to you, I recommend signing up as a tester for a site like and begin testing applications. You'll soon see the difference between well and poorly designed applications. In particular, consider what makes an application easy to use and think from a programmers perspective how much work went in to making it great. You'll quickly realize that usability takes lots of work, but it is an investment worth making. While in school take a human computer interaction course and read a few books on usability (Rosenfeld Media has lots of good resources for this). When looking for a job, try to gauge the companies dedication to usability during the interview process. If the company is not interested in usability you're unlikely to change their mind, and it is certainly more rewarding to write applications that people love than those they curse.

Study statistics and data mining
While at university I knew very few people that enjoyed statistics or data mining courses. Six or seven years ago it was easy to ignore these courses but today data is king. Companies are collecting and processing more data than ever and those developers that can make sense of all this content are in high demand. In many cases you don't have to dwell on the low level details of these courses but rather understand the tools available to you and where they apply. Today there are lots of tools such as R, SAS/STAT, and Mahout to do a lot of the work for you but you still need to know where and how to apply them.

Learn the front-end, not just the back-end
When I was at school HTML, CSS, and JavaScript were all dirty words. CS students figured the back-end would reign supreme forever and that they could leave these client side technologies to others. The world has changed quite a bit since then, and these days a programmer that's not proficient with these languages is like a one armed pianist. Demand for full-stack programmers is on the rise, particularly at smaller companies, and having a healthy understanding of all application layers makes you a better architect and more well rounded programmer. Not to mention that if you ever plan on starting your own company you'll almost certainly have to develop both the front and back-end of your applications. For more reasons and advice on getting started read Why You Nead to Learn JavaScript.

Start a side project
As a new grad you may not have a great deal of work experience so a side project is a nice way to build up your resume and learn a great deal along the way. Today a Github project carries as much weight as a lengthy resume so get your name out there an start something interesting. Work on something that interests you but simultaneously try to use technologies that are new to you. This way you can go beyond your comfort zone, maximize learning, and show that you're a passionate programmer. Programming is one of the few professions where you can create something out of nothing with nearly zero cost (with the exception of your time). This low barrier is one of the reasons many employers will expect that you've tried doing your own thing, it shows you're excited about writing applications and have the drive and capability to ship a finished product.

Learn a language that's not being taught at school
Schools typically cover only a handful of languages, C++ or Java on the OO side and Haskell or LISP on the functional programming side. These are all great languages but they are no longer the be all and end all. In an effort to accelerate development many companies have adopted less verbose languages with a richer set of tools. Two excellent examples of such languages are Ruby and Python, both of which you can't go wrong in learning. Even if the company you're applying to doesn't use these particular languages, your knowledge of them will demonstrate your passion for programming. If you decide to take my advice and start a side project, Ruby on Rails is a great choice as you'll kill two birds with one stone, and drastically shorten your development time.

Work for a startup
Most CS students (outside of the Valley) aspire to work at a big company as they figure it will show well on their resume and lead to greater future success. This may be true if you work for a company with a notoriously rigorous screening process such as Google by giving credence to your abilities, but it's not always the case. The biggest benefit you can get from working at a large company is a intimate understanding of processes, but you'll gain little in the way of creativity and breadth of knowledge. Working at a startup will challenge you more, you will have a greater opportunity to make a difference, and provide you with more job satisfaction. If you decide to take the startup route ensure that you believe in what the company is doing and that it is both interesting and innovative. If the startup is a relatively cookie-cutter business you'll gain little benefit, but if you join a cutting edge company you'll be exposed to so much more than you would be at a large company. As an added benefit you'll learn what it takes to build a successful software company which will help you if you choose to start your own company in the future. Finally, most startups require long hours and give you less job security so it's best to work for one before you have a family and mortgage to support.

Only do it if you love it
Computer science is a field where it's very easy to see which programmers love what they do and those that see it as a just another job. The number one difference between a great programmer and a mediocre one is passion and it's something that innovative firms will look for in the hiring process. If you're not excited when you write code then perhaps CS is not for you. Bear in mind that passionate programmers tend to embrace many of the above suggestions so companies may use them as proxies for gauging passion.

Four years goes by quickly so be sure to tackle these tips from the get go and set goals for every year. Universities strive to give you a well rounded experience but top companies are looking beyond the standard curriculum for something extra. Most importantly keep in mind that this sort of list changes frequently as computer science is far from a static profession. Lifelong learning is a certainty so read as much as you can, stay informed of new trends and technologies, and prepare to continually tackle a new set of challenges.

If you liked this post please follow me on Twitter for more.

No comments:

Post a Comment