UI or User Interface is the medium in which you convey your programming or solution to the end user. No one is going to use a program that only works in terminal and even less people are going to read your source code. So you have to make a way that people can access what you make is often though a graphical user interface as humans can generally be described as visual thinkers. But it would be very poor form to reduce UI to just graphical elements UI encompasses flow, sound dynamic or static elements but it is also so much more. I think the goal of UI is to allow a user to jump in and achieve what they wanted without having to read a user manual. This however is a double edged sword in many ways, while I think it is important to always strive for the best possible UI you have to know a couple of things about your audience first.
Firstly does you audience know as much as you do about the subject you are trying to convey? Chances are not! Ok so imagine you are trying to make a simple paint program and I think its safe to assume that anyone who can use a computer knows what a square is and even an oblong, however we may choose to call it a rectangle. However does our audience know what a bezier curve is? Do you really know what one is? UI can help in this respect, have you got a picture of on on the button? Is there an easy way for someone to play with the function and then return to a state before they did so? These are some of the most basic ways of showing an intention but the problem escalates quickly.
Let’s take the level of complication up a notch now you are making a program that solves an Ordinary Differential Equation. But you are a bad programmer and because obviously solving Ordinary Differential Equations is related to solving Partial Differential Equations you included the functionality of doing both of these types of equations though the one function. But how does anyone know this the simplest answer it to have two ways to access this function with two different labels on it. But why does any of this matter?
The simplest reason as to why good UI matters is so people actually use what you have made, but also because this can be an edge on any competitor. Sometimes people will use something purely because it is more feature complete, often people will use something with very limited scope purely because it is easier to understand and use. This comes back to your audience you must understand what level of complexity they are willing to tolerate so that your program feels both feature complete and easy to use, this factor can make or break a project.
Why is it so hard to achieve this balance? Because often when you are setting out to build a large and complex programming system you make many very useful features that are easily extended to do even more and that is fantastic but then you remember you have to build the GUI for it … and the first few times you do the right thing and you build a button for everything and put it in a logical place, or you build that extra menu bar and even made it grey out all of the options that are not available as you change modes and fictions. Eventually everyone just starts tacking on more and more until you get more buttons than your favourite Si-Fi starship.
How do we avoid the problem in the first place? Planning, only make the features that you originally planned and hone the prototype to the audience. Remember this is a trade off between functionality and ease of use, once you have established these parameters then you will have fewer UI disasters.