Como programador autodidacta, ¿cómo puedo saber mi nivel?

La forma más lucrativa sería buscar un trabajo para el que creas que no estás calificado y desafiarte a ti mismo. Hay tantos puestos vacantes en el desarrollo de software que no debería tener problemas para encontrar a alguien listo para dar un salto de fe para un puesto junior (suponiendo que tenga poca experiencia laboral).

También soy autodidacta y comencé mi carrera construyendo sitios web pequeños y aplicaciones web simples, pensando que no tenía los requisitos necesarios para trabajar como ingeniero de software en grandes proyectos.

Entonces, un amigo de un amigo tuvo una oportunidad en su equipo de ingenieros. Fue el verdadero negocio: estructura de datos compleja, big data, últimas tecnologías, etc. Habíamos trabajado juntos en un proyecto más pequeño y él pensó que tenía las habilidades para hacerlo, así que me avaló y obtuve el puesto.

Por mí mismo, nunca hubiera pensado por un segundo que podría solicitar este tipo de trabajo; Me sentí como un fraude ya que nunca tomé un solo curso de informática (me especialicé en filosofía). Pero adivina que ? ¡No tuve absolutamente ningún problema para hacer el trabajo y me puse a toda velocidad increíblemente rápido! Los primeros meses fueron difíciles y tuve que dedicar horas adicionales, pero pude manejar todo lo que me arrojaron sin ningún problema real.

Esa experiencia cambió mi vida: me enseñó que ya era ingeniero de software y que era bueno. No porque pueda crear una consulta de base de datos sin la ayuda de google. No porque pueda escribir una función iterativa para calcular la secuencia de Fibonacci. No porque sepa lo que está haciendo la máquina en un nivel inferior. Y no porque conozca todos los comandos de UNIX. Esas son todas las cosas que puedes APRENDER.

En mi opinión, las dos únicas cosas que debe tener un buen ingeniero de software son la pasión por la codificación y la sed por aprender. Si los tiene, probablemente ya tenga una base sólida y solo necesite oportunidades para expresar su talento.

  • Puedes intentar escribir algo realmente sofisticado y ver dónde estás bloqueado. Intente emular una red social o un sitio web de comercio electrónico o una aplicación de chat. Por supuesto, como desarrollador autodidacta, le resultará difícil en algún momento y en ese momento conocerá su nivel. Entonces sabrá qué habilidades necesita mejorar, qué idiomas necesita aprender, qué escribir en foros de calidad para obtener las respuestas que está buscando.
  • Visita freecodecamp. Este es un sitio web donde puede aprender el desarrollo front-end y el back-end también. Incluso hay muchos ejercicios para completar, y resolverlos no solo mejorará mucho sus habilidades, sino que sabrá cuánto puede codificar
  • Visita github. Este es otro sitio web donde puede colaborar para crear proyectos mediante la programación en su computadora. De esta manera, tendrá una idea de su nivel al intercambiar sus ideas y su trabajo con otros programadores.
  • Intenta responder algunas preguntas sobre stackoverflow. Este no es para un programador principiante en mi opinión, pero tenga en cuenta para más adelante. Por lo general, puede encontrar preguntas muy interesantes (y difíciles para un principiante). Intentando encontrar la solución a un problema, aprenderás mucho y podrás tener una idea de tu nivel

Espero eso ayude !

Sí, el autoaprendizaje es lo mejor para aprender cualquier cosa. Eres un programador autodidacta que programa muy bien. Pero la programación es como el mar . Como es muy difícil medir la profundidad de un mar, no podemos juzgar adecuadamente El nivel o profundidad de la programación. Básicamente, los programadores son solucionadores de problemas . Obviamente, depende de cuán complejo sea el problema.

Pero puede confiar más en la programación cuando puede resolver programas complejos y complejos. Entonces necesitas resolver más problemas.

Puedes practicar desde el sitio web de HackerEarth – HackerEarth – Desafíos de programación y trabajos de desarrollador

O Techgig- Technology y la comunidad tecnológica más grande de India

Al registrarse arriba, obtendrá algunos problemas desafiantes que debe resolver. Puedes resolverlo con los lenguajes de programación que prefieras.

Y trata de participar en algún concurso de programación de clase mundial como –

TCS CodeVita

Google Code Jam

Copa de hackers de Facebook

Y puede encontrar muchos sitios web en línea donde puede participar en desafíos de programación.

Una vez leí esto, no estoy seguro de dónde, pero me viene a la mente la palabra ‘Google’, por lo que es una cita de alguien de Google, o Google tiene un artículo o una pieza de ética laboral al respecto, o simplemente lo busqué en Google, pero básicamente fue así:

Defina su efectividad como ingeniero de software por los órdenes matemáticos de precedencia (y su efecto):

x + y = Suma / Resta. Programación lineal. Puede hacer cosas, tomar el camino más corto de A a B, resolver un único caso de negocios predefinido. Estás escribiendo cosas bastante simples (aunque técnicamente potencialmente complejas).

x * y = Multiplicación. Puede abstraer soluciones para que puedan reutilizarse dentro del mismo entorno para resolver muchos problemas a la vez. Probablemente sea un líder técnico en un equipo y proporcione soluciones de diseño e instruya a otros programadores. Otras personas en su organización o círculo de influencia inmediata están utilizando sus componentes básicos.

x ^ y = Índices. Su capacidad de abstracción ha alcanzado un nivel en el que está resolviendo problemas o proporcionando soluciones a sistemas con los que no tiene nada que ver, o soluciones que nunca hubiera considerado, e incluso problemas futuros que nadie podría haber previsto. Estás en el marco / biblioteca / compilador. Otras personas con las que no tiene conexión están utilizando sus diseños y continuarán haciéndolo bien en el futuro.

Debo estar en desacuerdo con la respuesta que dice que haces las cosas o no. En la industria, no hay títulos estándar, pero generalmente se pueden declarar como junior, nivel medio, senior, líder y gerente. Si solo le preocupa hacer las cosas, entonces nunca pasará a un liderazgo, ni siquiera a un senior. En estos niveles, comienzas a pensar en la calidad del software y del sistema (y con esto quiero decir rendimiento, legibilidad, mantenibilidad, modificabilidad y todas las demás capacidades) y la productividad del equipo, no solo la tuya. Cómo se implementa algo puede tener un efecto significativo en el rendimiento; por lo tanto, notación big-O y diferentes arquitecturas. Para optimizar la productividad del equipo, debe tener un código limpio y legible que sea fácil de modificar. Después de todo, puede escribir algo de código una vez, pero muchas personas después de leer y modificar su código, y cuanto más fácil sea, más tiempo y dinero ahorrará a la empresa. Además, debe estar profundamente capacitado para que los miembros de su equipo lo vean como un líder competente de quien pueden buscar ayuda. Si desea avanzar en su carrera de programación, obtenga una comprensión profunda de la teoría de la informática, incluidos algoritmos, arquitecturas, ingeniería de software y otras subdisciplinas, y aprenda a pensar en el panorama más amplio del desarrollo de software de gran tamaño.

¿Pasaste una prueba de certificación? Bueno, ahí está tu respuesta. ¡Estas en!

Hay un dicho que dice “La depuración es el acto de eliminar errores del código y la programación es el acto de poner los errores en el código”. Una medida es que una vez que haya identificado una mala práctica o un error en su código, cuánto tiempo se tarda en solucionar el problema. Esa es una medida de organización.

Desafortunadamente, la ofuscación en lugar de la documentación en línea es más la regla que la excepción, donde participan varios programadores. Otra medida de competencia es cuánto tiempo lleva interpolar el código de otras personas en un marco comprensible y viable.

La velocidad de ejecución es otra medida de competencia. Algunas escuelas de pensamiento incluyen un concepto llamado “Big Q” que básicamente se traduce en cuántos ciclos de procesador o códigos de instrucción se necesitan para realizar una tarea. Menos es mejor.

Solo en una nota personal, agregaría la evaluación de riesgos como un elemento de buen juicio, si esa es una opción en su entorno. Si su gerente de programa le dice que escriba soluciones en alguna plataforma específica, entonces debe hacerlo (y esa capacidad refleja su nivel de experiencia). Si no tiene que escribir en una plataforma vulnerable (o una plataforma potencialmente vulnerable), parecería que eso aumentaría la percepción de su propio buen juicio.

Esta es solo una opinión aislada. Espero que esto ayude.

Saludos cordiales,

PERSONAL DE LA GALLETA
[correo electrónico protegido]

Todos somos autodidactas. Algunos simplemente tienen más educación formal que otros.

Lo que diría es que si no estás mejorando constantemente tu ‘nivel’, entonces no estás haciendo tu mejor esfuerzo y estás estancado en el nivel 1, sea lo que sea. Después de 30 años de hacer esto, sigo aprendiendo algo continuamente. Un nuevo lenguaje, marco, biblioteca, herramienta, lo que sea.

A menos que se encuentre en una situación muy estática, lo que aprendió hace cinco años probablemente haya cambiado en gran medida.

Esto no es una competencia, es una profesión y, como tal, sus capacidades son lo que son, aunque ciertamente puede mejorarlas.

En el dominio técnico, siempre habrá personas que sepan más que tú y menos que tú. ¿A quien le importa? Donde realmente puede proporcionar valor a las personas que lo rodean es desarrollar plenamente sus habilidades blandas, comunicación, empatía y gestión del tiempo, y concentrarse en crear la mejor solución posible.

Dicho esto, recomendaría mantenerse continuamente “en forma” con sus habilidades técnicas, probando cosas que al principio parecen difíciles o imposibles. Por ejemplo, pruebe un lenguaje funcional si ha hecho Java.

Una vez que haya establecido que cada problema es similar a una superficie de escalada empinada con una bodega en algún lugar, sabrá que es capaz de cualquier cosa.

Lo que quiere decir es que si no trabaja con otros, ¿cómo sabe si le está yendo bien o no?

Mire el software común que lo rodea, no solo los juegos, sino también los procesadores de texto, los navegadores web, incluso el código en su horno de microondas y el controlador del motor del automóvil. Cajeros automáticos bancarios. Tu celular Todos estamos rodeados de software. Mira este foro en Quora.

¿Puedes crear algo así? Si puedes, entonces estás trabajando a un nivel profesional normal. OK, la mayoría del software que ves fue creado por equipos de desarrolladores. Pero, ¿puedes verte haciendo contribuciones sólidas a esos proyectos?

Lo que a muchas personas autodidactas les falta es experiencia con software a gran escala. Por “gran escala” me refiero a un proyecto que es lo suficientemente grande como para que ninguna persona del equipo sepa cómo funciona todo. La mayor parte del software que ve y usa es así, no el trabajo de una persona. Si trabajas profesionalmente, estarías en un equipo y harías tu parte.

Una buena manera de mejorar sus habilidades es trabajar en un proyecto de software de código abierto que le interese. Entonces aprenderá todo sobre el software más grande y los controles de versión y el seguimiento de errores y las formas disciplinadas de prueba, cosas que muchas personas autodidactas no hacen mucho, pero importan MUCHO en proyectos más grandes

Aprender a programar es fácil; aplicando es donde comienzan las cosas buenas.

Lo compararé con esto: aprendiste a correr de la manera correcta. Ahora es el momento de aplicarlo, pero hay muchos campos en los que puede usar su carrera y cada uno de ellos es diferente en su propio contexto. Puedes ser un corredor, un jugador de fútbol, ​​un atleta, un jugador de baloncesto, etc.

Hay muchos campos en los que puede aplicar sus habilidades de programación de programas y cada uno de ellos también depende de otras habilidades. La ingeniería de software no es lo mismo que el desarrollo de aplicaciones, o el cifrado de software, o la programación de juegos o el analista de bases de datos. Algunos exigen más habilidades matemáticas que otros; un poco más de creatividad e imaginación como forma artística; algunos otros exigen conocimiento sobre electricidad, física, etc. Para desarrollarse en uno de ellos, necesitará saber cómo aplicar sus habilidades de programación y para eso, necesita otras habilidades exigidas por cada rama.

Así que mi consejo es: encuentre su sucursal, estudie y luego busque un trabajo donde pueda probarse a sí mismo.

novato: piensa si-si-entonces. Familiarizado con las construcciones del lenguaje y los conceptos básicos de la arquitectura de computadoras.

principiante: conoce el lenguaje y el compilador. Familiarizado con la arquitectura de computadoras. Conoce las técnicas básicas de optimización.

intermedio: dominio de al menos un idioma. Puede descomponer el problema en partes constituyentes y diseñar arquitectura de software con buenas estructuras de datos y algoritmos para calcular la solución de manera eficiente. Desarrolla un código óptimo para implementar la solución. Explota el conocimiento de las directivas del compilador para optimizar el código.

avanzado: dominio de algoritmos y estructura de datos. Aprende rápidamente un nuevo idioma y sus ventajas y desventajas. Sabe qué algoritmos se pueden implementar en una arquitectura específica. Bueno para seleccionar estructuras de datos y algoritmos para una solución óptima. Intuición para una buena arquitectura de software. Con frecuencia usa patrones de diseño y escribe código modular que es legible, extensible y mantenible.

En realidad, solo hay dos niveles en la programación.

  • Nivel 1: Te haces una mierda.
  • Nivel 0: No te haces una mierda.

Hay tanta vanidad entre los desarrolladores de software. Hablamos mucho sobre código limpio, estilo y mejores prácticas. Discutimos hasta la saciedad sobre diferentes lenguajes de programación, imperativo vs. funcional, pestañas vs. espacios, etc. La verdad del asunto es que las personas que firman su cheque de pago no se preocupan por cómo lo hizo. Solo les importa que hayas terminado el trabajo.

No te dejes distraer por toda la vanidad. Si puedes hacer una mierda y puedes encontrar a alguien que te pague por ello, en lo que a mí respecta, estás en el nivel más alto de programación.

Siempre has tenido un recuerdo impecable y te encanta resolver acertijos. Estas son solo algunas de las razones por las que ha decidido convertirse en programador de computadoras. La siguiente pregunta lógica que probablemente esté haciendo es: “¿Realmente necesito un título para hacerlo?”

La respuesta honesta es no: no necesitas un título para convertirte en un programador de computadoras. Podrías encontrar un trabajo y ganar un dinero decente como programador autodidacta, como lo han hecho muchos otros. Pero hay varias ventajas que se pasan por alto al obtener un título.

Alistamos a un puñado de profesionales de programación que insisten en que su educación formal ha jugado un papel integral en sus carreras. Nuestros expertos identificaron seis cosas que nunca habrían adquirido sin obtener sus títulos.

1. Fundamento en teoría y comprensión.

2. Aprendiendo a aprender

3. Amplio conocimiento y adaptabilidad

4. Comprender la diferencia entre código y ‘código limpio’

5. Capacidad para trabajar bien con otros.

6. diligencia probada y autoestima

Nunca supe lo poco que sabía como programador autodidacta hasta que trabajé con otras personas. La mayoría de las veces había sido el único desarrollador en la sala y, odio decirlo, incluso me volví arrogante al respecto y pensé que era increíble.

Luego trabajé con otras personas y descubrí que: vaya, estaba muy equivocado. En comparación con otras personas que apestaba.

Nada lo agudizará más que trabajar con personas talentosas que tienen suficiente paciencia para trabajar con desarrolladores menos calificados. Si alguna vez tienes la oportunidad de trabajar con una persona realmente talentosa y no le importa orientarte, acepta la oportunidad.

Es mejor que cualquier tutorial de blog, screencast o cualquier tipo de autoaprendizaje que pueda hacer.

Piensa en una idea, un tema o cualquier problema matemático.

Intenta escribir su algoritmo en papel.

Ahora, intente implementarlo en el idioma de su elección o conocimiento.

¿Funciona de la misma manera que se ve en el papel? Si lo hace, ¿puede expandirse y pensar en formas de vencer su código, encontrar errores y probar sus límites? Autocrítica.

Si no es así, ¿qué salió mal? ¿Es el algoritmo o en su implementación? Regrese a 2 y comience nuevamente.

Si bien no se pueden definir niveles o calificaciones para las habilidades de programación, diría que eres débil si tu algoritmo está equivocado. Estás bien si su implementación es incorrecta. Y eres bueno si puedes derrotar tu propio código e improvisar.

Y eres muy, muy pobre si ni siquiera puedes pensar en una idea independiente para trabajar. Básicamente, eso continúa diciendo que lo sé todo, lo cual tú no, ningún cuerpo lo sabe.

Evalúe constantemente la eficiencia de sus programas y trabaje para optimizar esto. De lo contrario, sigue desafiándote, explora Git y otras plataformas para ver dónde están los demás con proyectos similares, y trabaja cada vez más profundamente en diferentes idiomas.

Es posible que desee algún tipo de métrica sobre su habilidad, le propongo dos formas de medir eso.

Ancho: ¿Cuántos idiomas, marcos, bibliotecas, módulos sabe usar? Esta es una métrica de puro conocimiento. Si quieres ser un cuchillo suizo, esto es lo que tienes que optimizar.

Profundidad: ¿Cuánto sabes de un tema en particular? Una vez que sepa cuáles son las cosas que sabe, concéntrese en cuánto sabe sobre ellas. Una manera fácil de probarse a sí mismo es respondiendo preguntas (o intentando) en el desbordamiento de la pila. Simplemente busque, por ejemplo, javascript y observe cuántas de esas preguntas tiene la respuesta.

Ambos juntos le darán una información general sobre su ‘nivel de habilidad’.

Puedes competir en concursos de programación y obtener un rango: Concursos y desafíos de programación que se llevan a cabo cada año.

Diría que veo tres “niveles” de programadores:

  1. Los que escriben un programa.
  2. Los que arreglan el programa escrito por 1.
  3. Aquellos que escriben un programa para minimizar el trabajo para 2.

Todos hacen errores. Sin excepción. Siempre trate de trabajar de manera que otros entiendan lo que usted hizo y puedan arreglar o modificar su código de manera fácil y rápida.

Profesionalmente, eres un Junior hasta varios años de experiencia profesional. No importa cuál sea su base de conocimientos y cuánto haya hecho por su trabajo personal.

Los jóvenes no están probados y se espera que no sean muy buenos.

Siendo realistas, sabes cómo hacer algo (o sabes cómo hacerlo) o no puedes. Ese es tu nivel.

More Interesting

En algoritmos, proporcione una matriz incremental del entero (-200, ... 0, ... 500) y quite un número. ¿Cuál es el algoritmo eficiente para encontrar el número que falta?

Cómo resolver la recurrencia T (n) = T (n - 1) + n usando el teorema del maestro

¿Cuáles son las principales estrategias para representar conceptos cualitativos como conceptos cuantitativos?

¿Los humanos alguna vez entenderán verdadera y completamente el Universo?

Cómo resolver problemas sobre el análisis de algoritmos paso a paso

¿Debo continuar las matemáticas con la ciencia actuarial o cambiar a la informática y por qué?

Cómo codificar una espiral de ulam

Cómo resolver sumas consecutivas de UVa 12355

¿Existe un término en matemáticas como 'real-complete' para describir una función que mapea todos los elementos de un conjunto (número real por ejemplo) a otro conjunto, o 'posibilidad-completa' para describir un algoritmo que maneja todas las posibilidades de entrada? ?

¿Cuál es más grande: el universo computacional o el matemático? ¿Alguno subsume al otro?

¿Existe algún plan de estudios en línea que enseñe matemáticas con un enfoque en la programación o mecánica de videojuegos?

¿Qué hace que la oración 'Lucas no pueda afirmar esta oración constantemente', vulnerable o incluso incompleta?

¿Cómo se relacionan las matemáticas con la informática?

¿Cuántas matemáticas hay que saber para PNL?

¿Cuáles son algunos proyectos simples de C ++ que puedo emprender que me ayudarán a comprender los vectores?