@iamemhn

EM Hernández-Novich

Ask @iamemhn

Sort by:

LatestTop

Previous

Quiero aprender a programar ¿Por donde empiezo? Estudio ing Mecanica y me quiero especializar en la robotica. Gracias

Aprende a escribir programas bien [1] [2]. Luego aprende uno o dos lenguajes de programación que sean útiles para tu Ingeniería, en particular para hacer cálculo numérico y vectorial [3] [4]. Dependiendo del tipo de robots que vayas a utilizar, tendrás que aprender C y algo de ensamblable para los PIC — en este sentido, termina siendo más productivo que trabajes en grupo. El Grupo de Inteligencia Artificial [5] (GIA) en la USB siempre recibe a curiosos y voluntariosos dispuestos a aprender. Si no estás en la USB, puedes buscar algún grupo similar en tu universidad.
[1] http://www.htdp.org/
[2] https://mitpress.mit.edu/sicp/
[3] https://julialang.org/
[4] https://www.gnu.org/software/octave/
[5] http://gia.usb.ve/

Es muy difícil aprobar la carrera de ingeniería de la computación si no se sabe nada de programación ni de hardware?

Si con «aprobar» quieres decir «poder pasar las materias y tener un título», no lo sé, porque varía según tus habilidades para atragantarte de información antes del examen, retenerla lo suficiente para escribir lo que puedas, y ver si te alcanzan los puntos. Hay materias donde vas a poder hacer eso, pero hay otras donde no lo vamos a permitir.
A la universidad hay que ir a aprender, a aprovechar la experiencia del profesor para que te explique lo que tu por tu cuenta no has podido comprender de un libro. Vas a intercambiar ideas y absorber conceptos, además de «aprender a aprender» y «aprender a equivocarte».
No es «aprobar» las materias lo que te hace ingeniero, ni computista: es «comprender», «hacer», «demostrar» y «aplicar». Sobre matemática, lingüística, hardware, software y otras cosas más. Por otro lado, tienes que estar en evolución constante -- de lo contrario termina siendo obvio que «aprobaste» pero no te «formaste», que en el fondo es lo que hace falta para tener una existencia útil.

View more

Aprobé el primer trimestre del ciclo básico de ingeniería en la USB para estudiar computación pero reconozco que no sé programar.Será que me va a costar mucho cursar esta carrera?

Computación es lógica, matemática discreta, estructuras de datos, algoritmos, recursión, abstracción y dominio del lenguaje. Profesionalmente, para el mundo actual, tienes que agregarle cálculo numérico, probabilidades, estadística, y aplicaciones específicas según lo que te interesa hacer. Pero sólo después de que cumpliste la primera parte. Programar es el arte de resolver un problema y escribirlo de manera tal que OTROS comprendan lo que UNO quiere que la computadora haga.
Encuentro muy curioso que quieras estudiar «computación» y nunca hayas experimentado con la programación. Si sólo has usado las computadoras como herramientas, y nunca tuviste la curiosidad de comprender cómo funcionan y cómo hacer que hagan lo que tu quieres y no lo que viene enlatado, quizás estás subestimando lo que quiere decir ser ingeniero en computación. No estoy diciendo que esté mal, sólo que me resulta muy difícil comprender el proceso para decidir que quieres estudiar algo sin siquiera saber de qué va la cosa.
En todo caso, no tienes que esperar a que lleguen los cursos para aprender a programar. No hace falta estudiar Computación para saber programar. Aprende a escribir programas, porque de todas maneras es una habilidad importante. Desde un punto de vista utilitario, para poder programar tienes que saber expresar con detalle, de manera ordenada, organizada y estructurada, tus pensamientos y proceder para resolver un problema; si no eres capaz de hacer eso, computación es el menor de tus problemas.

View more

Related users

Usa o está enterado de lo que es el Bitcoin y más recientemente Ethereum? (computadora descentralizada que puede correr contratos inteligentes)

No uso. El modelo criptográfico es robusto y elegante, pero el modelo económico y social no me satisface enteramente. Para mí sigue siendo una apuesta, y no soy apostador.

Tengo una bebé de 5 meses, recuerdo haberte visto en un flisol con un chamo pequeño. Cuando nació, cómo hacías para seguir leyendo e investigando? De dónde sacabas tiempo? No es una pregunta técnica, pero es una buena pregunta, creo.

Israel
Cuando alguien quiere estar en tu vida, encuentra tiempo. Cuando alguien quiere algo en su vida, le hace tiempo. «No tengo tiempo» es un eufemismo por «no me interesa lo suficiente».

En una pregunta sobre cosas que no te gustan de Python escribiste "El trastorno neurótico de personalidad múltiple de las listas" ¿A qué te refieres con eso?

A exactamente eso.
Todas las listas de correo de lenguajes de programación están llenas de gente con problemas variados y la territorialidad siempre está presente. Pero en las listas de Python (en todas sus variedades), la cosa es de equipo antimotines. No sé si Python es la causa, consecuencia o síntoma, pero necesitan ayuda profesional, agregar fibra en sus dietas, e hidratarse.
Mucho dogmatismo, culto a la personalidad, e incapacidad para aceptar cuando algo está mal o no está bien.

Qué literatura me recomienda para entender e intentar construir un sistema operativo?

Primero, un libro sobre diseño y estructura de sistemas operativos (en plural). El «Peterson, Silberchatz y su combo» es la referencia que conozco.
Segundo, un libro sobre la arquitectura de la máquina para la cual pretendes hacer un sistema operativo. Digamos, si quieres hacerlo para una máquina Intel «de escritorio», necesitas conocer de punta a punta el procesador, el bus, los procesadores auxiliares, el subsistema de I/O y ser capaz de programarlo en *ensamblable*.
Tercero, los manuales de los dispositivos particulares que quieres hacer funcionar (tarjeta de red, controladora de disco, framebuffer o cónsola de texto). Vas a tener que escribir los controladores de dispositivo.
Luego vas a tener que decidir si quieres escribir un sistema operativo «monolítico» como Linux/FreeBSD o «microkernel» como Minix. Esa es una decisión importante, porque establecerá las relaciones entre los componentes.
Quizás deberías leer el código fuente de Linux, de BSD, de Minix, del viejo System III, antes de comenzar.

View more

¿No ha considerado abrir una electiva libre de criptografía?

En la USB hay una electiva de criptografía, definida y ofrecida por otro profesor, pero desconozco los contenidos y la frecuencia. No es un curso que me interese presentar.

qué libro usas[te] para perl ?

Aprendí leyendo los manuales, porque no había libros. Luego compré «Programming Perl» para Perl4 que era el único que había, pero realmente no me enseñó nada nuevo porque eran los «manuales impresos» con uno que otro comentario.
Hoy en día, para Perl5, «Learning Perl» es el mejor libro inicial, y luego tienes «Programming Perl» como referencia, y «Perl Best Practices». Luego hay libros especializados: las dos ediciones de «Advanced Perl Programming» y «Algorithms with Perl». Todos esos libros son de O'Reilly y los pagué, porque con ese dinero se paga el trabajo de Larry Wall y otros perleros importantes.
Fuera de O'Reilly, «High-Order Perl» es una joya porque muestra cómo hacer programación funcional efectiva usando Perl, mucho antes que el resto de los «competidores» siquiera admitiera que la programación funcional era importante. Así mismo «Modern Perl» es importantísimo, pues resume la evolución del lenguaje para usar las cosas que se deben usar en el día a día.
La documentación de Perl y de las librerías que le acompañan suele ser tan profusa que no vale la pena comprar un libro. Entonces, librerías como Moose, DBIx::Class, Catalyst y relacionadas, tienen manuales que van desde el tutorial hasta los detalles. Desde entonces, no he comprado ni leído en línea otros libros de Perl porque los manuales siempre han sido suficientes.

View more

De donde aprendiste a programar en Perl?

Comencé a operar y administrar sistemas Unix en 1991, de modo que escribir scripts de shell usando tr, paste, sed y awk era algo de todos los días. Esa combinación de lenguajes, aunque efectiva, era laboriosa y de lenta ejecución.
Iniciando 1992, para poder compilar mi primer kernel Linux (cuando no existían distribuciones y era más artesanal), tenía que prepararme un compilador cruzado, que corriera en una DG AViiON 88000 generando código para Intel i386, así que estaba «haciendo lo que tenía que hacer» con GCC para lograrlo. Mientras eso compilaba (varias horas, en la noche), me puse a leer NetNews y alguien comentó sobre Perl, y cómo estaba inspirado en tener un LISP imperativo, pero sin la cantidad de paréntesis y con énfasis en procesamiento de texto. No se hable más...
Lo dejé descargando y la noche siguiente lo dejé compilando para DG/UX. Dos días después tenía perl4 funcionando y comencé a leer los manuales. El año siguiente compré «Perl Programming» para Perl 4, y de allí en adelante, cualquier cosa de administración de sistemas la escribía en Perl.

View more

Liked by: Walter Vargas

Cuando abrira de nuevo la cadena de lenguajes?

La especialización de Lenguajes de Programación se ofrece entre Enero y Julio de los años pares. Entonces, enero 2018.

Si un caracol no tiene concha, ¿es un sin techo o un ser desnudo?

Mis conocimientos de biología dicen que no es más que una babosa. Capaz que si en el basurero se le antoja meterse en uno de esos libros de fantasía, le dá por pedir casa y ropa, pero no sé.
Liked by: Walter Vargas

¿Vale la pena conseguir la última edición del libro de compiladores de Aho, Sethi y Ullman? ¿O se puede uno defender con una edición más vieja?

La última edición del «dragón» (tapa oscura) tiene mucha más información sobre las técnicas modernas de análisis de flujo, análisis interprocedural, análisis global, generación de código superescalar y generación de código paralelo, que la edición anterior no tiene.
La primera edición del «dragón» tiene información sobre gramáticas de operadores, e información sobre verificación de tipos usando grafos de tipos con el algoritmo de unificación basado en grafos de equivalencia, que la edición más nueva no tiene.
Del resto, son iguales. Para un curso introductorio de técnicas de compilación, cualquiera de los dos es suficiente, pero en inglés — la traducción al castellano es nefasta en cualquier eje que se evalúe. Para referencia moderna, la segunda edición es más conveniente — en particular si quieres comprender, modificar o extender LLVM, que representa el estado del arte en la generación de código.
Ninguno de los dos incluye información para la generación de código para lenguajes funcionales o lógicos, tampoco describen diseño ni implantación de máquinas virtuales abstractas o concretas para ningún modelo de evaluación. En ese caso, el libro «Compiler Design» por Dieter & Maurer es mi referencia preferida, pero no es un libro didáctico. Si quieres comprender lo que hace Haskell de extremo a extremo, entonces tienes que leer «The Implementation of Functional Languages» de Simon Peyton Jones.

View more

Nginx o Apache?

warp [1] es muy superior, pero tienes que escribir tus aplicaciones en Haskell (con Yesod o snap).
Prefiero nginx en modo FastCGI que Apache en cualquier modo. Sólo uso Apache para una aplicación que requiere mod_perl y que no puede correr en modo FastCGI por «razones histéricas».
[1] http://www.aosabook.org/en/posa/warp.html

Cómo puedo hacer si quiero ser package maintainer en debian?

Israel
Primero, instala Debian — no, Ubuntu no es Debian, Canaima no es Debian, «derivado de Debian» no es Debian. Los derivados de Debian son... DE-RI-VA-DOS de Debian, pero no son Debian.
Una vez instalado Debian, debes leer
* Debian Policy (https://www.debian.org/doc/debian-policy/) — está en el paquete `debian-policy`
* Debian Maintainer Guide (https://www.debian.org/doc/manuals/maint-guide/) — está en el paquete `maint-guide`
* Debian Developers' Reference (https://www.debian.org/doc/manuals/developers-reference/index.en.html) — está en el paquete `developers-reference`
Léelos por completo, incluso si hay cosas que «no piensas hacer» o «no creo que aplique para mi caso». Así comprenderás lo complejo de preparar paquetes, lo delicado del proceso, y le darás más valor a la calidad que hace al proyecto Debian diferente a todos los demás. Si no los lees, tan pronto hagas preguntas básicas, te vamos a mandar a leer de todas maneras...
Escoge algún paquete existente del cual seas usuario o pique tu curiosidad, y trata de reconstruirlo, actualizarlo, agregarle parches, etc. para verificar que dominas las herramientas y los procesos.
Finalmente, busca en https://www.debian.org/Bugs/ algún defecto que te parezca que puedes resolver, resuélvelo, y escribe al mantenedor del paquete con el parche. También es posible incorporarse a grupos de mantenedores según áreas de interés, los cuales siempre tienen políticas adicionales, prácticas adicionales, y herramientas específicas.
Es increíble lo que se aprnede leyendo los manuales.

View more

Liked by: Israel

Cuénteme como dominar Linux y VIM para codear en C++. Además, ¿en la vida real por que C++ es útil? Lo pregunto porque solo conozco sus beneficios en contexto de programación competitiva.

Ø Gus.
En español se escribe «programar» para expresar lo concreto y «desarrollar» para expresar lo abstracto del proceso de construir aplicaciones. Usar el idioma correctamente es requisito para dominar cualquier herramienta de comunicación, como son los lenguajes de programación. Para usar el idioma correctamente, tienes que leer mucho, de todo — sólo construyendo vocabulario y complejidad expresiva será fácil para ti comunicarte con los que necesitan tu ayuda y los que pueden ayudarte, de manera efectiva.
Necesitas práctica. Mucha práctica. La que se mide en años y se describe como constante.
Instala Linux y úsalo para todo — sin excusas; si algo no te funciona, haz que funcione y no «negocies» usando otra plataforma «mientras tanto». No está mal que pidas ayuda para instalarlo la primera vez, pero debes asumir que tienes que aprender a hacerlo tú sólo, enfrentando y resolviendo todos los problemas que puedan aparecer.
Lo mismo aplica para VIM: úsalo para escribir programas, úsalo para manipular la configuración, úsalo para escribir correo electrónico, úsalo para escribir tus notas. Repite `vimtutor` una vez al mes hasta que puedas explicarle `vimtutor` a alguien que está comenzando.
C++ es uno de muchos lenguajes de propósito general, de modo que sirve para resolver prácticamente cualquier problema práctico. Eso no quiere decir que es el único lenguaje que debes aprender, ni el lenguaje que tienes que usar para todo lo que quieres resolver — si le das un martillo a un niño, entonces quiere golpear todo porque parece un clavo: no seas ese niño.
En las competencias de programación, es uno de los lenguajes *permitidos* y por eso es popular. C++ tiene una librería estándar (el «STL») bastante completa, más allá de su idiosincracia y «casos especiales». Para mucha gente eso es suficiente y en la industria hay muchos proyectos, grandes y pequeños, que lo usan.
Pero la programación competitiva no es la realidad de «hacer computación». Desarrollar aplicaciones es algo que se hace con calma, pensando en que lo que se escribe sea comprensible hoy y para el pobre diablo que tendrá que mantenerlo en un año (plot twist: el pobre diablo eres tú, siempre). En la programación competitiva escribes una solución funcional que cumpla con las restricciones de tiempo, y una vez que sales de la competencia, el código no es visto por nadie más (como no sea para entrenar para una competencia futura).
Pensando en escribir código que perdure, que sea legible para muchas personas diferentes a su autor, y que pueda ser reutilizado y reorganizado en el tiempo, C++ tiene unos cuántos mecanismos para facilitarlo, y eso lo hace popular. También tiene muchos casos borde y muchas complicaciones innecesarias, derivadas de ser un lenguaje que ha evolucionado queriendo ser todo para todos.

View more

¿Utilizas xmonad?

Parcialmente. No coopera del todo con el XFCE de Debian 8, entonces no lo tengo en mi máquina actual. Espero que funcione mejor en Debian 9.

Estoy aprendiendo C/C++ ¿Qué me recomiendas? ¿Algún editor de texto o me conformo con codeblock? ¿Qué compilador usa usted?

Primero aprende C y luego aprende C++ por el resto de tu vida.
Mi IDE se llama Unix (Linux o FreeBSD), controlado por VIM. Nunca he usado un IDE visual, porque mover el ratón es una pérdida de tiempo increíble, así que prefiero controlar todo con teclas. Busca lo que funcone para ti.
Uso GCC cuando la plataforma es Linux y CLANG cuando la plataforma es BSD o estoy probando cosas con LLVM. Desde 1999 sólo uso Linux o BSD, así que en una Apple (que es BSD) te diría que uses CLANG, y si usas Windows te diría que comiences a usar algún Unix lo antes posible.

¿Como saber que es lo que se quiere en la vida? He conocido personas de mi edad que tienen muy claro que es lo que quieren yo en cambio no estoy claro en nada. ¿Algún consejo?

Cuando sepas, sabrás, y no antes. Para saber, tienes que explorar la noosfera hasta encontrar aquellas partes en las cuales te sientes a gusto cultivando. Todo lo que hagas antes es preparación o pérdida de tiempo. Disfruta el paisaje.

¿Ha tenido la oportunidad de revisar el libro, Ingeniería del Software de Roger Pressman?

No, y tampoco creo que ocurra.

Que opinas de este video? https://www.youtube.com/watch?v=YU2i3L-euB0

No lo conocía, pero no lo voy a ver. El video dura 2h 38m. Pasé la fase de «introducción a la programación funcional» en 1989. Seguramente sería aburridísimo para mi y no sería una inversión inteligente de mi capital de tiempo.
Probablemente sea introductorio. Probablemente sea informativo. Probablemente tenga mayoría de aciertos y una que otra cosa que no me parece bien. Probablemente tenga ejemplos triviales. Probablemente tenga ejemplos simples que la primera vez que alguien los vea le confundan. Probablemente tenga algún chiste bueno. Probablemente tenga algún chiste malo.
Quizás deberías verlo y construir tu propia opinión...

¿Qué piensas de "reinventar la rueda en la programación"? Es decir, aprovechar las bibliotecas existentes en vez de intentar hacer algo uno mismo desde cero.

Siempre uso las librerías disponibles en el lenguaje antes que inventar mi propia solución. Si la librería del lenguaje no hace exactamente lo que necesito, usualmente es porque soy un idiota que no supo modelar correctamente el problema o porque la librería tiene un defecto. Prefiero corregir el defecto en la librería existente en lugar de inventar todo de nuevo -- soy un flojo educado.
Si estás «reinventando la rueda» porque no entiendes una rueda que está perfectamente bien, lo estás haciendo mal. Esto le pasa a una buena parte de los desarrolladores que no han tenido formación organizada (o la tuvieron, pero la formación no los tuvo a ellos). Entonces, cuando encuentran una librería que está bien o razonablemente bien, pero que escapa a sus habilidades y experiencias, piensan que es mejor hacer una nueva. De ese grupo hay algunos que no saben diferenciar entre una librería buena y una librería mala, así que proliferan las librerías malas y si es un «lenguaje fácil», lo que se logra es que el ecosistema sea un desastre -- en el fondo eso es bueno, porque te permite huir de ese ecosistema.
Si las librerías están construidas correctamente, es mejor usarlas. Saber si una librería está construida correctamente no es un tema de democracia sino de medidas, de documentación y de verificación exhaustiva, basada en experiencia y en conocer el problema que se ataca. Una librería construida correctamente tiene muchísimas horas de trabajo de especialistas en el lenguaje, en el problema, en los algoritmos, y con una visión mucho más amplia que uno que llega con su conuco personal y la necesidad egoísta de resolverlo. Uno mira lejos porque se sube a hombros de los más grandes.
Desconfía de lenguajes y ecosistemas en los cuales haya «muchas librerías buenísimas» para el mismo problema, porque probablemente todas sean incompletas o insuficientes. En lenguajes y ecosistemas maduros, suele haber dos librerías históricas y robustas para resolver un problema, con una tercera muy lejos en adopción: buen indicio. Así mismo, desconfía de un ecosistema en el cual las librerías estén desperdigadas, sin organización explícita, sin mecanismos de verificación, sin pruebas y en las cuales los contribuyentes rara vez corrigen defectos, sino que inventan su propia interpretación. Ese es un criterio muy poderoso para juzgar un lenguaje: su conjunto de librerías, su manera de organizarlas, y la forma en que sus usuarios las hacen evolucionar controlando la diversidad.

View more

Next

Language: English