My 4th year Software Engineering student setup

Why am I writing this?

This year I studied as a 4th (out of 5) year Software Engineering student at Efrei Paris engineering school.

I started the year fresh without any pre-requisite installed on my laptop, but this was a mistake I made.

If you're following the same path as me, here is a short list of tools that you might want to have installed on your machine.

Hardware

It might seem obvious, but developing software requires some strong hardware if you want to experiment with different technologies. So here are a few leads on how not to be be left behind by your hardware:

  • 13" or 15" (or 16") laptop or MacBookPro (MacBook Air might not be sufficient)
  • 8 GB of RAM is a strict minimum, you should go for 16 GB by all means
  • 250 GB of SSD storage is too a strict minimum, 500 GB of SSD storage should be sufficient

I'm not qualified enough to give well thought tips on the CPU, but I personnaly use a Quad core 2.3 GHz Intel Core i5 CPU (on a 2018 13" MacBook Pro).

OS

During this year I worked with multiple technologies on multiple operating systems, so you might want to have some horsepower or to be ready to change your OS from time to time.

During the first term, I mainly worked with Java EE and C#, so I really recommend you to use Windows 10 for the first part.

If you have a MacBook Pro, like me, it might get a little bit tricky when working on the C# class, because some of the practical work sessions used part of the .NET framework that were not yet integrated in the .NET Core framework, having a Windows 10 computer aside will help you for sure.

During this term, you will also have a system programming class which will require you to use a POSIX compliant system: you can either use a multi-boot or a VM for this purpose. I personally used Docker for this class because it was sufficient with an alpine image.

For the DevOps class, you will need to install Docker, so be aware that you cannot install Docker on Windows 10 Family edition: a Windows 10 Pro or Windows 10 Student edition is required for that purpose.

During the second term, having Docker installed and understanding how to use Docker to install a few tools greatly helped me, but this term did only require to use a Linux VM from time to time (which I used an AWS EC2 instance for).

In short: Windows 10 Pro and either an Ubuntu/Debian dual-boot or VM is the best solution.

Tools (aside IDEs)

Aside IDEs, this are the tool I used this year, in no particular order:

  • Git
  • Docker
  • Glassfish 5
  • Postman (or Insomnia, or Paw if you are a MacOS user)
  • VirtualBox / VMWare Workstation
  • Jenkins
  • Jupyter Notebook (Google Colab)
  • Sonarqube
  • GitKraken (Pro edition, thanks to the Github Student Developer pack)

For design purposes, I used the following tools:

  • Figma (a UI/UX design class will require you to use it)
  • Adobe XD
  • Affinity Designer
  • Affinity Photo

Version Control and Sofware Forge:

  • Github
  • GitLab: GitLab provides good project management tools out of the box
  • Azure DevOps: it's free, it provides really good project and team management tools out of the box and even if the learning curve is quite steep, it really is worth learning how to use it.

Programming languages, SDKs and package managers

In no particular order:

  • Java 8
  • node
  • npm & yarn
  • .NET & .NET Core
  • nuget
  • Python 2.7 & Python 3
  • pip

IDEs

This year, I used the following IDEs (all JetBrains IDEs are thanks to the Github Student Developer pack):

  • JetBrains IntelliJ IDEA Ultimate Edition
  • Visual Studio Code (find my settings and extensions here)
  • JetBrains CLion
  • JetBrains DataGrip
  • Android Studio
  • Vim (for use when logged in via SSH on remote servers)
  • XCode

My top 10 tips if you're going to Software Engineering speciality

  1. Get familiar with the command line, it will save you a lot of time. You should at least know how to SSH log into a server (ssh), explore your file tree (cd, mkdir, rm, cp, mv, ln). You might find it easier to use zsh rather than the default bash that comes with most Linux distros, but I fell in love with fish that really is a breeze to use for everyday tasks (as soon as I have to do more serious stuff, I get back to zsh or bash).
  2. Learn how to read stacktraces, debugging Java code isn't what I can qualify as "fun" or "interesting", so learning how to read it will save you a lot of time.
  3. StackOverflow is your friend.
  4. Learn IDE shortcuts, once again it will save you a lot of time.
  5. Git gud. If you don't know git, you're not screwed, but you're gonna have a hard time.
  6. Learn basic computer security stuff (create an account and solve a few challenges on RootMe), you'd be surprised how most of the projects that were submitted this year were awfully not secured.
  7. Knowing a bit more of SQL than what is required is worth it, you'll have a lot of projects for which a database is required.
  8. Learn a bit of NoSQL, MongoDB can be really easy to use and will help you succeed for many projects to come.
  9. Learn how to do basic CSS, a project that does not neglect its visual aspect will often get you rewarded for the time you put in refining it.
  10. Last, but not least, keep track of what you do and what remains to do. Be organized.

Some websites that helped me