Publicado hace 2 años por chepas08 a us2.campaign-archive.com

El método científico se basa en la observación, experimentación y medición de datos para validar una hipótesis. Sin embargo, apenas hacemos experimentos que nos ayuden a entender cómo construimos software y validen nuestras creencias sobre cómo deberíamos hacerlo.

Comentarios

D

Lo de los ciclos cortos de desarrollo y testing vale para todo, no solo para programar.

chepas08

#3 Desde luego.. cualquier cosa compleja.. divide y vencerás. Trocéala en bloques, haz una versión sencilla inicial, luego le vas añadiendo capas de funcionalidades.. La Informática es la "Ciencia de las capas"

D

#9 No conozco RUST. Probablemente sea mejor q C en ese sentido.

Cualquier cosa es mejor q C, realmente lol

Pero esta bien entender q pasa cuando declaras una variable. Yo eso lo entendi a base de odiar los apuntadores lol

sorrillo

Solo cuando al código le añadimos el modo "god"

box3d

#14 un ejemplo bastante tonto pero que muestra algo que en C es trivial en cualquier otro lenguage la solucion suele ser "llama a una librería de C"

//Enviar un byte por un hipotetico periferico SPI.
volatile extern char *tx, *rx, *status;
*tx = 'A';
while (*status)
return *rx;

Esas 4 lineas en C pueden ser hasta imposibles de realizar o traducir en muchos lenguajes de programación. Si tu proyecto necesita eso, ya estas casado al menos en parte a usar C.

(Doble respuesta horas despues, lo se x)

box3d

#14 apuntar a una dirección màgica de memoria y escribir algo en ella para que el hardware haga algo. Frecuente en microcontroladores.
https://en.m.wikipedia.org/wiki/Memory-mapped_I/O

En estos casos tus opciones realistas son C89, C99 y Assembler lol

box3d

«Algunos lenguajes de programación son mejores que otros»
Pues depende. [...]

A la hora de empezar un proyecto suelo preguntarme "¿que necesita mi proyecto y que es fácil de hacer en que lenguaje?" y norrmalmente la decisión termina siendo:
- si tengo que tocar registros, C
- si quiero GUI, C++/Qt
- Web o algo rápido de hacer, python/js

D

#2 a qué te refieres con "tocar registros" en C?

devil-bao

Más allá de que el software está escrito para que lo "lean" las personas y no para las máquinas, no.

c

#32 Estás haciendo comparaciones que no proceden. En todo caso podrías compararlo con un Array.

new no es más simple que malloc.

No tienen "utilidad" similar, no. ArrayList es una estructura dinámica compleja. Puedes desarrollar una igual en C si quieres, o usar la clase equivalente a ArrayList de C++.

Se puede construir en C una estructura con utilidad idéntica a ArrayList con muy pocas líneas de código. O usar una librería, que es justo lo que haces en Java.

C no tiene garbage collection y tienes que liberar tu la memoria. Esa es la diferencia fundamental.

D

#27 Si quieres ser un programador profesional, sobre todo si quieres ser uno decente, mi recomendación es que empieces por un lenguaje de bajo nivel, que entiendas como funcionan todo de la forma más básica posible, que ya tendrás tiempo de aprender lenguajes de alto nivel o usar bibliotecas que te faciliten la vida.

Entonces entiendo que tu recomendación sería ensamblador. Y entiendo tu argumento, aunque quizás no todo el mundo prefiere empezar por lo difícil. No me refiero exactamente a que programar en ensamblador sea difícil, sino que puede resultar un poco árido.

Un poco como si dices: si vas a aprender inglés, empieza por el que hablan en Australia, ya que después de eso, casi cualquier variante te va a resultar muy fácil.

mecha

#c-28" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3592197/order/28">#28 El problema con ensamblador es que es una forma de programar muy diferente a otros lenguajes más usados, que son los basados en C (C/C++, Java, C#, PHP, Python...). Además, es muy específico de la plataforma para la que programes. No es lo mismo ensamblador en adm64 que ARM por ejemplo.
No está de más conocerlo, como puede estar bien aprender a hacer diagramas de flujo o UML, pero hay saber poner límite a las cosas. No se puede aprender todo.

PD: Yo aprendí ensamblador en la carrera, una vez me tocó pelearme con algo de código AWL (para PLCs de siemens) y aquello me fué útil, pero no es lo normal.

c

#10 pedirle que haga un malloc porque se muere

Qué tiene de complicado un malloc?

mecha

#18 Por poner algunas cosas, en comparación con usar un simple List/ArrayList:
- malloc requiere saber a priori el tamaño del vector para poder crearlo.
- cambiar el tamaño de un vector requiere crear un vector nuevo, copiar la información a este y destruir el viejo.
- malloc requiere hacer un cálculo de tamaño en función del ojeto a meter dentro. No es difícil pero ojo con no hacerlo.
- estos vectores no te dicen su tamaño, debes tenerlo apuntado en algún sitio. Cuidado de no salirse de rango.
- la memoria que reservan ha de liberarse correctamente.

No es hipermegacomplejo, pero dile a un novato que los use en algún ejemplo sencillo y verás que se equivoca en algún punto.

c

#30 en comparación con usar un simple List/ArrayList:
Por qué comparas cosas que no tienen nada que ver una con la otra ?
Un malloc es una simple reserva de memoria para usar.... como y en lo que te de la gana.

Un ArrayList es una estructura de datos dinámica.

No tiene sentido que las compares.

"malloc" no requiere nada. "malloc" te reserva un área de memoria del tamaño que quieras. Si quieres construír con eso una lista enlazada o un árbol B, puedes.

Pero no compares "un malloc" con una estructura de datos dinámica, hombre.

mecha

#31 Bueno, hablaba del malloc para el caso de crear un vector en C. Aunque hace años que se usa ya el new[], algo más simple.
Y si, comparo un vector de C con un ArrayList de Java porque "son lo mismo". Y digo que son lo mismo sabiendo que en implementación no tienen nada que ver, pero su utilidad es similar. Un arraylist es una estructura de datos mucho más compleja, claro, pero es que de eso va un poco Java y los lenguajes de alto nivel, de integrar estructuras complejas a cambio de eficiencia, claro.
P.D: Sé que en C++ existe la clase Vector en la STL, que es más parecido a un arraylist.

ed25519

Yo empece con C hace la tira de años y me gustaba, pero luego descubri python y empece a mezclar los dos lenguajes, luego reihicieron C++ con el nuevo estandar C++11 y deje C la verdad. Fue una transicion natural y la verdad ahora mismo trabajo con C++17/python y Go. No creo que haya que ser un taliban de los lenguajes si no mas bien intentar aprender de ellos y luego elegir dependiendo del problema a resolver.

D

Intenté hacer un metrónomo en C# y por poco no acabé desquiciado. Me descargué uno y sentí un gran alivio y renuncié para siempre a programar.

D

todos los lenguajes de la familia C (Perl, Java, C++...) son tan complicados para leer, aprender y entender para un novato como un lenguaje diseñado aleatoriamente.

Esto es impresionante. Y más de una vez he leído el consejo de empezar por C.

D

#5 Es un buen consejo:

C y Python.

Python para no rallar demasiado y C para saber q haces.

D

#6 ¿Ves C mejor que Rust en ese sentido? ¿Y por qué no ensamblador para saber lo que haces?

ur_quan_master

#5 es que la programación es complicada, llegado a cierto nivel.

Por otra parte puedes empezar a programar algo sencillo como Arduino y voilà! Ya estás usando C!
Con esto quiero decir que el entorno influye.tanto o más que el lenguaje de programación en la facilidad de aprendizaje

D

#7 Sí, el entorno influye, pero también cosas como:
- cuántas piezas móviles son necesarias para programar algo mínimo, como un Hola Mundo.
- cuántos símbolos extraños se usan en programas sencillos

Solo esos dos elementos ya pueden condicionar mucho la experiencia de empezar a aprender programación en un lenguaje determinado.

Es verdad que el tipo de recursos didácticos disponibles y su calidad también es una variable relevante.

mecha

#c-5" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3592197/order/5">#5 Hay lenguajes facilones que están bien para empezar, como python. Pueden conseguir que a alguien le pique la curiosidad y aprenda a programar pequeños proyectos de forma rápida y sencilla. Pero eso si, si no tienes ni idea de programación y quieres convertirte en un buen programador empieza aprendiendo lenjuages de bajo nivel.
Es más fácil subir que bajar. No puedes coger a un chico de FP que solo ha aprendido algo básico en PHP y pedirle que haga un malloc porque se muere. Pero a alguien que sabe C le enseñas a usar un ArrayList de Java y hasta se aburre.

A mi personalmente en la carrera de ingeniería me formaron con C en primero. A partir de ahí, cada práctica que me pedían usaba el lenguaje que me apetecía probar en ese momento o que consideraba adecuado y nunca me resultó difícil usar ninguno. Python, C#, Java, PHP y alguna cosa rara como SmallTalk (que me encantó por alguna razón).

D

#10 Pero eso si, si no tienes ni idea de programación y quieres convertirte en un buen programador empieza aprendiendo lenguajes de bajo nivel.

Pues en principio me parece un consejo equivocado (y favorecido por el sesgo del superviviente). Habría que evaluar qué pesa más, si la facilidad para aprender el primer lenguaje, o la facilidad para aprender otros después.

mecha

#11 Bueno mi evaluación está condicionada por ser ya un programador con experiencia.
Y cuando me viene alguien al trabajo con conocimientos básicos, ha aprendido lo más sencillo de PHP por ejemplo, tardo mucho en poder sacar algo de él, y hablo de gente que ha hecho cosas resultonas y que parece que saben pero es que al más mínimo problema se traban porque no son capaces de entender en profundidad un lenguaje. A veces hasta les cuesta entender que no se puede usar un array más allá de su límites de tamaño. O que un entero tiene un valor máximo y mínimo. O que 3/2 == 1.
Sin embargo, cuando llega alguien con conocimientos de programación avanzados y 0 idea de lenguaje que usamos se que lo puedo poner a progarmar cosas complicadas dándole solo un poco de tiempo para que aprenda una nueva sintáxis.

D

#13 Claro, lo que pasa es que ahí estás respondiendo a una pregunta diferente. Ya no es ¿qué lenguajes son los mejores para aprender a programar?, sino ¿qué lenguajes me interesa a mí como empleador o compañero de trabajo que otra persona sepa, de cara a evaluar su capacidad de adaptación a otros lenguajes?

Entonces sí, claro, mejor alguien que sabe construir una aplicación con C, Rust o ensamblador, que alguien que haga lo mismo con JavaScript. Salvando las distancias, pasa lo mismo con el tipo de aplicación: la respuesta a ¿qué es mejor, empezar aprendiendo a programar un tres en raya, o un compilador? es diferente a la respuesta a ¿qué es mejor, contratar a alguien que sabe programar un tres en raya, o un compilador?

mecha

#16 Ya, pero si quieres ser programador, lo normal es que también quieras que te contrate alguien. Como te comento, no es lo mismo querer ser programador profesional que querer saber algunos conceptos básicos de programación y ya.
Si quieres ser un programador profesional, sobre todo si quieres ser uno decente, mi recomendación es que empieces por un lenguaje de bajo nivel, que entiendas como funcionan todo de la forma más básica posible, que ya tendrás tiempo de aprender lenguajes de alto nivel o usar bibliotecas que te faciliten la vida.

c

#11 La dificultad en programación está en los cambios de paradigma.

Eso y la algoritmia. El lenguaje es trivial

D

#19 Por eso es importante empezar con buen pie.

chepas08

#19 Si, el lenguaje tiene que estar bien, pero yo venía de Java y no tengo problemas con PHP.. es importante un buen IDE, un buen/os Frameworks/Librerías y sobretodo que hay mucha info en stackoverflow (bueno, en general)..

Realmente se me olvidan cosas de los lenguajes, no suelo usar switchs p.ej porque ya tengo los ifs, los do while ya ni te cuento, pero es que para mi no es importante ciertos detalles, lo importante es plantar una solución a nivel funcional que es donde suelen estar los quebraderos de cabeza mas fuertes.. y sobretodo que sea "relativamente" rápido. Cada vez soy mas perezoso .. estoy todo el día copiando pegando trozos de código y modíficándolos..la información que hay en la web se encuentra super rápido.. En realidad busco eficiencia

A nivel de implementación todo suele ser bastante parecido en todos los lenguajes, si tienes claro el algoritmo (Recorro el csv, miro si la key ya existe en el array, no existe..etc etc.. ), que el lenguaje no tiene mapas, seguro que hay alguna librería buena.. En parte supongo que es porque no me dedico a cosas muy complejas claro (programación web, formularios, listados, carritos de la compra, etc etc, aunque a veces hay alguna cosa complicada, pero es porque es complicada a nivel funcional claro.. )

Con el tiempo cosas como los ORM los miro de otra forma.. al principio, que chachi.. ahora ya prefiero capas ligeras que me ayuden a mapear pero no quiero virgerias porque ya se lo suele pasar (En hibernate recuerdo que sacabas un objeto y te pillaba media base de datos por las relaciones..)..

c

#5 Depende como escribas.

ZaoTao_Bao

Yo empecé con java y sude sangre, tb debo decir que no brillo por mi facilidad de aprendizaje