11/29/16

User Interface Design

User Interfaces, or UIs, are what the user utilizes to interact with a piece of software, it often is graphical and displayed in a screen, but it can also be hardware, like a controller. They are the most important part of the software for end users.

For a UI to be useful and likeable by the user or customer, it must be easy to use, must attract the attention, easy and intuitive to use, consistent and responsive. There are two main user interface categories: Command-line interface and graphical interfaces.

Command-line interface (CLI)

It is the most basic interface and consists only of text characters on lines. The first computers used CLIs to interact not particularly for the ease-of-use, but for the minimal resources consumed by it and the simpleness that it has. The main input method for the CLI is the keyboard.
Advanced users often prefer command lines to execute some tasks, as a graphical interface would be too bulky and impractical.
Embedded and remote systems often use CLIs because of the low data rates that they produce and the fact that they can be channeled through a variety of protocols, from serial to over-the-internet SSH connections.

Source
Graphical User Interface

GUIs are what most common users today know to interact with a computer, they are graphical frameworks to interact with a program often in more simple and intuitive ways than CLIs, the disadvantage of graphical interfaces is that they consume more resources, and often require a graphics processor to generate what is on screen. The main input methods for GUIs are mouse and keyboard.

They are often comprised of "windows" that represent a particular instance of a program that is executing, they provide buttons, sliders and tabs that make navigation a breeze, and change and adapt in order to fit what the user wants to do at a particular moment, responsiveness is crucial for the computing experience to be good when using GUIs.

Source
Lastly, the GOLDEN RULES for GUI design are:

  • Consistency: same commands and access methods used everywhere.
  • Shortcuts: Users sould be able to use hotkeys or commands to navigate faster.
  • Feedback: Even the click of a button should acknowledge the action that is made.
  • Defined sequences: opening, usage and closing of a window should be well defined. 
  • Simple error handling: Avoiding user errors and if they happen, handle them adequately. 
  • Easy reversal: Allow for Ctrl-z
  • Support user control: Make the user feel in control of the actions they execute.
Source: https://www.tutorialspoint.com/software_engineering/software_user_interface_design.htm


TC1019 Aug-Dec 2016 Review

First of all, lemme say THANK YOU Ken, for being such an awesome teacher. You are being innovative and have done what no other in Tec. 

My first class with Ken was Fundamentals of Programming almost three years ago, he always had these flipped learning ideas and education methods, but he adhered more to the standard teaching model that we are all used to. There were "normal" classes, "normal" exams and "normal" evaluations; maybe because of the nature of that course (?).

This semester, Ken has gone full #FlippedLearning, and I like it. Twitter is a very good idea for students to be connected and being able to simply "tweet" a new blog post (made when and were students are most comfortable) is very cool. Using a private hosting for the course rather than boring, old blackboard is nice, as more interactive features can be enabled, I like to see how classmates' posts begin to show up in the dashboard. Also, promoting new ways of communication such as Slack is very useful, now I see it everywhere, it happens like the Baader-Meinhof Phenomenon.

As a teacher, or rather, enabler for education, Ken is always trying to help his students succeed and everyone should at least once have a one-on-one talk to absorb personally the knowledge he has to offer. He is very acquainted with software and the industry standards.

Lastly, the course contents have served me as general culture, and are actually useful now that I started working. Had it not been for what I learned here, I would be lost when they mentioned the words "agile development", "scrum" or "stand-up meeting".

Thank you Ken and continue what you're doing :)

Software Design Patterns

Software Design Patterns are commonly used on object-oriented software development, they are previously defined methods to design and code programs, used commonly by experts and corporations that benefit from structured and unified ways to develop and execute. They serve as a common framework for developers and promote good coding practices.

Source


They were not developed intentionally, they were instead created by trial and error and the prevalent ones are the ones that, by natural selection, were proven to be the best ones.
The Gang of Four, are the ones that wrote a book and set the SDP principles down, the book is called "Design Patterns - Elements of Reusable Object-Oriented Software". The two main principles are:

  • Program to an interface, not an implementation: Basically programming the classes in order for them to be implementable by other software, resuable and act as pieces of a bigger puzzle.
  • Favor composition over inheritance: Classes should implement other classes to complete their functionality, rather than inheriting from them.
There are a lot of desing patterns and not one is always the "correct" one, nonetheless, four main pattern types are defined:
  • Creational: Create objects on the go as they are being used.
  • Structural: The composition of objects is of most importance, mix and match to obtain new functionality.
  • Behavioral: Communication between objects is prioritized.
  • J2EE: Presentation layer.

Source: https://www.tutorialspoint.com/design_pattern/design_pattern_overview.htm

11/28/16

Software Design & Software Architecture

These two parts are essential to software-making, they are sequential steps that ensure a program meets the specifications needed and solves a particular problem, let's start with Architecture.


Source

Software architecture deals with the abstraction part of design, it analyzes the problem and sets a methodolgy to solve it, commonly using blocks. The software architect must be very acquainted with the challenge that he is facing, along with the technologies that can be used to solve it. Nonetheless, the SA doesn't do coding, he gives the product owner a thorough analysis and the underlying structure of the program that must be made, including a design blueprint and the attributes and connections of each part that has to be implemented later.

Software Architecture is, in essence, delivering a structured solution to a problem.

Software Design, on the other hand, deals with the technical details of the implementation of the system. They take into account the environment, adapting the development process to it, incluiding software and hardware constraints. They design and guide the coding process, including testing and debugging, in order for the process to be orderly and ensure success.

Software Design creates the functional part of the archutecture plan.

11/11/16

Unified Modelling Language



Commonly abbreviated UML, it is a language, but not a programming one.
It is used to design software and processes from the functionality and structure perspective, using diagrams in an object-oriented environment.
It is maintained and endorsed by the Object Management Group (OMG).

It can be used to model complex systems, and the graphical facilities make it easy for anyone to understand the flows and sub-systems that comprise what is being designed.

UML is based on conceptual models rather than technical ones. Using concepts, it is easy to describe how blocks interact in real life. The blocks are organized and connected using standards defined by the language.

Because it uses object-oriented concepts, it includes all the characteristics relating to them, such as attributes, methods, classes and inheritance. This enhances the power to represent complex models.

To use an object-oriented language, the system must be analyzed from this perspective, this process is called Object-Oriented (OO) Analysis and Design. There are three main steps:
- Identify the objects.
- Identify relationships between objects.
- Design the system and implement it.

After identifying which objects the system involves, relationships between them should be defined precisely, in order to determine the connections and flow of data between the blocks, after that, this design can be used to implement a solution. Although UML is not a programming language, because of its object-oriented nature, it can be easily implemented using OO languages like Java or Python.

Using this method of design and analysis, UML can be implemented. The main focus of UML is to aid in the design and implementation of object-oriented software.

UML uses four types of diagrams: class, object, collaboration and interaction. They will not be described in this article, but more info is available here. This modelling language seems like a good organization method for projects, specially if implemented correctly on a large organization. Finally, an example of an UML diagram can be seen next:

Kishorekumar 62 [GFDL (http://www.gnu.org/copyleft/fdl.html) or CC BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0)], via Wikimedia Commons