¿Qué habilidades esperaría y apreciaría en un ingeniero de software junior? [cerrado]


64

Recientemente terminé mi Maestría en Ciencias en Ingeniería de Software, y estoy a punto de comenzar mi carrera profesional en unas pocas semanas. Mi rol será como Desarrollador Junior para una compañía que desarrolla software utilizando Java y tecnologías relacionadas (entre ellas Spring e Hibernate). Para ser honesto, estoy realmente entusiasmado con lo que viene, especialmente porque quiero desarrollar mi carrera como desarrollador de Java. También estoy muy interesado en adquirir experiencia en el campo. Además, esta será mi primera experiencia laboral como desarrollador profesional, así que realmente quiero hacer lo mejor desde el principio.

Me gustaría saber qué habilidades y habilidades, tanto blandas como técnicas, serían más apreciadas en un nuevo profesional (Desarrollador Junior) que podría ser parte de su equipo y en qué habilidades debería centrarme para lograr una carrera exitosa como Software Ingeniero.


13
Una pregunta maravillosa formulada elocuentemente.
Adam Crossland

2
Encuentre una droga / actividad de entrada para cuando las cosas en el entorno laboral del mundo real no funcionen como imagina, pero asegúrese de que su efecto no se extienda hasta la mañana.
Trabajo

Atención al detalle: nada es más importante.
Orbling

1
Como eres un JSWE. Sea competente en los idiomas en los que dijo que era competente. Nada es más exasperante contratar a alguien que dice que sabe un idioma pero que solo lo aprendió en una clase. Ejemplo: personas que enumeran C / C ++ en su currículum pero no pueden usar uno u otro (¡Dios no lo quiera, no puede usar ninguno!)
aqua

¿Qué pasó con el sueño de hacer videojuegos? ¿"En serio quieres desarrollar [tu] carrera como desarrollador de Java"? es broma, a cada uno su propia :)
cambraca

Respuestas:


50

Muchos de estos son ciertos sin importar en qué parte de su carrera se encuentre, pero podrían ser especialmente importantes para alguien que recién está comenzando.

  • Escucha más de lo que hablas. Aprende de lo que dicen otras personas.
  • Se humilde. No tenga miedo de compartir sus ideas, pero no asuma que tiene razón y que todos los demás están equivocados. Si ve algo que cree que está mal, pregunte al respecto, no haga pronunciamientos al respecto.
  • Seguir aprendiendo. La base de su educación es (debería ser) excelente, pero solo ha comenzado a aprender la profesión. Aprender haciendo. No creo que realmente puedas aprender a menos que realmente estés practicando lo que estás aprendiendo.
  • El cliente rara vez sabe lo que quiere hasta que lo ve. Acostúmbrese a sus requisitos cambiantes. Adopte un estilo de desarrollo (si está permitido) que ponga las cosas delante del cliente rápidamente para obtener comentarios.
  • Busque personas que sean buenas para trabajar con los clientes y pídales que le orienten sobre cómo desarrollar relaciones con ellos.
  • Escriba código robusto y bien probado. Hacerlo no es el objetivo; hacerlo bien es. Si eres bueno en eso, la velocidad vendrá con el tiempo.
  • Trabaja duro. No esperes que te pidan que hagas algo; busca o pide cosas que hacer.
  • Reconoce tus errores o los errores de tu equipo. No arroje a los miembros de su equipo debajo del autobús frente al cliente, pero sea honesto cuando tenga problemas de código.
  • Puedes pensar que tus compañeros de equipo quieren que seas un codificador brillante. Eso sería increíble, pero tus compañeros de equipo realmente quieren que seas competente y no un imbécil. Si vas a ser un imbécil, será mejor que seas brillante.

3
+1 para "El cliente rara vez sabe lo que quiere hasta que lo ve ..."
FrustratedWithFormsDesigner

1
+1 para "Seguir aprendiendo". Esa es probablemente la cosa más importante que buscaría en un programador de nivel junior
Rachel

+ para "Hacerlo no es el objetivo; hacerlo bien es" Asegurarse de que su código no solo funcione, sino que se pruebe rigurosamente es muy importante. Además, hacerlo bien significa que otro desarrollador puede ver su código, comprenderlo y leer los comentarios para luego hacerse cargo de mantener dicho código.
Jeremy

61

Aquí hay una lista rápida de la parte superior de mi cabeza:

  • Seguimiento (terminar lo que comienza)
  • Honestidad (dime si estás atrapado)
  • Curiosidad (descubre mejores formas de hacer las cosas)
  • De mente abierta (tanto a la crítica como a las ideas que no son tuyas)
  • Generosidad (comparta lo que aprende; capacite a la próxima generación)

1
Estoy de acuerdo con todas las cualidades enumeradas. Si me pidieran ser mentor de un programador tan joven, estaría encantado de hacerlo, y haría que mi día de trabajo fuera mucho más divertido.
Adam Crossland

3
Creo que esta lista lo resume bastante, lo único que podría agregar es la comunicación. He visto a muchos desarrolladores jóvenes prometedores quedarse atrás porque simplemente no querían comunicarse con los miembros de su equipo. Codificar solo no es suficiente en estos días, debe hablar con los usuarios, los miembros del equipo e involucrarse. Además, aprenda a escribir bien, ya que hará más de lo que nunca pensó que haría.
Nodey The Node Guy

14
+1 Honestidad: Aprender a decir: "No entiendo esto". - primero para ti y luego para tus colegas - es realmente importante. Abre la puerta a la comunicación y al aprendizaje. He visto demasiados programadores que permitieron que su ego se interpusiera en la expansión de sus mentes. He trabajado en esta industria durante más de 4 décadas y todavía me encuentro con cosas que no entiendo todos los días . Así que busco en Google, leo, escribo código de práctica, y luego tengo una habilidad más que puedo aportar.
Peter Rowell

Sobre la mentalidad abierta: esto incluye especialmente las excepciones al libro de reglas. He fallado en este punto. Parte de la experiencia es aprender cuándo romper las reglas. A veces, forzar todo para que se ajuste a tus ideales solo hace que todo sea más complicado. OTOH, sin saber nada del libro de reglas ...
Steve314

1
En la parte de Honestidad: lo que le digo a la gente que trabaja para mí es pasar media hora tratando de resolverlo por su cuenta, luego pedirme ayuda o un puntero. Si no tengo una respuesta inmediata, tómala durante cuatro horas más o menos antes de avisarme que está tomando más que eso. Es entonces cuando comenzamos a arrastrar a la gente de otras tareas para ayudar. En estos días, también les aconsejaría que buscaran y luego preguntaran en Stack Overflow y en Google en general, al principio de ese proceso. Mi objetivo aquí es evitar la respuesta de interrupción instantánea, que puede matar la productividad de las personas que te rodean.
Hack Saw

8

Dos cosas: la voluntad de aprender y la capacidad de aprender.


4

La curiosidad, el entusiasmo, establece un alto estándar para usted, la voluntad de aprender, la voluntad de admitir que no saben, el interés en lo que hace el negocio y cómo afecta el trabajo que produce. (Todas las buenas cualidades, incluso si tiene 20 años de experiencia)

Un buen conocimiento técnico es excelente, pero debe mostrar cómo aplicaría este conocimiento.

Sobre todo, el entrevistador debe poder verte trabajando allí haciendo una contribución y queriendo quedarse. Si eres demasiado bueno, eso puede retrasar a algunas personas más rápido que estar por debajo del promedio. ;)


4

Motivación. ¿Sabes cómo motivarte? ¿Sabes qué tácticas pueden funcionar mejor que otras? Esto se trata de la autoconciencia que algunas personas pueden esperar que usted sepa de toda la educación que ha realizado para descubrir esto de manera independiente.

Pruebas básicas y habilidades de depuración. ¿Sabes qué es una prueba unitaria? ¿Conoces algunas formas de depurar un problema? No se trata de saber específicamente qué hacer en un entorno, sino más bien de la idea general de cuáles pueden ser las pruebas más básicas y qué estrategias tener para analizar un problema.

Habilidades de comunicación. ¿Qué tan preciso eres con el lenguaje? ¿Qué tan bien puedes pasar de técnico a no técnico? Es cierto que esto es algo para desarrollar, pero es algo para tener en cuenta y, en algunos casos, salvar a alguien que puede meterse en problemas al no comprender las implicaciones de lo que dicen. ¿Qué tan bien te llevas con la gente? No es que sea un requisito estricto, pero si puede tener buenas relaciones con compañeros de trabajo, puede hacer que algunos trabajos sean un poco más fáciles de manejar. La honestidad y la integridad también se incluyen en este grupo de habilidades, ya que generalmente puede haber preguntas sobre qué tan bien dice lo que quiere decir y lo que dice. "Espacio de oficina" tiene muchos ejemplos de mala comunicación y, si bien el trabajo es ficticio, puede haber muchas escenas realmente cercanas a la realidad para algunas personas en términos de trabajo en entornos de oficina.

Versatilidad. Las nuevas personas en el equipo pueden obtener un amplio conjunto de responsabilidades, por lo que si se encuentra en una empresa pequeña, es posible que tenga que configurar bases de datos, redes, servidores web y otras cosas que están fuera del desarrollo. Contribuir para ayudar a un equipo a cumplir un plazo sería otro ejemplo aquí.


1
+1: Me gustaría agregar honestidad a la sección de Habilidades de comunicación. Si no está familiarizado con algo, o si se encuentra perplejo ante un problema, contarle a un colega o líder de equipo con anticipación puede ayudarlo a evitar problemas más graves más adelante.
oosterwal

2
Espera ... "Office Space" es ficticio?
PSU

3

Para mí, como desarrollador junior sin ningún título, mi disposición a trabajar duro y mejorarme me ha ayudado mucho en mi carrera. También noté que mis superiores apreciaban poder hacer frente a algunas críticas (positivas o no) y poder hacer un seguimiento.

En cuanto a un nuevo entorno: recomendaría seguir la corriente durante la primera semana más o menos. Cometí el error de intentar demasiado, eso no fue apreciado.


Si. Aceptar las críticas significa hacer muchas preguntas de seguimiento para que el "crítico" se sienta más cómodo. Pregunte qué más podría cambiar para mejorar. Muestre el siguiente ejemplo con el mismo problema: ¿le ha ido mejor esta vez? ¿Estás mejorando? Una vez que todos realmente se pone cómoda con la constructiva crítica, comienza la diversión. Solo recuerde que la gente de su producto comercial puede no estar pensando de esta manera;)
Michael Durrant

3

Estoy de acuerdo con todo lo que ya se ha dicho, pero quiero enfatizar que nunca debes olvidar estas habilidades generales (y blandas) en lugar de ser un experto técnico. Deberías trabajar en ambos, pero prefiero tener un intermediario que pueda comunicar lo que saben y luego tener un maestro que prefiera trabajar solo.

Además, no pase demasiado tiempo con la nariz en un libro. Los libros son buenos, incluso buenos, pero si pasas la mayor parte del tiempo leyendo y menos tiempo trabajando, no obtendrás la mitad de esos libros.


++ Buen punto, Wes, aunque tengo que preguntarme. Si le pregunto a la gente en estos días si han leído algo así, la respuesta es generalmente: ¿Leer?
Mike Dunlavey

2

Grandes respuestas a todos. Solo agregaría, desde mi limitada experiencia de vuelo, ¿sabes lo que llaman una licencia de piloto?

Una licencia para aprender.


2

Muchas respuestas geniales.

Incluso si no trabajo para los 'grandes' y no soy un gurú, agregaré mis 2 centavos.

Sé amable con la gente .

Intente socializar con sus colegas, pase un poco de su tiempo con algunos de ellos todos los días si es posible. Ve a cenar con ellos de vez en cuando, ríete con ellos.

En otras palabras, intente construir una "comunidad" si no hay una, o formar parte de ella si es que existe.

Conocer a tus colegas te ayudará a llevarte bien con ellos más fácilmente. Además, las probabilidades son buenas, te divertirás haciéndolo.


2

Además de todas las cosas buenas presentadas por la comunidad (arriba), también esperaría ver evidencia de algunas habilidades difíciles. No son poderes de perfección o super geek, sino un buen conocimiento práctico de los conceptos básicos y básicos. Ya obtuviste el trabajo (¡ felicidades por cierto !) Así que estás prácticamente allí.

Pero actualizar sus conocimientos y / o ponerse al día con las herramientas, los idiomas y las tecnologías que utiliza su empresa significará que comenzará a funcionar y creará una buena primera impresión.

Un desarrollador junior hipotético perfecto conocerá los fundamentos de cosas tales como

  • el idioma.
  • I / O
  • OO conceptos como herencia
  • Interfaces de objetos
  • acceso a la base de datos (especialmente con respecto a cómo lo hacen en la tienda de su nuevo código)
  • el modelo HTTP
  • CSS
  • JavaScript / JQuery
  • diseño de bases de datos
  • SQL y procedimientos almacenados
  • los IDE (s) que vas a usar
  • marcos relevantes (mencionas Spring)

y así. Podrá concentrarse en adquirir nuevas habilidades sin tener que detenerse y aprender lo básico. Podrá continuar (haciendo tantas preguntas sensatas como quiera; a la mayoría de los desarrolladores senior les encanta que les hagan preguntas técnicas razonables ) con la tarifa de rutina de los formularios en línea, páginas de administración que muchos juniors enfrentan durante los primeros meses. Convertirse en un desarrollador confiable y junior puede ser su primera prueba de iniciación de equipo ;-)

Cuando comencé como junior en el equipo web de una gran corporación, la mayor parte del trabajo inicial que me asignaron fue poco inspirador, pero me gravó hasta el punto en que golpeaba los libros todas las noches para poder entender lo que iba a hacer. tener que hacer al día siguiente . Lo superé, pero eso fue estresante cinco o seis meses después del relativo lujo de mi curso de maestría ;-)

Si puede hacer todas las cosas básicas de manera eficiente, obtendrá cosas más interesantes que hacer con bastante rapidez y, por supuesto, esto ayudará a avanzar en su carrera.

Y haciéndose eco de lo que muchos han dicho anteriormente, el mundo de las computadoras y el código está en constante evolución. Tendrá que aprender cosas nuevas cada dos días. Mantenga su mente abierta e intente ver por qué se ha embarcado en esto en primer lugar, porque lo <3. En los años venideros, puede haber momentos en que esto no esté en la vanguardia de su mente. El entusiasmo lo ayudará a superar la mayoría de los obstáculos y obstáculos.

Habiendo dicho todo eso, mi experiencia de los últimos doce años sugiere que la mayoría de los jóvenes no se quedan en su primera compañía para siempre, así que no se obsesionen con ser 'perfectos'. Cometer errores es parte del proceso que lo llevará de junior a donde quiera terminar. He estado haciendo esto por un tiempo y casi borro una base de datos de producción casi al menos un par de veces al año.

Buena suerte con tu carrera.


1
+1 por tener una respuesta que menciona algo específico de la programación y, por lo tanto, no se puede mover sin editar al manual de boyscout.
psr

Jajaja Sí, hay muchos lugares comunes dentro de esta pregunta;)
5arx

1

(1) Una mente abierta. No desea que alguien que esté institucionalizado utilice el lenguaje X y el entorno Y para cada proyecto. Desea alguien que pueda reconocer cuando una tecnología en particular no resolverá limpiamente un problema y ofrecerá buenas alternativas. Además de eso, desea a alguien que pueda desafiar el pensamiento convencional y encontrar soluciones que motiven al negocio. Puede experimentar esto usted mismo, pero he descubierto que las personas se acostumbran tanto a un proceso que no lo cambian, pero aún se quejan de la cantidad de dolor que les causa. Por lo general, cuando llego, veo cómo mejorar eso y ofrecer soluciones a mi gerente. Ahora, también diría, que el personal debe ser "diplomático" sobre sus sugerencias :)

(2) Buenas habilidades de modelado de dominio. Esta es una muy grande que he encontrado que algunas personas pasan por alto. En algunos de los lugares en los que trabajé, aprender sobre el negocio es 'ensuciarse las manos' y la gente evita problemas puramente técnicos, como integrar correctores ortográficos en el control de versiones, etc. y no invierten mucho tiempo en mejorar el negocio. Ser capaz de mirar un negocio y crear modelos (simplificaciones) a partir de él y comunicarlo a varias audiencias, ya sea oral, visual (UML, SSADM o lo que sea) o un poco de ambos, quieres a alguien con esa mentalidad.

Dos libros que puedo recomendar sobre el tema son: El programador apasionado y El programador pragmático . Ambos libros ofrecen buenos consejos a los programadores junior y senior por igual.


+1 para las recomendaciones del libro; Las habilidades de modelado de dominios de OTOH tardan en madurar, por lo que no esperaría esto de un junior. Pero esforzarse por comprender el punto de vista empresarial y resolver los problemas reales de los usuarios es importante, en cualquier nivel.
Péter Török

Peter, a través de la universidad (al menos por lo que he visto) un desarrollador desarrollaría un sólido conjunto de habilidades analíticas. Este es realmente el objetivo de modelar, extraer experiencia y hacer que otras personas puedan aprenderla. Entonces, diría que esta es una habilidad fundamental que esperaría de la mayoría de los desarrolladores. Ser capaz de enmarcar un problema particular a nivel micro / marco y explicarlo para decirle a un operador financiero, obtener comentarios y comunicarlo a sus compañeros de equipo. Sin embargo, esa es solo mi opinión.
Desolate Planet

1

Tomando la iniciativa. He tenido muchas personas que no hacen esto y siempre esperan que me digan exactamente qué hacer. Si ve algo que debería mejorarse, hágalo. ¿Tienes una idea para mejorar algo? Tráelo adelante. ¿Necesitas otra habilidad para mejorar algo? Aprenderlo.

Demuestra que te importa lo que estás haciendo y que quieres mejorar.


1

Para no asustarte en absoluto, pero una cosa que te voy a advertir en contra de eso en cada una de las compañías en las que he trabajado, son los métodos de desplazamiento enormes y sucios, y los objetos mal nombrados que te dan miedo abrir los archivos de origen. Conmoción y horror de tal desorden. Los lugares en los que generalmente los encontrará son los controladores de eventos para los botones "Aceptar" en los cuadros de diálogo o el botón "Enviar" en las páginas web.

Te lo ruego desde el fondo de mi corazón. Instale una campana de alarma mental, que cuando un método comienza a verse grande, y por grande, me refiero a más de 10 líneas más o menos, piense en crear otro método ... tantos métodos más tarde, comprenderá cuánta responsabilidad objeto en el que se está desarrollando tiene.

La próxima campana de alarma que recomendaría, es el máximo de 2-3 parámetros en un método. Si ve métodos con unos 10 parámetros de entrada, salude a la programación funcional en un lenguaje OO ...

Perdón por la ligera frustración expresada en esta respuesta, simplemente no puedo gritar lo suficiente lo beneficioso que es aprender a escribir código limpio.

Por favor, consiga una copia de Robert. C Martins Clean Code . Léalo semanalmente, sáquelo para la cena, duerma con él debajo de la almohada, tenga una copia en el inodoro e imprima algunas páginas y péguelas en el techo para que cuando se vaya a dormir, pueda leerlas antes te asientes;).

Te deseo todo lo mejor en tu carrera. Su pasión en este punto ya muestra que lo hará muy bien.


1

El único consejo que puedo ofrecer es que nunca dejes de aprender. La forma en que esos desarrolladores de rockstar llegaron allí es tomando tiempo para aprender nuevas técnicas y lenguajes, es su propio tiempo libre. Si bien es genial si te quedas allí durante 10 años, cuando salgas solo conocerás Java + Spring + Hibernate. Es por eso que en mi tiempo libre miro la plataforma .NET, Python y el código ocasional de C ++ para permanecer activo. Como alguien que está trabajando en una MS en info sec, el tiempo puede ser valioso y debe gastarse sabiamente.


1

La capacidad de usar google. De Verdad.

No es que nunca ayudaría a nadie, especialmente a un colega junior. Pero no hay nada más frustrante que tener a alguien que no esté haciendo la diligencia debida para resolver problemas de forma continua.

Mi consejo para junior soft. Los ingenieros deben hacer su debida diligencia para resolver los problemas. Use google, wikipedia o stackoverflow de manera diligente y metódica cuando no sepa algo.

No espere demasiado antes de pedir ayuda a un compañero de trabajo de más antigüedad, eso depende del tipo de organización. En una buena compañía donde las personas se ayudan entre sí, si pasas más de medio día tratando de encontrar una respuesta, no dudes en detener tu propia investigación para pedir ayuda.

En otras organizaciones donde las personas siempre son malas entre sí, es posible que deba pasar unos días por su cuenta (documentando todo lo que ha hecho y en todos los lugares donde ha investigado) antes de pedir ayuda. En tales compañías, documentar lo que hiciste ayuda para que puedas mostrarles que "lo hiciste en Google" porque esa será la primera respuesta que te lanzarán.

Pero independientemente, la esencia de lo que buscaría en un ingeniero junior es hacer su debida diligencia para tratar de resolver un problema en lugar de esperar que se le administren respuestas todo el tiempo. En pocas palabras, muéstrame que puedes usar google.


1
  • Pasión por el trabajo.

  • Dispuesto a aprender más y más y más ...

  • honestidad

  • consistencia


1

Grandes respuestas allí, si sigues todo lo que dice la gente aquí, estoy seguro de que cualquiera será bueno en lo que está haciendo,

Solo quiero enfatizar algunos puntos.

  • Sé humilde, no tengas miedo de dar tu opinión, pero una vez que se comparte una opinión, no te aferres a ella, prepárate para aprender de los demás.
  • forme relaciones con los miembros de su equipo, tanto como queramos trabajar con programadores inteligentes y bien establecidos, aún necesitamos personas con las que podamos hablar, tener una relación saludable con los miembros de su equipo será de gran ayuda para su carrera.
  • Sea proactivo, no espere a que le den trabajo, encuentre trabajo, proponga nuevas ideas para el medio ambiente, incluso si no son aceptadas, esto aumentará su valor para la empresa.
  • Comparta con otros lo que aprende, esto aumentará el nivel de su comprensión, aumentará su valor para la empresa y la comunidad.
  • Termine lo que comienza, el compromiso es una gran cualidad para tener.
  • Mantente feliz y no te decepciones cuando las cosas no van según lo planeado, habrá altibajos, pero espera

Todo lo mejor en tu trabajo


1

Una habilidad que no creo que tengan muchos programadores Jr, pero es una muy buena, la capacidad de crear tus propias herramientas. Puede ahorrar MUCHO tiempo y esfuerzo con algunas herramientas personalizadas bien hechas. Y no tienen que ser nada sofisticados, la mayoría de los míos son scripts de shell de 3 líneas, aunque algunos son mucho más largos.

Pero aprender a automatizar las cosas te facilitará la vida. (E impresione a sus compañeros de trabajo cuando pueda hacer bien las cosas)


-3
  • Una fuerte aversión a Java y C ++.
  • Una comprensión básica de los componentes internos del sistema operativo, algoritmos y estructuras de datos.
  • Excelente dominio de C, y al menos un lenguaje de script.
  • Conocimiento práctico de un VCS convencional (Mercurial, Subversion o Git).
  • La capacidad de trabajar de manera competente en la línea de comando.
  • A diferencia de Windows, y el uso ocasional en el hogar de un sistema operativo derivado de Unix como Linux, BSD o Solaris para desarrollo o uso general.

No creo que un fuerte disgusto por Java / C # / C ++ sea tan importante como comprender que el mundo no comienza y termina con ellos. Java tiene sus usos, pero también Ruby, PHP, Erlang, Lisp, etc.
Zachary K

¿Cuánto tiempo lleva desarrollar el conocimiento práctico de un VCS convencional?
Andrew M

@ Andrew M: Puede llevar semanas dominar la gran cantidad de herramientas que rodean un VCS. Diferencias, ramas, parches, fusión. Luego está trabajando en torno a las limitaciones o complicaciones excesivas de cada VCS.
Matt Joiner el

@ Matt: Ya veo, gracias. Entonces, ¿cuál es la mejor manera de hacer esto por tu cuenta? ¿Sería una buena práctica usarlo para tus propios proyectos de mascotas?
Andrew M

2
Sus primeros y últimos puntos tienen poco que ver con ser buenos para desarrollar o aprender (las cosas principales que necesita de los nuevos desarrolladores). Tener un "fuerte disgusto por XYZ" solo es útil si todos en el equipo comparten ese disgusto. Si todos no lo hacen, solo provocará grietas. No hay diferencia entre un enemigo de Windows y un enemigo de Linux, excepto que ambos son enemigos. Por otro lado, alguien con razones para que no le guste algo basado en su experiencia personal significa que tiene algo que aportar: eso vale la pena tenerlo ... Pero usar Suse en casa no lo hará más inteligente.
corsiKa
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.