sysadmin - test - Como programador, ¿cuánto se espera que sepa fuera de la programación?
que se necesita para programar (19)
Me pregunto qué hace usted como programador que no está programando pero que es necesario para su tarea (por ejemplo, configuración local, configuración del servidor, implementación, etc.). Tengo curiosidad por saber cuántas tareas relacionadas con la programación están realizando las personas.
Por ejemplo, cuando estoy en proyectos de desarrollo web, a menudo:
- Instalar servidores
- Administrar usuario derecho / acceso a servidores
- Realizar copias de seguridad
- Configurar IIS / Apache
- Configurar sitios FTP
En proyectos no web, a menudo:
- Escribir scripts de compilación
- Configurar herramientas / procedimientos de administración del código fuente
- Probablemente, más cosas en las que no estoy pensando
Algunas tareas están más relacionadas con la programación que otras (como la escritura de scripts de compilación), pero otras están fuera de mi área de experiencia (la configuración de un dominio me viene a la mente). Solo me interesa saber cuántas personas realizan tareas en sus trabajos que no están relacionadas con la programación.
Personalmente, encuentro que saber más siempre es bueno, allana el camino al siguiente nivel. Las cosas más difíciles en la vida se encuentran en el punto de integración. Literalmente. La gente se enfoca mucho en especializarse, pero no olvides que necesitas personas que puedan recorrer ambos reinos.
¿Esperado? Casi nada, pero todos siempre son felices cuando sabes más.
Cuanto más sepa fuera de los estrechos límites de la programación, más valioso es para su empleador.
Cosas que han surgido para mí:
- recopilación de requisitos
- casos de uso de escritura
- evaluación de planes de prueba
- negociando con los vendedores
- ley de Impuesto
- reglas de reconocimiento de ingresos
- ideas sobre cómo se comportan los usuarios
- teoría económica básica
- pautas de usabilidad
- diferencias en el comportamiento del consumidor en diferentes países
- administración del sistema (siendo un completo en sysadmin)
- configuración de la base de datos, optimización, configuración (básicamente, un DBA)
- sistemas de monitoreo
- principios y técnicas de redes (te sorprendería lo práctico que puede ser un rastreo de paquetes al depurar algo ...)
- poder evaluar un plan de negocios escrito por otra persona
- manipulación de imagen
- cómo difundir una situación y evitar discusiones
- cómo arrinconar a alguien y hacer que se comprometa con algo cuando no quiere
- cómo elegir batallas
A menudo depende del tamaño de la empresa. En una empresa pequeña, debe saber cómo hacer todo, incluso el administrador de sistemas y el administrador de red, incluso si su trabajo se centra en la programación.
En una gran compañía, puedes ver una pequeña parte del universo, y a menudo no les gusta que escudriñas fuera de tu caja. No solo no necesita aprender todo, a menudo no está contento con usted si lo intenta.
Sin embargo, cuanto más comprenda sobre las máquinas, cómo funcionan y cómo funcionan en un entorno operativo, más fácil será diagnosticar problemas y escribir un mejor software. Cuanto más comprenda sobre el dominio para el que está escribiendo aplicaciones, mejor podrá diferenciar entre las necesidades de los usuarios y sus deseos.
Una de las mejores cosas de ser un desarrollador de software es que tienes una excusa de por vida para adentrarte tanto en las tecnologías como en los diversos dominios comerciales. Si te has desplazado a unas pocas industrias diferentes, tiendes a ser cargado con todo tipo de curiosidades interesantes. Siempre hay más para aprender ...
Pablo.
Bueno, dado que la herramienta principal de un programador es su computadora, creo que es justo asumir cierta experiencia con ella. La mayoría de esas cosas que has descrito son difíciles para alguien que no está familiarizado con las computadoras, pero es bastante fácil (incluso con poca experiencia previa) para alguien que entiende el dominio y sabe cómo encontrar y leer la documentación.
En un negocio o proyecto grande y bien organizado, esperaría que alguien que esté más específicamente familiarizado con ese tipo de cosas administrativas cuide de ellos. Sin embargo, si no hay suficientes para garantizar un trabajo de tiempo completo, entonces no creo que sea irracional tener a nadie que trabaje de manera competente; y los programadores están probablemente a la cabeza de la cola en ese sentido.
Creo que la habilidad de no programación que uso más en mi trabajo de programación es escribir. Es realmente crucial poder explicar ideas, diseños, algoritmos, etc., y nunca se puede contar con estar en persona para hacerlo (o tener el tiempo). Paso una buena cantidad de tiempo en el trabajo escribiendo documentos de diseño y otra documentación para que otros ingenieros puedan conocer mis códigos y algoritmos. Así que estoy muy agradecido de haber tenido buenas clases de escritura en la escuela y poder armar una oración. :-)
Depende mucho del tipo de software que está desarrollando actualmente
Por ejemplo, cuando estaba trabajando en software para un gobierno local, tuve que aprender cosas como
- ¿Cuáles son las reglas para registrar animales (mascotas)? ¿Cuáles son los tipos de registros, qué descuentos se aplican, cuáles son las sanciones por no registrarse a tiempo?
- ¿Cómo se calculan las tasas municipales? Cómo se elevan las tasas anualmente (en realidad, el algoritmo para aumentar las tasas anuales y su implementación fue la tarea más compleja que he conocido hasta ahora).
- ¿Cómo se emiten los permisos de construcción? Qué tipo de inspecciones se pueden realizar. Quién está involucrado en el proceso de emisión de un permiso de construcción (propietario, constructor, arquitecto, funcionarios, etc.)
- ¿Con qué frecuencia se leen los contadores de agua? ¿Cómo se asignan los contadores de agua a las propiedades, cuántos diales hay en un contador de agua, cómo separar un contador de agua de una propiedad y conectarlo a uno diferente?
- ¿Cuáles son los diferentes tipos de pensión? Cuáles son los diferentes descuentos que se otorgan dependiendo de un tipo de pensión.
- ¿Cuáles son los diferentes tipos de recibos? Qué tipos diferentes de impresoras de terminal (las que se usan para imprimir recibos pequeños) existen y cómo imprimirlas.
- ¿Qué son las propiedades, los estratos de los niños, cuáles son las reglas para dividir las propiedades en ''parcelas'' ...
Bueno, eso es solo parte de cosas que no son de programación que aprendí durante los 2 años en el proyecto. Lo más desafortunado aquí es que ahora que me mudé a una compañía diferente, hay muy pocas posibilidades de que use este conocimiento.
Donde trabajo, se espera que todos los desarrolladores puedan usar Subversion y tienen que poder configurar y configurar Apache y Tomcat en su PC.
El mayor desafío no son los problemas técnicos asociados con la puesta en funcionamiento del entorno sino el conocimiento de dominio requerido para desarrollar de manera efectiva el software en una tienda pequeña. Para mí, trabajo en muchos proyectos diferentes de una variedad de fuentes en un entorno de desarrollo principalmente aislado. Esto significa que necesito acelerar el dominio del proyecto bastante rápido para ser efectivo en el desarrollo de una solución. En el pasado, he trabajado en soluciones de contabilidad de impresión, gestión de directorio activo, bases de datos de encuestas de investigación y, en la actualidad, una solución cuasi CRM para una organización caritativa. Ojalá solo tuviera que conocer los aspectos prácticos de configurar mi entorno de desarrollo y construcción.
Encuentro que la gran mayoría de los "errores" descubiertos por los usuarios son problemas de configuración con los sistemas en los que está instalada la aplicación. Tener desarrolladores que entienden los errores comunes de configuración de la máquina y la red es muy deseable.
Por ejemplo, si una aplicación envía correo electrónico como parte de su operación, es útil que los desarrolladores sepan en la configuración de DNS y SMTP.
Por supuesto, depende de su tamaño de negocio, las grandes organizaciones probablemente pueden proteger a los desarrolladores de esto mediante el uso de otros especialistas.
Es bueno exponerte a otras tecnologías, pero realmente creo que es una mala idea que no reveles el hecho de que no eres experto en esas áreas (especialmente la configuración del dominio). He trabajado con personas que pensaban que podían hacerlo todo, pero terminaron haciendo esas tareas tan mal que con todo el tiempo (y dinero) que han invertido tratando de hacerlo bien, se le habría pagado varias veces a un consultor. .
Trabajé en una empresa donde era responsable de todo lo relacionado con una computadora, incluidos el dominio, las PC, la base de datos, el software personalizado, las compilaciones, MS Office, PowerPoint, Quickbooks ...; una compañía mediana donde fue desarrollo y construcciones; y una gran empresa en la que me concentro exclusivamente en el código .Net para mi proyecto (otra persona maneja la base de datos y otra maneja los informes).
La mediana empresa ha sido la mejor experiencia hasta ahora (bastante nueva en la gran empresa) en la que se me dio la suficiente responsabilidad de sentirme útil y tuve fácil acceso a todos los demás para hacer preguntas sobre esas otras tareas.
Esto depende en gran medida de lo que estás programando. Si está utilizando controladores de dispositivos de bajo nivel, es vital que comprenda el hardware subyacente. Si está haciendo una aplicación Java independiente, cuanto mejor comprenda la JVM y las bibliotecas que está utilizando, mejor, pero no es estrictamente necesario saber mucho.
En general, cuanto más comprenda sobre el entorno de su sistema, mejor. La cantidad que sus pares y la administración esperan que usted sepa depende de ellos.
La ignorancia será, eventualmente, castigada. Si no lo hacen sus compañeros y la gerencia, el mundo lo hará. Revise los titulares de cualquier semana o el resumen RIESGOS para ver ejemplos donde la ignorancia del entorno del sistema causa fallas en el software.
Esto variará mucho dependiendo de dónde se encuentre. He trabajado con personas que no conocen nada de esto, y personas que son expertas.
Sabiendo esto te ayudará mucho. En general, siempre es mejor comprender el entorno en el que se está ejecutando su código. No entender el contexto lo deja algo indefenso.
Además, a menudo hay errores que no están relacionados con el código sino que están relacionados con la configuración, por ejemplo, una página que no aparece debido a la configuración de Apache. Estás muy discapacitado en la depuración si no entiendes el entorno.
La gente alrededor de un lugar de trabajo probablemente espera que un programador sea su tipo de HelpDesk de TI ... me pasa por aquí. argh.
La triste realidad es que las personas no técnicas miran a los técnicos y esperan que sepan todo lo que está relacionado con la tecnología, sin entender que hay especializaciones dentro de la tecnología de las que tal vez no sepamos nada.
A menudo pienso que es muy parecido a un médico que se especializa en una disciplina en particular. Todos los médicos tienen una base de conocimiento en el campo médico, pero no conocen los detalles de otras especializaciones (un cardiólogo no sabrá tanto sobre anestesiología y viceversa).
Entonces, aunque creo que no es razonable que la gente espere que los tecnólogos lo sepan todo , creo que es razonable que esperen que sepamos algo cuando se trata de tecnología.
Creo que una faceta más importante de esta pregunta es cuánto se espera que uno sepa sobre el dominio específico donde aplican sus habilidades (finanzas, fabricación, etc., etc.). Creo que es increíblemente importante, ya que tener ese conocimiento de dominio los hace mucho más valiosos como programadores, ya que pueden entender los problemas en un nivel profundo y, como resultado, proporcionar soluciones más integrales para ellos.
Me di cuenta de que nunca me contrataron para el trabajo real, sino como un solucionador de problemas. Ya sea que entienda lo que está pasando y que lo solucione a través de código o software, o algo en la red, esta parece ser la percepción principal de lo que quieren los clientes.
Mi título de trabajo es "Senior Software Engineer". De hecho, durante la mayor parte de los últimos años, hice bastante poco desarrollo de software, pero hice mucho:
Sistemas y administración web
Desarrollo de páginas web estáticas con HTML (no considero esa programación, aunque he hecho PHP, CGI y JavaScript).
Como otros han dicho, el servicio de ayuda ordena tipos de cosas, aunque no tanto como en el pasado.
Como un "líder de tareas", se espera que tenga algunas habilidades gerenciales / de personas, aunque eso generalmente se relaciona con la redacción de informes mensuales. También me absorben cosas de CMMi de vez en cuando, lo que en un mundo ideal puede ser de alguna manera relevante, pero por lo general es solo un mantenimiento de registros para que el empleador pueda ofertar en nuevos contratos que lo requieran.
Trabajando en el laboratorio de ciencias, es necesario conocer algo de la ciencia, especialmente si quiere / necesita trabajar en el código haciendo los cálculos científicos.
Trabajando en una instalación gubernamental (de los EE. UU.), Hay muchos trámites y la necesidad de conocer muchas reglamentaciones gubernamentales (por ejemplo, la Ley de Libertad de Información).
Afortunadamente, recientemente realicé una transferencia interna en la que realizo más trabajos de desarrollo y menos de estas otras cosas.
No estás solo ahí afuera. El puesto en el que me registré fue "ASP.NET Web Developer" ... Sin embargo, mi trabajo consiste en:
- Administración de Windows Server
- Administración limitada de Linux (ejecución superior para supervisar el uso de la CPU y cambiar las configuraciones de Apache)
- Administración / afinación de LDAP
- Administración / afinación de MS SQL Server 2005
- Desarrollo de Bases
- Desarrollador Crystal Reports
- Scripts de Perl
- C # Win32 Developement
- Desarrollo web C # / ASP.NET
- Gestión de derechos de acceso de usuario para servidores de Windows
- Solución de problemas de red limitada
Al estar en una empresa que lucha constantemente por la suprema "Eficacia operativa", mi lista de tareas solo crece día a día. Yo tampoco hice esa lista. Todos los artículos mencionados anteriormente, he tocado o apoyado en los últimos 3 años que he trabajado en esta empresa.
Dicho esto, en una tienda de desarrollo, debe tener una tarea específica. Como dice el refrán, Jack de todos los oficios ... dueño de ninguno.
Probablemente depende del tamaño de la empresa para la que trabaja. Como alguien que ha trabajado principalmente en pequeñas y medianas empresas, también he sido responsable de:
creación de base de datos, administración y ajuste que respaldan las aplicaciones internas. Inicie la administración de certificados de sitios web configurando el alojamiento externo y estoy seguro de que también hay más.
[modo rant on] Ha, la maldición de Excel y Word.
Trabajo externo, especialmente amigos y familiares, pero a veces cuando se consulta o se entrega software también, cualquier persona no técnica espera que usted los comprenda. Hay un gemido interno cuando alguien te pide que le eches un vistazo a un pequeño problema que tienen con alguna faceta de Office. Y como es un cliente y quiere parecer útil, está de acuerdo.
Existe la expectativa general de que, como desarrollador, tienes un conocimiento innato de la configuración de hojas de cálculo, la reparación de plantillas de Word y todas las demás tareas técnicas de la oficina, y además puedes echarle un vistazo a un desastre de Office mal configurado y diagnosticar al instante cuál es el problema.
Solo puedo administrar una hoja de cálculo para programar mis facturas recurrentes y configurar una plantilla de Word para escribirlas. Regularmente le digo a la gente eso también, pero nadie escucha.