10 Places I’d Like to Visit

  1. Alaska – Homer to  be exact. Although Sadie Cove looks interesting too.
    Old Town Homer AK
  2. India – Homestay sounds interesting
  3. Greenland
    Photo by Mads Pihl - Visit Greenland
    Photo by Mads Pihl – Visit Greenland
  4. NYC during Christmas

    Credit: gigi_nyc
    2014 Bryant Park – Credit: gigi_nyc
  5. Rural Japan Read How Not to Travel in Japan
  6. Parma, Italy (Ham and Cheese!)
    Parma Italy
  7. Paris
    eiffel-tower-768501_1280 louvre-530058_1280 arc-de-triomphe-517899_1280
  8. China.
    Specifically I’d like to visit rural China – Guilin to be exact

    Li River
    Li River connects Guilin and Yangshuo County – Credit Chensiyuan
  9. Australia I have friends here. I’d visit them, but I’d also like to get into the outback.tree-392068_1280 melbourne-79216_1280 twelve-apostles-302024_1280
  10. Angel Falls – The water fall that was the inspiration for the falls in the movie “Up”.

Is Scala a Business Ready Language?

I’m a great (but not fantastic) developer and certainly no Scala expert so I approach this topic fearfully, knowing I’ll get something wrong.

And although I have decades of professional programming experience, I have zero Scala experience so I will be relying upon the experience of others. You will find a lot of quotes (with attribution) scattered throughout.

I’m both an opinionated and open-minded person so please express your own opinion below the article – you have a good chance of changing my mind.

A business is a team that takes ideas or products and brings them life.

Business Needs are Priority 1

When evaluating a technical choice in an organization, needs naturally fall into one of two categories: Business and Technical.

Even startup founders organize time and hat wearing between “businessy stuff” and technical execution.

The business needs of an organization must come before the technical needs for a simple reason. Teamwork.

A business is not just a bunch of developers and engineers sitting around building stuff. It’s tempting to draw a line of separation between tech and “everything else.” This is not teamwork – it’s silo building and any organization finding itself engaged in the business of building silos is doomed.

A business is more than a product, it’s more than a brilliant technology, it’s more than a team of 10x rockstars. A business is a team that takes ideas or products and brings them life through strategic partnerships, vision, mission, high-level planning, branding, marketing, sales, customer service, human resources and IT.

Business Needs

HR – Finding and Retaining qualified people.

From 2011:

“…it’s effectively impossible to hire people with prior Scala experience (of the hundreds of people we’ve interviewed perhaps three had Scala experience, of those three we hired one)” source

On May 1st, 2015 a quick trip to Stack Overflow Careers Candidate Search yields this startling metric. 56,000 java developers ( no interns or students) to 5,000 scala developers.

searching indeed.com for scala returns 3,733 results.

searching indeed.com for java returns 86,189 results.

Scala and Java are far apart on github.

Conclusion: Scala is the loser. Java is the clear winner with by far the most developers.
I could dig wide and far and come up with countless examples of the disparity between the availability and popularity of Java and Scala. Is this important? Only you and your organization can answer that.

Maturity and Stability of Scala

At 12 years old (internal vs general release), Scala is, without a doubt a mature language but does it’s maturity come with a hidden cost?

This release contains an important fix for serialization, which was broken in Scala 2.11.0 (SI-8549). The fix necessarily breaks serialization compatibility between 2.11.0 and 2.11.1 (this is separate from binary compatibility, which is maintained).Scala 2.11.1 Announcement

Breaking backward compatibility (yes I know it’s not binary compatibility) between minor versions is a negative.

Scala keeps breaking binary compatibility with every new release. In spite of previous promises, compatibility was broken in release 2.7, broken again in release 2.8 and broken yet again in 2.9. Ceki Gülcü – Is Scala worthy of your trust?

Yes, these are old versions and it appears that with the last few releases they have not broken backward compatibility. However, in September 2014, when asked in an interview with InfoWorld about an upcoming release (Don Giovanni – to be released in April, 2017 approximately) , Martin Odersky said: “That’s going to be a more fundamental rethink of what Scala is.”

To be intellectually honest, this is a good thing… technically. I admire the mindset of continuous improvement. This does not lead to stability however.

Conclusion: Should a language be considered mature and stable when these sorts of sweeping changes are planned or necessary?

Bringing Scala into Existing Businesses

There are many testimonials that can reasonably lead one to the conclusion that it is very viable to bring Scala into an existing JVM oriented business.

On Redfin, Alex Payne writes this about twitter

Scala is a lot of fun to work in; yes, you can write staid, Java-like code when you start. Later, you can write Scala code that almost looks like Haskell. It can be very idiomatic, very functional — there’s a lot of flexibility there.

However Julio Faerman writes

Although it is possible to invoke Java methods in Scala code and vice versa, the interaction between languages is not without complications.

Yakov Fain has an opinion about this:

If you have a team of several Java developers and want to introduce Scala, Groovy or any other exotic language, do not hire a person who knows this language. Hire an instructor to teach the entire team how to program in this languages and let one of the developers use it in your project.

Conclusion: Neutral.

Cost of Development

All positions are “senior” The location choice is an affluent community in the midwest which is cheaper than the coasts – adjust accordingly.

Position Location Cost
Scala Overland Park, KS $105,000
Ruby Overland Park, KS $105,000
Java Overland Park, KS $99,000
Python Overland Park, KS $105,000
Haskell Overland Park, KS $95,000
PHP Overland Park, KS $95,000

Image

Source

Conclusion: Irrelavent.


Technical Needs

Poor technical decisions have the potential to ruin a product or company completely. Consequently, appropriate care should be given to research and informed decision making.

I’ll be using mostly quotes for this section. Although I have read numerous articles and opinions and documentation pages about various libraries, I have no real-world experience.

Popularity (Google Trends)

Google Trends for Scala, Java, Ruby, PHP and C++

Google Trends for Scala, Java, Ruby, PHP and C++

 

Community

For a language to be worthy of a significant commitment by developers and businesses it must have a quality eco-system surrounding it. Topping the list is the community.

Language Meetup.com ( meetings/members) 2014 Conferences (lanyrd.com/)
Scala 398 / 109,873 32
Ruby 781 / 324,640 131
Java 1123 / 406,084 115
Python 1052 / 414,303 136
Haskell 182 / 44,821 8
PHP 1311 / 403,544 99

Conclusion: Scala clearly has a lot of work to do here. Only one of these three metrics is looking at numbers of people yet all of them have Scala at or near the bottom of the list.

Good Ecosystem

Node.js has an amazing library eco-system. One that I have yet to see duplicated elsewhere. If anyone involved with the Scala ecosystem is listening, you would do well to emulate npmjs.com

Nobody else so far has mentioned this, but the documentation for just about anything in Scala seems very slanted toward the academic rather than the practical. Most documentation reads like a professor is trying to justify a budget item; it’s all about “why Scala” and not much about “how to do things in Scala.” Reese Currie

Scala has methods to get similar results as npmjs.com but it is complicated and is part of the built tool – a product that some advise against using.

Comparing Open Source Projects By Language

Using GitHub as a data source reveals that the top two languages, by both project count and user count are Java and Javascript with the latter having more users than Java even with fewer projects.

The biggest surprise on this first dataset is the stunning disparity between the other languages and Scala. Scala is barely a blip on the radar.

The next GitHub dataset compares issues reported by language both as a number and as a rate per project. Without looking into the substance of the issues, there are two interesting conclusions that can be drawn. The first is that Java has the lowest defect rate (2.153 issues per project) and Scala has the highest (4.604 issues per project).

Conclusion: Between Java and Scala, Java is the clear winner.

Code Readability

Read the comments on this StackOverflow answer. Where is the community consensus?

Readability, readability, readability. Scala supports many programming paradigms(and has features to enable those), they combine into hundreds of idioms making it possible to write code in myriad of ways. Given the possibility, it’s hard to stop developers from going crazy and trying clever tricks, resulting in very unreadable code in the end.

It’s definitely possible to write beautiful code in Scala and then it’s the most beautiful language in the world but practically most people won’t do that. Scala libraries are written by very smart people but somehow even the best get carried away and go blind to code readability. If the best people write difficult to read code there is no way to control others. – Pankaj Gupta

Scala is a lot of fun to work in; yes, you can write staid, Java-like code when you start. Later, you can write Scala code that almost looks like Haskell. It can be very idiomatic, very functional — there’s a lot of flexibility there. –Alex Payne

“Scala is so flexible that you can write code in it that’s utterly impenetrable. You only have to look at Perl scripts to see the downside to that. Programmers who have to work together are happier if there’s only one or two clear ways to do something, not lots of different ways.” John Purcell

“My style changed gradually over time from object oriented to now completely functional” –Quora Review

Conclusion: Caution. Scala allows for code that is “utterly impenetrable.” Scala enables both functional and object oriented code. Without discipline and enforced standards a code base will become a mess – each developer contributing in their own evolving style.

Does Scala Lower the Defect Rate?

In spite of the conclusion drawn by the GitHub analysis that Scala projects have more issues per project, what is the conventional wisdom when it comes to answering this question? Perhaps in an enterprise environment things are different.

But most importantly, Scala taught me to program and reason about programming differently. I stopped thinking in terms of allocating buffers, structs, and objects, and of changing those pieces of memory. Instead, I learned to think about most of my programs as transforming input to output. This change in thinking has lead to lower defect rates, more modular code, and more testable code – David Pollak

This is a deep read on the subject of code quality as relates to programming language.

functional languages are generally less defect prone than procedural languages
A Large Scale Study of Programming Languages and Code Quality in Github

Conclusion: Yes. Probably. Temper this conclusion with the issue data from GitHub.

Performance & Scalability

Scala is named with the word scale implied in the name. While scala works well for large-scale projects, the intent of the name is more about your experience with it – it scales to meet you at your skill level.

“Scala is deep where other languages are broad.”
Martin Odersky – Slide 11

This means, scalable is meant in terms of flexibility and expressiveness. You can create your own control structures. E.g. the actors frameworks is a library, but it looks like it uses language features.

This means that Scala will scale according to the needed abstraction, not necessarily in terms of “answering 1.000.000 requests in a second” – Michael Kebe Programmers.StackExchange

Aleksey Shipilёv has an interesting article about benchmarking Scala vs. Java.

I should add that per amount of time spent programming, my Scala code is usually faster than my Java code since in Scala I can get the tedious not-performance-critical parts done with less effort, and spend more of my attention optimizing the algorithms and code for the performance-critical parts. – Rex Kerr

Java and Scala both compile down to JVM bytecode, so the difference isn’t that big. The best comparison you can get is probably on the computer language benchmarks game, which essentially says that Java and Scala both have the same memory usage. Scala is only slightly slower than Java on some of the benchmarks listed, but that could simply be because the implementation of the programs are different.

Really though, they’re both so close it’s not worth worrying about. The productivity increase you get by using a more expressive language like Scala is worth so much more than minimal (if any) performance hit – ryeguy

Intangibles

I think startups tend to underestimate the potential benefits of picking atypical technology stacks: learning new things is a powerful motivator for engineers—disproportionately so among those you’re most likely to want to hire—and having an interesting and thoughtful tech stack can help a lot in recruiting – Patrick Collison

Final Word

I’ll close with this series of quotes from Alex Payne of Twitter.

So what were our criteria for choosing Scala? Well first we asked, was it fast, and fun, and good for long-running process? Does it have advanced features? Can you be productive quickly? … And did Scala turn out to be fast? Well, what’s your definition of fast? About as fast as Java. It doesn’t have to be as fast as C or Assembly. …

Scala is a lot of fun to work in; yes, you can write staid, Java-like code when you start. Later, you can write Scala code that almost looks like Haskell. It can be very idiomatic, very functional — there’s a lot of flexibility there.

And it’s fast. The principal language developer at Scala worked on the JVM at Sun. When Java started, it was clearly a great language, but the VM was slow. The JVM has been brought to the modern age and we don’t think twice about using it.

Less Personal Social Media and Situation Context Detection

10 Tech Ideas

  1. Given enough live video feeds (Periscope are you listening?) a person could “walk” around an event switching from stream to stream.  Even better would be if it wasn’t just switching streams but actually 3D transitioning between streams – literally walking around the 3D space.
  2. Less personal social media. This expands our world view – Much of social media is bragging. Instead, enlighten me, enrich my day, educate me, but don’t brag about your kid, dog, or food.
  3. Facial recognition, body language, facial expression recognition. Situation context detection – piped into social media upon user defined triggers.
  4. Video demographic metric collection – clothing brand detection, clothing style detection, car detection (from parking lot). Age and gender detection.  For brick and mortar stores this would offer an interesting data stream about their customers.  Could update offers in real time in store.
  5. Theft detection, loss prevention using real time video feeds and body language detection (from #3) stores could intervene before a crime takes place.
  6. Video and smoke detectors to monitor quality of pizza in oven. Speed up, slow down conveyor.  Crust bubble alarm. Utilize as many sensors as possible – does food off-gas as it cooks? Measure it.
  7. Technology (SAAS) company that specializes in the ultimate in privacy – corporate shielding of average citizens for super cheap.  LLC? All aspects automated.
  8. SAAS company that APIs life.  All of it. Life metrics
  9. SAAS company that provides market flattening technology generically. Everybody wins when a vertical market removes middle men and becomes more honest.
  10.  Gamify tech ideation. Create tools (website) for collaborative brainstorming.

Failing Successfully Using Rowboats.

I’m a failure.  I fail a lot.  All the time, really. And in lots of ways.  I’m not as patient with my children as I’d like.  I’m not as productive at work as I’d like.  I’m not as good of a husband as I’d like. But this is not about any of the specific ways I fail because I’m far more interested in flipping failure on it’s head.

“What is failure?  How do we make it useful? How do we keep it from hurting us? “

I asked a local bartender “What makes a shift successful.”  His answer, “Nice customers and good tips.  Restaurant people are the best customers – they’ve been there before and always tip well.”  Makes sense.  A friend defined success as “on time and on budget.”

I don’t want to focus on success because total success is elusive – seemingly downright impossible.  We are frail creatures, after all, and are prone to coming up short.  I write this not as an excuse but as a realization.  Knowledge is power and knowing where we are currently gives us the power to grab failure by the collar and demand it tell us how we can do better.

I’m the senior software developer where I work and I’ve been wondering, “Organizationally what is failure?  How do we define it? How do we make it useful? How do we keep it from hurting us?  How do we move beyond immediate negative reactions and take a long term view?  More importantly, how do we create a culture that doesn’t punish failure and instead seeks to find the value in  failure?

Failure is worthless when you fail to learn from your failure through accident or ignorance. The worst kind of worthless failure is produced by a culture that structurally prevents learning from failure. Not knowing if you’re failing, or at what rate you’re failing means you have no hope of making meaningful change.

Everything else is useful.  Think about conversion metrics.  For online businesses this is the ratio of  visitors converting to customers.  People tout their conversion rates like they are some measure of success.  “Oh, we have a 30% conversion rate!”  Wait, did you just tell me you lose 70% of all visitors?

In baseball failing most of the time is acceptable.  Failing half of the time is ridiculously good.  If you convert 30% of the time in baseball you’re going to make millions.  I don’t know what good conversion metrics are for an online business.  You probably have some idea what is acceptable for you.  It all depends on your acquisition cost and the lifetime value of a customer for your business.

But here’s the thing.  If you’re not learning from your failures be they a 2%, 10%, or 30% conversion rate (a 98%, 90%, 70% failure rate) you’re being hurt by your failure.  It’s time to turn that situation around and figure out how to learn. The answer is shockingly simple, but requires dedication and discipline.

Anyone can flip failure on its head,

Find yourself some third-class levers.

Did you know 3rd class levers even exist? (I didn’t.) A third class lever allows you to gain speed or distance at the expense of effort.  Put another way, the effort we use to improve our success rate can move it a lot (distance).

Rowing Team Row boats use 3rd class levers – effort translates into speed and distance.

It logically follows that you would pick areas of your business that have a high rate of failure – they represent the areas that can experience the largest amount of  improvement. In addition to the high rate of failure, you would also want to identify those areas that are frequently repeating and easily testable.

If you have a business that is profitable with a 2% conversion rate – a 3rd class lever can make a huge difference to the bottom line – you don’t have to move the needle much to get a doubling or tripling of revenues.

The exact details of your testing greatly depend upon your industry, your goals and the hypotheses you decide to test.  For example, to improve customer acquisition you might try changing the amount of information required on sign up forms. For trial accounts try testing a decision to not require a credit card.  For project management you might try testing a new methodology or technique.  For a pizza restaurant you might try a new approach to special prices or offering a more interesting pizza.

As a father I could try different approaches with family chores and rules. I could gamify things. Yes it’s more difficult to measure, but anecdotal evidence is acceptable in this situation.  The important thing is to be trying and measuring – in whatever way is appropriate.

When it comes to failing  when you learn from your mistakes you are honestly improving. If you are not learning you have truly failed and are doomed to repeat the past.

Anyone can flip failure on its head, in any industry and in any human endeavor.
Do you want to?

People Want to be Heroes, not Commodities!

Lots of technology is created in an effort to systematize or commoditize existing sectors and business professionals – software developers, artists, writers, lawyers – the list is seemingly endless.

Technology has proven itself to be one of the greatest liberators and equalizers of human existence.

This perpetuates a paradigm of subjugation and enslavement.  People don’t want to be commodities they want to be heroes – they want to be Free – (Libre!)

It’s all wrapped up using a false value proposition; i.e. if you join you will have more work, stability, etc.  But at commodity prices? No thanks. But at loss of individuality ? Not a chance.

The next 500 years is just beginning and it’s going to be another period of enlightenment.

The idea is thus: technology has proven itself to be one of the greatest liberators and equalizers of human existence. We must find the areas of human existence in most dire need of liberation and bring technology to bear on the problems of injustice, inequality, and  the commoditization of humans.

This is done through a transcendent, transparent and kind application of technology to level playing fields removing barriers blocking greatness. We design systems and redesign human institutions  in ways that eliminate hooks, greed, fear and coercion; we recognize the need to create an organization and system that outlives our great grandchildren’s generation.

Join the conversation and let’s talk about the sectors and paradigms that need reforming. The next 500 years is just beginning and it’s going to be another period of enlightenment.

Family Computing & Backups, Google Drive vs. DropBox

10 Things to Finish

  1. Move from SVN to Git. Document the process and write an article for treehousetim.com
  2. Finish making the hardwood floor transitions and install.  95% done is not done.
  3. Basement.
  4. Article about innovation and centralized/institutional education.
  5. Article about Failure.
  6. Clean the garage.
  7. Get family computing organized and backups back to happy. Write an article for treehousetim.com
  8. Decide between Google Drive and DropBox. (please comment with your thoughts)
  9. Teach my 4 year old to ride her bicycle.
  10. Start writing a book.

A Much Better Ikea, Wifi Lightswitch, Fair Printer Ink and Toner

  1. A better “take and bake” pizza.   Better crust, better sauce.  Seriously high quality ingredients.  I’m so tired of crappy pizza that looks amazing.  I’d rather it look like poo and taste amazing.
  2. A better pillow.  Grease proof, comfy.  Adjustable kit with extra stuffing.
  3. A better light switch.  Auto shutoff with timers. Wifi or bluetooth enabled. Log on/off and plot usage over time.
  4. A better bunk bed. Worry free design to prevent roll-offs.  Modular design for easy assembly.
  5. A much better Ikea. Better design tools that help you plan a solution for a space.  More modularity across entire product line.  Everything is interlocking and interchangeable.  Better store layout.  Don’t herd me like a cow.
  6. A better recliner with a sturdy frame and beefy mechanism.  Should not clunk or creak.  Ball bearings.
  7. Bed-side lamp with USB ports built in for charging.
  8. Better bedtime books.  I’m so tired of reading Disney Princess Books.
  9. A better computer printer. “Fair Printer”  Fair Printer would sell printers and ink/toner for a reasonable profit.  The information needed to allow 3rd party providers of ink and toner would be open source – free for anyone.
  10. Spicy food meter – detects amount of heat in food.

Open Source Franchises, Loans Without Limits, How to be a Man

  1. Open Source Franchises.  Business in a box.  Open Source.  Have maintainers just like software.  This could create  a service ecosystem around it just like open source software.
  2. Crowd funded loans without limits.  each participant can set dollar amount, interest rate and payback time. Aggregate each participant’s money into a single offer.  Credit checks and income verification will be needed based on amount.
  3. Used item valuation guide. Crunch data from Craigslist, eBay and Amazon (and others – needs research).
  4. Charging Cords that don’t break.  I’m amazed there hasn’t been a class action lawsuit about this.  Seriously, Apple – $20 cord that lasts 6-18 months max?  That’s immoral.
  5. Ebook idea: Youtube skits for kids.
  6. Ebook idea: Wood Pallet Deck Furniture
  7. Ebook idea: how to run an AirBNB or VRBO through sub lease
  8. Ebook idea: how to cut your kids’ hair and make it not look like it.
  9. Ebook idea: How to be your own computer tech support – common problems and fixes – save hundreds.
  10. Ebook idea: How to shave, wear a suit, tie a necktie and other lost manly arts.

Sriracha Vanilla Ice Cream, Minecraft, Coffee, Home Organization

  1. Why can’t coffee taste like it smells when grinding?
  2. Why is cold brew coffee so expensive?
  3. Why is home organization so hard?
  4. Why is smart home / home automation so expensive?
  5. Why have products gotten so crappy?
  6. Why are high efficiency washing machines so loud and raucous when they spin out?
  7. Bluetooth doorbell.
  8. Ebook idea: How to teach kids to write business plans.
  9. Minecraft killer. Something that is more fun and where users actually create value while playing.  Teaches coding?
  10. Sriracha Vanilla Ice Cream
  11. Super modular computer – upgrade/expand easily.  Multi system architecture – possibly use Facebook Open Compute project designs.

4 Day Work Week, Self Driving Cars, BioTech, Biscuits and Gravy

  1. Furnace Filter that measures pressure on high and low side and calculates efficiency/capacity/how clogged.  communicates over wifi.
  2. Make an outline of my life – write life story (thus far).
  3. 4 day work week.
  4. Biscuits and Gravy Drive Through – everything homemade.  Primary ingredients: love and real butter.
  5. Self driving cars.  NOW! Need to brainstorm the path forward. Legislation, public perception
  6. Artificial Intelligence: Movie Script Writing
  7. Party Cups that glow green when picked up by it’s owner – using nano bio tech.
  8. Auto regenerating Air Freshener made with biotech.
  9. Wind up swing pusher for lazy parents.  Wind it up and it will give your kid a boost on the backyard swingset.
  10. Party cup set – all unique styles or with unique, yet memorable numbers.  Could prove problematic with alcohol, but if you’re that drunk you won’t care if you grab the wrong cup.