EDICIóN GENERAL

Programadores antiguos vs programadores de hoy

Una pregunta para los que estáis en "la crema" de la programación:

Hace milenios programaba mucho en C, y cuando tengo que hacer algún miniproyecto para mi trabajo (ya no programo de manera habitual, sólo me hago herramientas que me ayudan en las otras tareas de mi curro), sigo usando C.
Para ser sincero, C siempre me ha gustado y además le tengo cariño por la costumbre, pero tengo que reconocer que la gestión dinámica de la memoria es un coñazo. Control absoluto, pero al mínimo error con un puntero, todo el programa a la mierda.

¿Qué me recomendaríais, siguiendo la filosofía y la ligereza de C, que sea más sencillo para manejar datos de manera dinámica?
#50
Habría que ver cuáles son tus necesidades reales, dicho esto, por lo que me cuentas (donde supongo que el rendimiento no influye gran cosa) te recomendaría:
Cualquier lenguaje que tenga recolector de basura, por ejemplo:
C#, java, Python

Para lo que tu quieres, que supongo que va a ser crear vectores/listas a los que puedes añadir nuevos elementos con un “.add()” sin preocuparte de redimensionar el vector o eliminar la lista y luego hacer cuatro bucles... pues te sobra con cualquiera de ellos y te va a facilitar bastante.

PD: El concepto de ligera ya me resulta un poco más ambiguo o dificil de responder, aunque con él en mente seguramente muchos te dirian que vayas más por Python (yo no lo haría)
#59: Con C++ puedes hacer eso, vectores donde la memoria va automáticamente según añades elementos a los vectores.
#50 #59 #93 #60 #65 #89 #113
Lo más sencillo hoy en día para tener potencia y no preocuparse de punteros y memoria es hacer uso de C++11, C++14 y/o C++17 (pronto saldrá C++20) que ya tienen los "smartpointers" con std::unique_ptr y std::shared_ptr... aparte de todas la nuevas caracteristicas y mejoras del lenguaje.

Además usando C++ Standard el programa puede compilar en Windows, Linux, Android, iOS, Mac, etc... Y si necesitas UI puedes usar C++ y el framework Qt5 también crossplatform...

es.m.wikipedia.org/wiki/C++11
es.m.wikipedia.org/wiki/C++14
es.m.wikipedia.org/wiki/C++17
es.m.wikipedia.org/wiki/Qt_(biblioteca)
#155 Bueno, si con c++ se termina el problema de la gestión de memoria, resuelve su problema sin salir de su zona de confort.

Lo que no haría nunca es usar Qt si no le aporta nada. Estar siempre escribiendo la Q antes de cada primitiva me ponía enfermo. Luego, las empresas que he visto que lo utilizaban para hacer multiplataforma se estaban tirando de los pelos, perdían trimestres de desarrollo sólo adaptándose a la "multiplataforma" de Qt
#162 En C++11 y en adelante tienes la clausula "auto":
auto x = 4;
auto y = 3.37;
auto ptr = &x;

std::set<std::string> st;
st.insert({"geeks", "for", "geeks", "org"});

for(auto it = st.begin(); it != st.end(); ++it)
{
std::cout << *it << std::endl;
}
La verdad es que desde C++11 en adelante con C++ han incluido muchas características de alto nivel que nada tienen que envidiar a Java o C#, así que con C++ moderno tienes desde bajo nivel hasta alto nivel

#160 Qt es un buen framework para Interfaces Graficas en C++; si perdían trimestres de desarrollo porque quizás no controlaban del todo Qt, al principio cuesta adaptarse si, pero luego una vez que esta todo claro programar y compilar en diferentes plataformas no es complicado. Siempre que se haga uso de C++ estándar y de la parte de Qt común... si usas la librería de Qtwindows o qt Active X que son solo para windows, entonces tendrás que adaptar el código a otros sistemas....
#155 Muy interesante lo de std::unique_ptr y std::shared_ptr, todavía tiene el "problema" de que el programador tiene que tener en cuenta el tipo, pero facilite mucho todo, la verdad es que estoy totalmente desactualizado de c++, laboralmente no lo utilizo y se nota

#93 Sí, esta el vector dinamico, pero me sonaba que el delete hay que hacerlo, de todas formas con lo que comento MetalAgm del std::unique_ptr y std::shared_ptr veo que cambian las cosas
#155 suscribo lo que dices.
C++ ha vuelto ha renacer
docs.microsoft.com/es-es/cpp/cpp/welcome-back-to-cpp-modern-cpp?view=v

solo apuntar que se debe ver el "modern C++" como un lenguaje nuevo, separado de C++.
Si ya sabes C++, olvidarlo y aprender de nuevo... que te choque cuando veas un new ...

Puedes seguir haciendo las mismas barbaridades de siempre, incluso programar en C,
pero si no tienes vicios de C++, es una pasada, porque es muy sencillo.

Ahora ya cuando veo código de Visual C++ MFC ...me parece un jeroglífico egipcio.

Ya, si a eso le sumas Qt ....
#50 Si no quieres tener que reaprender nada te recomiendo Java, la sintaxis de Java es parecida a C++ pero sin punteros
#50 Yo te recomendaría python por su simpleza y ligereza pero su sintaxis un poco diferente a lo que estás acostumbrado y la documentación es la peor de todas las existentes de lejos.
#65 Yo sigo leyendo que la documentación de Python es mala. Pero yo sin ser programador me apaño con la documentación de la documentación de la biblioteca estándar. Eso sí, hay bibliotecas que están muy mal documentadas, pero eso ocurre en todos los lenguajes.
#50 Si necesitas que sea de bajo nivel: Rust, esta diseñado para evitar errores.
www.meneame.net/story/hace-lenguaje-programacion-rust-especial
Si puede ser de alto nivel, python tiene fama de ser el que menos te dificulta la tarea que quieres hacer. Tambien tiene muchas librerias de cosas ya hechas.
#89 Python es de lo peor
#103 Aquí un programador Python venido de 8 añitos de .NET. Parece una tontería, pero el cambio de .NET a python me hizo descubrir un concepto: Estrés cognitivo. Clarísimamente, la verbosidad y ecosistema de .NET comparado con python hace (almenos para mí) que tenga que centrarme en 30.000 cosas que me impiden focalizarme en lo que realmente se le debería dar bien a un programador, que es solucionar problemas. Python, en ese aspecto, me genera menos estrés cognitivo.

No obstante no creo que sea el lenguaje perfecto. Para mí un lenguaje perfecto sería un lenguaje de programación que, aparte de los clásicos constructs de la programación orientada a objetos, tenga la pureza de un lenguaje de programación funcional y, que además, haya montonazos de paquetes para los problemas comunes y sea fácil de integrar. En ese aspecto Elixir promete, pero no tiene la prevalencia del resto de lenguajes.

En definitiva, el lenguaje perfecto será, para mí, aquél que haga que me pueda centrar al máximo en resolver y plasmar un dominio de negocio fácilmente.
#103 Python es para hace scripts de usar y tirar, no para hacer un sistema que quieras que viva años.
#89 Qt ahora soporta Phthon de manera oficial.
Puedes añadir que se pueden hacer frontends de primer nivel
#50: Yo es que C lo he usado hasta en plan "script", o sea, en vez de meter funciones de scanf, o lectura de ficheros, meto a pelo las variables en el código y lo compilo cada vez que quiero cambiar una variable, si no es muy grande no se tarda gran cosa. xD Si tengo un vector lo hago muy grande y listo, así no tengo que hacer asignación dinámica de memoria.
#50 golang. Sin dudarlo
#50 Cada uno te va a recomendar lo que haga él :-)

Yo intentaría no salirme mucho de la zona de confort ni obligarme a aprender mucho más. ¿Qué IDE usas? Si unas Visual Studio, por ejemplo, yo iría a C#
#50 Lo más directo es aprender C++ moderno, el estándar 11 o superior, con sus punteros inteligentes y demás facilidades.
#50 #116 Veo que en Udacity sigue lo del mes gratis (tienes que meter tarjeta y cancelar luego, eso sí). Le puedes echar un vistazo al curso de C++ está bastante bien explicado lo del manejo de memoria con estándares actuales www.udacity.com/course/c-plus-plus-nanodegree--nd213
#67 #50 Yo a todo el mundo que me pregunta por un nuevo lenguaje le digo lo mismo:

PYTHON.
#117 ¿Con qué argumentos? Brevemente, si no quieres extenderte.
#269 Pues...principalmente por las siguientes razones:

- Es de propósito general
- Permite programar rápido
- Es fácil de leer y elegante (gracias a que prescinde de llaves y obliga a indentar)

Si no tienes experiencia con el lenguaje te recomiendo echar un ojo a los 20 principios zen de Python.

Por supuesto hay cosas que también me disgustan. Posiblemente de las que más, que los métodos y atributos de las clases no soportan restricciones de visibilidad.
#117 Yo igual! Creo que para empezar a formar la cabeza es lo mejor!
#50 para hacer scripts guarros. Se recomienda Python.
#50 C++ Builder, de Embarcadero (antes Borland). Tiene una VCL espectacular y multitud de componentes, muchos gratuitos, que hacen prácticamente cualquier cosa que se te venga a la mente.
#50 Coincido con quien te dijo que tires por Rust.

Es un lenguaje pensado para hacer las cosas bien y con muchas facilidades en calidad de vida a la hora de trabajar. Es compilado a nativo, no tiene recolector de basura pero administra la memoria e impide que la cagues, e incorpora todo lo bueno de los lenguajes modernos sin las partes malas (gestor de dependencias automatizado, linters, etc.). Te deja además bajar al más bajo nivel si lo necesitas.

Incorpora además un par de conceptos nuevos que no tiene ningún otro lenguaje hoy día, los lifetimes y la propiedad, que son precisamente los que impiden que hagas las putamierdas que puedes hacer sin ningún tipo de impedimento en todos los demás lenguajes (excluyendo unos pocos que son muy nicho, tipo Haskell o Ada). Es un lenguaje que te forzará a ser mejor programador.

No te metas ni de coña en el pantano y campo de minas que es C++ hoy día. Te vas a querer suicidar.

Programar C++ requiere un nivel absurdo de conocimiento de la inmensa cantidad de trampas y complejidad artificial que tiene. Usar librerías es una pesadilla, es extremadamente fácil cagarla con muchas cosas a menos que tengas mucha experiencia, es inseguro por diseño y tiene muchísimas features redundantes y superpuestas entre sí que nadie conoce al 100% por lo absolutamente elefantiásico que es.

Quien te diga eso te está aconsejando mal y porque ya es un experto en C++ y lo ve "fácil".Si estas dispuesto a meterte en algo de esa complejidad (sobre todo si es para aprender), no pierdas el tiempo y tira por Rust, porque tiene una curva de dificultad similar (manejas los mismos conceptos), pero a diferencia de C++, si te compila es casi seguro que te va a tirar bien lo que hayas programado, y sin muchas sorpresas, especialmente si utilizas concurrencia.

Para que te hagas una idea, Microsoft lo va a empezar a usar en lugar de C++ para los desarrollos de sistemas a partir de ahora ( msrc-blog.microsoft.com/2019/07/22/why-rust-for-safe-systems-programmi ), y otras casas como Dropbox, Google, Facebook etc. ya lo están usando en producción en sistemas críticos, sólo por el hecho de que hace imposibles una inmensa cantidad de bugs muy habituales en C++ y hace más fácil la vida de los programadores por el hecho de no poder cometerlos y sobre todo tener que depurarlos después. Los productores de Chromium están haciendo experimentos para ver si empiezan a sustituir poco a poco componentes de C++ en Rust porque llega un momento que no pueden sostener la complejidad que implican ciertos subcomponentes (por ejemplo, el motor CSS paralelo de Firefox fue escrito en Rust a la primera y Chromium lo abandonó tras fracasar por tercera vez su intento en C++).
#250 Te agradezco mucho el comentario y que lo hayas elaborado tanto. Creo que con todo lo que me han recomendado en el hilo, echaré un vistazo a Rust. C++ lo usé hace muuuucho tiempo y me da que lo que aprendí me va a servir de poco ahora.
#50 #250 C++17 (C++ moderno) , para alguien que empieza desde cero, no es tan difícil como dices.
El viejo C++ si, el moderno yo lo veo bastante fácil y potente
(con el tengo las sensaciones que tenia cuando hacia mis pinitos en C# viniendo de C ...el verlo todo fácil)
#50 C#, Java o kotlin, pero sobre todo kotlin.

O bueno: C sin punteros...
#50 Estoy en tu misma situación, desde niño aprendí a programar a los 12 años usando el viejo Basic por principios de los 90's pero al ser interpretado sentía que no era lo mismo a simplemente teclear el nombre del programa.

De la misma manera que tu, me encanta C, me pasé a C++ y Qt , librería multiplataforma, sencilla de aprender sin hacer a un lado el potencial y rapidez que ofrece C++, dale un vistazo, no te va a decepcionar.

menéame