Terminé mi carrera…o mi caminata

by Gastón Ramos

La semana pasada aprobé la última materia de la carrera Analista en Informática Aplicada, después de muuuucho tiempo al fin me recibí, todavía recuerdo cuando recién comenzaba a estudiar, tenía muchas energías y ganas de aprender más y más acerca de todo lo que tenga que ver con computadoras y debo reconocer que aprendí varias cosas en esa casa estudios pero también tengo que decir que las cosas que considero más importantes las aprendí afuera. En mi caso particular hace bastante tiempo que me vengo dedicando al desarrollo de software más que nada al desarrollo web, he trabajado en varios lugares/empresas y también hice algunos proyectos personales que publiqué con licencia GPL. En la facultad tuve materias como: Fundamentos de Programación, Programación I, Programación II, Ingeniería de Software, Bases de datos y Optativa y Proyecto final, los lenguajes que conocí en esas materias fueron: Pascal, Delphi, Java, C++ y Visual Basic, sin embargo los lenguajes en con los cuales yo he venido trabajando son: PHP, Perl, Ruby y algo de Shell Scripting… es cierto que en este último tiempo en mi trabajo me están obligando a usar java (uno de los motivos que hace que este lugar se torne bastante aburrido para mí). Debo decir que la mayoría de estas materias (de programación) estaban centradas en enseñar la sintaxis del lenguaje que se daba o en cuales botones había que hacer “click” para compilar con netbeans o como generar un reporte con el asistente de Visual Basic xx, otro detalle importante eran los exámenes, a excepción de proyecto final todos los exámenes se hacían en papel y para aprobar bastaba con que el programa “funcione” sin importar la forma de resolverlo.
Acá les dejo el último exámen que rendí, el de Optativa y proyecto final:
Este es el enunciado:
Examen proyectofina 1/2
Exámen proyecto fina 2/2

El título dice “Recuperatorio 2do parcial” se ve que fué reutilizado :), bueno acá les dejo mi solución:

class Plancuenta  :Plc_id

  def self.calcular_nro_siguiente cuenta
    Plancuenta.find(:all).select{|p| p.Plc_IdPadre == cuenta}.
      sort{|x,y| x.Plc_NroAux  y.Plc_NroAux}.last.Plc_NroAux + 1
  end

  def self.agrega_plan plc_idpadre, plc_desc
    plc_nroaux = self.calcular_nro_siguiente(plc_idpadre)
    @plan_nuevo = Plancuenta.new( :Plc_IdPadre =>  plc_idpadre,
                                   :Plc_NroAux => plc_nroaux,
                                   :Plc_Desc => plc_desc)
    @plan_nuevo.save
  end

  def self.pone_puntos_intermedios nro
    str = ''
    nro.to_s.each_byte{|b| str += b.chr + "."}
    str
  end

  def self.cuentas_imputables
    ci = Plancuenta.find_by_sql("select * from plancuenta where id NOT IN
                      (select Plc_IdPadre from plancuenta)")
  end

  def before_save
    self.Plc_id = (self.Plc_IdPadre.to_s + self.Plc_NroAux.to_s).to_i
    self.Plc_Cod =  (Plancuenta.pone_puntos_intermedios(self.Plc_id) +
                               self.Plc_NroAux.to_s)
  end

end
class Asientos  :Plc_Id

  def self.hacer_caja
    str = ''
    Plancuenta.cuentas_imputables.each{|c|
      str += "Cuenta: #{c.Plc_id} Saldo: #{Asientos.saldo(c.Plc_id)}\n"
    }
    puts str
  end

  def self.saldo cuenta
     Asientos.find_all_by_Plc_Id(cuenta).collect{|a| a.Asi_Debe}.sum - \
      Asientos.find_all_by_Plc_Id(cuenta).collect{|a| a.Asi_Haber}.sum
  end

end

Esos son los dos modelos que hice para la solución que me llevó 2hs, el código se podría mejorar bastante pero me quedé bastante conforme, recuerden que estaba bajo la presión de rendir un exámen y no tenía mucho tiempo, además el prosefor me entregó la estructura de la base de datos en un archivo .mdb (de MS Access) y como yo uso Linux me la tuve que rebuscar para leer ese archivo y meterlo dentro de una db en Mysql.
Bueno la nota que me saqué fué 9 (sobresaliente).
Que experiencia tuvieron uds. en sus facultades? espero comentarios….