Hola, yo trabajo como freelance, pero desde hace varios años tengo un cliente constante. Y últimamente esta necesitando más personal dado que hay muchos proyectos para una sola persona.
Los sistemas que posee la empresa y los que desea desarrollar son sistemas de requerimientos extremos, por ejemplo agentes que reciben datos de miles de clientes cada minuto los cuales deben ser procesados y los resultados insertados en VLDBs (Bases de datos gigantes, millones de tuplas, con alta cantidad de lecturas y escrituras), sistemas web para trabajar con estas VLDBs en tiempo real (y visualizar el 100% de datos recien llegados), etc.
Los lenguajes de programación utilizados son muchos, Assembler, C++, Java, .NET, VB.NET, etc, y los temas requeridos también, desde lo básico, diseño web, bases de datos, páginas web hasta matemática y física pura asociada a sensores de precisión media o baja (por lo que el software debe ayudar en el dato a mostrar ya que trae un error alto).
Personalmente, estoy buscando además personas que sean lo suficientemente capaces para tal vez poder abrir un estudio de desarrollo de videojuegos en el futuro. Considero que una persona que pueda trabajar sin problemas bajo tantos campos como los expuestos sería muy útil en un equipo pequeño.
Por lo tanto no estoy buscando personas con capacidades específicas, sino únicamente una persona que tenga la suficiente habilidad mental y como programador para poder ayudarme a terminar estos proyectos más rápido.
Recomendado (no es absolutamente necesario):
Lectura y escritura de Inglés perfecta (muy útil)
Dominio de un lenguaje de programación.
Buena fundación en programación: Orden, semántica utilizada, estructuras lógicas, estructuras de datos.
Saber buscar respuestas (google, manual, etc, poder encontrar la respuesta en una sola búsqueda sería excelente).
Alta lógica (resolver problemas complejos por cuenta propia, de ser muy bueno en razonamiento matemático seguramente no habrá problemas)
Cualquier interesado envieme un PM para quedar en una evaluación. La empresa esta dispuesta a contratarlos. Y yo estoy dispuesto a ayudarles a mejorar/entrenar en caso existan las aptitudes pero falte el conocimiento (por ejm. en el caso de un "practicante").
Ejemplos para autoevaluación, que conste que es autoevaluación:
1. Hacer un programa que bote la serie de Fibonacci: 1,1,2,3,5,8,13,21,... (debes resolverlo por tu cuenta) (para los que dominen C++ o similar, sin utilizar variables temporales).
2. En un plano cartesiano (x,y) dibujamos varias lineas rectas. Cada linea inicia donde termina la anterior, y la ultima linea termina donde inicia la primera (ejm. buscar Pentagrama y entrar a la pagina de wikipedia que trata de geometria). Luego pintamos el area que se forma. Definir un algoritmo veloz para poder saber si un punto x,y se encuentra dentro o fuera de esta area. (debes resolverlo por tu cuenta)
3. ¿Sería útil o no tener la clase que maneja el audio del videojuego como un singleton? (puedes buscar informacion si deseas, pero la idea es que no busques la respuesta a la pregunta planteada sino que la formes tu mismo)
4. Tienes un sistema web en php que usa una librería arcaica que únicamente funciona con php 4-, asimismo tienes otro sistema que debido al uso de sintaxis avanzada de objetos requiere php 5+. Es necesario colocar ambos en un solo servidor, bajo el mismo url base para el día de mañana por lo que reescribir el código de cualquiera de las dos no es factible. Solucionar el problema.
5. Se tiene una base de datos "VLDB" que tiene 50 escrituras por segundo en su tabla mas grande, de 100 millones de tuplas. Al mismo tiempo tiene 20 lecturas por parte de consultas web, estas lecturas por lo general retornan solo 100 tuplas cada una. Al mismo tiempo tiene 1000 lecturas por parte de sistemas automatizados. Además, dada la cantidad alta de escrituras, el espacio de disco duro esta por acabarse. Comprar más (y aún más en el futuro) discos duros de 15000rpm no es factible económicamente. Por lo que se decide eliminar automaticamente todas las tuplas con más de 2 meses de antiguedad para así mantener la base de datos en un estado controlable en el mediano plazo. Se espera que la carga sobre la base de datos aumente lentamente con el tiempo, indefinidamente.
Es necesario mantener esta información sin embargo, por lo que se diseña un agente, instalado en una desktop comun, que primero descarga las tuplas a eliminar y las guarda en discos duros mas lentos (y mas baratos) como backup, y luego procede a eliminarlos de la base de datos principal. Al sumar borrados a la alta cantidad de lecturas y escrituras se generan deadlocks con extrema frecuencia. Diseñar una forma de solucionar este problema, tener en cuenta el costo de la solución y su aplicabilidad a futuro.