It's always been odd to me that "Jason" and "JSON" didn't end up homophonous. But as an A-A-Ron, if anyone named Jason ever quotes the Key & Peele sketch at me, I'll no longer need to think about how to retort!
Within my circle of friends, all Aarons get Key & Peele's "A-A-Ron" sketch quoted to them as often as all Daves get Cheech & Chong's "Dave's Not Here" sketch quoted to them.
for me it was functional programming. and not just fp as is, but it's relation to another popular concept - oop.
i was properly introduced only to oop, and grasped a little of fp here and there, especially learning go and javascript.
what i consider a 'click' for me is when i realised that all of these paradigms are interchangeable. like, an abstract method is just a function, or a function signature is the same as in interface with a single method.
after that i write code however it feels more appropriate for the situation i am in and don't think too much about fancy words and patterns. it really feels like programming languages are becoming 'native' for me.
You should learn Haskell, that's what I'm doing now, in order to learn functional programming from the ground up. Languages like JS which have FP concepts aren't really functional programming fully.
I can tell you I'm far less productive as a developer when I have to waste hours figuring out errors to do with AWS cloudformation or various managed service issues, or play/app store certificate expiring or what not. I have the necessary analytical skills to figure out stuff as I need to, but it's far more efficient to let others who are used to dealing with it all the time and seem (perversely) to enjoy what I would admittedly consider the unsexy part of maintaining software and ensuring its availability to customers. I'd even argue it requires (esp. for operating production systems) a different sort of mindset.
Sounds ultimately like a debate about where the boundaries of specialisation should be. Some programmers are happy (and very productive) being extraordinarily specialised (knowing only a single language and working only on very particular components), others are used to wearing a very wide variety of hats, that even includes people and project management. I'd probably consider myself somewhere in the middle, but recently I've been painfully aware of spreading myself too thin trying to handle both feature development, CI/CD maintenance and DevOps-related tasks ensuring our cloud-based environments are deployed to and operate smoothly. On top of various other tech-lead/staff-engineer type responsibilities of course.
How can you write code if you don't know where and how it would be running? For me it's extremely uncomfortable to know that there are "they" who will do the "unsexy" "dirty" work to make _my_ code run.
> I've been painfully aware of spreading myself too thin trying to handle both feature development, CI/CD maintenance and DevOps-related tasks ensuring our cloud-based environments are deployed to and operate smoothly.
I never said I don't know where and how it would be running - I just don't feel the need to spend time dealing with that layer of things most of the time.
As for reducing complexity, what are you suggesting exactly? Most of the actual complexity I have to deal with is in our codebase to build the core application (which can run almost anywhere), which is independent of any issues with CI/CD and DevOps/cloud deployment. They're not complex, they're just frustrating.
another person who can’t get over his java stockholm syndrome in three (!) years
one particular thing that tells that is the attitude to interfaces:
while in java (and most languages) interfaces are used to tell which contracts a class implements, in go it’s reversed. you must declare interfaces to _require_ certain contracts, for arguments in your functions
for example:
type interface Operator {
Operate(int, int) int
}
func IntOparation(a, b int, op Operator) int {
return op.Operate(a, b)
}
this is a major difference highlighting the ownership boundaries:
* when I write a package and rely on a 3rd party contract, instead of referencing it and adhering to it, I will copy-paste parts that I need to my package and be independent