Yesterday Oh man, this is so hard each time to found out a way of the paragraph or topic start. Nonetheless, I am not a novel writer and doing this how I only can.
An intentions of this post is my attempt to express some nifty tricks, that I learned from other languages by reading a source code of many glorious Open Source projects, that were written on those languages, as well as writing on such languages. Among these languages are Scala, Python, C++, Emacs Lisp and I barely looked at Clojure. So, will try to apply something to Java as a non Phantom equation.
Oops, must to mention what picture to this post was proudly stolen from the CoderWall’s achievements badges. I am so sorry (And this is not a promotion, if you cares about it).
What Needs to be Formalized?
This is a point for a daringly cantankerous and short digress.
In the era of the growth popularity of many “modern” Programming languages people still (and always will) complain about them, by rupturing between these friends forward and backward. Personally, I will try to not fall to this curve and will try to express my objective position without any fanaticism.
First of all, should mention, that I still think and believe, what many people trying to apply their knowledge in one sole language into another languages as well, even scarcely ever looking on the second. Previously, most people never use C++ in the right way, how it could be used. Instead, they’re always tried to use C++ as a glorified C or slightly mutated Java. And this is not the right way to use it. Without any doubt, nobody should call himself a professional, if he only knows one language. Many of these words were expressed by Bjarne Stroustrup in his interview to bigthink.
Meanwhile, a total annihilation between two armies of zombies Javists and mutated Javists (actually, absolutely immutable) are proceeding in the full-length. A first army stands with a flag emblem framed like “Senior Java Geeks” and “Java NOT dead… yet (author’s note)”, the second army holds a flag with emblem framed “Scala type spelunker” and “Clear your mind – this is Clojure”. For some unsubstantial reasons, the second army also periodically suffer from civil wars in their seemingly slim ranks. Also, we could find a third not numerous army of slightly mutated Javists, which not hold any flags, but if they will… their flag would be embraced with a frame “This is Groovy Baby”. In addition, sometimes we even could notice a migration from the third army to the second with a fast-forward merge strategy.
As for me personally, I am not prefer one of these intrinsic locks and prefer to stay apart from it on the hill and observe how they will smash each other. Because I think, that it is much better to hold a finger on the proverbial ”Red button”, instead of fighting with a naked sword in your hands. However, I like Scala as a language and as a good step forward, but without deep fanaticism and contempt to others.
Objects in Space in the Lemming World
Most people seriously complain about Scala and his over-complexity, about lack of many features in IDEs, that they prefer to use for their Java coding, etc. Geometric position of these objects and their relations comes from the Java world, where people has and most importantly wish to have an IDE, that will solve many problems in the code for you. This is a such evil kind of automation tools, although many people will never admit this – it is a bitter truth of reality, when you are willing to press an “apply button”, instead of just think about a problem and learn from it, when you solved it. You will just pass it away. This is are persistent behaviors of people, who comes to Scala and / or Clojure world with an attachment from the Java world, especially without any background with another languages.
Not everybody knows that the most influential language in this world is C++ (surprise~!). Probably, the most famous utility, which everybody use every day are – Google search engine (or your search engine of choice). Yes, it is C++. Recently (don’t remember when, though) Facebook turns into C++, because they need performance for their backend. Your entire desktop is C/C++ (Cocoa, CoreAudio, CoreData, CoreLibs, KDE… many of them) as well, etc., etc.
Even by living a such long life, C++ developers still do not have a good qualified IDE and many commercial companies aren’t interested to spent their time and resources into development in this area. Not because of the “language popularity”, contrariwise, because of benign of such developers and most of them don’t need a “by one button apply” solutions, as well as a complexity of the language themself. Many people always complain about it too. It’s just too hard to build such IDE that would be as good as for Java right now. Java is a much simpler language themself.
Apparently, Scala is a such type of complex language, where you have a lot of constructions and language rules, and I guess, not just to create an encumbrance around it or to stir up envy from the Java fans. I think, it were made to gain an immediate efficacy and to destroy excruciating pain in the back port of your body. Such type of language just cannot be simple and tools creation for it are even harder. Seems like, it’s such kind of fervency, when people complain about it, albeit don’t understand the entire problem completely.
Physics of the Common Sense Lemming World
Moreover, most people complain, that they just cannot read a source code of Scalaz project, source code of xsbt project and another projects, after just a three or even six months of writing some Scala code, straight-forward and right away. Likely, with a total absence of any experience in the pure functional programming languages, among them Haskell, OCaml, Erlang and others. Is it a so new kind of hypocrites?
Aforementioned libraries have been made definitely by a cunning and biting wit, by a guys those have a lot of experience in Haskell, and most of theoretical background came into Scalaz and xsbt from Haskell and math theory. If you are not familiar with it, how you can even try to read this code? It is initially wrong decision.
Sure, such libraries not without their own crankiness, but it is not just an attempt to make a lesion for your brain, conversely this is an attempt to solve a problem in another way. Don’t understand – don’t read the code, but use it. It could help.
It turns out, what patient simply can’t realize how to use that cure properly, beacuse he didn’t read instruction for this drug till the end. Thus, instead of alleviate pains he just hamble themself and now want they money back! So, who is to blame?
Maybe projection isn’t all Logic.
Remarks
Looks like, I stripe this line and completely forgot what was intention for this post. Well, any code snippets and what I learned from Scala, partially from Clojure, Lisp and so one, will left for the next time (when I’ll have this time). I should split this.