Skip to main content

As native as possible

This is a half baked idea and kind of a rant. The idea is very simple and has to do with my personal position position about how to choose technologies.

When building a software systems, first do things as natively as possible for your context.

As a software developer I would like to construct systems that are easy to get started with, understand, maintain and still can be delivered on time. As you may know that it is impossibly hard to do so many things well in any domain.

In my brief career I have seen many examples of technology stacks and systems which try to achieve the previously stated goals by abstracting away complexities of underlying layers but also creating some of their own. If you are a Java server side developer you probably have worked with likes of Hibernate etc (which helps you create database queries). This usually results in poor results and has been discussed in community (to quote "the resulting cakes  from cake mixes generally taste worse than proper cakes...and they don't even save you any time"). And the more you use such things the more  you start justifying these frameworks/technologies.

I have found that focusing one's energy on learning the basics and applying them pays off in the long run. But it does boil down to where one needs to apply the boundary of abstraction. So as a general rule I would recommend that if you are writing to a database, it would be a very good idea to know how to use that inside out in its native form. For SQL based software it means learning about SQL, various replication and shading strategies , for NoSQL (for example MongoDB, it would mean learning about mongo internals). When working with client side UI on the web this means learning and using Javascript. There are times when things like JSF and Hibernate will help you achieve your goals. I guess in essence I am repeating the matra of  KISS and YAGNI.

So from now on I will try to use SQL/JDBC instead of Hibernate/JPA; Javascript/HTML instead of some cooked framework which tries to avoid JS/HTML.  iOS/Andoird instead of Cordova (I do think Cordova is useful for some use-cases though) and Embedded C instead of things like BGScript (for Bluetooth Smart prototyping) when ever possible.

Edit: Revised the post on 2016-08-14.

Comments

Popular posts from this blog

YubiKey Neo + Putty SSH + Windows

I have been using Yubikey Neo to manage my OpenSSH key in a CCID at work. I have made it work in Ubuntu and MacOS with relative ease, but most of my colleagues are on Windows and wondered how this could be done on the M$ platform. So I decided to give it a shot and try it out on their newly released Windows 10 (or shall we call it WinOS X  ) Step 0: Get YubiKey Neo configured as CCID Of course you have to buy this hardware before we can even begin. Before your Yubikey appears as a CCID  you will need to use YubiKey Neo Manager to enable it. See the following screenshot.  You cannot have a password for your Yubikey when you are changing the modes. If you do then you will have to delete that configuration with YubiKey personalization tool. Make sure to exit the GUI applications before you start using console later. Step 1: Check if you Yubikey works. You will need have gpg executable installed.  Gpg4Win  to interact with your Yubikey C:\...

Ideas for Neo4j community education

I copied this post from my previous blog. This post is about some ideas for helping the the cause of NoSQL and Neo4j education.    The purpose of this (longish) post is to jot down my ideas about education of  Neo4j  in it's community. This post is in response to an irc/online  meeetup  called on Sep  12th   6th 2012. I have been involved with Neo4j community for almost a year now. It all started with me attending  Goto Aarhus  2010 as a student volunteer/crew. Since then I have been trying to learn more about the subject of Neo4j and NOSQL for my personal and professional use. I am by no means an expert in Neo4j, or in spreading knowledge (pedagogy). But as a loud mouth trouble maker I do have some opinions/ideas of my own.  There are many aspects of Neo4j that I am interested in ( Cypher  being one,  Spring-Data  integration being other). But one topic that I am deeply interest...