Wrote a rant on why knowing at least five main paradigms of software development is a must for a decent coder.
Iâm glad you acknowledge it as a ârantâ. Iâm a native English speaker so I reckon I understand the term, but for others, Google thinks it means âa loud, uncontrolled, or angry outburst, often involving lengthy complaints or exaggerated, irrational statementsâ. I donât disagree.
This kind of invective is not helpful and, whether intentioned or not, ends up reflecting poorly on the community here in my opinion.
For the record, Iâm invested in Elixir (literally), and have a full time team of 4 working on an Elixir product. Iâve been following Erlang and then Elixir for nearly 25 years now all up. I think, for the right problem spaces, it has clear advantages.
The issue I have is that, your ârantâ comes off as a purity spiral. Iâve been fortunate enough in my career to work with some genuinely great engineers, people whoâve solved hard problems and not only shipped, but shipped at scale.
From the Windows USB3 kernel stack, the DotNet Task Parallel Library or even Real Time Pose Estimation (HoloLens), these were - I observed - all problems solved by people totally immersed in only one paradigm - the most common one, imperative. They were open to ideas from maybe one other paradigm, notably functional, but would reasonably reject these ideas on solid engineering grounds e.g performance or âfitâ.
Many extremely competent engineers never leave the âimperativeâ paradigm in their entire career. The idea that you need to know other approaches to be classified as such is frankly bunk.
Iâm not a native speaker, so what is your point (besides that if I wanted to be reflected by the community I should ditch my blog)?
Your survey of all the paradigms are very good but your assertion of âknowing at least 5 is a mustâ is not sufficiently substantiated. Why 5, not 3 or 6?
Also, you criticized most paradigms you cited but one is missing for the functional programming. If your position is that FP is above all others you did not make it clear.
I actually agree with most of what you said but since you asked about feedbacks so here you go.
Because 5 is favorite number (and also 5 cover all others to some extent.) To be honest, Iâd say 3 is already well enough for the vast majority of cases.
you criticized most paradigms you cited
Did I? That was not intentionally. I love them all, to be honest. I wanted rather say that each paradigm is great in its own niche, while might be flagrantly failing if applied beyond it.
This is probably a nice thread to mention a couple of Pragmatic Bookshelf titles: Seven Languages in Seven Weeks and Seven More Languages in Seven Weeks. They give you a taste of multiple paradigms for those who want broader exposure.
As someone who is not well versed in the history of computer science, only only somewhat-versed in the science itself, but who is fairly interested in category theory:
Is there a difference between a âstyle,â an âapproachâ and a âparadigmâ? I see the examples you cite referred to as various things but I always feel like I am missing the definition that justifies the groupings. Each language has its own set of abstractions, and along with syntax and other things certainly gives it a certain âstyleâ but that seems pretty ad hoc so Iâm not sure how useful it could be in making an argument for the use of one language, or pattern within a language, over another when given a particular problem.
I hate to refer to Wikipedia on that matter, but when thereâs no one else, even dumb Tommy is a prince. Programming paradigm - Wikipedia
how useful it could be in making an argument for the use of one language, or pattern within a language, over another when given a particular problem
It makes sense to come up with a proper architecture in the first place. Long before making any arguments.
Writing WhatsApp in any OOP language would have been a nightmare because of state management. Writing GoogleDocs in any functional language would have been a nightmare because of state management. There is no typo in two sentenses above: WA is all about the states of the users, GD is all about the state of the doc. Actors vs Object.
Rails could not be possible without an all-in object-oriented approach of Ruby. The user-facing DSL is better be declarative. If side effects matter for the users of your library, avoiding reactive patters will drive them bonkers soon. Etc.
The real-life example: when I started working on my FSM library finitomata, I prototyped the conversion from a mermaid/plantuml text representation using Idris and then carefully translated the solution to Elixir. The proper solution would be to use Prolog, but I forgot about it at the moment. Anyway, my approach somehow worked, but imagine the attempt to validate the correctness of the FSM and its transitions in pure C, or even Java. Youâll get a state management, not a finite automata.
that Wikipedia article isnât helping me with my question unfortunately, because not only is its definition supremely vague in a way that makes it indistinguishable from much more obviously ad hoc terms like âstyleâ (ârelatively high-level way to conceptualize and structure the implementationâ), the examples now are ordered in a semi hierarchical way that only raises more questions. So rather than choosing between imperative and object oriented programming, the latter is just a more specific kind of the former? But then what could it possibly mean to âchoose betweenâ them?
And letâs not even discuss the fact that âvibe-codingâ is apparently a peer here
One cannot implement Rails ot top of Haskell (well, itâs possible but it takes too much of a hassle.) If DHH was an expert in FP and never dealt with OOP in his life before, Rails would have been a dead-end.
I believe I already provided several clean enough examples of why itâs better to understand several paradigms, otherwise there is a risk of attempting to implement GoogleDocs clone with Actor Model, or a ChatRoom on top of Reactive Patterns.
I fully agree that a broad knowledge is important for fundamental understanding. I donât trust monolingual developers. I also agree that not every language is equally suitable for every task. Iâm just not sure about how to use these categories when Iâm thinking about my work.
In general Iâm very skeptical even of the attempts to formalize the manifold differences between languages, patterns etc into allegedly clearly demarcated âtypesâ like this that one can choose between like one chooses a utensil. In philosophy there are similarly various âschoolsâ but this is never claimed to be some sort of guide for someone who wants to think, itâs just a post facto label which pretty much only has practical value for librarians. Kantianism is kind of like a philosophical language that is useful if you want to to achieve a particular aim, viz. determining the nature and limits of what can be thought without any reference to experience (we can set aside to what extent it succeeds in this). But âidealism,â a label which is said to apply to Kant, doesnât really help you with anythingâŠitâs much to vague and its meaning ultimately totally depends on the context.
In the very same way as you walk or swim. We donât think âwell, ok, left foot forward, now carrying the weight of body weight, now right foot forward,â but we also donât breaststroke while on the walk.
I could not agree more. Terminology does not matter at all. I was writing about âbeing familiar with approaches,â not about âknowing all of them by name.â
Fair enough. honestly I am probably just permanently scarred by a colleague responding to my challenge about introducing a global state via redux for a hyper-local concern by saying simply âit is more declarativeââŠ
I think the post is written in a toungue-in-cheek kind of way, and people here take that too seriously.
I enjoyed it. And we more or less did the X langs in X weeks in a uni course and it blew my mind. I agree everyone would benefit from knowing more than 3 as an intellectual exercise at least. And they should be FP, OOP, and Logic. The OOP, Reactive, and Aspect combo doesnât stretch your mind in the same way.
With LLMs I feel the barrier to introduce another language into an org is now lower. Whereas before I would be against adding more languages into an org because of future tech debt/hiring.
Yeah, I avoid talking seriously even to my lawyer, and Iâll never stop wondering how much people are willing to be offended instead of smiling.
This I could not disagree more. The main danger posed by AI is us less understanding our own code. LLM is great to help us to write some routine code in the language / domain we know, because we can easily validate it. Allowing LLM to write the code in the language / domain we cannot validate is extremely hazardous.
Consider you want to please me writing smth in Catalan (or even Russian on that matter,) and you simply ask your favorite translation service, âHow do I say âGreat job!â,â and it comes out with âGran feid!â instead of âGran feina!ââand you send it to me because there is no chance you can tell âfeinaâ (âjobâ) from âfeidâ (âsh*tâ.)
I think onboarding speed onto new languages is 100 times faster now. Sure there is a danger of not reading or comprehending the solution, but that was already a danger with Stackoverflow answers. Syntax is not an obstacle anymore. Asking the LLM to write an idiomatic solution, then question each line until you understand it. If it smells wrong ditch it or tell the LLM to rewrite it with the new angle.
And if someone just needs to add a new clause to something existing I think it is much easier to do ârelativelyâ safely now.
If your code is responsible for lives or billions of dollars.. sure. Donât do that. Bust most SaaS is not like that. I bet management would rather have speed over a minor error that can be fixed if when encountered.
Câmon. Weâre breaking spears in discussions about how we can get developers to pay any attention to pull requests in the modern era, and youâre honestly saying that people will figure out line by line what LLM has generated for them? Until they understand it? I thought I am a naiÌve dreamer, but youâve completely surpassed me on that one!
Management always prefers that but they never see that gaining 10% velocity this week loses 30% velocity the next month. Iâll side with @mudasobwa here: we the people still genuinely bring value by having full mental context of the code (as much as our brains allow it). If we give up that as well then we become fully redundant.
Iâd say how many paradigms a good developer should know is a number that will defy empirical quantification. Itâs the same sort of issue as how one can tell if one is dealing with a âgoodâ developer or not.






















