¿Dónde comienza la programación?

imagen


Érase una vez, desarrollamos una plataforma de alto nivel para desarrollar aplicaciones comerciales lsFusion . Lo único que quedaba era encontrar al que escribiría en él. Se decidió publicar un trabajo en los sitios de búsqueda de empleo. Pero surgió la pregunta: qué indicar como puesto o profesión.

En términos de complejidad, el lenguaje de la plataforma no difería mucho del SQL, que originalmente se creó no para programadores, sino para usuarios comerciales. Por lo tanto, también decidimos indicar "Analista de negocios" como el puesto.

Propusimos a los solicitantes que resolvieran una tarea de prueba relativamente simple, en la que era necesario refinar un poco un ejemplo simple. Algunas personas lo hicieron, pero las cartas enojadas vinieron de muchos con indignación como: "¿Estás buscando un programador o analista de negocios?"

Como resultado, encontramos a las personas que necesitábamos, pero analizando esta experiencia, me pregunté involuntariamente: ¿dónde termina el análisis comercial y dónde comienza la programación?

Cuando me acababa de graduar de la universidad, tenía un amigo que ya trabajaba como programador en una gran empresa de outsourcing. Todo era adulto: además de los programadores, había analistas y evaluadores de negocios. Entonces me interesó mucho cómo construyeron todo allí, en particular, qué hacen los analistas de negocios. A la pregunta de cómo interactuó con ellos, se recibió aproximadamente la siguiente respuesta: “Me envían algunos diagramas allí, todo tipo de documentos. No los leo de todos modos y los elimino de inmediato ". Está claro que era un poco falso y estaba mirando algo.

Ahora, leyendo una gran cantidad de diversas tareas técnicas y especificaciones, entiendo el problema principal de tal "análisis de negocios": el papel lo soportará todo. Esta es la diferencia clave entre análisis y programación. En el papel, puede escribir condiciones completamente contradictorias, indicar requisitos absolutamente abstractos como "Quiero que sea bueno", hacerlos hermosos y asumir que el trabajo está hecho. En la programación, tal truco no funciona: todo debería estar claro. Por esta razón, el desarrollador a menudo puede evitar la implementación de cualquier funcionalidad por parte del cliente, simplemente señalando constantemente contradicciones y requiriendo una aclaración de los requisitos. Y el cliente solo puede hacerlo si, de hecho, hace el trabajo de un programador.

Los programadores parecen tener que escribir programas. ¿Qué se puede considerar un programa? Uno de los formalismos utilizados en teoría es la máquina de Turing. Esta es la computadora más simple con la que puede describir los algoritmos. Esto, a su vez, sugiere que una de las propiedades de un programa es imprescindible. El programa tiene un estado y un proceso de ejecución. Una de las principales características de SQL fue su naturaleza declarativa. Se suponía que la gente común lo usaría, ya que no tendrían que escribir un "programa", sino describir en SQL lo que quieren obtener.

Cuando era niño, tuve la oportunidad de jugar al ajedrez. Ahora entiendo que no entendí absolutamente los principios básicos del juego posicional. Sin embargo, pude calcular bien la posición para muchos movimientos hacia adelante. Siempre traté de "abrir" el juego y seguí ganando simplemente debido a varias combinaciones, donde el oponente me consideraba peor. De hecho, solo tenía un depurador trabajando en mi cabeza que podía hacer movimientos y representar en los relojes la posición actual en el tablero. En realidad, jugué como una computadora simple. Sin embargo, en el primer año de clases, logré completar el primer rango de adultos y llegar a los tres primeros en el Campeonato de Bielorrusia a mi edad. Es divertido, pero el ajedrez usa las mismas habilidades que la programación. Un juego posicional es el diseño de la arquitectura. Juego táctico: depuración del programa.

Al enseñar a la gente a programar en lsFusion, llegué a la conclusión de que la lógica imperativa es más difícil de percibir para una persona común que declarativa. Calcular la situación de muchos movimientos por delante no es una habilidad básica utilizada por una persona en la vida cotidiana. Tiene que tener en cuenta un estado y poder cambiarlo en cada paso. Al mismo tiempo, cada persona tiene que formular regularmente lo que quiere, que es una especie de "programación declarativa".

Declarativo está presente en otras herramientas. Por ejemplo, en Excel, puede construir cierta lógica usando fórmulas. Tuve ocasión de ver sistemas de información casi completos escritos en forma de fórmulas de Excel, ligeramente aromatizadas con el imperativo código de Visual Basic. ¿Son estas personas programadoras o son inteligencia empresarial avanzada?

Si consideramos la pila de idiomas y tecnologías que se utilizan actualmente en el desarrollo, entonces se puede dividir en varios niveles (al igual que la pila de protocolos de red). En cada uno de ellos se agregó algo nuevo:

  1. Ensamblador. Lenguaje orientado a máquina.
  2. C. Lenguaje procesal.
  3. C ++. Programación Orientada a Objetos.
  4. Java / C # / Python y otros. Máquinas virtuales y memoria gestionada.
  5. 1C / Access / SAP NetWeaver, etc. Aquí, desde la molestia del desarrollador, se eliminó la administración de memoria, disco, red y otros detalles. Debe pensar exclusivamente en la lógica empresarial. Es en algún lugar a este nivel que lsFusion se encuentra como una plataforma.

Cada tecnología siguiente se escribe sobre la base de tecnología de un nivel inferior. Teóricamente, se deduce que aquellos que escriben en un nivel inferior podrán escribir en un nivel superior. Esto, por supuesto, no significa que lo harán de la manera más eficiente posible. Los ingenieros que crean autos no serán los mejores corredores del mundo, pero deben ser capaces de conducirlos de alguna manera. En la dirección opuesta, esto no funciona.

En gran medida por esta razón, por regla general, los desarrolladores siempre respetan a quienes usan tecnologías de nivel inferior y desprecian a quienes escriben en tecnologías de nivel superior. No soy tan viejo como para atrapar esos momentos en que los desarrolladores de ensambladores odiaban los abridores. Pero también recuerdo a sishnikov que creía que C ++ es del maligno. Algunos desarrolladores de C ++ todavía consideran que los desarrolladores de Java son subprogramadores, ya que realmente no pueden administrar la memoria, y debido a esto, los programas de Java requieren mucha memoria adicional. Bueno, todos los desarrolladores de los primeros cuatro niveles, por supuesto, desprecian a los programadores de 1C, lo que se refleja mejor en la anécdota barbuda:

imagen


Sin embargo, esto puede deberse al hecho de que las tecnologías de quinto nivel, a diferencia de las primeras cuatro y lsFusion, están cerradas y pagadas. Se utilizan en una empresa sangrienta, donde está en el orden de las cosas. En consecuencia, no les gusta todo el ecosistema, pero al mismo tiempo a los desarrolladores que lo integran.

Vale la pena señalar que es en el quinto nivel que existen lenguajes de alto nivel y declarativos como SQL y HTML + CSS. Por cierto, los desarrolladores de SQL son mucho más leales a los desarrolladores de SQL. Lo más probable es que, debido al hecho de que trabajan con ellos en conjunto, resuelven un bloque separado de tareas, a diferencia de los mismos programadores de 1C que se ocupan de la base de datos, el backend y la interfaz al mismo tiempo.

Para ser justos, existe una situación similar no solo en la programación. Por ejemplo, hay varias personas que conducen exclusivamente en una caja de cambios mecánica, lo que es extremadamente negativo con respecto a una transmisión automática. Ellos creen que la máquina no cambia de marcha de manera eficiente, y manualmente pueden hacerlo mejor (lo cual es generalmente cierto). Otra cosa es que la mayoría todavía está dispuesta a sacrificar la eficiencia, la fiabilidad y el aumento del consumo de combustible en aras de la comodidad común. Y al igual que en la programación, hay personas que no pueden manejar la mecánica en absoluto, porque no tienen suficiente coordinación para cambiar de marcha rápidamente y presionar los pedales necesarios.

Es cierto notar que el conductor con una transmisión automática tiene la capacidad de cambiar al modo manual. Del mismo modo, puede incrustar código de ensamblaje en C, o puede bajar un nivel en lsFusion y escribir código Java.

Cuanto mayor es el nivel de tecnología, más declarativo y menos imperativo es. Puede considerar estos niveles como una escala, donde "máquina" estará en la parte inferior y "usuario" o "empresa" en la parte superior. A medida que avanza de abajo hacia arriba, se cree que la programación es cada vez menos. Y tal vez en algún punto de esta línea haya un punto en el que la programación se convierta en un análisis empresarial.

¿Por qué no buscamos programadores ya completados? Hay al menos algunas razones para esto.

En primer lugar, ya tienen algún tipo de pila tecnológica con la que trabajan. A pesar de la industria relativamente innovadora, la mayoría de los programadores son conservadores (aunque ciertamente no todos). No aprenderán tecnología desconocida sin exageraciones, para lo cual no hay demanda (aunque sea temporalmente). Cuando una persona cambia la esfera en la que trabaja, automáticamente "pierde valor". Por lo tanto, es psicológicamente difícil renunciar a lo que sabe y comenzar a aprender algo nuevo.

En segundo lugar, el desarrollo en la plataforma lsFusion, así como el desarrollo en 1C, está realmente más cerca del análisis empresarial que el desarrollo en plataformas de nivel inferior como Java, .Net y Python. Hay otras tareas, problemas y enfoques.

Pero una de las razones principales es económica. En Bielorrusia, las personas no buscan convertirse en funcionarios y funcionarios de seguridad. Aquí no puede, trabajando como ministro, llevar perros en su avión personal a ninguna exhibición o emborracharse en la dirección opuesta. El escaparate está lejos de ser bienvenido, y muchos funcionarios son encarcelados ocasionalmente y luego liberados para dirigir granjas colectivas. Tampoco tenemos empresas que vivan de los recursos naturales, por lo que nuestros sueños de convertirnos en petroleros tampoco están destinados a hacerse realidad. Casi cualquier mercado es lo suficientemente pequeño y, como regla, ya está dividido. Por lo tanto, también hay poco espacio para nuevos empresarios.

En este contexto, la esfera de TI se distingue. Esto se ve mejor en la siguiente imagen:

imagen

Si excluimos las áreas muy pequeñas de los pilotos y algunos consultores financieros, resulta que, en promedio, los programadores ganan tres veces y media más que los empleados en otras áreas mejor pagadas. Si nos comparamos con los empleados estatales, la diferencia será siete veces.

Otra ventaja en el trabajo de un programador en Bielorrusia es la estabilidad. Dado que el mercado local es muy pequeño, la mayoría de las empresas operan en el mercado occidental. Por lo tanto, como regla, todos los salarios de los programadores están denominados en moneda extranjera. Es por eso que en junio hay una disminución en comparación con la primera mitad del año: el rublo se apreció. En un país donde la moneda local se devalúa constantemente frente a la moneda mundial, los salarios en dólares y euros se consideran la clave para la estabilidad y la tranquilidad. La gente en el país es considerada por muchos como "maestros de la vida". Son los principales consumidores del segmento caro en la mayoría de los mercados. Muchos padres envían a sus hijos a los círculos de programación, y la competencia más alta para los departamentos pertinentes.

No es sorprendente que la tendencia "Enter IT" esté floreciendo en Bielorrusia. Decidimos aprovechar esto y tratar de contratar personas de otras profesiones, enseñándoles cómo desarrollarse en lsFusion. Por cierto, ahora tenemos desarrolladores de lsFusion trabajando para ex gerentes de ventas, administradores de sistemas, economistas, consultores de sistemas ERP, etc.

Colocamos un anuncio pagado en la página principal del recurso de información más grande de Bielorrusia. Tomó en cuenta el error del sitio de trabajo e indicó que no estamos buscando inteligencia empresarial, sino un desarrollador sin experiencia laboral. Para la mejor motivación, indicaron explícitamente un posible pago salarial correspondiente a la industria de TI.

Como necesitábamos un número muy pequeño de personas, y habría muchos que quisieran, entendimos que los candidatos tendrían que ser seleccionados de alguna manera. Elegimos el esquema más simple: debe tomar un ejemplo de la Clasificación y refinarlo para que, para un partido, el puntaje no se determine manualmente, sino en función de los goles anotados que el usuario debe ingresar. Para no molestar a cada candidato individualmente y no perder su tiempo, indicamos directamente en el anuncio que se requería una solución a este problema.

Para resolver el problema, era necesario descargar e instalar la plataforma (el instalador estaba en el sitio), conectar el código del ejemplo allí y arreglarlo en el IDE. A cualquiera de nuestros desarrolladores de lsFusion le tomará aproximadamente 15 minutos. Se necesitaría un programador típico para comprender el ejemplo, descargar, ejecutar y resolver durante un máximo de 3 horas, ya que la solución no requiere un conocimiento adicional de la plataforma. Todo se hizo allí por analogía con la lógica existente.

Según las estadísticas, el anuncio fue abierto y leído por varias decenas de miles de personas. La tarea de prueba en sí misma (estaba en un enlace separado) fue leída por varios miles. Alrededor de 400 personas descargaron la plataforma (y luego era un archivo de 1.5GB, que incluía IDEA, Java y PostgreSQL). Cuarenta personas enviaron algo. De estos, unas diez personas tenían una solución adecuada. De estas personas, hemos elegido a quienes contrataremos.

Lo que no podía entender en esta historia era lo que le faltaba a la gente: motivación o habilidad. Después de todo, si alguien trabaja en un trabajo mal pagado, lo que no le brinda placer, entonces lo que le impide pasar incluso unas pocas horas para comprender el problema y resolverlo. Desde el principio, hemos ofrecido un salario alto, que está lejos de ser pagado a todos los desarrolladores junior en otros idiomas. Quizás muchas personas actúen según el principio "Iría a los programadores, déjame enseñarte". En realidad, en nuestro país ya tenemos muchos tipos de cursos pagos que muchas personas toman, sin entender lo importante que es la autoeducación en la programación.

Pero quizás el problema está en las habilidades. Para comenzar a programar, se necesita una habilidad básica: el pensamiento analítico. Con esto quiero decir la capacidad de distinguir de lo privado lo general (inducción) y viceversa (deducción). Esta capacidad se desarrolla en un número relativamente pequeño de personas, pero sin ella, por desgracia, no es un buen programador. Además, si de alguna manera mides el pensamiento analítico y construyes un gráfico de dependencia del número de personas con esta habilidad, obtienes una hipérbole. Es decir, cuanto más bajo es el umbral para ingresar a la tecnología, más personas pueden superarlo.

El problema con el pensamiento analítico es que no se puede aprender. Se forma en algún lugar a una edad temprana, y un adulto ya no puede cambiar algo. Hemos pasado un período de prueba candidato de ciencias técnicas. Sin embargo, no pudo implementar una lógica de dominio simple. El hombre lo intentó, trabajó en casa por las tardes, pero cada vez que se le asignó una tarea en la que simplemente tenía que hacerlo por analogía, no podía hacer frente. Cómo pudo defender al candidato, no está claro. Sin embargo, más bien muestra que el pensamiento analítico no es necesario en la vida cotidiana. Y hay una serie de profesiones en las que esta habilidad no es particularmente necesaria.

Cuando me preguntan con qué tecnología comenzar el camino hacia la programación, respondo: comenzar con SQL. En cualquier caso, su conocimiento no le hará daño, y no lleva más de un día aprender la funcionalidad básica (SELECCIONAR / UNIRSE / UNIÓN). A continuación, debe intentar resolver los problemas de Internet. No funciona, así que no debes comenzar con la programación. Si se puede resolver algo, entonces al menos 1C o lsFusion pueden convertirse en programadores. Y luego, cómo va.

Conclusión


Por supuesto, la pregunta del título del artículo es retórica. El concepto de programación es subjetivo y depende de las opiniones de una persona en particular. Todas las personas, en un grado u otro, participan en la programación. Por ejemplo, cuando simplemente configuran los ajustes en el termostato de un piso cálido o crean tablas con fórmulas en Google Docs. Sin embargo, la tecnología en diferentes niveles tiene un umbral de entrada diferente. Cuanto mayor es el nivel de tecnología, más personas puedo programar en él. La verdadera programación en este proceso realmente se está volviendo más pequeña. Solo quería que esto no se convirtiera en un tema de desprecio para algunos desarrolladores por parte de otros.

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


All Articles