Month: January 2015

When I first started programming I thought that if I knew the language I was programming in very well I would become a really good programmer. Needless to say, that’s not really true, knowing English (syntax and grammar) very well doesn’t make someone a really good author. Knowing the language you are working in is the cost of entry and it should be your first focus however it’s not enough. I am going to talk about five skills that I think are critical for good programmers. These skills might be important for people in other careers too, however I have never been an orthodontist.

1. Communication

Unless you write code in some isolated bunker on a deserted island you will need to learn to communicate. Sometimes you will need to ask questions about abstract problems you haven’t landed 100% yet or you might need to convince someone that your solution is correct. You might need to explain your solutions or ideas to your team mates.

It’s easy and tempting to just put your ear phones in and churn out code. I know I’ve done it once or twice. Just know that you are losing out on a lot of efficiency. Communicating with other smart people will improve your skills and make you a better developer. Even communication with non-developers can teach you about development. I once spoke to a sales person about their sales and how they go about it. He showed me his spreadsheets, his sales pipe line etc. I was impressed with how well he was organised and how well he was using the tools available to him. Jumping between different work sheets, changing formulas faster than I could follow. It was inspirational. It caused me to look at the tools I use and look for ways to make better use of them.

If you really want to become valuable to your team and contribute beyond just your own capacity, become the person who other people come to for clarity. If you can sit in a meeting and resolve confusion by effectively making sure people get their points across your contribution to the team, company or product goes beyond just what you can output.

To become a good communicator you need a good dose of Humility (point number 3) and Curiosity (point number 4).

2. Take care of your health

I wrote this point last, because this is the one I struggle with the most. I know that a healthy body equals a health mind, however it’s just so easy to do things that are NOT health. Eat junk food, play games instead of exercise. All of those things are so much easier to do and fall back on. There have been numerous studies done on how important health living is to a successful career. I don’t feel qualified to tell you how to take care of your health. Just that you must.

You will be able to focus better, remember better, think creatively and all sorts of wonderful things when you are eating healthy and exercising. This is one of my BIG focuses of 2015!

3. Humility

So you are the one they come to when they need something fixed, there is a problem nobody has any idea what to do and you come in with your flashy smile, wave your awesome wand and as easy as one, two, three the problem is solved.

It’s tough to not feel like a rock star and I’m not saying you shouldn’t. You should be able to take your victories and the good feelings that come with them and enjoy them. You should grow in confidence every time you win.  What you should avoid is getting a big ego.

When your ego starts to become unmanageable, when you start thinking you are untouchable, that’s when you become a worse programmer. It takes humility to learn, it takes humility to see mistakes you’ve made (and you learn a lot more from mistakes sometimes). It take humility to listen to someone speak about a subject you know well, you might be surprised, they might teach you something.

Without humility you lose out on a lot of personal growth and improvement. One final thing I would like to say is, don’t confuse humility and being humble with being a pushover or weakness.

Humility leads to strength and not to weakness. It is the highest form of self-respect to admit mistakes and to make amends for them.

– John (Jay) Mccloy

4. Curiosity

Knowing that something works is good. Knowing HOW something works is even better. Humans are naturally curious, so let your curiosity guide you. Curiosity will also keep you abreast of the game. New technologies, new approaches even new environments is a fact in our line of work. If you stop learning you stagnate and eventually you become irrelevant. A health dose of curiosity and some good old fashioned hard work will help keep you informed.

I often find that I learn the best when I am learning from other people. Turns out that often figuring out how something works is linked with finding the right person and approaching them with some humility. People love to share what they know, especially if it’s about a topic that they are interested in. You will be amazed what you can learn by just listening to someone when they speak.

5. Balance

Life balance is a tricky one and it deserves it’s own post, however on a high level. In programming sometimes it’s easy to lose your balance, we put things aside and tell ourselves that we will do it “after this release” or “after we hit beta”. Then we look back and realise that for the past two years our life has been way out of balance. This is not only bad for your life, it’s also bad for your programming.

We all occasionally need some time to relax. When you have been struggling with a problem for a long time sometimes the best thing you can do it take a walk. Let your subconscious work on it. This idea can also be taken to a macro level. You should find something to do that will take your mind off programming. Find something you love to do (preferably something physical so that it can help you with point 2 🙂 ) and use that to balance your life a bit better.

Until next time may you make your own lists.

-R

When the first iPhone came out and the App Store changed the way we distribute and install applications forever there was a huge debate going on between Web apps and Native apps. I was somewhat surprised that this debate is still going on.

– A quick side note, I am specifically talking about Mobile apps here, Google has proven over and over that Web apps for fully fledged desktops are a good idea –

I have to be honest here, in the beginning I thought that Web apps are the way to go, I mean you can write them once and presto they work everywhere, completely platform agnostic, simple, cheap and easy. As the years have gone by however I’ve become wiser.

Google WebView
Android WebView

What are Web and Native Apps

A Native app is an app that is written on top of the operating system and using the technologies, APIs and SDKs provided by that operating system. A general rule of thumb, if you have to download it and install it, it’s a Native app.

A Web app is something that runs in your browser, it’s usually written using web technologies like HTML, JavaScript, AngularJS etc. It runs on a server somewhere on the cloud and a user access the App via a URL, usually through their phones browser. Some Web apps try to disguise themselves as Native apps by being just a thin web browser. You download it and then the browser just automatically takes you to the URL (WebView is an example on the Android platform). These apps lose most of the benefits of being Web apps and should be really avoided.

Why are Native Apps better?

  • By far the biggest advantage that people will tell you Web apps have, write once and run everywhere, is actually pretty bogus. As most people who have worked on websites will tell you there are very few times that you can write anything for the web and have it appear perfectly on different browsers across different platforms, usually it takes some effort and testing to make sure everything works the same way. Most of the time, unless it’s really trivial you would be better off taking this effort and instead writing a Native app.
  • Native apps have greater access to the devices and the underlying OS. You can do a lot more in your app, access to local file systems, access to cameras etc. With a Web app you are only able to do what the browser on that platform can do (sometimes this also differs between platforms).
  • Users of different platforms have different expectations of their apps. Each platform has it’s own idioms. Users expect buttons, menus or toolbars in different locations on their platform. If you want your app to succeed you should try to avoid frustrating your users. Often a “once size fits all” design is just not good enough.
  • They can work without access to the internet. These days it becomes less and less of an advantage but it’s still there. Imagine trying to look at your shopping list on your phone because you forgot what to get and you can’t because you don’t have internet access.
  • Users EXPECT Native Apps. As the years have gone by users in the mobile space have come to expect native apps, going into their browser and typing in a URL or clicking on a bookmark requires too much effort. This is one of the reasons I believe that these “Thin” Native apps have come into existence.
  • Browsers were designed to view documents, an application that runs inside a browser has to cater for a lot of scenarios that the browser was not designed for. What does it mean when I hit the browsers back button while typing an email in my Web app client?

Anything good to say about web apps?

Web app do have some things going for them. However to be honest, if you haven’t been able to tell by now, I am not a huge fan 🙂 most things in technology has a place somewhere and I’m sure there are one or two reasons to create a Web app. So below are a few reasons when you might consider it.

  • A simple application, where you are trying to display some data across different platforms this might be an okay scenario for a Web app, however even here you will probably use something like the Android WebView.
  • If All your expertise and experience is in HTML, Javascript etc. and you feel like you don’t have the time required to learn the native programming language/SDKs then Web apps might be an option.
  • You don’t need to upgrade Web apps, since they run on your servers your user base will always be on the latest and greatest version.

Conclusion

In my opinion any NON-trivial mobile application deserves the best you can give it. You will be better served spending some extra time in the beginning and doing it correctly. Your users will thank you.

Until next time, may your initial efforts pay off in the future.

-R