Profile cover photo
Profile photo
Alfonso J. Ramos (theraot)
About
Posts

Post has attachment

Post has attachment

El conocimiento de matemáticas no es para realizar cálculos. Es para entender los resultados, en especial cuando no son los que esperamos.

De hecho, en la practica, tenemos computadores para realizar los cálculos...

Si consideramos que todo modelo de la realidad es incorrecto de una forma u otra, entonces toda proyección o simulación por computador que sea útil, no lo será en todas las situaciones.

Sin conocimiento de matemáticas, ¿Cómo distinguir si un resultado inesperado significa el software ha hecho mal el proceso y debemos preocuparnos de corregirlo, o significa que hay que preocuparse de las implicaciones del resultado?

---

Es por eso que debemos aprender a sumar y a multiplicar por nosotros mismos antes de utilizar una calculadora. Los que utilizan la calculadora deben poder distinguir cuando tienen un resultado debido a una limitación de la calculadora... ¿Cómo se darán cuenta si no tienen idea del resultado que deben obtener?

Debemos reconocer que las herramientas intercambian una cosa por otra... por ejemplo, la calculadora nos permite realizar cálculos de forma rápida. Sin embargo tiene un conjunto de funciones limitada, y una precisión limitada también. Y mejores calculadoras con mejores características tendrán un mayor costo.

---

En programación, una porción considerable del tiempo se va en depurar. Eso es, que una porción considerable del tiempo se va en entender porque algo no funciona como se esperaba.

De hecho, la mayoría de conocimientos de programación no son necesarios... hay herramientas que permite crear aplicaciones con el mínimo de conocimientos técnicos, comúnmente eligiendo opciones o arrastrando y colocando...

Hasta que algo sale mal. La mayoría del conocimiento de programación no es para programar, es para saber interpretar y poder reaccionar cuando algo sale mal.

---

Las herramientas de programación también intercambian una cosa por la otra. Muchas nos permiten hacer software en menos tiempo, mientras nos limitan las posibilidades. Por ejemplo, podemos crear un sitio web en unos minutos, pero estamos atados a un conjunto finito de plantillas... a menos claro que tengamos el conocimiento necesario para crear plantillas.

---

Es por esto que a las empresas les interesan programadores que sepan de todo. Esta es la consecuencia socio-político-económicas (del tipo "hey, yo qué hice?") de la Carta a García: No queremos programadores porqué algo no funciona y cómo se arregla (o que pregunten quien es garcía y donde lo encontramos para llevarle la carta). En su lugar queremos programadores que sepan de todo.

Consecuencia de lo anterior, el valor de los estudios en programación en el mercado laboral disminuye. De hecho, la gran oferta educativa en el tema (que no es que sea la mejor educación, pero es abundante) también disminuye el valor de estos estudios en el mercado laboral...

Consecuencia de ello, la mano de obra del programador es barata. Esto a menos que sea un profesional, con especialización o una segunda carrera, y con tantos años de experiencia.

Por supuesto los que tienen experiencia siguen consiguiendo empleo, mientras tanto hay toda una generación que solo lo consigue un empleo porque "lo ayudan" (entiéndase: palanca, rosca y otros elementos de la mecánica).

Yo digo toda una generación porque considero que para las personas solo un poco más jóvenes que yo la ley del primer empleo (bueno, eso en mi país) se los hace más fácil... bueno, al menos un poco, no sé bien como funciona eso porqué yo me gradué antes que pusieran esa ley.

El hecho que existan herramientas que permiten hacer software con pocos conocimientos técnicos no ayuda a la situación... solo ayuda a que el cliente considere que porque utilizamos una herramienta entonces nuestro trabajo es fácil y nuestro conocimiento no vale. Lo que significa que el cliente pretende pagar menos...

Por esto el salario del programador es bajo. Por esto el programador termina dedicándose a otra cosa.

---

Eventualmente los conocimientos de programación tendrán que ser como saber leer y escribir: Virtualmente todo el mundo lo sabe y solo unos cuantos pueden dedicarse a ello de forma profesional.

---

La ingeniería de sistemas se trata de dedicarse a eliminarlos a nosotros mismos. Entré mas completos, mejores y más fáciles de usar sean los sistemas que creamos... más difícil será encontrar demanda. Por supuesto que siempre habrá demanda... sin embargo, como yo lo veo, el mercado laboral de la ingeniera de sistemas tiende a colapsar.

Esto es mucho más cierto si consideramos los avances en inteligencia artificial y sistemas autónomos de los últimos años. Entre más trabajos pueden ser reemplazados con sistemas informáticas, peor será el mercado laboral.

---

De hecho, ¿Quién pretende entrar a competer con las grandes empresas? Ya nadie tiene la osadía de crear un nuevo software para hace X, cuando hay grandes empresas que lo hace y lo hacen bien... y también hay varios proyectos de software libre que hace lo mismo, lo más sensato es tomar alguno de estos y adaptarlo.

Parece que podemos programar usando plantillas, widgets, adaptadores, conectores, plugins, módulos, etc... que alguien más ha hecho. Nosotros solo programamos el pegamento que pega todas esas cosas para formar algo que hacemos llamar producto final.

Para poder intentar competir necesitamos capital. Porqué si intentamos empezar desde cero, nunca podremos con las grandes empresas... para eso buscamos inversionistas... y es de aquí que nace la cultura del startup: consigue inversionistas, crea una empresa, crea un producto, y dedica oraciones a que una empresa grande compre la empresa que creaste.

---

¿Qué es más fácil: invertir Z millones para crear un negocio o invertir Z millones en un negocio que ya existe y ganar dividendos?

En teoría es más fácil ser inversionista... bueno, si ya tienes los Z millones, eso es.

Revisemos el famoso cuadrante del flujo del dinero para los programadores:

- El empleado tiene escaso crecimiento... compite con sus compañeros por un acenso, y carece de libertad de tiempo y espacio. Probablemente es mal pagado en términos de lo que se espera de la persona para el pago que recibe. Esto es lo común.

- El auto-empleado tiene un poco más de libertad, pero carece de estabilidad... y el crecimiento no es mucho mejor porque los cientes no valoran el trabajo. De hecho, hay otro programador que ofrece lo mismo pero más barato... esto es rebajarse para conseguir la venta... a veces es lo que hay que hacer.

- El empleador... ¿si hay de estos? Al menos donde estoy las empresas de software no prosperan. Debido a que hay empresas más grandes en otras partes del mundo y a que el software tiene la ventaja de poderse entregar inmediatamente en cualquier parte del mundo. El que crea una empresa de software entra a competir en el mercado internacional, casi que por accidente, y no es fácil a menos que tenga algo realmente innovador.

- El inversionista. Bueno, este ya no es programador, ¿o sí?

Para invertir en la bolsa de valores hay software y plataformas de red. La gente escribe código para vigilar la valoración de inversiones y buscar candelabros de origen asiático (quien entendió entendió). Mientras que esto sigue siendo una forma de software... es definitivamente un océano rojo.

---

El conocimiento de sistemas no es para hacer software. Es para entender los resultados, en especial cuando no son los que esperamos.

La gente no valora este conocimiento. Sin embargo esto no es solo por las desventajas de pueda tener la profesión... también es porque la mentalidad (y la realidad de muchos) es que no hay dinero. Qué el dinero no alcanza para todo lo que queremos.

Tal vez sea un llamado al conformismo. O un llamado a alejarse del consumismo. Pero definitivamente es un llamado a ahorrar...

¿Porqué la gente no ahorra? No es falta de conocimiento. La gente sabe meter dinero debajo del proverbial colchón.

No abrimos una cuenta de ahorros porque nos quieren cobrar manejo de la tarjeta, porque tenemos que declarar impuestos y porque necesitamos la firma de un contador. El proverbial colchón gana.

A mi me dicen que tengo que demostrar mi actividad económica para abrir una cuenta de ahorro. ¿Qué pasa si necesito una cuenta de ahorro para iniciar mi actividad económica?

Y si somos auto-empleados no accedemos a créditos por entidades financieras porque, bueno porque si no somos empleados tenemos que tener una empresa por X años antes que nos presten.

No me extraña tanto que los cobra diario sean un flagelo. El acceso a micro créditos es vital para reducir la pobreza en países en vía de desarrollo... pero a nuestro país le gusta pretender que no es uno de esos.

Mi generación no aprendió a hacer trámites porque eso no lo enseñan. Y menos mal no lo enseñan porque el gobierno ha venido cambiando la forma de hacer tramites para reducir el uso de papel y aprovechar mejor los sistemas de información... pero igual hay que perder el día en una fila para que te digan que no puedes hacer lo que quieres hacer porqué te faltan unos papeles que no los llevaste porque en el sitio web no los mencionaba.

---

Actualmente mi fuente de patriotismo que hay gente que llega a mi país (bueno, en realidad no es mio) buscando un lugar mejor.

Es increíble lo que la mente hace con nosotros... yo a veces pienso que me quiero ir a otro país, pero que no puedo porque no hay dinero. Pero hay gente que llega a mi país (ok, de nuevo, no es mio) a pie y a penas con lo que puede cargar encima.

Yo podría decir que esta gente, que tiene una mentalidad que les permite tomar empleos que los nativos no queremos de todas formas (debido a la mentalidad que tenemos) nos viene a quitar las riquezas o lo que sea... o podría pensar que estamos mejor que de donde ellos vienen. O tal vez podría pensar que de donde vienen estaban mal, por culpa de estas personas.

Entonces, ¿Con que cara voy a ir a otro país buscando un lugar mejor? - Es absurdo. Lo correcto sería tratar de arreglar la situación aquí. ¿Pero yo quien soy? Yo no tengo poder. Los que tienen poder lo tienen gracias a la palanca, la rosca y otros elementos de la mecánica.

---

La meritocracia suena bien: Que aquellos que tienen los conocimientos consigan los puestos. Sin embargo aquellos que tienen los conocimientos son los que tuvieron una mejor educación... qué mejor ni que carajo! aquí no importa si tienes los conocimientos o si tu educación fue mejor. Lo que importa es cuanto vale tu educación. Y para una tener una educación que vale más, hay que pagar más. Por tanto los que tienen una educación más valiosa son los hijos de los que tienen recursos. Debido a esto, las personas que tienen recursos tienen hijos que acceden a educación valiosa y llegan a tener puestos que les permiten tener recursos para darles educación valiosa a sus hijos... la meritocracia significa que los puestos se los quedan las mismas familias de siempre.

En la teoría a veces suena bien. En la practica, no tanto.

Ah, ¿y la democracia? La compra de votos no es como antes. Antes te daban un billete por votar por alguien. Ahora le dan un billete al alcalde para que haga unas obras y le diga a la gente que esto fue gracias a alguien y que voten por ese alguien. Lo cual, al menos, es legal... creo. Al menos no hay tantos muertos votando. Y ¿qué pasa si la persona que eligen no cumple lo que promete? Nada. Las promesas de campaña no son un contrato.

Y es qué el candidato a un puesto publico en la mayoría de los casos no tiene experiencia en dicho puesto publico (puede que tenga en otros puestos menores). Esto es porque, para evitar que los políticos se perpetúen en el poder, hay limites en cuento a los periodos que pueden ejercer. Entonces estamos, por definición, montando a un montón de inexpertos.

Tal vez los hijos de un político anterior son los que están mejor preparados. Mejor preparador para ejercer, y también para robar.

---

El conocimiento no es para crear. Es para entender los resultados, en especial cuando no son los que esperamos.

Pero tengo que decir que se necesita sabiduría para hacer algo al respecto. Yo me puedo dar cuanta que las consecuencia de una decisión no son las que mejores... pero eso no significa que sepa que hacer para mejorar la situación.
Add a comment...

Post has attachment

Perhaps, at some point in the development of a class, you will find that there are two sets of methods:

- Methods that make the class capable of the things you need.
- Methods that make the class suitable for the things you need.

This can happen bottom-up: Your class can already be used to do `X`, because `X` is very common you decided to add methods to support it (making it easier and less error prone to do `X`). Alternatively, it can happen top-down: You created the class to do `X`. In order to do it, you need some more primitive functionality, and you realize that functionality can be useful in other cases.

Whatever the case, you ended up with this implicit division inside the class. An indicator for this divide is having fields that you should only access in certain particular way. This will lead to code repetition where multiple methods use the same code to access the field. You may extract that repeated code into new methods and “constraint” all other methods to use these instead of accessing the field directly. Your methods that access the field directly are your capability methods.

*Note*: If you end up with multiple distinct set of capability methods, depending on the fields they access, then you have multiple concerns. Separation of concerns is another topic. In this post, I worry only about classes with a single concern.

Sometimes we are motivated to move suitability methods out of the class. For example, to make the divide explicit, which reduces potential defects. Alternatively, because the capability methods could be useful in situations where the current set suitability, methods are not (but a different set might be).

A simple approach to separate suitability and capability methods is to have a capability class `C` with only the capability methods, and then implement the suitability methods as utility methods on a static class or module (or extension methods when possible). That is often the best option.

Rarely using utility method is the wrong option to separate capability and suitability is the rare case. The main situation where utility methods are not a good idea is when you constantly need to pass other state objects to the utility method aside from the capability object. It makes sense to create a suitability class `S` that encapsulates that state. At that point, it makes sense to make those utility methods regular methods of the new suitability class.
Add a comment...

This is my idea for AI safety:

1: Ban mounting AI on a robot body. If the AI has to manipulate a robot body, it must be done via network, never mounted. Don't let the Ai run away. That network access will happen after the interface described below.

2: The AI server will interface through a glass transparent conductive film*. Text and images will be presented to a screen on one side, and a cam will take the feed on the other side. This is how input and output works for the AI. Since this is a different machine (that the Ai will not have access to manipulate it directly), this one can have safeguards built, and can use software known to be correct (so that there are no exploits by regular input).

*: so that it is part of the faraday cage described below.

3: The AI server will be inside a faraday cage that will stop any signal used for long range comunication. A door system similar to that of submarines will be inplace so that the faraday cage is never open.

4: If at all possible, the area where the AI server is located will have wireless communication banned. The United States National Radio Quiet Zone would be great for that.

5: For access to the server room, full body scan will be required, and all items that enter will be accounted for. Nobody smugle parts in our out.

6: The AI server will use custom hardware, not compatible with regular pieces by physical protocol (it just doesn't connect). This custom hardware will be tested so that it can't be repurposed as long range antenna (that also means to not use long cables).
Add a comment...

Yo tengo este problema: no termino lo que empiezo. Y aun así, me siento sin saber que hacer.

Tengo una serie de proyectos empezados y no culminados. Y no tengo ninguna motivación por alguno de ellos.

Mi introspección me ha llevado a algo que ya sabia: yo soluciono problemas. Sin embargo, para estar motivado tengo que ver el problema.

---

En el pasado tenia este ciclo: trabajar en proyecto, cansarme de ese proyecto, jugar, y de jugar tenia la motivación de algún proyecto.

La razón por la que se daba ese ciclo - y supongo que aun hoy se daría - es porque jugar me deja ver problemas con - y mediante de - los juegos, y esto alimenta mi motivación por crear juegos.

---

Por un buen tiempo vi el problema de elegir que hacer como eso... un problema. E intenté darle solución, creando una estructura que me permitiese llevar registro de ideas, proyectos y dependencias. Sin embargo sin la motivación - es decir: al dejar de ver el problema[1] - no terminé el proyecto.

[1]: Una vez empiezo a trabajar en el proyecto para solucionar el problema de decidir que hacer, ya he decido que hacer, por tanto ya el problema no está presente.

---

Por tanto necesito algo que me muestre problemas. Ahora, en teoría un jefe sería una buena forma de obtener eso.... lamentablemente, no soy bueno con la autoridad... por otro lado, en los juegos en linea, he encontrado que puedo ayudar a otros.

Ahora, yo no pretendo ayudar a todos, eso sería absurdo, estresante e imposible.

¿Como puedo encontrar problemas adecuados para mi?

---

En vídeo juegos existe el concepto de la curva de dificultad [2], la idea es que se puede visualizar como una curva la relación de esfuerzo y tiempo... a grandes rasgos la curva debe aumentar entre mas tiempo pasa, al observar con mas detalle, la curva ideal tiene ondulaciones de forma que no lleva a la persona a su limite todo el tiempo, sino  que alterna entre ofrecer nuevos retos y aplicar lo aprendido [3].

[2]: Similar a la curva de aprendizaje.
[3]: Comparar con regímenes de ejercicio, y con el método pimsleur de aprendizaje.

Si pudiera tener eso, sería ideal.

Si el sistema laboral estuviera organizado como un vídeo juego, sería ideal.

---

Lamentablemente solucionar problemas plantea mas problemas. Y no me refiero a los problemas que se descubren una vez se soluciona el problema... sino que me refiero a los obstáculos que hay que superar para solucionar el problema, los cuales plantean problemas en si mismos.

Debido a lo anterior, al intentar solucionar cualquier problema inevitablemente veré otros problemas. Por lo que creo que perder la motivación de resolver el primer problema es inevitable.

---

Ahora, podemos plantear esto como un problema de concentración o falta de enfoque o visión. Es como decir que me distraigo pavimentando el camino para llegar a mi destino al punto que me olvido de cual es mi destino y en su lugar creo un plan para pavimentar la ciudad.

---

No he solucionado esto.

----

Addendum: A veces he dicho que hago cosas porque no me gustan. En particular hago cosas porque no me gusta como son y quisiera poder reemplazarlas con algo mejor.

De hecho, muchas veces que he tomado esa clase de proyectos, ha sido por ayudar a alguien. En cierta forma se puede decir que me agrada la idea que me traigan problemas...

El detalle con eso, es que en el momento en que se vuelve un negocio, yo estoy prestando un servicio por el que voy a recibir un pago y estoy obligado a cumplir... estoy obligado a cumplir. Tengo que terminar, no puedo dedicar tiempo a pavimentar el camino, sino que tengo que caminar el camino rustico.

En cambio si ayudo a alguien, yo puedo avanzar el 30%, el 50%, el 80%, el 90% y esta bien. Es ayudar.

Muchas veces he pensado que quiero hacer un producto genérico, algo que pueda vender hecho, que tanga muchos clientes, y de esa forma esos clientes no son jefes disfrazados. Sin embargo... tal vez me he estado engañando - al fin y al cabo cada vez que intento crear ese algo genérico que puedo vender... no lo termino.

---

Supongo que tengo el dilema entre cambiar y encontrar algo para lo que sirva así como soy. No se hacer lo primero, y no se si existe lo segundo. Tampoco tengo como estimar los costos de ninguna de esas opciones.

---

De nuevo, no he solucionado esto.
Add a comment...

Post has attachment
English:

10 Famous Stolen Inventions
Including: Radio, Telephone, and Telescope

Español:

10 Famosos Inventos Robados
Incluyendo: Radio, Teléfono, y Telescopio
Add a comment...

Mi Grado? A nadie le interesa mi grado.

A la universidad, no tiene porque interesarle... ellos ya han recibido el pago de todos los semestres, estoy paz y salvo. Qué ganan ellos dándome un grado?

A mi tampoco me importa mucho... el tiempo y dinero invertidos son costos hundidos, y cuando inviertes en algo que no da frutos, la decisión racional es dejar de invertir en eso.

Además, el grado no va a cambiar las cosas para mi. No tengo empleo, ni espero que un diploma me de empleo mágicamente. Se supone que lo haga más fácil, aunque estoy convencido que no es así. Mi vida va a ser más o menos la misma que es ahora.

Hablamos de un grado de especialización, así que el ritual de paso ya no me importa. No quiero ni salón, ni toga, ni fiesta [no entiendo porque mis compañeros han dicho que si querían, en particular siendo yo siendo de los más jóvenes, si es que no soy el más joven].

Tal vez la universidad quiere ahorrarse imprimir diplomas, tal vez es muy caro. Tal vez me salga mejor ahorrarles el problema y conseguir unos falsos. Qué más da, a quien le importa.

Bueno, le importa a mi familia que quiere ver que me den un cartón. De todas formas el diploma no cambia las cosas, es una entrada más en una hoja de vida que representa una habilidad para que hay poca demanda.

Honestamente no entiendo a que debería dedicar mi tiempo... si voy por lo que todos toman, hay mucha competencia, y no hay porque van a preferir a quien tiene menos experiencia (a menos que sea para no pagarle justamente, por supuesto)... y si voy por lo que nadie toma, bueno... por algo no lo toman, no hay demanda.

Énfasis en debería, no sé que espera la sociedad de mi. Yo sé que quiero hacer, y también sé que no tengo los medios[1]. De hecho sé que presentarme a una entrevista de trabajo diciendo que quiero tener experiencia en la vida laboral y que me gustaría retirarme en unos años para hacer algo propio le dice al entrevistador que no pueden confiar en mi estabilidad en ese empleo.

Yo sé que en teoría puedo conseguir un empleo como desarrollador de software, aunque los empleadores no piden habilidades sino experiencia con herramientas... que experiencia si todos piden experiencia? Pues por algo existe toda una "ingeniería mecánica": roscas, palancas, etc... esa es la forma de conseguir la primera experiencia, y es una desgracia.

Yo sé que en teoría puedo dedicarme a hacer entrada de datos o similar. En este caso mi grado de especialización es algo malo, hace difícil desear un empleo en estos cargos, hace difícil pasar la barrera de "estás sobre-calificado" y hace difícil convencer al psicólogo o psicóloga que en verdad me interesara dicho empleo.

Yo sé que en teoría podría intentar optar por un cargo en el área de mi especialización, sin embargo hay poca oferta de empleo... y probablemente no lo quiera de todas formas. Yo elegí mi especialización porque quería saber y no porque quería hacer - lo que supongo que fue mi error. También la elegí porque no habían muchas otras, al menos no muchas otras asequibles.

Bueno, yo creo que sé. No todos los experimentos vale la pena realizaros, y los pocos que he hecho soportan la teoría.

Sin embargo peor que una especialización es un agujero en la hoja de vida con varios años de los que me van a preguntar que andaba haciendo en cualquier entrevista de trabajo. ¿En verdad cuesta tanto imprimir un cartón que la universidad no lo hace?[2] No es que me sirva de mucho, el único verdadero uso que tengo para ese cartón es tener la confianza que puedo demostrar que he hecho algo - si es que a alguien le importa.

En fin... volveré a trabajar en un proyecto que a pocos le interesa, que tal vez solo a mi me importa, y que no hace nada por si solo. Énfasis en "por si solo". Honestamente no sé atraer la atención de otros... de hecho, en mi experiencia escribir tanto como lo he hecho en este post es una mala idea.

No importa.

[1]: existe una brecha entre lo que puedo producir y lo que la gente quiere. No tengo formas de saber si es posible llenar dicha brecha solo con la experiencia que cabe en una vida humana, y no creo tener la creatividad para encontrar algo que la gente quiera y que yo pueda producir - al menos no la he tenido hasta ahora. Sin embargo tampoco espero que un tercero con más recursos me dedique el tiempo para intentar convencer de invertir en mi... yo no lo haría.

[2]: ¿Y que hay de ahorrar papel? ¿No puede ser mi grado un registro electrónico con una firma digital y con copia en una base de datos nacional llevada por una institución del gobierno? No, no puede, no tengo ese poder.
Add a comment...

Speculation on how version numbers came to be
---

The naive approach is to use a single number. Going from version 1 to version 2 makes sense.

Yet, when small changes or fixes are introduced but not dimmed worthy of increasing the version number, people may consider to turn to decimals. This leads to version such as 2.5.

Yet using decimals doesn't solve the problem. What happens when you have too many fixes between versions? In particular, what comes after 2.9? If you have been parsing the number as a decimal 2.10 will appear to be a lower version, but 3.0 isn't what you want either.

You may consider to use two digits after the decimal separator instead of one. So it goes 2.01, 2.02, etc.. this only pushes the problem farther, but doesn't solve it either.

If you got cornered at this situation, the rational solution is to add a third component in the form: 2.9.1 and since this breakes parsing as decimal in an evident way, from there onward you can consider each component to be independend. Allowing for versions such as 2.10.0.
Add a comment...
Wait while more posts are being loaded