What does it need to be not only a good coder, but become a great app developer?

gwagner's picture

If you want to become a great app developer, it's not sufficient that you master your favorite programming technologies. It's essential that you understand all basic concepts and techniques, not just in programming, but also in information management.

A programming (or software development) technology typically combines a programming language (such as JavaScript, Java or C#) with a framework/library for user interface and data storage programming (such as BackboneJS, JSF or ASP.NET MVC).

Stephen Young says, in his blog article How to Become a Better Programmer by Learning How You Understand Code

To me the thing that distinguishes a decent programmer from a truly excellent one has always been how well they understand the core concepts in programming.

Programmers have to spend a large portion of their time acquiring new knowledge, which they need to stay current in the technology world.

Examples of programming concepts are common data structures such as linked lists, array lists and (hash) maps, namespaces, functions (as special cases of procedures), basic control structures such as case distinctions and loops. Understanding these concepts means knowing how to use the corresponding pre-defined elements of a given programming language, or how to implement them if there is no such element in that language. For instance, namespaces are implemented with the help of packages and classes in Java, while they are implemented with untyped objects or immediately invoked function expressions in JavaSript. Examples of programming techniques are algorithms for common tasks such as sorting a list of values, filtering a collection, etc. Understanding these techniques means knowing how to implement them with a given language or knowing how to use a pre-defined method that implements the technique.

Many developers seem to believe that all they need to learn and master for their professional career are the right programming technologies, such as AngularJS, Swift or Go. However, they fail to become great app developers, if they don't learn the general concepts and techniques needed for being able to apply programming technologies in the right way.

Understanding general concepts and techniques, in programming and information management, helps you to

  • better understand the elements of a language or framework by recognizing them as specific incarnations of general concepts,
  • compare different techologies and assess their strengths and weaknesses,
  • make an informed choice of a new promising language/technology suitable for your puposes.

In his blog post Early vs. Beginning Coders, programming teacher Zed A. Shaw explains that his method for training up beginners is to "make them learn the basics of 4 programming languages" for

understanding the idea that the concrete things are just standing in for abstract concepts.

In one language, logical disjunction is expressed with the (double bar) symbol "||", and in another language with the actual word "OR", but "this is the same concept and the symbol doesn’t matter."

While technology-specific knowledge is important (in fact, it is the basis) for becoming a great programmer and app developer, it is also true that its half-time value is pretty short, so you always have to be concerned about the cost-benefit ratio of learning a new technology that may disappear quickly. Prominent examples of disappearing programming technologies are Visual Basic, Flash, Silverlight and AngularJS 1.x.

In addition to learning how to code, you also need to learn how to manage information

We should distinguish between coding as a base competency and information management as an advanced programming competency. All apps include some form of information management as a substantial part. Consequently, for becoming a great app developer, you need to master information management. This requires learning the concepts of information modeling and how to make information models (typically with the help of UML class diagrams). An information model defines the entity types needed for an app, and their relationships with each other (associations and subtyping relationships).

Examples of information management concepts are entity types, (single- and multi-valued) attributes, enumerations, constraint validation, (functional and non-functional) associations and subtyping/inheritance.

It is easy to find courses and other learning resources for technology-specific knowledge. In fact, the problem is that you will be quickly overwhelmed by the plethora of tutorials, books and online courses offering to teach you this type of knowledge. It's rather difficult to find the relevant high-quality resources among all those offered.

But it's even more difficult to find learning resources on programming and information management concepts and techniques, which are not "academic" (lacking connections to practice and hard to read). A good resource would not only explain concepts and techniques in a technology-independent way, it would also explain in which way these concepts and techniques are supported in relevant technologies. A platform offering this type of resources, considering the technologies Plain JavaScript, BackboneJS, AngularJS, Java and many others, is web-engineering.info.