¿Quién me mandará a mi meterme en estas cosas?!?!

Bueno en el CodeCamp no solo fue charlas y las típicas PPTs con sus demos, muy interesantes por cierto [;)]. Sino algo que yo creo que todos los que asistimos coincidimos, que es que fue una buena oportunidad para conocernos y ponernos cara a todos los bloggers y gente con la que sueles hablar habitualmente por el MSN o por email. Aun así hay gente que asisitió con la que no tuve oportunidad de coincidir, como pudo ser Carlos Segura.


El caso esque entre está gente que conoces, conocí a Ricardo Varela, y puedo decir que me ha puesto «deberes». Estos son:



  • Conocer C como la palma de mi mano. Ahora mi conocimiento de C es del 0%.
  • Leer «Code Complete SE» y «Algorithms & Data Structures/ C++». Sí, toca leer libros en inglés.
  • Conocer el idioma universal, el inglés. Pues mucho no hay que comentar, me defiendo a nivel escrito pero nivel hablado no.

De momento mi lista de lenguajes conocidos es:



  • Visual Basic
  • C#
  • JavaScript
  • HTML
  • XML

Y bueno entonces lo que haré a partir de ahora será primero aprender C, luego C++ y por último C++ junto al CLR, que conste que no será lo último que aprenda (o eso espero).


Es ahora el momento de cambiar de forma de ver al lenguaje, ya que siempre he estado con lenguajes orientados a objetos y lenguajes declarativos, y ahora toca un lenguaje estructurado. En esta etapa de mi aprendizaje echaré mucho de menos las librerias de .NET [:'(]. Es que… ¡¿Quien me mandará a mi meterme en estas cosas?!?!?!


Bueno entonces apartir de ahora que no os sorprenda si publico alguna cosa sobre C o C++.

18 thoughts on “¿Quién me mandará a mi meterme en estas cosas?!?!

  1. jo, me siento un poco culpable porque la gente dice que «mando deberes» pero… en realidad es por tu bien! }:D

    Y C, incluso para gente que NUNCA vaya a programar en C, hay que saberselo, sobre todo porque:

    a) Es la lingua franca del programador. Cuando aprendas cualquier otra cosa seguro que te dicen «esto es como X en C»
    b) La comprension que te da sobre como funcionan los tipos, la memoria, etc… no te la da un lenguaje manejado ni uno de scripting! Y de entre los que te dan eso, es el mas simple!

    Y adicionalmente, porque tu horizonte mental se amplia si eres capaz de entender lo que hace esto:

    char *dp = &dest[0], *sp = &src[0];
    while(*sp != ‘’)
    *dp++ = *sp++;
    *dp = ‘’;

    un abrazo!

    P.S. como te dije, prometo que proximamente pondre un post sobre mas recomendaciones para aprender a tirar lineas mejor en http://phobeo.com

  2. Estoy de acuerdo con Phobeo, utilizar C (o similares) en algún momento de tu aprendizaje te va a ayudar a ser mejor programador y te ayudará a entender el curro que hay por detrás en un entorno manejado.
    Ádemás siempre es bonito ver un «Segmentation Fault: Coredump» y pasarte horas y horas buscando su origen, a veces echo de menos las practicas que haciamos en Sistemas Operativos 🙂

  3. Nunca jamas he aprendido ni usado C (bueno, miento, algo de C use hace 15 años en una practica de una asignatura). Ni veo la necesidad de aprenderlo a menos que lo necesites para algo.

    ¿Aprender C solo porque es C y hay que saberlo? Saber C no te hace ser mejor programador, ni te ayuda a comprender mejor como funcionan los tipos o la memoria, ni te ayuda a «tirar» mejores lineas. O al menos no te ayuda mas que cualquier otro lenguaje tipado y que permita acceder a la memoria directamente, el uso de punteros, etc (como por ejemplo Object Pascal).

    En definitiva: aprende C por que lo necesites o por gusto personal, pero no porque te digan que vas a ser mejor programador o porque sea la lengua franca (cosa que tampoco comparto).

    Saludos!

  4. En cualquier sistema programable, en cualquier dispositivo que corra un sistema operativo, tienes un compilador de C. De hecho suele ser lo primero que se desarrolla junto al sistema operativo.

    Todos los lenguajes, corren sobre unas librerias o incluso sobre una máquina virtal que en gran parte, sino totalmente están programados en C.

    Si necesitas comunicarte con un dispositivo hardware (estilo tarjetas de captura, sensores etc…) conectado a tu PC muy problablemente el único medio sea llamar a una biblioteca escrita en C, que expone un API para C (aunque puedas usar Interop u otro mecanismo para cumunicarte con ella, la labor será imposible sin conocer C).

    Cualquier algoritmo mediamente complejo que quieras implementar en otro lenguaje, probablemente, lo encuentres documentado en C.

    Aunque no sea siempre un factor relevante, hay veces que el rendimiento es vital, y hay tasas de rendimento que solo se alcanzan en C. C te permite exprimir el hardware a fondo. Y hay muchas tareas de computación (cualquier análisis intesivo de datos) que lo exigen.

    Si quieres hacer que una libreria sea utilizable en cualquier sistema, solo puedes escribirla en C. O al menos exponer una interface tipo C. Casí cualquier lenguaje es capaz de llamar a una librería dínamica que expone funciones C.

    Hay algún motivo más pero tampoco voy a aburrir…

    Definitivamente saber C te hace mejor programador.

  5. Bueno… lo mejor es conocer cuantos más lenguajes mejor 🙂 Aprovechando que Ricardo me sugerio esto lo haré. Además de que llevaba tiempo queriendo hacer algo no administrado.

    Saludos.

    Pd: Ricardo, lo de deberes lo decía de broma 🙂

  6. jajajaa!!

    Y después de aprender C o C++, puedes ponerte a aprender Assembler (ensamblador). 😛

    Estoy de acuerdo con Pirri y con Jorge, yo vengo de la vieja escuela de Pascal y conozco algo de C y C++, y no he necesitado usar ninguno de esos lenguajes hasta ahora.

    Tal vez necesito ponerme a hacer algo más complicado!!

  7. hola crases!

    A ver, por dar parte de razon a Pirri, yo no he dicho que C te haga mejor programador (no lo he dicho pero lo pienso, eso si!) Lo que si he dicho es que te da una vision de la programacion que es dificil de adquirir de otro modo.

    Si te fijas ademas anyadi que entre los que te dan esa «vision», es posiblemente el mas simple. Por supuesto que puedes aprender lo mismo con Fortran o Pascal (o cualquier procedural con tipos y acceso a bajo nivel)… pero en mi opinion ni Fortran ni Pascal tienen tanta difusion como C, como remarca Rodrigo. Al margen del tema de las versiones, que tb creo que es un problema (Pascal, Object Pascal, Borland Pascal, Mac Pascal, GNU Pascal, … donde se ponga un estandar ANSI! };D)

    El caso es que por maximizar esfuerzos, y basandome en la experiencia que tengo hasta el momento (es decir, haber oido mas explicaciones que dicen «esto es como X en C» que «esto es como X en Pascal») , yo le recomende a Eugenio que tirara por C

    Aparte claro que cuando quiera ir a currar a Google o Microsoft, le dara bastantes puntos! };D

    De hecho, aprovecho para poner una pregunta… como se hace en Fortran o Pascal el tema este de las preguntas magicas como «como podemos intercambiar el valor de dos enteros sin usar una variable intermedia»?

  8. Particularmente si recomendaría aprender a programar con C++, auque también lo haría con C# revisando.

    En si, y a mi parecer, cuando estas aprendiendo a programar usando C++, te da una abstracción barbará.

    Las cosas enredadas que se pueden hacer con punteros, son alucinantes. Entender el manejo de cadenas y arreglos es otro tema también.

    Recomendaría hasta cierto punto, por ejemplo POO, aprender C++, y despues aprender C#.

    Saludos,

  9. Yo personalmente creo que es un error el aprender POO sin haber aprendido antes algún lenguaje que permita la manipulación directa de la memoria (como C o Pascal).

    ¿Por qué? Por una razón muy sencilla. Cuando tienes que trabajar con punteros, aprendes lo que es una referencia. Y cuando trabajas con POO, lo que haces es usar punteros enmascarados (¿qué es una referencia a un objeto más que un puntero?), y mucha gente _no lo entiende_, y no sabe utilizar objetos, porque no entiende tampoco los punteros.

    También hay gente que el hecho de dar algorítmica en la carrera no es necesario, ya que nunca te vas a plantear el cálculo del orden de un algoritmo (total, con los equipos que hay hoy en día qué mas da O(log n) que O(n^2) < - Sarcasmo, ok?) o que dar álgebra tampoco es necesario, ni cálculo... Muy interesante un artículo de Joel Spolsky sobre este tema, llamado The Guerrilla Guide to Interviewing (version 3.0). Puede parecer un poco extremista, pero refleja bastante bien mi opinión. http://www.joelonsoftware.com/articles/GuerrillaInterviewing3.html

  10. Holas,

    yo particularmente tengo orígenes de PASCAL (primer lenguaje que aprendí), luego me enrole con C, más adelante aprendí cosas de C++, maneje esas cosas raras.

    ahora ando revisando de nuevo estos temas cada vez que necesito algo más de abstracción y cuando me aburro de usar wrapper (que manejar win32 o C)…

    primero lo primero, primero C/C++, y creo que esto no de un momento, debemos siempre, como buenos programadores, estar revisando C/C++ y creando algunas utilidades con ellas…

    no basta con predicar y decir, «C/C++ es la base, es lo primordial»… esto de nada sirve si alguna vez no lo haz pikado duro, …

    no seamos fanáticos…!!!

    salu2.

  11. Un buen desarrollador es la suma de diversas cualidades.

    La agilidad mental y capacidad de abstracción (también el conocimiento profundo de la tripas de los S.O.) que tiene un programador experimentado de C gracias a los punteros es una cualidad muy importante, pero no la única.

    Y los conceptos de punteros no tienen nada que ver con la POO. Un buen programador en C (no en C++) puede ser un zoquete con los objetos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *