Studying in UniPi

Some details Link to heading

Summary Link to heading

I graduated at the University of Pisa with a Bachelor in Computer Science before starting my career as a dev. Here is where I learned real fundamentals used to feed my skill growth in the years: I started with only curiosity and interest and a bit of maths knowledge. I came out knowing the basics of algorithms, operating systems, networking, concurrent programming, relational databases, calculus, linear algebra, imperative programming, object oriented programming, functional programming, and other “minor” theoretical CS subjects.

Although my course was mainly theory, I also had the opportunity to have a bit of hands-on experience with some simple take-home projects (some of them weren’t that simple, honestly).

Did I really need to study in Uni to be able to work? Absolutely not.

Do I think it was a waste of time? Quite the opposite: my current tech-agnostic hard skills and knowledge is the backbone of my professional skillset, and I owe this to what I studied during my three years. Maybe I am using a fraction of what I studied, but without that I think I will be a way worse and less creative developer.

Relevant studies Link to heading

As stated in the summary, I had the opportunity to learn the following:

  • First-order and boolean logic
  • 1-dimensional calculus
  • Linear algebra and discrete maths
  • (a bit of) probability and statistics
  • Numerical analysis
  • Imperative programming - with C, JS, C# and Java
  • Object oriented programming - with Java and C#
  • Functional programming - with OCaml and F#
  • Operating systems - with C + Posix
  • Computer networks - with Java
  • Computer architecture
  • Databases
  • Algorithms and Data structures - with C
  • Software engineering - with UML I remember 0 about this
  • Computability and complexity + formal languages
  • Cryptography (basics)
  • Physics (basics)
  • Operations research

Practical experience Link to heading

Apart from ad-hoc tiny programming exercises and exams, I also developed a bunch of projects:

  • Hangman game - Computer Networks
    • Tech: Java + Swing w/ TCP sockets
    • Developed both server and GUI client
  • Inter-process communication toy project - Operating Systems
    • Tech: C + Posix w/ pipes and mutexes
  • A 2D visualiser for the Fortune algorithm - Programming Experiences (yes, this is the course’s name)
    • Tech: C# .NET 4.5 + winforms
    • Developed a GUI application that shows the Voronoi diagram of a finite set of 2D points in a plane
  • A Kula World 2D version - Interface programming
    • Tech: C# .NET 4.5 + winforms
    • GH repo: yes, I also have a GH repo for this
    • Starting from GDI+ WinForms primitives, I implemented a single threaded game-loop with an editor

A word or two about my Kula World rip-off Link to heading

That is by far the biggest project I did for an exam. I was actually able to develop a videogame starting from basics like “draw a line” or “load a bitmap”. Code quality is as abysmal as an inexperienced CS student can write but I still think that it gave me a good amount of hands-on experience in pure coding. For this project I took something like 2 months of work but the result was extremely satisfying to me. I am proud of this project even though I think I wrote rather ugly code in there, sometimes I went back to that codebase to fix one or two bugs I left in the past. You can see some of my fixes here.

As shared above this is the link to the repo.