Differences in CS bachelor degree around the world

Hi guys and gals,
I’m a bit interested in knowing how different faculties around the world structure their bachelor CS degrees and what do they teach.

For me, here in Italy, it was/is a 3-year degree with compulsory and choice subjects. The degree also includes a mandatory internship (either in university or in a private company) and a thesis (usually on the work done during the internship).
The compulsory subjects I had were:

1st year:

  • Computer architecture and assembly
  • Algorithms and data structures
  • Algebra
  • English (I think it’s a B2 level)
  • Java programming and OOP base concepts
  • Math analysis
  • 1st year project (based both in java and assembly language)

2nd year:

  • Relational database systems
  • Operating systems and processes/threads
  • Distributed and parallel programming
  • Software design (more on OOP, best practices, design patterns, GUIs with Swing and UML documentation)
  • Shannon’s Information theory and coding + probability theory
  • 2nd year project (client-server application with GUI and UML documentation)

3rd year:

  • Web development
  • Telecommunications networks
  • Automata theory

Also during the 2nd and the 3rd year we need to chose 6 subjects (2 + 4) to add to the compulsory ones from a pool of other subjects:
What my university offered was:

  • Mathematical logic
  • Computer graphics
  • Image processing
  • Microcontrollers
  • Fundamentals of programming languages
  • Functional programming
  • Software project management
  • Mobile development (Android)
  • Non relational database management systems
  • Advanced algorithms and data structures
  • Fundamentals of security
  • Information systems (ICTs)
  • History of automata and Computer Science
  • Social network analysis (and graph theory)

What about you?