texto:   A-   A+
eliax

Pregunta a eliax: ¿Qué estudio para ser competitivo en Informática?
eliax id: 6537 josé elías en abr 29, 2009 a las 10:12 PM (22:12 horas)
Debido a mi experiencia en la industria, y muchos de los artículos que publico acá en eliax, por lo general recibo unos cuantos emails semanales de personas jóvenes en ambiente universitario quienes me preguntan básicamente "¿Qué debería yo estudiar para mantenerme competitivo en el mercado de la informática?

La respuesta no es una, pero responderé de tal manera que espero pueda ayudar al menos a unos cuantos.

Lo primero a entender es que "informática" cubre muchísimas cosas, pero voy a asumir que hablamos sobre todo de "programación". Sin embargo, aun en programación hay dos grandes vertientes que puedes seguir (o ambas si así lo prefieres): Software de Aplicaciones, y Software de Sistema.

Por Software de Aplicaciones me refiero a poder crear (por ejemplo) programas para el mundo de los negocios, desde una simple agenda hasta portales de Internet, o desde un sistema de mensajería hasta una aplicación web para dar servicio al cliente.

Por Software de Sistema me refiero mas a programas de bajo nivel, que están mas cerca del hardware, y que incluye desde crear un simple driver para un puerto serial, hasta crear módulos para un sistema operativo (como Linux).

Así que voy a dar recomendaciones para ambos entornos por separado.

Software de Aplicaciones
Aquí creo que ante todas las cosas, se concentren en tecnologías web, y opcionalmente también en tecnologías móviles (aunque pronto será una necesidad ya que todo será móvil). Si lo que les enseñan en la Universidad es todavía como programar en Pascal o C, y no a como desarrollar aplicaciones web, no es que estén perdiendo el tiempo pero ciertamente están jugando en la cancha equivocada.

Si donde estudias no te ofrecen las siguientes tecnologías que nombro a continuación, recomiendo que utilices la web (y en particular a Google) para aprender por tu cuenta. Hoy día no es esencial comprar libros, ya que hay muchísimos recursos gratuitos en Internet para casi cualquier cosa que te puedas imaginar.

Así que para Software de Aplicaciones, recomiendo lo siguiente como mínimo:

1. Lo básico de páginas web estáticas. Es decir, HTML y CSS.

2. Lo básico de páginas web dinámicas con Javascript.

3. Alguna tecnología de generación dinámica de páginas web, como puede ser PHP, JSP, ASP o Coldfusion.

4. Integración de páginas web dinámicas con generación dinámica de páginas web, es decir, el concepto llamado "AJAX", que implica Javascript, HTML, preferiblemente CSS, y lo básico de XML y/o JSON (desde el punto de vista estructural, no tanto en detalle). Aquí también es bueno aprender de herramientas como JQuery y Prototype.

5. Saber Adobe Flash ayuda, pero personalmente trato de mantenerme alejado ya que rompe el esquema de aplicaciones web, aunque tiene sus usos prácticos. Sin embargo hoy día AJAX y HTML 5 están poco a poco reemplazando a Flash en muchas aplicaciones.

6. SQL, así como al menos una base de datos como MySQL o Postgress.

7. No está de mas saber Java, pues puede ser mucha ayuda para resolver ciertos tipos de problemas. Además con Java aprendes técnicas de programación mucho mas sofisticadas que con simple PHP o Javascript.

8. Dominar al menos una herramienta de desarrollo. Para desarrollo web recomiendo Dreamweaver. Para Java utilizo Netbeans pero Eclipse es igual de potente (sino mas, pero también requiere de mas esfuerzo configurarlo).

9. Saber un poco de Photoshop te puede sacar de muchos aprietos.

10. No está demás aprender técnicas de MVC para separar la lógica y el interfáz de usuario de tu aplicación (y de paso el mismo almacenamiento de los datos).

11. Algo útil también es Servicios Web (Web Services), lo que implica saber al menos los conceptos de WSDL y SOAP.

12. Otra cosa que puede venir útil es poder integrar con portales y servicios en la web, como Google Maps, Twitter, RSS, FedEx, Paypal, etc.

13. Es bueno conocer el concepto de un Contenedor de Aplicaciones, como lo hace J2EE o Coldfusion.

Software de Sistema
Crear Software de Sistema por lo general requiere de mayor experiencia por parte del programador, así como ser muy cuidadoso en el diseño, y poder saber técnicas avanzadas de optimización de bajo nivel (a veces hasta el nivel binario, haciendo trucos como un shift a la izquierda o derecha de los dígitos binarios para multiplicar o dividir).

Aquí es muy importante conocer técnicas de código bien estructurado y documentado, así como tener un arsenal de todo tipo de utilidades y trucos para comparar archivos, diagnosticar tu código, medir el rendimiento, etc. A tal fin recomiendo como mínimo lo siguiente:

1. Conocimiento del lenguaje C y C++. Si piensas programar en Mac OS X, también debes mojarte las manos con Objective C. El lenguaje C y sus variantes por lo general serán tus herramientas principales.

2. Java. Aunque no puede hacer todo lo que hace C, sí se acerca mucho, y es bastante útil para crear aplicaciones de redes o de interconexión. En muchos casos a este nivel hay programadores que pasan mas tiempo en Java que en el mismo C.

3. Saber moverte en la linea de comando, sea el DOS/CMD de Windows, o el Shell de Unix/Linux/OS X.

4. A veces ayuda poder hacer Shell Scripts, sea en DOS, sh, Perl, etc.

5. Saber depurar tu código tanto en tiempo real como paso-a-paso.

6. Entender técnicas de optimización de código (profiling), utilizando la regla del 80/20 (concéntrate en optimizar esa pequeña parte del código que te da el 80% del beneficio, pues optimizar el resto es posible que no te incremente mucho el rendimiento).

7. Ayuda bastante conocer varios lenguajes y entornos de programación, como Pascal/Delphi, Visual Basic, PL1, COBOL, etc. No porque los vayas a utilizar, sino porque en este campo es posible que te topes algún día con código que debas entender y que no estará escrito en C. Además, notarás que cuando vayas por el cuarto o quinto lenguaje, que la mayoría se parecen unos con otros, y que los mismos patrones se repiten en casi todos. Por ejemplo, si estoy aprendiendo un lenguaje nuevo, y necesito hacer algo como buscar una palabra dentro de una frase, lo último que trato de hacer es escribir yo mismo el código, sino que trato de adivinar si existe una función que ya haga eso similar a como se hace con otros lenguajes.

8. Entender bastante bien lo que es un API, y como leer documentación sobre ellos, así como proveer tu propio API a otros programadores.

9. Dependiendo de tu campo, es importantísimo aprender sobre al menos Sockets y HTTP para programar aplicaciones de redes, así como entender la diferencia entre TCP y UDP, y cuando utilizar cada protocolo.

10. Haber programado al menos unas cuantas veces al mas bajo nivel posible (cuando menos con Assembly Language en un micro-controlador) es de una utilidad que no se pueden imaginar hasta el día que les haga falta. Por ejemplo, programar en C tiene muchas repercusiones a bajo nivel que se entienden mejor cuando uno sabe Assembly/Machine Language, ya que entienden mejor los conceptos de punteros, registros, etc. En mi caso, por mas alto nivel que sea el lenguaje de programación (como Coldfusion, Javascript o Java), siempre estoy consciente de lo que ocurre "tras bastidores" a bajo nivel, lo que me ayuda a diagnosticar problemas que de otra forma hubiera sido casi imposible o tomado muchísimo tiempo de investigación.

Técnicas Avanzadas
Como dije, esas son las cosas básicas que como mínimo recomiendo aprendan. Sin embargo, cuando entren al mundo laboral, en particular si terminan haciendo trabajos para grandes empresas o multi-nacionales, notarán que les hacen falta mas conocimientos específicos, y algunos de esos que me vienen a la mente ahora son:

1. Cómo integrar sistemas construidos bajo diferentes plataformas. Hay decenas de formas, que van desde integración a nivel de base de datos, hasta screen-scraping, o integración a través de archivos planos (bastante feo) hasta integración por servicios web. En este tema herramientas como Java y XML ayudan mucho en algunos casos.

2. Entender el concepto de un JIT (Just-In-Time Compiler) y entender cómo funciona. Esto es muy importante con temas de Java, .Net y mas recientemente con Javascript, y de paso les permitirá escribir código mucho mas eficiente.

3. Entender temas de Máquinas Virtuales (como la JVM - Java Virtual Machine), pues muchas veces no podrás corregir errores en tus aplicaciones si no tienes una intuición sobre lo ocurre tras bastidores (como por ejemplo, con el uso de la memoria). Así mismo, y relacionado a esto, entender los temas de Garbage Collection (Recolectores de Basura) en relación a las VM.

4. Es importante saber algunos temas básicos de seguridad, como Certificados Digitales, lo que es un Hash, cifrado simétrico vs asimétrico, SSL, etc.

5. Entender el concepto de un Connection Pool, que es un tema crítico para escalar aplicaciones a grandes cantidades de usuarios, en particular cuando se aplica a base de datos, aunque también aplica a objetos en memoria, y es muy utilizado en conexiones de redes.

6. Entender el concepto de Connection Polling (no confundir con Connection Pool) que en muchos casos nos ayuda a crear protocolos bi-direccionales cuando uno de dos extremos no puede iniciar una conexión al otro lado. Esta es la manera principal como funciona GMail y programas de chateo por páginas web.

7. Entender el concepto de un Message Queue, así como cuándo utilizar un Buffer en su mas amplia definición.

8. Entender conceptos de replicación de datos, servidores redundantes, etc.

9. Entender conceptos como DNS, DNS dinámico, etc.

10. Tu arma mas poderosa será la de copy-paste. No reinventes la rueda. Si alguien ya resolvió el mismo problema que tratas de resolver y ofrece su código o algún componente, utilízalo. Aquí Google y la documentación de tu entorno de desarrollo son tus mejores amigos. Para que tengan idea, yo diría que entre el 40 y el 80% del código que yo escribo hoy día (dependiendo del proyecto) lo copio de proyectos anteriores que he realizado, y el resto es código muy específico al proyecto que estoy trabajando.

11. Saber Linux te podría abrir muchas puertas y resolverte muchos problemas, sí como permitirte aprender de conceptos de bajo nivel en sistemas operativos.

12. Recuerden que algunos de estos temas ya los he tratado en eliax, por lo que pueden hacer búsquedas dentro del blog a ver si encuentran un punto de partida para aprender algunos de estos temas. Además es posible que quieran visitar la sección de Software en eliax.

-
Pues eso es lo que se me ocurre en estos momentos. Si se me ocurre otra cosa (o alguien pone algo interesante en los comentarios) quizás actualice la lista para agregar unas cuantas cosas mas. Por ahora, espero que esto sea de utilidad para algunos de ustedes...

Y como siempre, pueden acceder a mas artículos similares en la sección de "Pregunta a eliax", y enviar sus preguntas por este medio.

autor: josé elías

Comentarios

  • Que buen punto has tocado hoy y respondes a una de las grandes dudas que tenemos, a la hora de buscar en que especializarnos.

    Me han dado una beca, de capacitación actualización y practicamente estamos viendo de todo, iniciamos con sql, ahorita estamos con html, xml, css, validaciones, y continuaremos con uml, java script, java, hacer proyectos y hacer testing a estos.

    La mayor parte de los puntos que mencionas, los hemos o los vamos a ver, pero gracias por los tips, ya que podre complementar el curso.

    Saludos desde México.

  • Creo que te has olvidado , hablar del uso de Frameworks como jquery y prototype en javascript que te permiten hacer cosas muy complejas en muy pocas líneas de código, por ejemplo acceder a nodos DOM atreves de selectores css

    • José,

      Buena observación, y justamente hablaste de las 2 mas populares (soy admirador de la simpleza de JQuery), aunque ambos se pueden combinar.

      Nota que esto es lo mismo que AJAX, por lo que he agregado tu comentario al punto 4 de Software de Aplicaciones.

  • Está muy bueno el artículo pero no entiendo por qué dejas a .Net por fuera, es decir, no nombras Visual Studio ni Sql Server, además noto que si nombras aplicaciones cerradas como la suite de Adobe por qué no Microsoft?.. en verdad no entiendo el motivo..

    Saludos.

    • No entiendes el motivo?Jaja que Ingenuo eres.

      Eliax esta del lado oscuro de la fuerza , nunca hablará de C#, vb.net o cualquier otro lenguaje que venga del .net Framework, y mucho menos decir en su bloc, que es quasi indispensable en el mercado laboral de hoy en día, saber algo de .net, saber usar visual studio (que es el mejor y más completo entorno de desareollo en mi opinoion), saber Asp.net, o un poco siquiera de Sql Server (que es usado incluso hasta más que mysql, en el mundo empresarial, sino me equívoco)

      • Parece que no notaron a ASP en la lista...

  • Don Elias, continuo con los comentarios anterios relacionados al tema de Microsoft, pero lo redacto de otra manera. Que te parecen las herramientas de desarrollo nuevas como el paquete Microsoft Expression y el mismo Silverlight?

    • Alvaro,

      Si estás dispuesto a dejar el sarcasmo y leer objetivamente lo que escribí sobre Silverlight, te recomiendo leas esto que escribí anteriormente al respecto:

      http://eliax.com/index.cfm?post_id=2778

      • Jejeje no entiendo a que te refieres con el sarcasmo. Simplemente pido tu opinión. Como lo mencionas soy uno de esos pro-microsoft, ya que los tiempos de desarrollo a veces se hacen cortos. Igualmente estoy de acuerdo con sus sugerencias, siempre he sido admirador de Java y MySQL. Anteriomente habia leido ese link que me enviaste, pero igual queria saber su opinion como herramienta de desarrollo.

        • hola eliax simpre leo tus articulos
          y no entiendo por que las personas pro-microsoft crean que por que estan pagando por algo(si es que no lo descargan ilegalmente via torrent o algo similar) tiene que ser lo mejor cuando herramientas libres como java, mysql tienen grandes ventajas para nosotros los estudiantes que a veces nos cuesta para tener dinero para el almuerzo tengamos que pagar por algo que trae muchisimas herramientas pero que solo son utiles muy pocas...

  • Una nota sobre los comentarios sobre Microsoft: En un par de comentarios anteriores se nota el sentimiento pro-Microsoft de algunos usuarios, cosa que no veo nada mal, cada quien decide utilizar las herramientas que desee.

    Sin embargo, noten esto antes de caer ante los perjuicios de las personas que hacen estos comentarios:

    1. No estoy en contra de Microsoft. Lamentablemente cuando no tengo razón *racional* para recomendar los productos de una empresa hay muchos que *pasionalmente* opinan que estoy en contra de esa empresa. Yo mismo utilizo varios productos de Microsoft pero creo que hay mejores alternativas para muchos casos.

    2. Dreamweaver es simplemente mejor y mas reconocedora de estándares que cualquier herramienta de Microsoft para desarrollo web, y hoy día el desarrollo web es la tendencia global, y no aplicaciones de escritorio.

    3. Silverlight de Microsoft no tiene oportunidad ante Adobe Flash y HTML 5.

    4. ¿Por qué aprender C# y .Net cuando (a) con Java haces practicamente lo mismo y de una manera totalmente abierta y multi-plataforma, y (b) si aprendes Java/JSP/J2EE hoy puedes aprender C#/.Net muy fácilmente en el futuro ya que ambas tecnologías son similares?

    5. Es cierto que Microsoft ofrece quizás las mejores herramientas de desarrollo con Visual Studio, pero eso no es excusa para programar en herramientas totalmente cerradas a Windows. Eso es como decir que tienes el mejor martillo del mundo, pero que solo lo puedes utilizar con ciertas marcas de clavos.

    Además, herramientas como NetBeans y Eclipse han mejorado muchísimo y hoy día la ventaja de Visual Studio (si es que la tiene) es mínima.

    6. ¿Por qué hacer que un estudiante (o empresa) gaste dinero en licencias de MS SQL Server cuando con MySQL puede hacer exactamente lo mismo, de una manera multi-plataforma, y gratuita? (y eso, que estoy obviando que el estudiante tenga acceso al código fuente de MySQL para aprender como funciona).

    • Si tienen dos dedos de frente no creo que la allá quedado alguna duda, yo no necesitaba una explicación, porque era obvio.

    • Voy! jeje:

      1.- Dreamweaver es lo máximo para el DISEÑO web.
      2.- Obviamente Siverlight es super malo.
      3.- Con java se hace "practicamente" lo mismo.
      4.- Con respecto a Visual Studio, va algo así: Hay dos constructores, ambos muy buenos, excelentes. Se disponen a contruir dos puentes, El primero lo hace utilizando herramientas de mano como martillos, pinzas, palas etc., el segundo usa lo mismo pero añade Tractores, Camiones, Gruas, etc. Pregunto: ¿Por cuál puente pasarías tú?

      xD Saludos

    • 100% de acuerdo con el Post y tu comentario Eliax. En lo personal solo se lo básico de:

      -Adobe Dreamweaver (CS2)
      -Adobe Fireworks (CS2)
      -Adobe Photoshop (CS2)
      -HTML y Javascript

      *_Por otro lado, un amigo mío me dijo que "FLEX" (o algo asi) es el futuro. No se si nos puedas explicar algo más sobre esto._*

      • Flex me gusta, pero no lo recomendaría.

        Si alguien quiere hacer una página super interactiva (como por ejemplo, para lanzar una nueva película, o un nuevo modelo de auto), bien, pero para aplicaciones web generalizadas recomiendo mucho mas concentrarse en HTML y AJAX.

        Las razones son varias, pero algunas me vienen a la mente:

        1. Flex es en realidad un framework arriba de Flash.

        2. Las aplicaciones en Flex por lo general tardan mucho en cargar antes de uno poder utilizarlas, versus páginas web que cargan de inmediato.

        3. Sufre al igual que Flash de que rompe el paradigma web de páginas enlazadas unas con otras, lo que hace difícil o imposible poder acceder ciertas partes directamente desde otros enlaces web.

        4. HTML/AJAX están avanzando tan rápidamente que están casi haciendo lo mismo que Flex, y de manera estandarizada, y utilizando muchos menos recursos.

        Sin embargo, hay un punto fuerte a favor de Flex, y es que si sabes lo que haces y lo integras con las tecnologías apropiadas (como Adobe Coldfusion) puedes ser bastante productivo y generar interfaces bastante llamativos y dinámicos, cosa que aun hay que pulir mucho en el mundo de HTML y AJAX.

        Otra cosa a considerar sin embargo es que el componente Canvas de HTML que la última generación de navegadores web está soportando, así como el estándar SVG, tienen el potencial de asimilar todo lo que hace Flash y Flex a largo plazo.

        En resumen, Flex es una tecnología bastante dinámica y útil, pero por ahora recomiendo precaución porque podría quedar obsoleta en muy pocos años.

    • Esto ya fue hace un tiempo, pero quiero poner mi punto de vista en cada punto:

      1.) Es cierto, hay muchas cosas donde hay alternativas equivalentes a las de Microsoft y otras que no. Pero lo mejor del mundo "Cerrado" es que casi siempre sus productos permiten "comunicarsen" de una manera que productos libres e independientes no lo hacen, es como un ecosistema. (Si yo se que a veces ni las cosas dentro del mismo MS funcionan como se quisieran, pero la integración de tecnologías como SQL Server, Sharepoint, Winndows Server, .Net, Exchange, Active Directory, etc, se integra de una manera increíble).

      2.) Si es cierto, aunque ahora los IDE's han mejorado mucho esta parte, y Microsoft con su suite Expression hace casi lo mismo. Pero si, es mejor el Dreamweaver.

      3.) Silverlight es una herramienta BASTANTE potente, te permite una integración y reutilización con cosas ya hechas en .Net, para aplicaciones de negocios es super bien, no creo que compita en otros ámbitos con Flash y Html 5. Pero de que tiene su fuerte, lo tiene, con cosas que por ejemplo con Flash soñaría, ya que su lenguaje de programación para mi es bastante feo y poco estructurado. Silverlight se integra con el poder de WCF.

    • Aquí la otra parte:

      4.) Si es bastante cierto para aplicaciones de servidor, para aplicaciones desktop y mobil es pésimo java. No hay nada en java equivalente si quiera a Win Forms, y menos a silverlight y WPF. Además por más que digan que ha mejorado java sigue siendo lento y feo. Aunque claro, lo malo es que .Net solo funciona bien en Windows.

      5.) Si es verdad, en muchas cosas la interfaz del Visual Studio te ayuda a hacer las cosas super rápido, es muy intuitivo, pero pienso que todo es costumbre. Como Visual Designer no hay quien le gane a VS. Pero bueno es como subjetivo este tema. Aclaro hay VS Express que te permite hacer casi todo y gratis.

      6.) Mil veces prefiero SQL Express (es gratis) que My SQL, eso si tiene sus límites, pero para el caso de Pymes es una buena alternativa el Express. Además que las herramientas de desarrollo para esta son Exageradamente mejores, mas poderosas, más fáciles, mas comprensibles, etc.

  • Excelente Post Jose, aunque me parece que te enfocas mucho en las tecnologias que se deben aprender actualmente, en cuanto a que estudio formal, es recomendable una carrera de Ingenieria, bien sea en sistemas o en computación, eso es lo que realmente te abre la mente, luego en el camino con la experiencia laboral seguro se aprenderán decenes de herramientas, dependiendo de las funciones que desempeñes.

    Saludos.

    P.D. mi primera experiencia de programación en la universidad fue en scheme, un lenguaje de programación funcional que actualmente es casi inexistente, pero se aprende full usandolo.

    P.D2. también deberian conocer algo de mejores practicas como ITIL y de metodologia como SCRUM y RUP

  • Hago mis aportes a cada uno de los puntos ;

    *Software de Aplicaciones*:

    1. Aprender HTML y CSS implica ademas tener en cuenta el comportamiento en todos los navegadores inclusive los moviles. Tener pendiente que ya el uso de tablas en disenio no es recomendable y que XHTML debe ser utilizado para mejor renderizado en los browsers. Tambien debe utilzar el xhtml de forma semantica y todo el estilo debe estar en el CSS.

    2. Javascript por si solo en estos tiempos nos llevaria a reinventar la rueda como menciona Elias, es bueno aprender a utilizar frameworks como JQuery (como ya mencionaron ) y utlizar librerias de componentes ya existentes, como Extj.

    3. Como menciono en el punto anterior, si aprendes a utilizar una tecnologia web dinamica como PHP,ASP.NET , JSP etc, lo bueno es que aprendas a utilizar algun framework que ayudan a mejorar el tiempo de desarrollo y aportan en arquitectura, utilidades, seguridad. Existen dos tipos mayosres: los MVC y los Component-based. ASP .Net es de por si un Component-based y Struts para Java es un framework MVC.

    4. Nada que agregar.

    5. Aqui solo puedo decir que si es complejo utilizar javascript , puede utilizarse Flash o Java (tambien JavaFX) . Un ejemplo es si quieres hacer un Juego o una aplicacion que contiene muchos graficos. Aun asi Javascript esta avanzando mucho en esto. Ya olvidense de seguir haciendo galerias con Flash, las imagenes no serian encontradas por buscadores , que si utilizas JQuery para transformar una lista de html de imagenes en un slideshow.

    6. SQL es muy importante y cada manejador tiene su propia variante. Oracle con PL/SQL, MS Sql Server con Transact-sql, etc. Tenga en cuenta que algunos frameworks ayudan mucho , a costo de performance, a estar menos atado a los queries, a esto se llama persistencia y su adaptacion al mundo de objetos es ORM (Object Relational Mapping), JPA, Hibernate, Propel, Doctrine son algunos ejemplos. Ustede puede implementar el suyo propio leyendo sobre Active Record, Data Mapping , DAO y otros "Patrones de Disenio" para data.

    7. Aqui debo decir que , es bueno aprender tanto un lenguaje de programacion de tipos estaticos(Java, C#,Visual Basic), y tambien de tipos dinamicos (PHP, Ruby, Python, Groovy). Java y PHP son dominantes en su respectiva clasificacion.

    8. Nada que agregar.

    9. Gimp tambien es suficiente para edicion de imagenes en el disenio web. Photoshop es obviamente mas poderoso y mas personas lo saben utilizar, pero Gimp es una alternativa bastante buena.

    10. Tengo que decir que no solo MVC es suficiente sino, que es bueno estudiar todo lo relacionado a Patrones de Disenio y Patrones de Arquitectura, esto le ayudara a crear software calidad. El 80% del exito de la aplicacion esta en el luego de haberla creado, en el mantenimiento, que dependera de que tan bueno es el disenio y si utiliza patrones(sin abusar).

    11. Se debe tene en cuenta en los Web Services la seguridad de estos y tambien la nueva tendencia de los RESTFul Web Services, que son mas sencillos de utilizar y ofrece mas personalizacion en el formato de respuesta.

    12. Sin duda, que la tendencia en la web es la integracion de tecnologias. Tenga muy pendiente principalmente, los portales sociales. Aprende a utilizar las API de facebook, twitter, google opensocial, etc.

    13. Los aplicacion server son excelentes para el desarrollo de aplicaciones "Enterprise". Entienda bien la diferencia entre un servidor web y un servidor de aplicaciones. El contenedor de aplicaciones ofrece anadiduras que permiten mejor ayuda a aplicaciones realmente distribuidas.

    Agrego una seccion dentro de Software de Aplicaciones, que es la Ingenieria de Software:

    1. Lea algo sobre Requirements Engineering: analisis de requirimientos , licitacion , escritura de especificaciones. Esto es vital para hacer una entrega de software que cumpla con lo que el cliente/usuario desea.

    2. Aprenda a utilizar herramientas de control de versiones como Subversion y Git. Si trabaja en equipo esto es vital y si no tambien ayuda a crear sus rollbacks.

    3. Estudiar Project Management es esencial y aprenda a utilizar cuaquiera de las herramientas web que existen.

    4. Un aplicacion de Bug Tracking como Trac, es excelente para mantenimiento del software.

    5. Aprenda metodologias de desarrollo como Test-Driven Development, Domain Driven Development , Agile, etc. Esto ayudara a mejorar la calidad del producto y a escribir codigo de forma mas metodica

    5. Haga Test Plan y utilice frameworks de "objetos falsos" que permiten desarrollar componentes que dependan de otros que aun no han sido desarrollados por algun companero suyo del equipo de desarrollo.

    En *aplicaciones de sistemas* lo unico que debo agregar es que , la persona debe tener entendimiento del funcionamiento del hardware, si tiene una API aprenderla correctamente y ser muy paciente. Aqui los bugs y el debugging es mas dificil y hasta costoso.



    *En lo personal*:

    - Hagale a entender a su novia o esposa que usted es programador y requiere concentracion y horas extras y que no es que usted este frio o que ya no la quiere. :-)

    - Aprenda a colar cafe, comer manzanas y conocer las mejores marcas de bebidas energizantes(sin abusar de ellas). Coma muchos alimentos energizantes.

    - Salga a caminar y hacer ejecicios. Debe pararse de su asiento a tomar un break y expliquele a sus superiores, sino entienden que es un equipo de desarrollo, que esto es parte de la productividad.

    - Compre una silla ortopedica o pidala a su superior.

    - Lea blogs y noticias de tecnologias. Debe mantenerse actualizado de todo, sino otra persona aprende una nueva tecnologia que hace lo mismo que usted en menos tiempo y le ganara la batalla


    Ya..si se me ocurre algo adicional pondre otro comentarion :-)

    • Excelentes sugerencias!!! :)

      Aunque te confieso, las últimas 5 (como dices "en lo personal") son las que mas me han gustado y las mas verdaderas de todas :)

      • muy buen comentario Edwin Santos yo soy programador y me he identificado mucho con lo que has dicho.

  • Eliax, aca te dejo un link a un articulo que habla sobre las 10 habilidades que debe de tener un programador en los proximos 5 años.

    http://www.dosideas.com/actualidad/503-las-10-habilidades-mas-importantes-para-los-programadores-del-futuro.html

    Que opinas?

  • (*excelentes tips*), muxas graxias, considero que deberias ser director de unas de estas carreras de tecnologias en una de nuestras universidades, aunque se que su compañia ReInventa a colaborado con muchos buenos profesores. actualmente estoy cursando Ing. en sistemas de computacion y no todos lo profesores se dan a entender tand facil como eliax lo explica,,, ahora mismo empesare a estudiar todo esto.:-)

  • A la pregunta inicial:
    No solo está la parte de la programación, y no tengo nada en contra de ello, pues también soy programador, pero hay muchas áreas que también ocupan un papel importante en el mundo de la informática que no pueden quedar de lado.

    1. Podemos realizar labores de diseño de software que el resultado es la elaboración del mismo para un Sistema Operativo (SO) deseado con un lenguaje de programación determindado utilizando alguna Base de Datos (DB). En el que también está la reingeniería de un proyecto, es decir tomar lo bueno de un diseño o programa y mejorarlo aun mas.

    2. Buscar una solución sistematizada a una labor que por algún motivo no se a realizado, lo que llamamos Software Dedicado, y para esto realizamos el primer punto.

    3. Administrar servidores con diferentes SO´s, con todo lo que ello involucra, conocer varios SO´s no solo existe Windows y Linux, aunque son los mas conocidos, hacer la planeación de sus backup´s creación de usuarios y cualquier cantidad de operaciones mas.

    4. Está la parte de auditoría informática, para algunos puede ser un tema algo aburrido, pero es una interesante labor y esta requiere de bastantes conocimientos de muchas de las ramas de nuestra carrera.

    5. Muy ligado al punto anterior está la Informática forense un apasionante tema en el que se encuentran muy pocas personas laborando si comparamos con los demás puntos.

    6. Está también la parte técnica de Ensamble, manteninimiento, diseño y creación de nuevo hardware, aunque este se incline mas hacia la electrónica.

    Bueno son muchas las opciones que se presentan en el mundo informático, que pueden ser en algunas oportunidades mas lucrativas que la programación misma y no dejan de tocar siempre el mismo tema. Lamento haber numerado pocas por cuestion de tiempo, pero se que entre varias personas pueden engrosar esta lista, que involucra las actividades que se presentan en el día a día de la informática.

  • Que hay con Ruby On Rails?

  • Buenas buenas eliax siempre leo tu Blog pero esta es mi primera intervencion. Con respecto al tema que estudio para se competitivo en el area de informatica me parece un buen analisis el que has realizado pero estas enfocado netamente a la programacion... Que paso con el area de Redes e Infraestructura??? (Al cual pertenezco :D)

  • Eliax... ME GUSTO TU COMENTARIO !

    Cegera technologica !!! es lo que hay.... otra cosita te falto
    que todo lo que dijiste se puede aprender desde la comodidad de tu casa... chilin. solamente descargando esas soluciones free!!!!

  • Hola a todos, muy buen texto, me hace sentir que voy bien ^^

    Una pregunta, quien sabe como utilizar tablas para recopilar informacion en java?

  • La informatica sin duda no es solo programacion! que me dices de la parte de infraestructura! por ejemplo trabajo para una transnacional aca en Costa Rica y todos somos informaticos y decidimos trabajar con infraestructura con servidores fisicos, virtuales, microsoft! Este caso no hay nada que programar! sino simplemente soportar estos y administrarlos y certificarse en muchos casos!!! La informatica es bastamente grande y no solo es programacion!!! Aun o termino de estudiar pero se que no quiero dedicar mi vida programando! asi que deberias extender tu articulo y no encasillar esta rama solo a la programacion!

    • En el artículo dice:

      "Lo primero a entender es que 'informática' cubre muchísimas cosas, pero voy a asumir que hablamos sobre todo de 'programación'".

      En otras palabras, en este artículo el enfoque es programación, aunque existen muchas otras áreas.

      • Eliax seria tambien muy interesante que postees las otras ramas que no mencionaste.

        te hago el pedido porque yo en medio año termino la ecuela y me quiero largar con alguna carrera que se dedique a la computacion, el campo de la programacion es muy poderoso pero estaria bueno que no digas si hay mas aparte de eso para darme una idea de lo que hay para poder elegir bien.
        atte Santiago M.

Añadir Comentario

tu nombre
tu email
(opcional)
web personal
(opcional)
en respuesta a...
comentario de caracteres máximo
8 + 7 = requerido (control anti-SPAM)
 

"Felicitaciones Eliax, es este tu logro legendario para tus hijos y para quienes te leemos todos los días, no solo aprendiendo de como evoluciona el universo, nuestro mundo, las sociedades.. Si no también evolucionando cada uno en su ser con tus concejos y buenos artículos....
100.000 Gracias Eliax!
"

por "Juan Jaramillo" en feb 10, 2014


en camino a la singularidad...

©2005-2014 josé c. elías
todos los derechos reservados
como compartir los artículos de eliax