Adventures in academic advisory
This post is written for a faculty audience. It targets CS programs, which may be geographically distant from an established tech community.
I primarily develop applications using open-source tools, so my recommendations are informed by that industry and tool set.
In my experience non-technical considerations receive inadequate attention, but they often impact performance, so I emphasize them here.
To perform well in an interview and the workplace, a student must demonstrate an interest in the role, even if it’s just a connection with a personal interest.
David Byttow elucidates this well in his posts ABC: Always Be Coding and Four Steps to Google, Without a Degree. As an aside, his second post argues you don’t need a degree to compete effectively. I believe school, while not strictly necessary, provides a structure for learning and a solid foundation.
I recommend helping students discover and explore their interests, so they can then compete effectively for jobs aligned with those interests. Ideally, each student will find a career in which she enjoys going to work, and derives real, personal value from her contribution.
An academic program should encourage creativity and self-direction. Two software development tasks are rarely the same, and it’s often up to the developer to make an educated guess about which aproach to take. I recommend asking students regularly to describe what they would like to learn about and why, and including the resulting feedback in an academic advisory setting.
I recommend instilling a common sense principle: focus on providing value to a customer. A student can be his own customer initially. In an academic setting, the instructor can serve as the customer; assignments are the deliverables. Solving a problem for someone is personally fulfilling and makes business sense. This recommendation may seem obvious, but the highest-performing teams I’ve been a part of have been explicit about this goal, and I’ve seen other teams lose sight of it day-to-day.
We’re social creatures and software development is often a collaborative effort.
By fostering interaction with a diversity of people and ideas, a school can help a student refine her career goals. By including employers in this interaction, a school can expose students directly, and under the best of circumstances, to employment opportunities.
LinkedIn, Twitter, Facebook, and Github provide tools for interacting online with other developers without requiring everyone work at the same company. There are also activities like hackdays, unconferences, and meetups students can participate in to learn practical skills and meet like-minded people in the developer community. All of these are usually free. If these activities exist nearby, encourage students to participate. If not, schools can host these events themselves and support students by building a developer community around the school. Often a meetup just needs a room and some pizza. A school’s ACM chapter can help organize to distribute the work.
I recommend students create a LinkedIn profile and populate it fully. Recruiters pay LinkedIn for access to profiles. By maintaining a profile, students are proactively providing recruiters with the most up-to-date professional description of themselves.
LinkedIn is also convenient for keeping in touch with colleagues, and contacting them descretely regarding employment opportunities. I recommend students connect on LinkedIn with professors, and the students they would be willing to work with.
An alternative is to simply maintain a list of the people a student would want to work with again.
Twitter, Facebook, and Github
I recommend students use these services to listen to the thoughts of working developers, and reduce the perceived distance between the worlds of academia and industry. This is especially relevant if the student is geographically far away from the area in which he would like to work.
For example, suppose a student would love to work on high-performance, backend services at Twitter. I would recommend he:
- search for “twitter open source”
- Observe Twitter maintains several projects on Github
- find all the people listed under “Organization Members” on Twitter’s Github page
- follow all of them on Github and Twitter
By listening in on a group of people like this, the student will have a much better sense for the Twitter engineering community, and whether or not it’s focused on his areas of interest. The NPR program Help for Job Searching with Social Media (summarized on storify) describes this well.
A1. You find a job on Twitter by following companies & people in your industry who share relevant & interesting info. #nprtwitterchat— Laurie Ruettimann (@lruettimann) January 31, 2013
A hack day is a day devoted to creating and launching something that, for whatever reason, isn’t on the roadmap, i.e., if you had a day to build anything, what would it be? (The answer to this question is also an incredibly important signal regarding career choice.) Some hack days have a contest at the end. Yahoo! runs hack days around the world that often span a weekend. Twitter runs a quartlery hack event that lasts a week.
Given the limited timeframe, producing a functional proof of concept is valued over rigor. Developers often work through the night. Hack events are a lot of fun.
Variations on the hack day idea include Random Hacks of Kindness, which provides a way for developers to contribute to disaster relief efforts, and CityCamp Hackathons focused on improving public services.
- students work closely with engineers from host companies
- school stimulates local developer community
- students can concievably launch a product
- participants bring whatever tech they require, e.g., laptops, mobile devices, hardware, etc.
- hosts provide space and usually food
- admission is usually free
A BarCamp is a self-organizing conference, a.k.a., an unconference. Everyone is welcome, and anyone can propose a talk. A great assignment would be to attend a local camp, present a brief talk on an area of interest, and report on the experience.
barcamp pic 6, by Tech Yizu (“Signing up to give a talk at Barcamp! Anyone can give a talk at Barcamp”)
The official BarCamp site maintains a list of upcoming BarCamps, and links to helpful resources for running a BarCamp.
If you are hosting a camp, survey students to see which employers are the most sought-after, and then reach out to those companies for space and/or sponsorship. In addition to recieving assistance, the sponsor may insist on representation at the event, putting students in direct, but low-stress contact with employees, who are often engineers themselves.
- work closely with engineers from host companies
- stimulate local developer community
- admission is usually cheap, with sponsors offsetting cost
- hosts provide space, at a minimum
Tech talks are a great way for students to learn about interesting and novel technologies, meet representatives from the company or school hosting the talk, and meet other like-minded developers from the local community. I recommend all universities encourage students to attend talks, and/or experiment with hosting talks.
- search meetup.com for a topic related to any area of the curriculum requiring support
- attend a meeting to get a feel for the group
- suggest a meetup at your location
- learn about given technology
- meet developers in a community
- meet employees at host companies
- meetups are usually free
CoderDojo is a movement orientated around running free not-for-profit coding clubs and regular sessions for young people.
At a CoderDojo, young people learn how to code, develop websites, apps, programs, games and more. Dojos are set up, run by and taught at by volunteers. Dojos organise tours of technology companies, bring in guest speakers to talk about their career and what they do, and organise events. In addition to learning to code, members meet like minded people, show off what they’ve been working on and so on. CoderDojo makes development and learning to code a fun, sociable, kick ass experience. CoderDojo also puts a strong emphasis on open source and free software, and has a strong network of members and volunteers globally.
CoderDojo started in Ireland, but has since spread around the world. The website maintains a list of locations. If there isn’t one in your area, consider starting a dojo for students and/or the community.
- GitHub’s description of its first CoderDojo session
- CoderDojo at Dublin’s Science Gallery - Silicon Republic
- Coder Dojo - Drogheda TV
- The people’s republic of coders - Irish Times
- Cork Coder Dojo Lecture on CSS
- define and develop a standard set of skills
- promote a healthy developer community associated with the school hosting a CoderDojo
- integrate with an international developer community
- hosts provide space and teachers
- participants may need a laptop
I don’t have experience in either as a competitor, but I have interviewed people with experience, and they generally perform very well.
- broad exposure to classic and contemporary CS problems
- experience solving problems under pressure, which can be helpful preparation for the interview process
- experience working with a team, and integrating with a larger developer community
I recommend students have awareness of a variety of compiled languages, but develop proficiency in one. Based on my experience, I would recommend Java. A student should be able to say “I am proficient in writing, reading, testing, and debugging in Java”.
Reading, testing, debugging, committing
Interns and new grads generally have very little experience reading other people’s code, testing, debugging, or working with a source control tool. This is quickly picked up on the job, but a student with some experience has a competitive advantage, and these tools are often already used in an academic setting, albeit perhaps not in a structured way. The goal is to make it easy for an interviewer to imagine working with the student. The closer a student is to being a productive member of the team, the better.
If possible, incorporate code review into project evaluation. For example, students can submit projects via reviewboard; projects must have a “ship it” from a teaching assistant before the professor will grade it; assistants can iterate with students via the review. Consider defining “review teams” composed of 2-3 students who can review each other.
For source control, I recommend git for a few reasons:
- git is a free, modern tool, with many nice features, which has been embraced by the developer community
- git is used by many companies and open-source projects for source control
- proficiency with git will make interactions with Github much more straightforward
I recommend all CS students create a Github account for a few reasons:
- Github is a great product and it’s free
- Github recognizes the social aspects of software development and provides tools for working collaboratively and discovering like-minded developers
- having code online provides recruiting teams with a way to assess a student’s skill level, especially if the student is geographically remote
Note: please encourage students to be vigilent about maintaining the code that is viewable online. We want a recruiter’s first impression to be a good one.
There is no question that half of the students in that grade 11 class could pass the Google interview process.