==================
Use case scenarios
==================

.. Modified: 2019-02-23/16:06-0500 btiffin
.. Copyright 2019 Brian Tiffin
.. This file is part of the Unicon Programming document
.. GPL 3.0+ :ref:`license`

.. image:: images/unicon.png
   :align: center

.. only:: html

    :ref:`genindex`
    :floatright:`<a href="http://unicon.sourceforge.net/">Unicon</a>`

.. index:: Scenarios, Use cases

.. _scenarios:

Scenarios
=========

Discussing some of the obvious and less obvious use cases where Unicon
is at home in providing solutions.

Unicon is a very high level general purpose programming language.  In theory,
being Turing Complete, any computational problem can be solved with Unicon
code.  There are areas where Unicon shines bright, and solutions fit the
design goals, and areas where Unicon might be better off in a supporting role.

Of some of the more general programming use cases:

- Command line
- Desktop
- Web
- Mobile
- Back end services

Of these five main areas, Unicon would be a good first choice in all but the
Mobile space.  The Unicon ecosystem provides excellent support for command
line, desktop, web and backroom service programming.  As of version 13,
programming with Unicon in the Mobile space would take extra effort to fit
comfortably.

Experience
----------

- on boarding
- educational materials
- community support
- contributing

*This author is biased, and old(er), so this section of the document may seem
more glowey than usual.*

Getting started with Unicon is a very pleasant experience.  From ready to go
pre-built binaries for many platforms and a smooth source kit build, the on
boarding experience with Unicon fares well relative to other programming
environments.  Educational materials are plentiful and free.  The community is
small, but very open to help and welcoming to new programmers. Contributions
are appreciated and the principals will assist with efforts for inclusion in
the product when appropriate. 

Processing
----------

Getting more specific:

- Text processing
- Numeric processing
- Data processing
- Transaction processing
- Image processing
- Sound processing

For these areas, Unicon would be a good first choice in all roles; but numeric
processing may benefit most by using :doc:`multilanguage` programming support
for heavy number crunching.  Unicon is quite good with numbers, large and
small, but perhaps not the best choice when large scale numeric processing
performance is the priority. Having said that, Unicon is very good at
codifying extremely complex algorithms, so programming in Unicon can be highly
beneficial when prototyping numeric recipes.

Where Unicon will shine is text processing.  Manipulation and analysis of
strings of text are a Unicon strength. I/O speeds are also highly competitive.

General data processing is a good fit for Unicon.  The advanced data structure
and I/O support will rarely be found lacking when it comes to sophisticated
data processing tasks. Unicon lends itself very well to applications that can
benefit from *concise complexity*.  Solutions that seem out of practical reach
when programming in other languages may benefit from goal-directed
evaluations, implicit backtracking and associative data stores. Unicon syntax
and semantics can place solutions within reach. *The overall design of core
Icon with Unicon usability enhancements may actually increase the amount of
complexity allowed in a system before overwhelming human understanding or
codebase maintainability*.

Transaction processing is another area where Unicon can fill the role nicely.
Ease of networking and concurrent programming support are builtin. There may
not be many off-the-shelf Unicon transaction processing frameworks available,
but rolling a custom solution is well within the strengths of Unicon
programming.

Image processing is well supported as part of the venerable Icon
cross-platform :doc:`graphics` facilities, and Unicon 3D graphic extensions.

Sound file processing is also supported in Unicon, but there may be custom
work required for some features that programmers find lacking, relative to
other resource manipulation programs.

Development
-----------

From some of the more conceptual areas:

- prototyping
- testing
- debugging
- deployment
- documentation
- maintenance

Unicon should be a first choice in any prototype development, full-stop.
Testing and deployment features may be less supported than in some other
environments, but Unicon is no slouch in these areas either. Due to the *write
less code* paradigm inherent in the very high level feature sets of Unicon and
the extensive builtin monitoring facilities, debugging and maintenance task
burdens are likely on par with, or helpfully superior to, most other
programming environments. In terms of documentation, Unicon hits about the
middle; some programming environments offer superior documentation systems,
some offer a lesser experience.

Devices
-------

Unicon is not overly rich in low level system programming features.  Writing
device drivers would not be a point of Unicon strength.  Programs that
control device drivers, directly via :ref:`loadfunc` loaded C code, or just as a
presentation layer, can be coded in Unicon without fuss. Building system
level hardware access would definitely require a lot of fussing using Unicon
only source codes.  Building C support layers, and integrating into the Unicon
core would be middling to high levels of fussy.

Sciences
--------

Unicon offers up all the computational facilities a scientist or engineer may
require.  At this point though, the amount of ready built library support may
be lacking in comparison to other programming tools.

Mathematics
-----------

Eminently suitable.

Finance
-------

Unlimited precision integers can be used to good effect for fixed point
decimal calculations.  Banks like decimal arithmetic, and Unicon can help keep
track of dollars and cents, given a few support routines that take advantage
of unlimited precision integers.
  

.. only:: html

    ..

    --------

    :ref:`genindex` | Previous: :doc:`ucl` | Next: :doc:`programs`

    |