Skip to content

Instantly share code, notes, and snippets.

@jrm2k6
Created July 26, 2014 15:16
Show Gist options
  • Select an option

  • Save jrm2k6/e3d517db4eaa59fea7c8 to your computer and use it in GitHub Desktop.

Select an option

Save jrm2k6/e3d517db4eaa59fea7c8 to your computer and use it in GitHub Desktop.

What I wish I learnt in my computer science classes?

I have attended two different universities in France. I got my bachelor degree in Computer Science in a tiny university close to my hometown. Then, I moved to a bigger city to study in an engineering school, and graduate in "Computer Science: Software and Networks". I also spent two semesters at Laval University, in French-Canada, which was a really great experience.

After two years working as a software engineer, there is a lot of things I wish I had learned at school and some other less.

Note: I have also been doing an internship in a UC university where I have seen how different studies were in the US, so this applies only to french/european school in a certain limit.

Testing

This is crazy to see that testing was such a tiny portion of my studies, when it is probably the only way to ensure your implementation is correct, and that you are not going backwards when adding new features by adding also regressions. I remember that only unit testing was taught in a practical way. We had to use JUnit to prove some characteristics of triangle. I wish I would have been introduced to integration testing, mocking, code coverage and so on. I know that testing is now a big part of how I am working on my projects. I always keep in mind that I should structure my code in a certain way if I want to be able to test it easily and efficiently. By knowing how to tests, it prevents you to have a messy code in a certain way.

Continuous integration

When I started to work at Prezi, I have been amazed that we were deploying several times a day, and that you would know in around 10 minutes if you had messed up something in your codebase. I didn't know what Jenkins was, and was really unfamiliar with Agile methodology, Kanban and other buzzwords. I just remember learning about Waterfall at school, and that it was the only thing that you used in the real-world. Scrum was mentionned but everything was always falling back to the Waterfall model.

Version control system

I remember using SVN during my first internship, SVN during my second internship, and asked to push code using git for some job interviews. I had to learn them on my own, and it was greatly beneficial to me. I still find it weird when I see new employees and fresh graduates getting surprised by the fact of using git or other VCS. I think it should be demonstrated at school that VCS are helping people to work together. It should also be shown how it is used for features development, branches, staging, releasing and so on. I remember being shocked when I had to work with computer science students, close to graduate, wanting to use dropbox and email to exchange the parts of their code they were working on. That was just unbelievable for me that they were refusing to use git/svn/you name it, and such a waste of time.

Functional programming

I had two ocaml courses. The first one still sound pretty bad in my mind. That was not clear, not really practical. The practical assignment was something related to creating our own language (it was so boring I don't even remember it..). The second course was much better. The teacher made it sound less scary, explained how immutability was good, introduced streams, and that also changed the way I was thinking about coding at the time. I started to see states as being bad, and immutability as being error-safe. The assignments were great also, being smaller exercises, or even some small games. Functional programing is important as it teaches you another way of thinking about your code.

Less written exams, more practical projects

Ask us to create a game. Ask us to implement a web app. Don't try to trick us all the time with pointers in C, crazy design-patterns use cases in Java and a stupid use of generics in C++. That makes us having a wrong representation of the real-world problem. And don't do it on sheets of paper. Honestly, on paper..?

Put us in front of a terminal, ask us to pair-program and to push our code on git at the end of the sesssion, with some nice unit tests. That will make us better engineers, able to know what problems we are really interested in, and will make us productive faster in our first company.

Note: I might be biased as I am now working in a startup, and have been only knowing startups. If you think this is bullshit, say so. If you agree, do not hesistate to reach to me.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment