An App Developers' Checklist

This is a Tutorial not about coding in a particular language but about the entire lifecycle of things that need to be done while creating an app. The reason for this tute came up when I was in discussion with a few new developers that felt that they needed to focus on certain aspects only. So this is an attempt to educate them on what could be so wrong with the path they are choosing.

1. Development is like a bubble

Not because it can burst, but because it is round, it does not have any sharp corners and there is no start point and no end point, it is in itself a complete process. So first thing that we can learn about it is that either it’s the whole 9 yards or nothing.

2. There are no shortcuts

When learning to develop, it is as important to learn to start as it is to stop. You cannot pick and choose (technically, you can but then that will always prevent you from being a good developer) as we established that in a bubble there is no start and no end.

3. Get to know your battlefield

Being aware is always helpful than being totally clueless. If you know your tools and platform well, you can get more done than you can without fully understanding it in its entirety.

I can tell you of a colleague that I know who was learning to drive and because he would have his driving classes during the lunch breaks (13:00 - 16:00) all of the driving he did was in the afternoons and in the trainers car. I cannot recollect what car it was, but when during his road test, his trainer send him over with our batch to give the exam, he found it difficult to drive the car that we were driving as the gears were laid out differently than the one he was used to. Later, I also recollect him telling us about how he found it difficult to turn on the lights at night as he had never had the need to switch on the lights as his driving was only during the day. Another colleague of mine was telling us while she was teaching her teen daughter to drive, they sat in the car at bout 7:00 and the first thing she said to her daughter was to turn on the lights, and promptly her daughter reached for the cabin lights and switched them on, "Yes Mom, done" she said. So it is really important to know your environment, not in detail, but the basics and in context.

4. Development is about the Logic, not the language

If you can understand this, you are already on your way to being a good developer, and equipped with the knowledge from Point #3. You are an unbeatable force.
In programming there are so many languages, it is not the language that is important as it is just a tool to help you achieve what you are after. So you can develop in C, C++, C#, Lua, JavaScript, Java, Ruby, Python, Perl, etc... even if you have never developed before if you know the fundamentals. One of the reasons why a lot of beginners ask questions like "how do I do this" stem from the fact that their mind prevents them for thinking of a solution, they think of a *specific* solution. If you can think of a solution, you can always adapt it to the language/framework of your choice, it is all about just mapping the language syntax.

5. There is NO perfect code or the Perfect Developer

It is just a myth, there is in reality no such thing as the Perfect Code/Developer. Code can come in a clean form or a complicated messed up spaghetti form. This just demonstrates the ability and experience of the developer or the stage of the app. Sometimes even the cleanest (in terms of code) developers can have spaghetti code that is all over the place with redundant code blocks, not because it is bad code, but because the developer might have the whole prototype holding together with that duct taped code, then when certain aspects are finalised, that code is optimised. Some might see that as extra work, some might see that as an easier way to work. Since there is no PERFECT way or the ONLY CORRECT way, if it works for you, fine.

6. Productivity is important

There is no rule that describes productivity but it is an important factor. Productivity is not just about being able to code faster, or get things done faster, but also about getting them done most efficiently. To quote an example, I can sit and rename 50 files that a client send me to a particular format by hand, by pressing enter, invoking the filename edit option, then typing in the name and adding a counter number that is in my head. If I make a duplicate, Finder will tell me that I have a duplicate filename, but what if I skip a number? How do I renumber all the files again to correct that? This process might take me about 10 minutes but do I have to really do that? I can use file renaming utilities that allow me to work on the files and rename them, I can use Automator, I could also use Keyboard Maestro to achieve that as a macro. In the past I would use VBA found in Office 2000 to quickly achieve those results. In fact I had build quite a few tools based on MS Excel using VBA as utilities. When I shifted to the Mac, Office 2008 did not support VBA and in 2011 when it is supported, it is cumbersome and nearly unusable, but then a quick shell script is always handy using bash, awk and the few utils like grep, wc, uniq. What can one not achieve with these, in fact I had even started to use them from commandline on text fixed format files using the UnixTools for Windows.

Bottom line, if there is something that can take away the hassle and reduce the time taken to achieve the output that you require providing lesser errors then it is worth considering that option.

7. Price is Important

Yes, the bottom line is important, now if you wanted to just capture the screen to show a bug, you would definitely not be able to justify the purchase of Adobe Premier, no matter how cool the fx on that are and how much you can relate with the quality output that you might want for your video. However if you look for only FREE tools that will do what you want, then pleae keep in mind that the only reason that Adobe charges for Photoshop and Microsoft offers MSPaint for free is not profits. The class of the products are entirely different. Even in vehicles, the only reason to buy a BMW is not the status and class (there are Beemer's only parking lots) over a "Great Wall", "Kia" or "Proton" these are also good vehicles and many are also improving their features and safety, but apart from the Brand Name, you pay for the German Engineering (Expensive Labour and Taxes) and Quality based on the massive amounts spend on R&D to provide things like CBC, ABS, etc. Which might be common to many vehicles today but were researched and implemented by the luxury car manufacturers first. Having said that the cavemen made rock paintings that still stand the test of time using nothing more than vegetable dyes, so to paint a picture if you need a $1000 easel holder, $50 canvas, $100 Oil Paints, etc, a $5000 startup cost to paint an apple, there is something wrong with the picture...

8. Source

This is the most important and the least understood. Many Academics suggest in their classes, "Google is your friend" and many students agree that they can find better tutorials and explanations on the web than in their classes. However when you are involved in writing a paper that requires authentic information and accurate numbers, the last source of information should be Wikipedia, however I have seen quite a few (actually a majority of) students quote Wikipedia as a source of information. This is good to get an overview but it is *not* necessarily accurate. Similarly, when looking at the various sites that offer you information, it is but natural for beginners to look up wikipedia than to look for Springer, IEEE, ACM etc research papers for further information, but remember that you will get as good as the source you refer to. Some of the things to consider when using these sites for development is the experience of the developer, the depth of the material, the knowledge of the developer and the style, there is no point in reading an author that you cannot understand. Experience and Knowledge is perhaps the most difficult thing to gauge, as the common techniques employed by many developers these days are "I have over 20 apps on the app store", have a look, if each app has three versions MyApp, MyAppLite, and MyAppHD then you can count that as 1 and also look for the type of apps, if the apps are in the vein of "How Stupid are you", "How Predictable are you" the type of apps that you would see on TV trying to scam you for your money telling you that the phone can be converted into an X-Ray scanner, or a Truth/Lie detector, a compatibility tester, get the message right, these apps on TV are scams and so is the person that has only these type of apps. However said, Wikipedia still makes for good articles and the largest selling software are these scammy ones. Maybe it tells you something like "A fool and his money are soon parted" so you know where the market is and is *THAT* your market/audience? If your business plan is based on *scamming* then probably yes, that may be the Audience.

9. You are capable of rational decisions

You might be a beginner developer, but you are *NOT* gullible or incapable of decision making. You need to at the end of the day not only take your own decision but also stick with it and the repercussions of that decision. Like in the Life of Brian, when he says "You are all individuals" everyone responds, "YES, We are all individuals", you are all individuals, it is important for you to think it over and make that decision and then live with it.

There is not much in this code related to code, but if you do understand these simple rules, they can help you.


Post a Comment

Popular Posts