1,061 karma · joined February 10, 2015
There’s no pushback because of “strange” FP patterns, code looks just like normal imperative code, but the tricky logic can be isolated in pure functions. The push back is only because of the strong OOP conventions.
This can be done in any language without introducing “foreign” FP patterns and instantly makes code easier to understand and test.
https://aphyr.com/posts/353-rewriting-the-technical-intervie...
The idea being, they are supposed to be “architecting the enterprise”.
EA is focussed on evaluating the business processes and technical solutions that make up the operations of a large scale organization. They try to identify and remove redundancy (e.g. multiple billing systems) and ensure the solutions in place (custom internal, or vendor purchases) are fit-for-purpose from technical, business, and strategic standpoints.
It’s very far removed from the practice of software development (since the correct solution, from an EA standpoint, might just be to stitch together a handful of vendor systems and do away with custom development completely).
https://medium.com/clean-code-development/stratified-design-...
Rails chose idioms and conventions that prioritize speed at the cost of complexity. The “included batteries” are not the problem.
Provides the “easy” for 95% of usecases and an “eject” button that unwraps everything and puts it under you control for the last 5%.
Combining a Rails like framework that makes things easy with a language who's idioms prioritize simplicity seems like a great combination.
Rich Hickey (Clojure creator) himself has a similar, interesting, and compelling take on time and mutability [0]. This perspective is the underlying basis of Datomic.
[0] - https://medium.com/clean-code-development/stratified-design-...
I’m a big fan of Clojure and it’s REPL-driven workflow, but most of my day-to-day work is in JavaScript.
I’ve tried to use Quokka [0] in the past to recreate the REPL experience, and while it’s a good tool, it’s just not the same.
Really looking forward to trying this out!
Ultimately, whenever you are pushing data between systems you can end up with inconsistencies which why it’s important to clearly define systems of record.
This is really not that different than using ETL jobs to move data about, but taking a streaming approach vs a batch approach.
Calling them RESTful events is a good term as I’ve pitched in much the same fashion. Every time a system responds to a create/update/execute request, drop an equivalent message into an event stream. Initially these can form the basis of a streaming ETL to whatever systems you use for analytics, but as new internal systems are brought online (e.g a new CRM system to help sales manage all the leads signing up for your successful product) the integration is already there, waiting. Just add a new consumer to the existing stream.
Overtime, you end up with a “data mesh”. If you look past the marketing of the term, it’s basically just means each application in your company should publish both sync (for real-time usage) and async (for data sharing between systems of record) interfaces.
Lots over overlap here with Clojure’s Extensible Data Notation (edn).
From what I’ve seen, the architecture of a particular Node.js system is highly dependent on experiences of the team members that first built it. It could a hexagonal/DDD using a framework like Nest.js (the Spring Boot of JavaScript) or take a more FP approach using Express and looking more like Clojure/Ring. More often then not though, Node.js applications lack any sort of predictable structure because for a lot of teams, JavaScript is their first, and only, experience.
Long story short, I’ve been doing Node.js for 5-ish years now, and I have yet to come across what you are looking for. Every team/codebase is a unique snowflake in some way. Your best bet is to leverage the experience you have in Java/Clojure because JavaScript will be able to support 90% of whatever approach you decide to use.
A great way to learn more about the inner workings of databases, and entertaining too.
Another choice quote (from one of his lectures):
“There’s only two things I care about in life:
1. My wife
2. Databases
I don’t give a f#ck about anything else”
I came across an excellent modern alternative when my kids started getting into electronic music. It’s called SunVox [0]. Still under active development and runs on just about anything! Lots of fun!