Top 10 Very Very VERY Important Topics to Discuss
Some things are just very very very VERY very important. Such as John Cleese.
The same is true for Whitespace:
Yes. 1080 Reddit Karma points (so urgently needed!) in only 23 hours. That’s several orders of magnitudes better than any of our – what we wrongfully thought to be – very deep and interesting technical insight about Java and SQL has ever produced.
The topic of interest was a humourous treatise about whether this:
for (int i=0; i<LENGTH; i++)
… or this:
for (int i = 0; i < LENGTH; i++)
… should be preferred. Obviously both options are completely wrong. The right answer is:
for ( int i = 0 ; i < LENGTH ; i++ )
But at some point, the whitespace discussion is getting stale. We need new very very very important topics to discuss instead of fixing them bugs. After all, the weekend is imminent, and we don’t know what else to talk about.
This is why we are now publishing…
Top 10 Very Very VERY Important Topics to Discuss
Here we go…
0. Whitespace
OK, that was a no-brainer. We’ve already had that. Want to participate? The very interesting Reddit discussion is still hot.
1. The Vietnam of Computer Science
In case you haven’t heard of this highly interesting discussion, there are some people who believe that ORMs are outdated, because ORMs don’t work as promised. And they’re totally right. And the best thing is, all the others are totally right as well.
Why is that great? Because that means we get to discuss it. Endlessly!
While everyone keeps talking about ORMs like that, no one cares what Gavin King (creator of Hibernate) had said from the beginning:
Why should we care about his opinion? We have our own, far superior opinion! Let’s have another discussion about why ORMs are evil!
2. Case-sensitivity
Unfortunately, us Java folks cannot have any of those very very very very very important discussions about casing, because unfortunately, Java is a case-sensitive language.
But take SQL (or PL/SQL, T-SQL for that sake). When writing SQL, we can have awesome discussions about whether we should:
-- Upper case it all SELECT TAB.COL1, TAB.COL2 FROM TAB -- Upper case keywords, lower case identifiers SELECT tab.col1, tab.col2 FROM tab -- Lower case keywords, upper case identifiers select TAB.COL1, TAB.COL2 from TAB -- Lower case it all select tab.col1, tab.col2 from tab -- Add some PascalCase (awesome SQL Server!) SELECT Tab.Col1, Tab.Col2 FROM Tab -- Mix case-sensitivity with case-insensitivity -- (Protip to piss off your coworkers: Name your -- table "FROM" or "INTO" and let them figure out -- how to query that table) SELECT TAB."COL1", TAB."col2" FROM "FROM" -- PascalCase keywords (wow, MS Access) Select TAB.COL1, TAB.COL2 From TAB
Now that is really incredibly interesting. And because this is so interesting and important, you can only imagine the number of interesting discussions we’ve had on the jOOQ User Group, for instance, about how to best generate meta data from the database. With jOOQ, we promise that you can extend these enticing discussions from the SQL area to the Java area by overriding the code generator’s default behaviour:
- Should classes be PascalCased and literals be UPPER_CASED?
- Should everything be PascalCased and camelCased as in Java?
- Should everything be generated as named in the database?
Endless interesting discussions!
We have so many options to SQL casing, which brings us to
3. SQL formatting
Unlike C-style general-purpose languages such as C, Java, Scala, C#, or even keyword-heavy ones Delphi, Pascal, Ada, SQL has one more awesome grounds for numerous discussions. It is not only keyword-heavy, but it also has a very complex and highly irregular syntax. So we’re lucky enough to get to choose (after long discussions and settlements) between:
-- All on one line. Don't tell me about print margins, -- Or I'll telefax you my SQL! SELECT table1.col1, table1.col2 FROM table1 JOIN table2 ON table1.id = table2.id WHERE id IN (SELECT x FROM other_table) -- "Main" keywords on new line SELECT table1.col1, table1.col2 FROM table1 JOIN table2 ON table1.id = table2.id WHERE id IN (SELECT x FROM other_table) -- (almost) all keywords on new line SELECT table1.col1, table1.col2 FROM table1 JOIN table2 ON table1.id = table2.id WHERE id IN (SELECT x FROM other_table) -- "Main" keywords on new line, others indented SELECT table1.col1, table1.col2 FROM table1 JOIN table2 ON table1.id = table2.id WHERE id IN ( SELECT x FROM other_table ) -- "Main" keywords on new line, others heavily indented SELECT table1.col1, table1.col2 FROM table1 JOIN table2 ON table1.id = table2.id WHERE id IN (SELECT x FROM other_table) -- Doge formatting SUCH table1.col1, table1.col2 MUCH table1 JOIN table2 WOW table1.id = table2.id WHICH id IN (SUCH x WOW other_table )
And so on and so forth. Now any project manager should reserve at least 10 man-weeks in every project to agree on rules about SQL formatting.
4. The end of the DBA
Now THAT is a very interesting topic that is not only interesting for developers who are so knowledgeable about productive systems, no it’s also very interesting for operations teams. Because as we all know, the DBA is dead (again).
For those of you who have been missing out on this highly interesting topic, do know that all of this started (again) when the great NoSQL vs. SQL debate was initiated by brilliant minds and vendors of truly alternative systems. Which are now starting to implement SQL, because apparently, well… SQL isn’t all that bad:
History of NoSQL according to @markmadsen #strataconf pic.twitter.com/XHXMJsXHjV
— Edd Wilder-James (@edd) November 12, 2013
Please, do engage in some more discussions about the best and only true way to tackle database problems. Because your opinion counts!
5. New lines and comments
Remember our own blog post about putting some keywords on new lines? Yes, we prefer:
// If this if (something) { ... } // Else something else else { ... }
Exactly. Because this allows comments to be written where they belong: Next to the appropriate keyword, and always aligned at the same column. This leads us to the next very interesting question: Should we put comments in code at all? Or is clean code self-documenting?
And we say, why yes, of course we should comment. How on earth will anyone ever remember the rationale behind something like this??
// [#2744] DB2 knows the SELECT .. FROM FINAL // TABLE (INSERT ..) syntax case DB2: // Firebird and Postgres can execute the INSERT // .. RETURNING clause like a select clause. JDBC // support is not implemented in the Postgres JDBC // driver case FIREBIRD: case POSTGRES: { try { listener.executeStart(ctx); rs = ctx.statement().executeQuery(); listener.executeEnd(ctx); } finally { consumeWarnings(ctx, listener); } break; }
Taken from our “hacking JDBC” page.
6. JSON is totally better than XML
Of course it is! Because… because… errr. Because it allows me to structure data hierarchically. Waaaait a second…
https://twitter.com/tommorris/statuses/491231153622646784
Dayum.
You’re saying, JSON and XML are the SAME THING!?
But MongoDB and PostgreSQL allow me to store JSON. Oh wait. They tried to store XML in databases, back in the 90s, too!? And it failed? Well, of course it failed, because XML sucks, right? (which is essentially another way of saying that I’ve never understood XSLT or XQuery or XPath or didn’t even hear about XProc, and I’m just ranting about angle brackets and namespaces)
Let’s further discuss this matter. I feel that we’re close to the very ultimate solution on that topic.
Speaking of JSON…
7. Curly braces
OMG! This is the most interesting of all topics. Should we put the opening brace:
- On the same line?
- On a NEW line??
- NO BRACE AT ALL???
The right answers are 1) and 3). 1) only if we absolutely have to, as in try
or switch
statements. We’re not paid by the number of lines of code, so we don’t add meaningless lines with only opening braces. And if we can omit the braces entirely, fine. Here’s an awesome statement, if you ask me:
if (something) outer: for (String thing : list) inner: do if (somethingElse) break inner; else continue outer; while (true);
That ought to teach them juniors not to touch my code. Which brings us to:
8. Labels
Nothing wrong with them. I’ll break out of my loops any time I want. Don’t tell me labels are Java’s way of saying GOTO, they’re much more sophisticated than that. (Besides, goto
is a reserved word in Java, and it is an actual bytecode instruction). So I’ll happily do my jumping forward:
label: { // do stuff if (check) break label; // do more stuff }
Or my jumping backward:
label: do { // do stuff if (check) continue label; // do more stuff break label; } while(true);
(observe how the above example used two spaces for indentation instead of four (or tabs). Another great topic for further discussion)
9. emacs vs. vim vs. vi vs. Eclipse vs. IntelliJ vs. Netbeans
Can we please, PLEASE, have another very interesting discussion about which one of these is better? Please!
10. Last but not Least: Is Haskell better than [your language]?
According to TIOBE, Haskell ranks 38.
And as we all know, the actual market share (absolutely none in the case of Haskell) of any programming language is inversely proportional to the amount of time spent on reddit discussing the importance of said language, and how said language is totally superior to the one ranking 1-2 above on TIOBE, for instance. Which would be Lua.
So, I would love to invite you to join our blogging friends below to a very very interesting discussion about…
- Daniel Lyons – Smalltalk, Haskell and Lisp
- John Wiegley – Hello Haskell, Goodbye Lisp
- J Cooper – Haskell, Lisp, and verbosity
- Maybe we can iterate over … flatMap that s***!
- Robert Smith – The Perils of Lisp in Production
- Manuel Simon – Why Lisp is a Big Hack (And Haskell is Doomed to Succeed)
Now, of course, we could enlargen the debate and compare functional programming with OO programming in general before delving into why Scala is NOT a functional programming language, let alone Java 8.
Oh, and you think your dialect of Haskell or Lisp is not good enough, so you should roll your own? Go ahead (right after checking this checklist!)
Such great topics. So little time.
Conclusion
The great thing about these social networks like Reddit, Hackernews, and all the others is the fact that we can finally spend all day to discuss really really intersting topics instead of fixing them boring bugs our boss wants us to fix. After all, this is IMPORTANT.
Or as Randall Munroe would say: “Duty calls!”
Further reading
If you’re now all hot and ready to discuss things, please consider also reading these very interesting and insightful articles on how to best format and style code:
- Tom Wijsman – Should curly braces appear on their own line?
- Michael Breen – Rational Java Indentation and Style
- Daniel W. Dyer – No, your code is not so great that it doesn’t need comments
- Adam Davis – What is self-documenting code and can it replace well documented code?
- Carlo Pescio – Your coding conventions are hurting you
- Jason Lengstorf – Why You’re a Bad PHP Programmer
- Richard Rodger – Why I Have Given Up on Coding Standards
- Are `break` and `continue` bad programming practices?
- Douglas Crockford – Code Conventions for the JavaScript Programming Language
Or add your own. There’s still much much important writing to do!
Reference: | Top 10 Very Very VERY Important Topics to Discuss from our JCG partner Lukas Eder at the JAVA, SQL, AND JOOQ blog. |