Tips for new C.S. / C.E. students

Humble advices to help bootstrap a career in technology
2019-12-04

Starting a career in software

Bootstrapping a career in programming and related domains is hard. It’s terrifying. Most people start with no professional network, superficial knowledge of technology and a general lack of competencies required to be efficient on your job.

Here’s a few humble tips to help kickstart your career, especially if you are in first year.

No one knows the future

Last summer, I had the chance to meet a great researcher of our time, Geoffrey Hinton. He gave a good analogy about predicting the future. I’ll paraphrase what he said from memory.

We naturally think that we can somewhat see in the future. We think that our confidence in predicting the future is linearly decreasing over time. That is, our confidence in a 5 years prevision is a notch smaller than our confidence in 4 years.

In practice, the confidence in predictions is closer to a fog: the confidence reduction is exponential. Even if the fog is thick, you can still clearly see really close, but as you try to distinguish objects farther, the drop off in visibility is very steep, and then you basically see a wall of noise for anything several meters away.

Trees lost in the fog

This translates in: we can easily predict near term, but predicting the long term future direction of big trends in technology is a fool’s errand.

Blockchain? Machine Learning? Who knows what will be considered valuable skills in a few years.

When I was in Computer Engineering in 1998, I thought that the Web was a fad. Little I knew, a decade later I’d work on a Web Browser for 12 years.

What to learn

Competencies are more reusable than technical knowledge.

It’s more important to get competencies, like how to manage a project efficiently or how to manage a team, than to acquire technical knowledge like knowing a specific programming language or framework.

Practice reading code of a popular open source project and understand its design. The language doesn’t matter as much, the speed at which you can onboard any new code base is what is valuable on the job.

Take the time to learn git well, since it essentially won the source control management war. Mastering the source control tool is the base to be productive.

Learning takes time. As Matt Aimonetti noted, be prepared to set aside time dedicated to learning.

What you want, or not

Early on, I decided a few things:

  • I wanted to work in an industry that cared about its employees. This meant:
    • A domain where there’s more jobs than people with the required competencies, so it’s easy to switch job and they care about retention.
    • Actively avoid domains where the reverse is true. Two decades ago, it was gaming and consulting.
  • I decided to actively avoid places and domains that I observed to naturally attract jerks.
  • I wanted to keep my mobility, so I decided to finish my Engineering degree. Getting a visa in another country is easier when you have a University degree.

This initially led me to work in a domain that would be a niche. I decided that Windows drivers was a good niche and decided to self-learn on the subject. It was a good choice in hindsight. It was true in late 90s, but is obviously a bad choice now. 🤪

Being interviewed is a skill

Being good at being interviewed is a skill that you should train for. There’s a few ways to improve your skills:

  • In cooperative University programs, try to get as many interviews even if there are some that you don’t plan to go work for.
  • Find workshops created by large companies to do mock interviews.
  • As Diana Kris noted, try to get interviewed by companies that you don’t plant to work with. This helps getting experience in the process.

Professional Network

Most jobs I found were through some form of contacts. I did send cold resumés but that’s almost never how I got my jobs. Bootstrapping a professional network is hard and it’s important to invest time in it.

Twitter

Twitter is sadly mostly known for its bad side, but that’s still the only public place where it’s easy to follow arbitrary people. Here’s a short list extracted from the people I follow on Twitter. The list is unordered. Most of these people are also active in other spheres (meetups, wrote books, personal website, Youtube channel), this is an implicit recommendation for these too.

As you can see, I lean heavily towards security. 🤓

Following doesn’t mean creating a real connection, but it can help staying on top of current development in certain topics.

LinkedIn

I personally only use LinkedIn for my current professional network, not much to create new contacts. So in my case while I do recommend a presence, it’s not super useful. The main utility is that you can be found on the internet at a location where you control the content when someone searches for you.

MeetUp

Meeting people in real life is hard to replace. While I met great people on the internet, ultimately meeting them in person helped cement the relationship. This is the subject where you’ll find most advocates for “moving in the Bay Area”.

I occasionally look at meetup.com. The result is fairly hit or miss, so it’s worth trying a few different groups and return to the ones where the vibe was good.

Conferences

Conferences are a great way to meet new people. The main drawback is that it is very draining for introverts. While a meetup may last 2 hours, a conference generally lasts multiple days.

I particularly enjoyed my trip to Grace Hopper a few years back and to Gophercon. Attending conferences is the most expensive way to increase your professional network, so there’s a trade off when cash constrained. Some conferences like Gophercon have diversity fund scholarships where they can provide help for the travel and housing costs. It’s worth being on the lookout for these!

Being visible

Being visible can help, but it’s disproportionnally more risky for underepresented groups. Visibility for software enginners (and related domains) can include having a web site, a github account, doing contribution to open source projects with a code of conduct. All of these are free. Being visible doesn’t mean exposing yourself, instead it’s about exposing your applied knowhow.

To sum up

The important point is to start somewhere and be intentional about improving yourself. It does require commitment.