I finally got in touch with the
AL-language and VS Code in the spring of this year. My work is
project-based and therefor, when a project ends, my next project
should always include the latest Business Central version. In the
time of Dynamics NAV the technological change was marginal compared
to the latest changes with Business Central. Throughout the years,
the .NET-framework was introduced, instead of "find(-)" it was
possible (and recommended) to use "findfirst", and the code editor
got some updates too (colored syntax highlighting, inspect
definitions, collapse code blocks). All in all, they were nice
additions but nothing groundbreaking ... ok, the introduction of
.NET was a little bit groundbreaking.
Now with the AL-language and VS Code, Microsoft turns C/AL
veterans into survivors of a car crash - they used to know how to
walk and some things are still similar as before, but they have to
learn key skills from scratch again.
Suddenly from the sleepwalking-like ability to support different
version with a lifespan of more than 20 years, veterans have to
know about version control, Docker, and which AL version you should
Finally, after all these Neanderthal-like years, the development
of Business Central has been elevated to the level of modern
programming languages with improvements like built-in capabilities
to support the work of multiple developers in a single project,
version control that allows a code history, and easy creation of
Business Central instances.
I would also like to use this space to write about how much I
love the new coding experience. Fully integrated IntelliSense,
optimized to hack code into the editor - yes! But even with
experience in Python before, I still forget that the parentheses
are inserted automatically and I type them still every time by
I think everyone with some experience in NAV development
welcomes the recent changes like a long lost friend.
It is a lesson of life - where the sun shines, there is a
shadow. The possibilities that make working with AL and VS Code so
great are a big hurdle for new talent.
I remember my first days with NAV. My manager at the time saw
some potential in me, handed me a 120-page introduction into C/AL,
and I was more or less ready to roll. The original concept did make
it easy to produce quick results, which could be inspected on the
screen. It was also very easy to get a glimpse of options within
C/Side. It was possible to press CTRL + F4 nearly anywhere and the
Properties Dialog showed all available options. Especially for
beginners, this overview was very useful. In combination with the
names of the options, it was possible to guess with a couple of
tries which option needed to change to produce the desired
Also, the design of new tables or the creation of new fields was
very easy. The graphical user interface made it possible to get a
feeling of the possibilities with some clicks around the menu.
Now, with AL and VS Code the experience is like going from
Windows back to DOS.
There is a GUI, of course. But the GUI is standardized to cover
the needs of programming languages in general. That is why
everything related to AL in VS Code has to be controlled using the
A person who starts a new project is greeted with an empty
screen. All kind of options, properties, attributes, fields, and
triggers have to be entered by hand. Unfortunately, VS Code does
not provide an overview of which options are available. This means
for new talent, that you either need a good relationship with your
co-workers to ask a lot of questions or you must go through a lot
of documentation until you know what is possible and what is
Unfortunately, the official documentation for the AL-language
has still some gaps. For example, the easiest way to create a
FlowField is by looking up how the property string is generated in
C/Side and copy it into VS Code. Also, the new native integration
of JSON is a headache because the official documentation does not
contain a lot of examples.
This experience could cause frustration, especially for someone
without prior knowledge about NAV or programming in general.