[Longrid] 20 años de carrera de programación en una pequeña ciudad grande

Hacemos lo que debemos porque podemos - GLaDOS

Izhevsk, hoy


El primero de febrero marca exactamente dos décadas desde que comencé a trabajar formalmente como ingeniero de software:

1  1999

Continúo hasta el día de hoy. Y por alguna razón, me parece que muchos estarán interesados ​​en familiarizarse con la historia de cómo hacer una carrera de programación horizontal completamente exitosa sin salir de su ciudad natal, y haciendo casi todo este tiempo tareas bastante interesantes, si no locas.

Por supuesto, cada persona tiene una medida de "éxito", pero mi hecho es que durante los últimos 15 años he estado trabajando en puestos de alto nivel en proyectos, principalmente vinculados a grandes clientes corporativos o extranjeros, y casi cada nuevo trabajo me encuentra por mi cuenta. Y aún no está cansado.

Quiero advertir que mi historia es un recorrido típico en el formato de una entrevista en primera persona, a veces aburrida y casi sin fotos, porque básicamente soy un back-end. Puede ser difícil para un lector sin antecedentes técnicos, ya que está lleno de jerga del programador (intenté explicar algunos de los términos, pero no todos). Y también memes antiguos decentes, detalles nostálgicos y estudios culturales locales.

Pero te encantan las autobiografías con chistes autistas , ¿no?

Izhevsk, mediados de los ochenta


Todo comenzó hace mucho tiempo. Un día, mi madre, que trabajaba como programadora en un instituto de investigación soviético ordinario, que se dedicaba a la ingeniería inversa de muestras de tecnología informática occidental, me llevó a trabajar, para mostrar qué, cómo y dejarme jugar. Recientemente llegaron a contrabando "personal" - PC / AT, que ejecuta todo tipo de excavadoras y tetris.

Antes de la aparición de los "empleados", el instituto de investigación trabajaba para la UE soviética (clon IBM S / 360, ocupa una habitación) y SM (clones VAX, PDP-11, etc., generalmente un gabinete del tamaño de un piano), por lo que en casa utilizamos algunas bobinas. cintas perforadas e impresiones con listados de ensamblaje. Mi madre también realizaba periódicamente viajes de negocios con paquetes de "panqueques", unidades magnéticas extraíbles que pesaban 15 libras cada una, temerosa de los viajes en trolebuses, así que estaba mentalmente preparado para el recorrido. Se esperaba ver algo similar al escenario de las películas de ciencia ficción de entonces.

Y lo vi. Pero los gabinetes, en los que algo giraba, parpadeaban con bombillas y vibraban con los ventiladores, no eran tan impresionantes como el Digger, incluso en una pantalla monocromática. Al igual que el software de diseño de PCB que los dibujó en el trazador (viendo un marcador de tinta volar sobre una hoja A1, parecía una especie de magia), y lienzos interminables de listas de ensambladores ya familiares para máquinas herramienta CNC en las que estaba trabajando en ese momento madre

Huelga decir que la decisión de convertirse en programador tomó forma en la cabeza de un alumno de segundo grado al instante, y quedó firmemente arraigada allí. Tenía siete años y no recuerdo si alguna vez soñé con ser astronauta, bombero o con lo que los niños generalmente quieren estar allí antes, pero tan pronto como decidí que me convertiría en programador (además, bueno, porque cuál es el punto volverse malo?), nada más me interesaba.

Y para convertirte en un buen programador, necesitas estudiar mucho. Terminé las primeras tres clases de una escuela integral con excelentes calificaciones, y pude ingresar a un liceo con un sesgo matemático. En general, en ese momento en la ciudad había varias escuelas con una buena calidad de educación: 29, 30, 41 (liceos), 56 (gimnasio). Cada uno es una marca local y una guardería dinástica de carácter técnico, humanitario o gerencial, según el perfil, elite. Especialmente los "treinta": casi todos los gerentes de fábricas locales (e Izhevsk era tradicionalmente una fábrica de la ciudad) se graduaron de ella y, por regla general, la clase mat. Como, sin embargo, es mi madre (y eventualmente también se convirtió en una líder, pero más sobre eso más adelante).

Y si hablamos de la escuela, el hecho mismo de que en el pasillo del segundo piso había mesas de ajedrez con un conjunto completo de figuras, que tenían una demanda constante de descansos, y las cortinas de encaje en las ventanas eran de una blancura deslumbrante, entonces vale la pena sorprenderse de los exámenes de traducción a partir del séptimo grado. en el que los estudiantes locales participaron de manera común con niños de cualquier otra escuela. En ese momento, "treinta" todavía tenía la marca (la dejó caer después de mi lanzamiento y, desafortunadamente, por completo).

La cultura era alta y la competencia era muy feroz. De los 30 excelentes estudiantes que vinieron al quinto grado conmigo, diez permanecieron en la dirección matemática para la final, el resto se dispersó de otras maneras, o incluso abandonó. De hecho, había dos clases, pero solo los estudiantes de la primera, que ocupaban la mitad superior de la calificación académica, podían participar en el equipo de la Olimpiada, que tradicionalmente tenía lugar en la República y Rusia (y, a veces, en competiciones internacionales).

Pasé el rato en el sexto lugar, subiendo periódicamente más alto, por lo tanto, durante la preparación para los Juegos Olímpicos, a menudo me encontraba con el resto de los muchachos avanzados en los escritorios traseros, donde en lugar de trabajo independiente resolvimos problemas +, tareas ° e incluso tareas **. En verdad, no tengo un pensamiento olímpico: profundizo bien en la esencia de los problemas, pero pienso muy lentamente y siempre hago varios enfoques de prueba, por lo que nunca me he movido por encima del escenario de la ciudad. Bueno, al menos participé, y el resultado puede considerarse entrenamiento cerebral para no estándar (pero reproducible, en contraste con las soluciones de olimpiadas típicas, que generalmente son estrictamente ad hoc).

De todos modos, incluso el último trío según los estándares de una guardería de élite habría sido un excelente estudiante en una escuela regular, y en la universidad me llamó ... sin embargo, en orden.

Después de muchos años, evaluando mis capacidades, a veces empiezo a lamentar no haber elegido ninguna universidad capital en lugar de la universidad técnica local: mis compañeros se graduaron con éxito del Instituto de Física y Tecnología de Moscú y la Universidad Estatal de Moscú (y algunos eventualmente trabajan en Google), pero esto es arrepentimiento pasa rápidamente cuando recuerdo cómo estudié en semestres generales antes del "ecuador". No estudié en absoluto: el equipaje escolar, incluidos los cursos adicionales impartidos por los mismos profesores universitarios, fue suficiente para recibir "máquinas" en casi todas las materias. Sin embargo, ni siquiera tomé los introductorios: me convertí en estudiante en abril, habiendo completado los cursos preparatorios y obtuve el puntaje más alto en los exámenes simulados. Fue, como saben, no difícil.

De todo el programa universitario, al final, al menos de alguna manera, solo necesitaba un curso de base de datos: a fines de los noventa estaba desactualizado durante quince años, si no más, y la columna vertebral de la enseñanza principal estaba hecha por ex programadores de fábrica. Lo que podrían enseñar, a excepción de la primitiva "cascada" y la programación de procedimientos, es una pregunta retórica. De las ventajas de tal "educación": puedo leer ensamblador y entiendo cómo funciona el sistema operativo con iron. Pero la programación industrial en su sentido moderno, era decididamente imposible de aprender en una universidad.

Solo la autoeducación en la batalla podría salvarme, y en el segundo año encontré un trabajo. Justo allí, en el departamento, un administrador del sistema. El trabajo es regular, pero garantizó el acceso ilimitado a los servidores de la facultad e Internet, y también le permitió pasar el tiempo en el laboratorio al menos durante días, y pasar tiempo no solo charlando en IRC con chicas de una universidad cercana, sino también codificando algo para todo tipo de cosas al azar. clientes El salario mínimo en 1999 fue de 83 rublos y 49 kopeks (¿por qué pagarle más a un estudiante?), Y una botella del Ramo Chuvashia en la tienda del decano frente al edificio de la escuela costó 4.60, así que a veces nosotros, con otros administradores de estudiantes similares, entregamos un par de cajas cerveza barata para educación física, para no perder el tiempo en círculos sin sentido en el estadio.

En lugar de fisra, se desperdició tiempo en nuestras propias embarcaciones en Perl y tcl (es muy interesante programar el chatbot de Irz para entretener a las chicas de una universidad vecina), así como para desarrollar un sistema interno para organizar torneos de acuerdo con las reglas de ACM .

Izhevsk "mehan" también encontró su propio equipo olímpico, que en ese momento también ocupaba lugares lejanos de los últimos lugares en competiciones internacionales, pero me pareció mucho más interesante proporcionar infraestructura para los torneos que arriesgarse en ellos. Además, se suponía que la clasificación era regular. Además de los lenguajes absolutamente bajos y de secuencias de comandos, no rehuí las utilidades para la contabilidad en un grupo de 1C y Visual Basic, o para el decanato en FoxPro y Delphi, y por diversión escribí applets en Java para mi "hámster" en el servidor de la facultad.

La práctica no es superflua, como el dinero. Además, siendo flojo para los primeros cursos, obtuve un puntaje para los estudios y me quedé sin una beca, y al final fui a la academia por completo debido a la sesión fallida. Sin embargo, la gripe que se cayó de los pies y la depresión que colapsó después del amor infeliz también jugaron un papel en esto.

Sea como fuere, no logré completar el cuarto año la primera vez, y tuve que pasar seis meses de tiempo libre para un buen uso, mientras trataba de no sacudirme en el ejército.

Verano 2001, Izhevsk


¿Dónde acudir a un estudiante sin instrucción con la capacidad de administrar nyx y el equipaje disperso de habilidades prácticas de programación para algo simple? No se llevaron a ninguna parte sin un diploma, a excepción de un administrador del sistema, pero me encargaría de cualquier trabajo, solo para esperar el tiempo hasta que me recupere.

Afortunadamente, el escritorio apareció con el nombre de "Virtual Izhevsk". Un estudio web microscópico, pero como se suponía que era cualquier estudio web que se respetara a sí mismo, con un catálogo de recursos regionales, un servidor web y muchos proyectos de diferentes niveles de marginalidad. ¿Qué le parece, por ejemplo, el concurso de belleza en línea "Miss BikiNu-2002"? ¿Y si digo que tenía una sección cerrada para patrocinadores, con fotos más interesantes de "modelos"?

La misma sumadora, en resumen. Por otro lado, el director de la oficina tuvo la idea de arreglar todo el desarrollo del estudio, desde el freno Perl hasta la versión 4 de PHP recién lanzada, porque en algún lugar había leído que tenía el futuro (y era cursi más rápido). En general, el director no se equivocó. Duré allí solo durante seis meses, pero al menos aprendí a escribir tolerablemente bien en PHP, y, debido a los detalles de los proyectos, tuve que cuidar la seguridad. Intentaron romperlos con el propósito de engañar a los votos: los premios de patrocinio en las competiciones fueron bastante buenos, como viajes a una compañía de amigos en Turquía, y las chicas de esa universidad muy vecina reunieron equipos enteros de simpatizantes que estaban listos para llevarlos a la cima.

También fue interesante la iniciativa del mismo director de reunir una comunidad local de desarrolladores web, un foro en el que todos los desarrolladores y proveedores de Izhevsk pasarían el rato, e imagina que todavía está vivo de alguna manera, incluso en la quinta reencarnación . ¿Qué otra ciudad tiene su propio festival de rock para 1.500 personas de TI? Y en Izhevsk hay RockIzhaiti. Todo comenzó allí, en un tablero de mensajes autoescrito, donde los desarrolladores y gerentes de una docena de oficinas locales inicialmente compartieron culturalmente sus proyectos y experiencias a puertas cerradas, y luego comenzaron a criar srachs épicos que rápidamente se desconectaron. Los últimos ecos de esas legendarias batallas verbales y venganzas comerciales de principios de la década de 2000 todavía arden en la comunidad local.

Me recuperé en la universidad, y no había más razones para pasar días y noches en el sótano, escondiéndome de un compañero mayor.

Pero el destino mismo arrojó inmediatamente el trabajo en un estudio web un par de pisos (y el rango de proyectos) más alto. Para entonces, mi madre había completado su carrera de programación, pero no abandonó la TI (no es tan fácil tomarla y dejarla), pero consiguió un trabajo como subdirectora de una de las divisiones de infraestructura de esa universidad vecina, desde donde las chicas que ya se mencionaron un par de veces en esta historia. Los niños, sin embargo, también estudiaron allí, e incluso en las especialidades de "informática en el campo de algo", pero la universidad no es técnica.

La unidad se llamaba "Centro de Tecnologías Multimedia e Internet", y se dedicaba formalmente al apoyo de sitios universitarios, sistemas de aprendizaje a distancia, etc., pero en realidad era una estructura híbrida como parte del entorno empresarial de la universidad, es decir, estaba haciendo dinero, y no solo para mantener la imagen.

El departamento multimedia produjo discos de presentación para fábricas locales (por ejemplo, Izhmash y SEGZ ), y el departamento de tecnología de Internet fue el mismo estudio web que regularmente recibía premios en exhibiciones de la industria. Honestamente, la pared en la oficina del director, colgada con diplomas del piso al techo, inspirada. Básicamente, los clientes que llegaron al tema acordaron el desarrollo del próximo sitio representativo.

Simplemente ocurrió un pequeño problema: el equipo de programadores y diseñadores, que ganaron todos estos premios, se llevaron y dejaron el edificio en su conjunto, llevándose la mitad de los proyectos actuales con ellos. Era difícil acomodar a una multitud en constante crecimiento en un personal universitario que no era de goma y, en general, querían algo más.

Necesitaba urgentemente un reemplazo de "bueno, al menos alguien", pero fui muy exitosamente libre. Mi madre simplemente me arrastró por el cuello, me arrojó detrás de la consola del servidor de la oficina y me ordenó tener todo en línea en mis propias manos. El departamento multimedia también terminó en manos del hijo de la novia de mi madre, ¡y comenzamos a pensar!

De hecho, es difícil imaginar una situación más estresante: tomar el lugar de profesionales reconocidos, atrapar desarrollos extraños y completamente desconocidos que cuelgan en el aire sobre la marcha, y pretender que eres capaz de sacar todo esto. Sí, y al menos no peor. No recuerdo los próximos meses: en la mañana tuve que visitar a las parejas (gracias a Dios, no todos, algunos de los artículos que volví a cargar) en mi universidad, luego arrastrarme por toda la ciudad hasta la vecina y pasar el rato allí hasta altas horas de la noche. Y el fin de semana también está dando vueltas en el trabajo. También quería pasar el rato, pero cómo ser estudiante y prescindir de la embriaguez ...

Tomó alrededor de seis meses leer todos los RFC sobre tecnología, todos los manuales de los idiomas y plataformas utilizados, analizar todos los montones de código heredados del antiguo equipo (especialmente los sitios universitarios escritos en una terrible mezcla de versiones tempranas de Java y PHP con extensiones autoescritas), y mantenerse en paralelo. desarrollo de software propio, solo en PHP. No solo porque la nueva escoba debería vengarse de una nueva manera, sino al menos por razones higiénicas: durante los diez años de trabajo del antiguo equipo en proyectos que se llevaron a cabo sin ningún control de versión, se ha acumulado mucha basura, y desde un aspecto nuevo, fue muy notable.

También vale la pena considerar que el mercado en ese momento aún no tenía ningún CMS desarrollado, y de hecho, la situación actual en el desarrollo web era difícil de llamar el "mercado". Cada oficina escribió algo original, con su propio zoológico. Por lo tanto, me rodeé de todos los ejemplos disponibles de " desnudos " de código abierto, y durante el próximo verano, justo antes del quinto año, reuní un CMS simple de las piezas de repuesto de mi foro y "motores" competitivos, lo que hizo posible resolver tareas momentáneas. Además, me quedé atrapado en el tema de la experiencia de usuario, y después de haber estudiado todos los HIG disponibles en ese momento, por alguna razón me impregné de Microsoft Wizards 97, cuya ideología traté de implementar lo más posible en la interfaz, implementando asistentes paso a paso para todas las ocasiones.

CMS,

Por extraño que parezca, pero la broma fue un éxito. No solo logré completar con éxito los proyectos que habían fallado, ya en mi propio motor, sino que también aceleré el desarrollo varias veces. Además, debido a la necesidad de documentar cuidadosamente los proyectos que teníamos, naturalmente tuve la tarea técnica más detallada para un sitio representativo típico de una fábrica típica, así como un manual de capacitación para los autores de los sitios municipales, ya que uno de los proyectos era exactamente tal, y la Ley Federal con la plantilla aún no estaba allí.

Muchos desarrolladores novatos subestiman el poder de la documentación, especialmente el poder de los manuales metodológicos, pero como lo entiendo, en ese mismo momento, después de haber pasado por todos los casos de usuarios y sentir el dolor y las necesidades del cliente, pasé de ser un desarrollador novato a un analista de sistemas novato. Y si antes el trabajo de un programador me parecía una solución para acertijos interesantes, ahora se ha convertido en lo que realmente es: la automatización de la rutina de las personas.


Por otra parte!
Un programador no es un creador. — , , , , , , , .
. -, , « - » . CMS ( ; — ). - , « [sic!] ». 2003 «», .

( , , ) — . , , , . , , , CMS ( , , , , HTML, ).

-, , , — , , CMS, — , , . , , . , 13 . .

( — , , , ; ), , , . , .

, , , , , , .


Una vez que olvidé restablecer el caché del servidor CSS después de restaurar el sitio desde la copia de seguridad, y uno de mis colegas lanzó instantáneamente una captura de pantalla con el diseño completo que había dejado para el enlace a Lebedev. Por lulz. En pocas palabras: un famoso meme.

Pero el enfoque tecnocrático fue ventajoso, y en el contexto de otras oficinas de Izhevsk, nuestros proyectos no parecían peores, y ciertamente existieron varias veces más que la gran mayoría de sus colegas. Y algunos, como Izhmoto.ru, incluso sobrevivieron a la muerte del cliente original. O incluso el segundo.

Por diversión, una vez realicé un experimento completamente inhumano. Hubo un programa de capacitación de este tipo para maestros de informática rural, cuando fueron conducidos a diferentes universidades de Izhevsk de las 25 regiones de la república y les enseñaron un curso sobre los aspectos básicos de la construcción de sitios. Naturalmente, enseñé sobre el ejemplo de mi motor, y no pude evitar aprovechar esta gran oportunidad para realizar pruebas A / B de varias versiones de la interfaz en cientos de desafortunadas. Fue divertido, aprendí algunas cosas completamente inesperadas sobre los patrones de comportamiento y las percepciones de los usuarios (los empleados de Microsoft tenían razón cuando rehicieron la interfaz de usuario de Office a una sensible al contexto: es más eficaz; también es absolutamente imposible eliminar el botón "Guardar" con un disquete de las interfaces).

Pero al final, todavía me aburrí.

Bueno, ¿cuántos sitios web puedes remachar? Bueno, multisitios (esto es cuando una docena y media de sitios interconectados en diferentes dominios, pero en una copia del motor y con autorización de paso). Bueno, portales de documentos (catálogos de documentos colgados con metadatos sobre su árbol de Navidad, con búsqueda en tiempo real de todos los parámetros). Bueno, intranets, video blogs, sitios de medios (solo complementos especializados para el CMS original, que según mis especificaciones fueron escritos por estudiantes graduados).

Era obvio que era hora de entrar, por ejemplo, como el equipo anterior, y salir del edificio. Lamentablemente, no tengo cualidades suficientes para ser director de negocios. Técnicamente puedo, pero ¿por qué? En la web, la luz no convergió y el progreso no se detiene. Lo que era exclusivo en 2002, en 2006 ya era la corriente principal y, en general, Bitrix trajo la creación de sitios web a la nave.

Pero si moverse a un área adyacente. Por que si

Solo en que?

Fui a hablar con varias oficinas diferentes. No en todas partes, el terrible troll con Izhaiti , fue recibido con los brazos abiertos (a pocas personas les encantan los trolls en general), pero la elección fue bastante rica. Era posible ir al escritorio .NET y piezas de hierro para programar (aunque esto es en la fábrica, por lo que es más probable que sea no, que sí). Pero me gustó especialmente la idea de desarrollar sistemas grandes para una empresa sangrienta: solo en este mundo Java manejaba, y solo conocía Java al nivel de esos applets de un "hámster" universal, y un legado de fideos enterrado en un trabajo anterior. También la versión 1.1.

Por lo tanto, acepté la oferta del proveedor local de telecomunicaciones Izhsvyazinvest (era "multiservicio", es decir, proporcionaba Internet, telefonía y televisión; después de la crisis de 2008, morí en agonía y Beeline me compró, pero en ese momento floreció).

Aquí necesitas un pequeño comentario sobre la historia de Internet local. Es bastante diferente del típico ruso gracias a la compañía Mark (no importa cómo se llamara por sus más de veinte años de historia), desde mediados de los noventa, Izhevsk ha estado muy por delante de la velocidad y la cobertura, y a un precio más bajo, no solo en todas las regiones vecinas. , pero también a Moscú. Además, la era de los módems DSL dio paso a la era del cobre, y luego a la óptica doméstica muy rápidamente, y la rápida Internet en Izhevsk se generalizó, y este proveedor fue una excelente forja de personal técnico y administrativo para la industria local. Incluso la fidosnaya tusa local estaba principalmente sobre Markov Ethernet.

Los nativos de Mark fundaron más de una oficina competidora, incluida Izhsvyazinvest. Trajeron con ellos la facturación: un sistema monstruoso que funcionaba dentro de un grupo de Oracle, además, uno clásico, encima del hierro corporativo Sanovo y debajo de un solarium. Casi toda la lógica de negocios de este monstruo chthonic se conectó milagrosamente almacenada, incluso las cartas de pago a los clientes se enviaron desde un trabajo asincrónico. Solo una pequeña parte del panel de administración se escribió en Java (versión 1.4), a pesar de que se generó casi por completo a través de System.out.println (), y parecía ... parecía un infierno. Era imposible mirar la interfaz web del usuario sin lágrimas (y no solo porque era todo 7.5pt).

Especialmente comparado con lo que el panel de administración de mi CMS se había convertido en ese momento. Y era una aplicación HTA , indistinguible externamente de la nativa, e incluso sin requerir un mouse, a pesar de que estaba escrita en JS / DHTML puro. El jefe del departamento estaba tan impresionado que inmediatamente me tomó como especialista en UX. La intención era simple: atraer a un monstruo de facturación hermoso a una interfaz hermosa, rápida, conveniente y nativa, y venderlo a otros proveedores. En términos del conjunto de posibilidades, de hecho, al desarrollarse desde mediados de los noventa, él rompió todos los análogos disponibles como un as, pero los competidores tenían una interfaz de usuario sensata, pero TELSI no la tenía.

Para poner lápiz labial en un cerdo ... Sin embargo, no puede simplemente ajustar una interfaz a la lógica si no tiene puntos finales para algo remotamente similar a AJAX.

La capa de puntos finales tuvo que escribirse integrando en el código existente. Pero en 2006, Java 1.4 ya era una gran reliquia, así que lo primero que hice fue copiar el germen existente del administrador a la versión actual con el mismo peinado y poner el código en orden (sí, tuve que volver a investigar la sustancia heredada). En el camino, estudié la pila tecnológica J2EE, pero debido a los detalles, me he limitado a servlets y todos los enlaces que lo acompañan por ahora, así como a JDBC (necesito extraer el almacenamiento), Velocity (como el motor de plantillas PHP más similar) y, en realidad, Java central.

Gradualmente, se llegó a la comprensión de que toda la lógica relacionada con mostrar al usuario de lado, y especialmente a interactuar con él de manera interactiva, debería retirarse del almacenamiento e implementarse en la capa de servicios en Java, porque los requisitos para que las características cambien con el tiempo hacen que La construcción de llamadas sin procesar de los archivos almacenados a través de JDBC es difícil de mantener (todo debe cambiarse en dos lugares, y con la versión del código, las bases de datos siguen siendo malas, por no hablar del octavo Oracle) y frágiles.

"Está bien", dijo el jefe del departamento.

Me llevó un año sacar todo esto a la luz del día. Año! La cantidad de código era simplemente monstruosa. Puedo recordar un megabyte de código fuente a la vez, y aquí el código solo retiró el almacenamiento por cinco. La mitad de los no utilizados, la otra mitad se llama recursivamente, y en general están entretejidos en tal bola de fideos que era decididamente imposible desenredarlo sin la ayuda del jefe.

Tenía que trabajar seis días a la semana, once horas al día; el resto de los programadores estaban sentados con el apoyo del monstruo existente y no podían ayudarme. El resultado fue un micro accidente cerebrovascular (¡a los 26 años, mi trasero!) Y seis meses en tabletas. Aprendí una lección, desde entonces no me he extendido demasiado. El trabajo no se escapará, pero la salud sí.

Después de un tiempo, resultó que era más conveniente almacenar parte de los datos de facturación en forma de directorios, es decir, no tablas relacionales bastante comunes, sino documentos que consisten en conjuntos de valores clave con metadatos a menudo desconocidos para cada registro. Oracle de forma nativa no es compatible, y en general, con NoSQL en esos años todavía estaba podrido.

TELSI, → TELSI, → TELSI,
Imágenes clicables

Maldición, pero algo me lo recuerda ... Oh, bueno, portales de documentos. Resulta que todos los sistemas de información son sobre la misma persona, si miras de perfil. Bien
De acuerdo, dije. Y en unos pocos meses, implementó un repositorio orientado a documentos en la parte superior de las tablas de Oracle utilizando disparadores, almacenamientos que crean vistas y algún tipo de madre. No funcionó muy rápido, pero parecía funcionar desde media patada. Era hora de poner el minx-bolt en operación de prueba.

Y luego la crisis de 2008 llegó a Izhevsk


Aunque, él vino a todos.

No solo no todos tenían dinero, sino también la oficina, especialmente para mantener a un programador trabajando en una versión futura del sistema. La oficina se apresuró a reclutar nuevos clientes, solo para sobrevivir, y decidieron dejarme para el mantenimiento rutinario del antiguo monstruo, porque la carga aumentó y el nuevo proyecto quedó en el frío. También redujeron el salario, porque no hay dinero de la palabra "en general".

"Adiós", dije. "Ahora soy un hombre viejo", le dije, "y sé kung fu", le dije, "y estoy agradecido de que me lo hayas mostrado, pero quiero practicar mi kung fu y no sufrir tonterías".

Desafortunadamente, fue más difícil de hacer que decir. En una crisis violenta, con una empresa sangrienta, las cosas son casi lo mismo que con TELSI (es decir, "pospuesto" a "más tarde"), pero en la nueva realidad económica, los negocios occidentales, como un medio para reducir costos, llamaron la atención a los subcontratistas rusos, y se inundaron. Tuve que posponer la empresa durante varios años y hacer lo que me trajo el dinero.

Muy rápidamente encontré trabajo en el siguiente estudio (más precisamente, me encontraron; sin embargo, la fama en la comunidad local, incluso un pequeño troll, algo a veces útil). Bueno, como estudios ... Tenían desarrollo web, pero en mayor medida este "centro de información y publicación" se posicionó como un proveedor externo. Bueno, también como imprenta. Este es otro negocio híbrido.

La dirección principal de la subcontratación fue el desarrollo de sistemas de información geográfica, es decir, sistemas que hacen algo con datos cartográficos.

Por ejemplo, el proyecto actual era: algo terrible para los ciclistas daneses, en Zend , con un cierto análogo de portlets (no pregunte qué es, solo sé sobre applets y chuletas) y, en general, algún tipo de TK extremadamente extraño. Y solo me senté a leerlo detenidamente, ya que los motociclistas se escondieron en una dirección desconocida junto con el director técnico de la oficina, quien resultó que me atrajo para reemplazarme.

Bueno, "para un reemplazo". Necesitábamos un desarrollador líder para un nuevo proyecto, también un SIG, solo sobre televisión por satélite. SatBeams.com - todavía vivo, puedes ver, solo por favor no lo derribes.

Un proyecto interesante Sí, nuevamente tuve que volver a PHP, pero allí la mayoría de los trucos estaban en el diseño de la base. En la órbita geoestacionaria, varios cientos de satélites cuelgan, cada uno por encima de su longitud, en cada uno de ellos varias (hasta cientos) antenas - transpondedores que transmiten en varias bandas. Transmiten paquetes, en cada uno de los cuales varios (hasta cientos) canales de televisión, cada uno de los cuales tiene un conjunto de características (de nuevo, hasta cientos, porque los idiomas).

La esencia del problema: es necesario no solo dibujar una cobertura en el mapa para cada transpondedor, sino también generar cambios en tiempo real en todas las características de todos los canales recibidos en la placa en algún lugar, y escupirlo en RSS. Para tal información, los amantes profesionales de la televisión por satélite pagan dinero, además, considerable.

Parece que suena simple, pero oye ... Multiplica cien por unos pocos, multiplica por cien, multiplica por ... ¡Uy! El producto cartesiano de todos los parámetros posibles excede un billón, y necesitamos construir una diferencia en tiempo real. Es un problema olímpico, por cierto.

Aquí es donde el curso de base de datos de la universidad fue útil para mí, así como toda la experiencia previa trabajando con ellos y toda la experiencia en diseño de sistemas que acabo de tener. Como resultado, todo esto resultó en varias docenas de tablas, normalizadas a 5NF , tablas desnormalizadas con historial y un montón de solicitudes de varias páginas cada una. Con combinaciones complicadas que tienen en cuenta el comportamiento optimizador del DBMS seleccionado. MySQL, quiero decir. El cliente no estuvo de acuerdo con otro.

Juntos, el segundo programador logró en aproximadamente un año. Funciona, si no lo ha dejado caer con el efecto habrae en este momento, hasta ahora. Amo este proyecto Y no solo para el backend, sino también para satbar.js, el último widget de interfaz que escribí (desde entonces ya no he tocado las interfaces de usuario).

satbar —   —

Un obstáculo inesperado fue dibujar huellas de transpondedores en los mapas de Google: Google generalmente quería poner su gran entusiasmo en las integraciones de terceros y recortó sistemáticamente las tarjetas de funciones para cada función de cada nueva versión de la tarjeta API 2. Como resultado, adquirió un increíble conjunto de muletas y requirió un apoyo constante de lado del segundo programador después de poner el proyecto en funcionamiento, y migró a la tercera versión de la API, deprimiéndose periódicamente. Pero el cliente se jactó de una imagen del escritorio PMa Google Card con la etiqueta de nuestro sitio con la firma "bonitos polígonos": lo hizo en secreto cuando estaba de visita en la sede local.

Pero los proyectos geniales tienden a terminar. Y bueno, si tiene éxito.
La crisis continuó furiosa. Tuve que asumir proyectos no tan geniales, si solo la oficina pagara dinero.

Otra vez fui al pulgar y recogí varios sitios, casi sin recuperar la conciencia. Sin nada que hacer, actualicé el CMS con los desarrollos de interfaz traídos del trabajo anterior, incluido algún tipo de interfaz de usuario Ribbon de la nueva Office (en el proceso, lo hice antes que el propio Microsoft, pero, por supuesto, más simple, aunque el único ALT mágico también funcionó allí). Te mostraré algo, es digno de una historia separada). Incluso se dedicó al desarrollo de una base de datos de escritorio en .NET + SQLite para un cliente estatal a cambio de una solución heredada en Firebird (o incluso FoxPro? Ah, no recuerdo, pero en algo completamente antiguo), pero este proyecto trajo consigo un nuevo PM que afirmaba para el papel de asistente técnico, y no pudimos acordar el momento. Así que no pude profundizar en la pila de escritorio .NET.

Y luego, un ex alumno que una vez hizo un diploma en mi departamento (esos mismos "portales de documentos") de repente me escribió. En los últimos cinco años, se ha convertido en el jefe de su propia oficina, que, afortunadamente, estaba involucrada en la empresa sangrienta: SAP, y un poco más de desarrollo en Java EE.

Buena suerte Solo necesitaba un experto para ayudarlo con un nuevo proyecto.

La esencia (y, en general, el significado) de este proyecto es difícil de explicar. Todavía tengo poca idea de los motivos del capitalista de riesgo de Tatarstán que deseaba hacer una especie de SaaS / PaaS / equivalente en caja de MS SharePoint + Exchange + Lync + Dynamics, pero solo con la parte del servidor en J2EE y con el cliente "grueso" Java Swing. Al principio lo llamó NewOutlook, y luego llamó por completo a OfficeSuite. Además, también era un trabajador de amapola, por lo que tuvo que comprar amapola en la oficina: los componentes de swing para un cliente grueso se comportaron bajo MacOS a veces de manera impredecible. Un proyecto muy, muy extraño. Pero terriblemente interesante.

En total, al menos tres equipos participaron en él, además de nosotros, los muchachos estaban en Kazan y en algún lugar de Minsk, ¿o qué? ¿o en Kiev?, y nuestro equipo fue considerado el principal: necesitábamos desarrollar una arquitectura común tanto de la parte del servidor como del cliente, un mecanismo para sincronizar los datos entre ellos y también, por ejemplo, implementar un módulo para administrar las finanzas personales. El resto debería haberse dedicado a las Comunicaciones Unificadas y todo lo demás que el inversionista había imaginado (sin conocimientos tradicionales específicos).

La implementación del sincronizador parecía ser la tarea más difícil: ninguno de los equipos existentes sabía cómo abordarlo. El cliente, como recordamos, es "grueso", es decir, puede y debe funcionar sin la parte del servidor, y al mismo tiempo debe poder conectarse al servidor de acuerdo con una programación o solicitud del usuario para actualizar "objetos" (lo que sea) aquí y allá .

Al principio, no sabía cómo, pero mis ojos tenían miedo y mis manos estaban haciendo. Las ingeniosas palabras "arquitectura de cliente y servidor" son en realidad solo unos pocos bocetos de diseño que están bien diseñados como un documento estructurado. Por supuesto, "cualquier tipo de objetos" es un requisito regular, pero, afortunadamente, he podido diseñar sistemas de plug-in de host que pueden describir sus tipos de objetos desde la época del centro multimedia, los ORM astutos después del monstruo Izhsvyazinvestovsky no me asustan, pero el Puedo aprender las tecnologías J de EE bastante rápido.

"Arquitecto" ... No me gusta cuando esta palabra se aplica a la posición de un programador. Una traducción torcida del inglés por parte de System Designer, sería más correcto haber sido un "ingeniero de diseño". Pero, en mi opinión, el proceso de crear un prototipo de un producto futuro desde cero, que incluso el cliente no imagina bien, describe el término "ingeniero de investigación" mucho mejor.

Siete meses después, en el momento de la entrega provisional, de los tres equipos, algo digno de mostrar estaba listo solo para el nuestro. Nuestro equipo escribió un módulo de gestión de presupuesto personal totalmente funcional, el sincronizador sincronizó todo de la mejor manera posible, y el núcleo del servidor y las partes cliente de la aplicación estaban listos para conectar los complementos restantes.Por lo demás, el caballo no rodó, y el capitalista de riesgo, al parecer, se dio cuenta de que había amenazado con una tarea sin sentido y desapareció del horizonte.

El proyecto se cerró de inmediato. Después de haber realizado una gira como experto invitado, no era particularmente necesario, como otros javists, porque el jefe de la oficina decidió concentrarse en SAP.

Maldición Tal es el negocio de riesgo. Lo odio un poco

Tal comentario: no hay trabajos ideales. Donde quiera que vaya, habrá algo bueno, y algo malo, delicioso y desagradable, razonable y anormal. No es una cuestión de dialéctica, ni es que la vida esté pintada objetivamente en diferentes colores. La mayor parte del asunto está en su propia actitud hacia varios aspectos del ser: siempre que una chispa divina se caliente en usted, está condenado a experimentar diferentes emociones sobre diferentes cosas. Que, maldita sea, suceda.


No siempre para mejor.

Ya ha sido 2011. Todavía en Izhevsk


Durante este tiempo, el paisaje ha cambiado radicalmente en la ciudad. Las filas de los estudios web se redujeron considerablemente, las fábricas y otros proveedores con desarrollo interno se redujeron de alguna manera, pero el número de oficinas de comestibles aumentó notablemente e incluso grandes subcontratistas ingresaron a la ciudad. Especialmente, EPAM.

Aquí es donde está la empresa verdaderamente sangrienta.

( , «») — . , . «» — , — - . , , , , . , .

, , . , , .

, . — . , , , , . .

— , , . - , :

• , , ;
• , ;
• , ;
• ;
• , ;
• -.

, , , «» ( ) ! Fuertemente! !

, , «», «», « », «», , , — , . .

?

, , . . .

, , , , . — , ( , ), mission critical. Java EE, : — IBM. — WebSphere AS MQ, — DB2. JVM — J9, , ( , ).

: ( ), ( , , ) ( 300 ).

: («» 15, … , ).

… . . . « ». — 25 — ( , applications.xml ).

, , 19 JNDI . , , . . !

, . — SVN . , . , … « » (!) , .

, , J9 DB2 … IBM , , .

— - , …

, , , , , , .

, . , . , - . — « ».

- . , — , .

, — , , — . , , . , . , .

«» , . , - , , . , , .

, … , - «», , 8 , , .

: , . , , .

, — . , delivery , 24 , . ( , ) .

— ( ), . , «». .

: . : .

, , — , , , , , .

, ? ? . , , , . - . , - ( ).

, 2014


, … , — , , — , . tinypass ( , p ) . — . — , , !

( ) . ( ). ( ), , , , . , , , .

. . .

El proyecto resultó ser crudo, insignificante, repugnantemente escrito. El líder técnico, un amigo cercano del fundador, que es de Nueva York, es la persona más obstinada del mundo que no puede ser convencida, disuadida ni acordada. Pero puedes burlar. Y la segunda pista, que puede reducir una sola línea de código, nafig, eso es todo (como resultado, lo eliminamos, pero no de inmediato).

( ) — . (middleware - — ), . , , . , .

, , . , . - . - ( !) , . #.

, 15, 20 . - , . — .

, Piano ( ), . , , .

Java, ( -, — , ). Continuous Integration — QA . -! , DevOps, , , .

Java, - . — , ( , ), ( , ! ) , , — . .

- , ? , . … . .

(  )     .    « »  3


- DevOps , . BigQuery, Node.js ( , ). , .

- , , . , middleware, Piano, , , — . , -, , . , . , , , false positive , - .

, . , , «-», ( , , - ).

Honestamente, no pensé que alguna vez abandonaría la oficina debido a diferencias éticas. Además, la oficina es genial en todos los demás aspectos. Hashtag # Izhevsk Google.

Izhevsk, cuarenta años ya cerca


, . , — ? , .

[x] - .
[x] .
[x] .
[x] .
[x] , , .
[x] , , 11 (!!!11) CMS , . ?
[x] , , .
[ ] , -, Big Data .

Piano , . , , .

. , , , , .

, , , — . . , , MapReduce ( , Spark ), ArcGIS, , . -, !

, , . , . Java ( Scala , ), AWS , -, , ( , ) .

, , -, - . . , , , , — . . HUDWAY. #.

, .

we do what we must because we can , .

, ,
— . , , , . , - , . .

, , , 20 . , ( , ), , , — , .

, , ( )? , , / ( , mortgage 25 ). ( , ).

, , , - , . (, , -, , , ). , , . , — - ever.

, , 20 .

Source: https://habr.com/ru/post/437610/


All Articles