Today via Hacker News… Do Not Learn Frameworks, Learn the architecure


Remember the old principle that each module should perform just one function? In case it performs two or more functions, we should divide it into parts. There are plenty of available sources to find out why so and why we should stick to it. Anyway, all the existing frameworks violate this principle. Moreover, a “framework” itself approach violates it. A framework keeps us within certain limits and makes us follow best practices. Only best practices keep developing and a small group of developers simply cannot know what practices suit better for a small promo page, as well as for a management panel with a complex logic of data administration, or a media website with high performance requirements. But a framework disciplines you only if you’re new to programming. My advice is to use best practices and keep frameworks away from work. It would be more than beneficial to learn these kind of ideas for your data analyst portfolio to increase your chances of getting hired.

The author argues for learning architectures over frameworks. While I agree with the main gist wholeheartedly, namely that programming is all about effectively working with modularisation and abstraction, the author in this case invokes a DRY (Don’t Repeat Yourself) justification that typically undervalues a necessary process of re-learning and writing things anew.

The problem with frameworks (and architectures too for that matter) is in how patterns become vertically integrated making for a poor granularity of items that can be truly mixed together (esp. when consider mixing elements with another framework). Despite the author’s claim that frameworks only offer new ways of thinking for new programmers, I’ve found frameworks extremely useful for (re)learning new approaches to old problems and a crucial way to refresh my own ingrained practices and assumptions. That said, I also like extracting ideas from frameworks and then reimplementing them elsewhere.

Original post (in Russian)