I’m now three weeks into picking up and using non-walled garden social media systems instead of traditional ones, specifically Diaspora over Facebook and Twitter. It has mostly been a good experience despite some major disagreement on some of their decisions on user experience and other rough edges that I hope to help fix soon as a contributor. But the thing that puts social media apart from blogging or other static production ecosystems is the concept of sharing and interacting with other users. By the nature of the the fact these massive digital halls are still pretty empty I’m just not getting my fill of that.
This pro-Swift article came across my RSS feed recently and while I don’t want to do a direct comparison of Swift versus Kotlin since I haven’t done Swift coding I did think it was interesting to point out similar points of efficiency in their simple example built as a product of the Kotlin language compared to others like Java, the language they picked on too.
Over the weekend I had made a bunch of progress on migrating away from the walled garden systems. I’m happy to report substantially more progress. This will of course be an ongoing process of refinement and testing. However I’m currently getting substantial amounts of my needs met in enough areas that I’m prepared now to start pulling the plugs on Facebook, the Google Ecosystem, Twitter, and so on. When I wrote about this over the weekend I had completed my hypothetical replacement of several systems. I have some updates to those elements as well though. My current replacement portfolio looks as follows (summary at the very end):
As I wrote earlier this week after the Cambridge Analytica event came to light my nagging feeling that I needed to get off these Facebook, Google, etc. platforms crossed a threshold. It was no longer something that I thought I should do but something I was going to actively do. In one week I’ve made progress in pretty much every dimension (scroll down to the bottom if you just want my list of alternatives).
I’ve had my moments in the past where Facebook pissed me off and I tried Google+. That didn’t work out too well so I went back to Facebook after they addressed some of those problems. I had my moments in the past where I was concerned about the amount of tracking Google does in searches so I went to DuckDuckGo. That’s still my main search engine but sometimes I need results that come out better in Google so go there. I also use the Google platform for my e-mail, documents, etc. The concept of them selling my data in exchange for giving me free service has bothered me to varying degrees over the years, but seeing how greedily it was manipulated recently is really amping that up to me. The amount of information available to the highest bidder has always been a known quantity to me but these recent stories are just putting that up to eleven. It’s not just the Cambridge Analytica story. There is also the story about Facebook and other companies forcing users to turn over their keys, so to speak, so they can look at any and all their personal data as a condition for working for them. There is the way they exploited that data in difficult discussions.
I almost never wait in huge lines for anything. I camped out once for football tickets in college. Once. I also once waited six hours for an iPhone 4 when it first came out. It was my first smart phone and I had been putting off getting one way too long. That was it though. Yet I know people who have waited in ever decreasing lines for each iteration of the iPhone. The reduced lines are definitely part of the sizzle wearing off and the iPhone being just another smart phone. Yet even at 8 pm last night there was a line for iPhones outside our local Apple store. It didn’t wrap around the mall like in the iPhone 4 days but the end of the first day still having a line for an iPhone 8 was pretty telling to me.
It was just a few months ago when Ubuntu announced they were killing off Unity, their main desktop option. Many people were wondering if this was part of their larger pivot towards more profitable ventures and thus they would be leaving the desktop behind. I too was filled with worry about that potential outcome but calmed myself remembering that I was not locked into one vendor for my OS any longer. In the intervening months however it has become clear that Ubuntu is not killing of the desktop, far from it. In fact the strides they are taking with Ubuntu 17.10 and Ubuntu 18.04 look like they are about to put out the strongest desktop offering to date. Not having to carry the weight of a phone platform, their own desktop environment, etc. has allowed their team to focus on giving positive contributions to Gnome proper. I’ve had the opportunity to play around with the Ubuntu 17.10 betas and have to say that I don’t think I’d be missing anything from my current Ubuntu experience. I look forward to upgrading to 18.04 when the time comes and no longer worrying about if one of my desktop baselines was going away.
On one of my classic computing Facebook Groups there was a post quoting Edsger Dijkstra stating, “It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.” It’s actually part of a much larger document where he condemns pretty much every higher order language of the day, IBM, the cliquish nature of the computing industry, and so on. Despite most of it being the equivalent of a Twitter rant, in fact each line is almost made for tweet sized bites, there are some legitimate gems in there; one relevant to this topic being, “The tools we use have a profound (and devious!) influence on our thinking habits, and, therefore, on our thinking abilities.” No, I don’t agree with the concept that starting with BASIC, or any other language, permanently breaks someone forever, but the nature of the tools we use driving our thinking means that it can lead to requiring us to unlearn bad habits. Yet has someone tried to actually write BASIC, as in the BASIC languages of the 60s, 70s, and early 80s, with actual design principles? Fortunately/unfortunately, I tried a while ago, with some interesting results.
While I’m obviously becoming quite enamored with Kotlin recently, this is like the early dating stage for me. Everything is great when you first start dating someone but it’s after you’ve been with them for awhile and see their warts, which everything and everyone has, that you finally decide whether it’s the right fit or not. While I’m very excited about being able to do a modern language in the JVM ecosystem to have my cake and eat it too I’m still not on the bandwagon fully yet in terms of recommending it for everyone. My homework for this is still underway, or actually in its infancy even. A quick list of the things I still need to weigh are:
- How well is it supported in the various IDEs and on the various platforms? I’ve been doing this in IntelliJ, the base platform from the original vendor that wrote it, but what about Eclipse, or Netbeans, or VSCode? Is it feasible much less reasonable to use this language for real in these environments as say compared to Java or .NET Core?
- How well does this perform compared to other languages? I’ve started exploring the whole benchmarking thing already but there is still a long way to go. I still have many areas I want to explore in terms of not only the raw performance of the base language compared to Java, .NET, and other languages but even questions like: How does their streaming capabilities compare to Java Streams, .NET LINQ, etc; how well does this work with numerically intensive applications since primitive types have to be boxed; etc…
- What is the tooling like for doing code coverage, code instrumentation, etc?
- How good is the documentation, tutorials, examples, etc. for new users and for weird corner cases with the language?
- How well can it be used in integrating with Java libraries like JavaFX, Spring, and other necessary components for building applications. My initial interactions are very positive but I need to do more real world use cases rather than rely on the smaller experiments I’ve already tried.
It’s like many things in life, I’m getting to the point of being committed in this Kotlin direction for projects that solely impact me. However if I’m going to recommend it for others or for larger scale things I need to have my ducks in a row and to have really been through the ringer with it to say whether it is the real deal or if I’m just in the honeymoon phase with a new tool.
As I wrote about here yesterday I am taking my exploration of Kotlin to the next level by looking at performance metrics using the Computer Language Benchmark Game. As of right now I’ve completed my first two steps: got the benchmark building/running Kotlin code, and doing a straight port of the suite (follow along at the Gitlab project). This was really 90% IntelliJ auto-converting followed by me fixing compiling errors (and submitting a nasty conversion bug that came up from one test back to JetBrains). So now onto the results! Well, actually not so fast on that one…