The Future of Software Engineering

I cannot but marvel at humanity’s struggle to synthesize his natural ability to think. In our case to forge a tool capable of imitating thought processes at very complex levels.

In our effort to unravel the growing number of mysteries somehow programmed into everything that we encounter in this universe we have built a curiosity that somehow reflects reality in a light never before seen.

The advancement of physics and program engineering have opened a new threshold impossible to even imagine, Quantum theory applied to the computer sciences and it’s respective programming needs are the new frontier, a door to an unimaginable fountain of discoveries.

Processing and memory chips so tiny and fast, working very near absolute 0 temperatures with what might be called 4 dimensional memory storage, in these terms even the concepts of programming acquire an enormous and novel range of possibilities.

The possibilities and  repercussions of these discoveries as exciting as they are do not come without its inherent risks and I’m eager to see, experience and obviously contribute to this awesome story.


Semester Review

software-engineering

  • Software engineering, craft or an engineering discipline?
    Software development and design is part art and part science, it can be understood as a systematic approach to the analysis, design, assessment, implementation, test, maintenance and reengineerig of software, that is, the application of engineering to software. In the Software engineering approach, several models for the software life cycle are defined, and many methodologies for the definition and assessment of the different phases of a life-cycle model
    1

 

  • History of Software Engineering
    The term Software Engineering became known after a conference in 1968, when the difficulties and pitfalls of designing complex systems were frankly discussed. A search for solutions began. It concentrated on better methodologies and tools. The most prominent were programming languages reflecting the procedural, modular, and then object-oriented styles. Software engineering is intimately tied to their emergence and improvement. Also of significance were efforts of systematizing, even automating program documentation and testing. Ultimately, analytic verification and correctness proofs were supposed to replace testing. More recently, the rapid growth of computing power made it possible to apply computing to ever more complicated tasks. This trend dramatically increased the demands on software engineers. Programs and systems became complex and almost impossible to fully understand. The sinking cost and the abundance of computing resources inevitably reduced the care for good design (Wirth, N, 2008).
    software-engineering-methodologies-2-728

 

  • Ethics in software engineering
    Software engineers shall commit themselves to making the analysis, specification, design, development, testing and maintenance of software a beneficial and respected profession. In accordance with their commitment to the health, safety and welfare of the public, software engineers shall adhere to the following Eight Principles:
    img_8455

 

  • Software lifecycle
    SDLC is a process followed for a software project, within a software organization. It consists of a detailed plan describing how to develop, maintain, replace and
    627x627-sftwaredev-feature-huss
    software-development-process1
    agile-smb
    waterfall
    non-functional-requirements-do-we-really-care-9-638.jpeg
    umlw
    graphics1.jpeg
    softwareengineering
    Continue reading "Semester Review"

Software Architecture

Software architecture might be my favorite part of the project. Why? Because is the stage in which the blueprints of the project are made. This means that you solve the problem without programming it, then you can have fun implementing it once you know it will work. The goal of software architecture is to meet all the requirements and spot possible problems before you start programming. For me this is the core of good software.

User (1).png

If you want to know more about this you should see this four minutes long video. The nice thing about it is that it shows the difference between software architecture and software design, so if you have problems telling one from another this will help you.


Code reusability: don’t reinvent the wheel

As the title says, it is completely unnecessary to rewrite code that it has already been written, it is, most of the time, a waste of your time and effort. With all the open source code available nowadays, it is really probable that you find whatever you are looking for on sites like github, gitlab, bitbucket or any other site, and if you don’t find it, well, then now you know what’s going to be your next open source contribution. You should really focus on writing building on top of what others have already done, also, it is worth to notice that you should be writing reusable code as well.

Some tips on writing reusable code:

  1. Don’t repeat yourself: if you find yourself writing the same code several times, probably you should move that piece of god to a module or something alike.
  2. Make a class/method do just one thing: remember the Unix philosophy? write programs that do one thing and do it well, also, write these programs to work together, the secret is in writing generic code to accomplish one simple thing, then use the output of that as input of another program to accomplish a more complex task, don’t make code too generic tough, or it will be difficult to find a purpose to it.
  3. Write unit tests for your classes and make it easy to test classes.
  4. Remove the business logic or main code away from any framework code.
  5. Try yo think more abstractly and use Interfaces and Abstract classes.
  6. Write code that can be easily extended in the future, for code leverage of course.
  7. Don’t write code that isn’t needed, if you doubt if the code is needed, then it is not, just leave it out.
  8. Try to reduce coupling, avoid modules/classes depending on each other.
  9. code-reuse.jpg
    Continue reading "Code reusability: don’t reinvent the wheel"

Software implementation and Software maintenance



    Software implementation and Software maintenance

    Software implementation can represent a very complex task for big companies. The incorporation of a new tool may take several phases; companies need to consider the costs in money and time for the change to represent gains on their finance. The changes are so complex that some companies operate over legacy software that was released decades ago and offer no support.
    "Implementation is the carrying out, execution, or practice of a plan, a method, or any design, idea, model, specification, standard or policy for doing something. It's the action that must follow any preliminary thinking in order for something to actually happen"(Rouse, 2014).

    Software implementation surrounds all the post-sale processes involved in something operating properly in its environment. It includes analyzing requirements, installation, configuration, customization, running, testing, systems integrations, user training, delivery and making necessary changes. For an implementation process to be successful, many tasks between different departments need to be accomplished in sequence. 



    Software maintenance stands for all the modifications and updates done after the delivery of software product. They are different types of maintenance because they wary based on it's nature. It may be a routine maintenance, a bug discovered by a user and other different natures.

    Types:
    1. Corrective: Modifications and updates done in order to correct or fix problems, discovered by a user or by user error reports.
    2. Adaptive: Applied to keep the software product up-to date and tuned to the ever changing world of technology and business environment.
    3. Perfective: Done in order to keep the software usable over long period of time. It includes new features, new user requirements for refining the software and improve its reliability and performance.
    4. Preventive: Like the name says it's used to prevent future problems of the software.




    Sources & Links:

      TC1019 Course Review

      TC1019 Review

      Decidi hacer este post en español para explayarme más y dar a entender mejor mi punto de vista sobre el curso de Fundamentals of Software Engineering que tome con el profesor Ken Bauer.

      Temas:
      En el curso en total son 20 temas que vimos a lo largo del semestre, mas o menos por que también nos dejaba leer algunos artículos que tenían mucha información muy interesante y sentías como si fuera otro mastery topic. Los temas son muy variados, lo cual es muy importante por que si te enfado uno o no te intereso tanto ese tema puedes investigar otro tema de los mastery's, ya que no tienen un orden particular. En lo personal los temas con los que más di click o me interesaron bastante fueron open source software, XP, software design y software architecture; creo que se nota por que fueron los blogs más enfocados en mi punto de vista y no tanto investigación que encontré.

      Abolish Grading:
      Este semestre Ken implemento abolish grading, que es un modo de evaluarte a ti mismo dependiendo de tu esfuerzo en ese parcial. Me gusto mucho por que si tu quieres obtener cierta calificación ya sabes lo que tienes que hacer para alcanzar esa calificación, no hay sorpresas al final del parcial. Otra ventaja es que los profesores también pueden tener un descanso de tratar con alumnos que siempre se quejan de su calificación y reclaman que ellos merecían más calificación por que cumplieron con todo, y no es el caso con abolish grading por que tu sabes lo que va a venir en el examen, tienes la rubrica que se va a evaluar en ese parcial y no hay excusas a la hora de entregar calificaciones.

      Clase:
      En el salón de clases el profesor es muy flexible, hablamos sobre el tema asignado a ese día y si tienes alguna duda sobre cualquier cosa siempre pues hacer cita con él. 

      User interface design and software verification and validation

      User interface design and software verification and validation

      User interface design is the design of user interfaces for machines and software with the focus on maximizing usability and the user experience. focuses on anticipating what users might need to do and ensuring that the interface has elements that are easy to access, understand, and use to facilitate those actions. UI brings together concepts from interaction designvisual design, and information architecture.

      They are 19 principles of User Interface Design:
      1. Clarity is job 
      2. Interfaces exist to enable interaction
      3. Conserve attention at all costs
      4. Keep users in control
      5. Direct manipulation is best
      6. One primary action per screen
      7. Keep secondary actions secondary
      8. Provide a natural next step
      9. Appearance follows behavior
      10. Consistency matters
      11. Strong visual hierarchies work best
      12. Smart organization reduces cognitive load
      13. Highlight, don't determine, with color
      14. Progressive disclosure
      15. Help people inline
      16. A crucial moment: the zero state
      17. Great design is invisible
      18. Build on other design disciplines
      19. Interfaces exist to be used
      Software verification and validation it makes sure that the product is designed to deliver all functionality to the customer.







      User interface design and software verification and validation

      User interface design and software verification and validation

      User interface design is the design of user interfaces for machines and software with the focus on maximizing usability and the user experience. focuses on anticipating what users might need to do and ensuring that the interface has elements that are easy to access, understand, and use to facilitate those actions. UI brings together concepts from interaction designvisual design, and information architecture.

      They are 19 principles of User Interface Design:
      1. Clarity is job 
      2. Interfaces exist to enable interaction
      3. Conserve attention at all costs
      4. Keep users in control
      5. Direct manipulation is best
      6. One primary action per screen
      7. Keep secondary actions secondary
      8. Provide a natural next step
      9. Appearance follows behavior
      10. Consistency matters
      11. Strong visual hierarchies work best
      12. Smart organization reduces cognitive load
      13. Highlight, don't determine, with color
      14. Progressive disclosure
      15. Help people inline
      16. A crucial moment: the zero state
      17. Great design is invisible
      18. Build on other design disciplines
      19. Interfaces exist to be used
      Software verification and validation it makes sure that the product is designed to deliver all functionality to the customer.







      TC1019 Course Review

      TC1019 Review

      Decidi hacer este post en español para explayarme más y dar a entender mejor mi punto de vista sobre el curso de Fundamentals of Software Engineering que tome con el profesor Ken Bauer.

      Temas:
      En el curso en total son 20 temas que vimos a lo largo del semestre, mas o menos por que también nos dejaba leer algunos artículos que tenían mucha información muy interesante y sentías como si fuera otro mastery topic. Los temas son muy variados, lo cual es muy importante por que si te enfado uno o no te intereso tanto ese tema puedes investigar otro tema de los mastery's, ya que no tienen un orden particular. En lo personal los temas con los que más di click o me interesaron bastante fueron open source software, XP, software design y software architecture; creo que se nota por que fueron los blogs más enfocados en mi punto de vista y no tanto investigación que encontré.

      Abolish Grading:
      Este semestre Ken implemento abolish grading, que es un modo de evaluarte a ti mismo dependiendo de tu esfuerzo en ese parcial. Me gusto mucho por que si tu quieres obtener cierta calificación ya sabes lo que tienes que hacer para alcanzar esa calificación, no hay sorpresas al final del parcial. Otra ventaja es que los profesores también pueden tener un descanso de tratar con alumnos que siempre se quejan de su calificación y reclaman que ellos merecían más calificación por que cumplieron con todo, y no es el caso con abolish grading por que tu sabes lo que va a venir en el examen, tienes la rubrica que se va a evaluar en ese parcial y no hay excusas a la hora de entregar calificaciones.

      Clase:
      En el salón de clases el profesor es muy flexible, hablamos sobre el tema asignado a ese día y si tienes alguna duda sobre cualquier cosa siempre pues hacer cita con él. 

      Software implementation and Software maintenance



        Software implementation and Software maintenance

        Software implementation can represent a very complex task for big companies. The incorporation of a new tool may take several phases; companies need to consider the costs in money and time for the change to represent gains on their finance. The changes are so complex that some companies operate over legacy software that was released decades ago and offer no support.
        "Implementation is the carrying out, execution, or practice of a plan, a method, or any design, idea, model, specification, standard or policy for doing something. It's the action that must follow any preliminary thinking in order for something to actually happen"(Rouse, 2014).

        Software implementation surrounds all the post-sale processes involved in something operating properly in its environment. It includes analyzing requirements, installation, configuration, customization, running, testing, systems integrations, user training, delivery and making necessary changes. For an implementation process to be successful, many tasks between different departments need to be accomplished in sequence. 



        Software maintenance stands for all the modifications and updates done after the delivery of software product. They are different types of maintenance because they wary based on it's nature. It may be a routine maintenance, a bug discovered by a user and other different natures.

        Types:
        1. Corrective: Modifications and updates done in order to correct or fix problems, discovered by a user or by user error reports.
        2. Adaptive: Applied to keep the software product up-to date and tuned to the ever changing world of technology and business environment.
        3. Perfective: Done in order to keep the software usable over long period of time. It includes new features, new user requirements for refining the software and improve its reliability and performance.
        4. Preventive: Like the name says it's used to prevent future problems of the software.




        Sources & Links: