In my previous post on “How to become a very good programmer”, I mostly focused on how to set a direction for your career and the psychological process of getting the cogs turning in path to learning how to code.
However on a more practical note; once you’ve come up with an idea for an app you’d like to develop, you need to decide on the quickest learning curve for developing a complete end-to-end working application. At this stage you will need to consider a few things:
- Technology Stack: which programming languages, technologies and SDKs (Software Development Kits) you will use to develop your app.
- Design Patterns: aside from just learning one or more programming languages and their syntax, most technology stacks require you to understand at least the basics of certain design patterns e.g. OOP (Object Oriented programming), MVC (Model View Controller) etc.
- Type of app: what kind of app are you thinking of developing; a mobile app, desktop app, web service, console app, or web app?
Now, assuming you’ve never written an app before or never even so much as written any code before, your biggest problem would be that you don’t know what you don’t know. Meaning that you cannot make decisions about technology stacks, design patterns and the type of app you want to develop because you probably don’t know what the implications are behind your decisions. Nor do you know how long the learning curve would be based on your decisions.
So chances are that you’ll probably go around asking people what kind programming language or technology stack you should start learning. Some of your programmer friends will suggest certain programming languages, but their suggestions will be nothing more than their own preferences. For example: your straight and narrow corporate type friend will suggest you learn Java or C# because they’re in demand in the business world. Your hipster friend will suggest you learn Ruby on Rails because it’s cool, while your book smart friend will give you a lecture about compiled languages vs scripted languages, or managed vs unmanaged languages. Last but not least, your really smart and technical friend who studied electrical engineering, but knows very little about business, will suggest you learn C and C++ for performance reasons. These people are all right from their own perspective, but the point is that you shouldn’t base your decisions on other people’s preferences/coding religions.
You need to develop the kind of app that can be coded in a single programming language from beginning to end. You could maybe start with a native Android app coded in Java, but the you’d have to know OOP (Object Oriented Programming) pretty well before you could get your head around the architecture of an Android app. The easiest would be a console (command prompt/terminal) app, but you might find that a little boring as a beginner seeing that there is no UI (User Interface). Based on personal experience, my suggestion would be to develop a desktop app using .NET Windows Forms and code it in some server side language such as C# (or even VB.NET). The UI is incredible easy to put together by simply dragging and dropping controls onto a form i.e. not coding for UI design. You thereafter simply double click on a button to get an event handler and type some code to make the button do something. This approach would enable you to develop an entire app from beginning to end with a single programming language and you could very quickly see your progress and it would also keep you excited. It would also allow you to get away with not knowing anything about OOP or any design patterns whatsoever. Once you’ve finished your first app, you could thereafter start branching out into web and mobile development using various different languages and technology stacks.