According to my university lecture you have clean and good code if every tiny little functionality is split into 5+ files. Gotta have an interface, factory, low level implementation, high level implementation, and at this point I don't even know what purpose the other abstraction levels have. Just end me already...

Sometimes I think of how much great and useful stuff you could learn at an university if they used time efficiently. But instead you spend years mostly just studying theoretical or very abstract topics. Whereas 80%+ of useful knowledge and skills you learn on your own.

  • 2
    It's kinda how Universities are - they are suppose to spark new ideas and innovation from teaching you the basics, tho, it would be nice if they looked more into/at industry standards than just academic standards.

    The whole academic process is not to just teach but also to progress scientifically. Tho this, in my opinion is more applicable in anything above bachelors degree. Because how can you make any meaningful scientific progress if you're still learning how to conduct said scientific process.
  • 2
    From my experience, Acedemics are 10 years behind the industry.
    When you understand who stays in the academy to teach it makes a lot of sense.

    Think about Graph algorithems. Think about time complexity calculations. Did anything major changed in the last year? 5 years? 10 years? 20 years?
    Answer - nope. nothing. the basics are that basic. They are only interested in novelty for thier academic papers.
  • 2
    @theKarlisK I wouldn't have an issue with universities and their focus on academia if a degree wasn't a requirement for pretty much any job where I live.
  • 0
    After reading your rant only one idea came to my mind to explain why this structure is necessary - its because its easier to write unit tests for this kind of modular architecture.

    First of all spliting your logic into smaller functions allows to isolate and test separate parts (units) of your code.

    Now having interfaces allows you to abstract away the business logic from application logic.

    For example I work as android dev so our codebase has lots of dependencies on Android SDK. Our unit tests are written purely for business logic so unit tests cant have dependencies on Android SDK. Having interfaces allows us to mock SDK dependencies instead of instantiating them which we dont want in unit tests.

    So basically write some code, implement a few use cases and then try writing unit tests for your code. You will realize that you have to change architecture so that code would be testable and then u will realize why this at first glance overcomplicated architecture is necessary.
Add Comment