- Mientras estás construyendo algo, aprende lo que no sabes. Búscalo en línea y RTFM.
- Sea un experto en una tecnología a la vez. Incluso con una pequeña API con la que está trabajando … piense en leer las instrucciones y realmente comprender el diseño y la funcionalidad de la misma. Lea un libro sobre el lenguaje de programación que está utilizando, de principio a fin. Descubrirá que incluso puede enseñar a los expertos una o dos cosas sobre las cosas que ha dominado.
- Si alguno de sus “superiores” se toma el tiempo para educarlo, aproveche la oportunidad y aprenda todo lo que pueda. Si no comprende algo, búsquelo más tarde.
- No dudes en preguntar cuando te quedas atascado en Stack Overflow. Encuentro que, por lo general, mientras formulo una pregunta correctamente, descubriré la respuesta por mi cuenta antes de publicarla.
- No te relajes, pero trata de aprender sobre tecnologías para hacerte la vida más fácil, ANTES de escribir tu código. Averiguar si existe un código existente que pueda reutilizar no es una tarea fácil.
- Aproveche con entusiasmo las revisiones de código.
¿Cómo puedo mejorar las habilidades de programación?
Related Content
¿Cómo puede alguien obtener habilidades de oratoria como Alok Kejriwal o Mahesh Murthy?
¿Qué herramientas / habilidades necesito para comenzar con la seguridad de la información?
La codificación es solo una parte del proceso de resolución de problemas. Debe comprender el problema subyacente y la solución eficiente dentro de las limitaciones dadas. Así que mejor te diré, cómo ser mejor en la resolución de problemas:
Lenguaje de programación y ciencias de la computación fundamentales : –
En primer lugar, debe dominar cualquiera de los lenguajes populares (C / C ++ / Java / Python), le aconsejaré que elija entre c ++ o Java, ya que ambos son ampliamente aceptados en todas las competiciones de codificación y tienen mejores recursos para Hazte entrenar. Aparte de saber el idioma
asegúrese de ser bastante bueno en la depuración y prueba de su propio código escrito
con todos los escenarios
Recursos: –
CS106A: Metodologías de programación (tutorial de Stanford Java)
Tutoriales en video de Eclipse y Java
CodingBat Java (problema elemental en la programación de Java para poner en marcha las cosas)
Coursera (curso C ++)
Compre el lenguaje de programación C ++ (Bjarne Stroustrup)
Página en stanford.edu (curso CS101 de la universidad de stanford para estudiantes que no son cs / estudiantes principiantes de ciencias de la computación)
Estructura de datos y algoritmo : –
Puede ser un buen programador si conoce bien un lenguaje de programación, pero para convertirse en un gran programador necesita comprender la estructura de datos y el algoritmo subyacentes.
Recursos: –
Introducción al libro de algoritmos (CLRS), lenguaje sencillo, explicación muy detallada sobre todas y cada una de las técnicas de algoritmo (libro bíblico 🙂)
El arte de la programación de computadoras: Algoritmos fundamentales v. 1 Libro
Estructuras de datos y algoritmos simplificados: Segunda edición: Estructura de datos y libro de acertijos algorítmicos
Canal de Youtube:-
mycodeschool
saurabhschool
Coursera (curso de algoritmo ofrecido por la universidad de Stanford)
Qué hacer: –
1. Intente implementar cada solución en papel primero antes de comenzar el código
2. Analice el problema, defina la restricción, compare su propia solución con el parámetro de complejidad de tiempo / espacio y luego comience a codificar (puede ser difícil de hacer al principio, pero seguramente lo convertirá en un mejor programador)
En este momento, tendrá la suficiente confianza como para imaginar qué técnica seguiré o qué algoritmo utilizaré para resolver un problema en particular. ¡Ahora es el momento de practicar!
1. Comience a resolver problemas en Sphere Online Judge (SPOJ), 200 problemas
2. Una vez que termine el paso 1, pruebe los problemas de topcoder para DP y otras técnicas algorítmicas (resuelva alrededor de 300 div2 o div1, hasta que se sienta seguro de sí mismo)
3 ( Opcional ) Si está buscando preparación para la entrevista, comience a resolver problemas desde
Descifrando la entrevista de codificación: 150 preguntas y soluciones de programación
GeeksforGeeks: un portal informático para geeks
En pocas palabras: – No es la única ” La ” forma de lograr una buena mentalidad de programación, pero es una mejor manera que me ayudó a equiparme con un mejor conocimiento de programación.
Constantemente encuentre pequeños problemas que le interesen que puedan resolverse mediante programación y practique, practique, practique. Si tener una solución a esos problemas creara valor para usted, entonces será más probable que persevere. Si tiene una meta concreta, sabrá exactamente cuándo la alcanzó y sabrá qué partes faltan en el camino. Por casualidad, aprenderá miles de cosas útiles e interesantes que no formaron parte de su proyecto original, pero que serán siempre útiles en el futuro.
Tenga curiosidad acerca de cómo se construye el software que usa actualmente. ¿Te has preguntado cómo identifica Gmail los mensajes como spam? Intenta construir un filtro básico de spam usando el teorema de Bayes (¡es más simple de lo que parece!)
Ignora el diseño y las interfaces al principio. Puede aprender una cantidad increíble simplemente trabajando con texto, y no se sentirá abrumado por tratar de hacer que las cosas se vean pulidas.
Si tiene inclinación matemática, eche un vistazo a algo como https://projecteuler.net/ e intente resolver los desafíos. Intente resolverlos en un idioma nuevo y desconocido (Swift, Go, etc.).
¿Quieres ver tu código afectar el mundo físico? Compre un microcontrolador Arduino barato ( http://www.arduino.cc/ ) y experimente con diferentes sensores. Parpadea un LED cuando un sensor IR pasivo detecta movimiento. Suena un piezo cuando presionas un botón.
Compra un reloj inteligente Pebble y crea una esfera de reloj simple que muestre la hora. Haga que muestre el clima para su código postal utilizando una API web pública, a pesar de que se ha hecho miles de veces antes. Es un objetivo concreto y claramente definido que le enseñará cómo utilizar cualquier tipo de datos de API web externas.
Descargue Unity – Game Engine de forma gratuita y comience creando aplicaciones increíblemente simples utilizando su script C #. No tienen que calificar como juegos. Haz que las esferas se disparen al vacío al hacer clic en el botón del mouse. Añade sonido. Añadir física. Juega con una aceleración similar a un cañón donde se lanza el proyectil y se impulsa a través del aire con impulso antes de caer. Crea mediante programación un muro de cajas (¡matrices anidadas!) Para disparar a tus esferas. Haga que las cajas cambien de color según la fuerza que experimenten.
Pronto se dará cuenta de que poder programar es como una superpotencia. Puedes codificar una parte inmortal de ti mismo en la electrónica y luego clonarla miles de veces. Ese pedazo de tu conciencia continuará indefinidamente y te liberará para hacer otra cosa. Esas piezas digitales tuyas incluso interactuarán con otras personas.
Si siente que nació para codificar, el proceso de mejora se encargará de sí mismo. Simplemente elimine todas las distracciones que pueda, elija algo interesante y comience a escribir.
Tómese 8 horas de cada día para promover este propósito. No recomiendo hacer más que eso a menos que te sientas demasiado entusiasmado porque podría causar un agotamiento.
1 hora todos los días para leer un buen libro de programación. No leas tutoriales, no leas guías. Estos son algunos elementos esenciales: “Godel, Escher, Bach”, “Código completo (2ª edición)”, “Patrones de diseño”, “Introducción a los algoritmos”, “El programador pragmático”, “Javascript – Las partes buenas”. Algo de esta lista, realmente: recursos: ¿cuál es el libro más influyente que todo programador debería leer? – Desbordamiento de pila
1 hora todos los días para leer el contenido publicado por empresas y personas influyentes en el campo que le interesa. Me gusta la programación web, sigo a algunos asistentes web y nunca me pierdo nada de lo que publican. Use esta hora también para construir una presencia social en las comunidades relacionadas con sus intereses. Haga algunas preguntas, responda a otras, escriba un blog, exprese su opinión, únase a la comunidad. Google Plus es un gran lugar para hacerlo, no dude en conectarse conmigo y compartiré algunos contactos con usted: Bruno Škvorc – Google+
Pase las 6 horas restantes por día en codificación. No revise los tutoriales y las aplicaciones de muestra, piense en un problema que necesita solución, algo con lo que no esté satisfecho, y resuélvalo. Te encontrarás con paredes, querrás rendirte, maldecirás, llorarás y te sentirás frustrado a veces, pero también tendrás momentos de epifanía y alegría pura cuando descubras algo por tu cuenta.
Lo importante es evitar tutoriales, guías para novatos, aplicaciones de muestra y cosas similares. Si realmente quiere mejorar drásticamente, debe aprender de sus propios errores, no de muestras mediocres.
Muchos buenos consejos ya están aquí; Agregaría solo dos puntos más: intente programar competencias e intente aprender un poco de un lenguaje con un paradigma diferente: Prolog, Haskell o algo por el camino. Probablemente nunca lo use en la “programación de la vida real”, pero ambos le darán una visión diferente de la programación, y siempre es mejor tener varias vistas que solo una. Lamento que en mis años universitarios no haya aprendido ningún idioma extraño y haya prestado solo un poco de atención a los concursos de programación; es mucho más difícil hacerlo una vez que has conseguido un trabajo diario normal.
Bebe un montón de café. Codificará con fluidez y con un mejor enfoque. Para mí, se necesitan alrededor de 300 mg de cafeína (el equivalente a tres cafeterías Starbucks), pero su tolerancia probablemente será diferente.
También puede intentar leer sobre algoritmos o tomar clases de algoritmos en Coursera. Esto debería ayudarlo a escribir código eficiente en tiempo y espacio.
PASO 1: Aprende
Elija un idioma (uno de C ++, Java y C #). Aprende a vivir, comer y respirar en ese idioma. Puede aprender de los libros o ir a los diversos cursos en línea. Algunos de mis libros favoritos son:
- Programación – Principios y práctica usando C ++: este es un libro bastante útil para aquellos con poca o ninguna experiencia en programación; Te ayudará a refinar tu técnica.
- Pensar en Java por Bruce Eckel es un buen libro para principiantes.
- C # 4.0 La referencia completa de Herbert Schildt
- Hay varios cursos disponibles en Learn to code. Regístrate.
Únase también a Stack Overflow, una plataforma de preguntas y respuestas en línea dedicada a la programación. Si necesita ayuda para comprender los conceptos, o si tiene problemas con algún ejercicio, encontrará mucha ayuda aquí.
PASO 2: Practica
Mejore su velocidad y precisión en la codificación participando en varios hacathons en línea. Regístrese en HackerRank o Sphere Online Judge (SPOJ), donde encontrará muchos desafíos.
Una vez que haya terminado con los algoritmos, intente resolver problemas de la vida real en HackerEarth: desafíos de programación y trabajos de desarrollador
PASO 3: Propagar
Forme un grupo de estudio y practique diariamente. Intente desarrollar sus propios algoritmos / aplicaciones; intente responder algunas preguntas sobre Stack Overflow.
Incluso puede organizar talleres para los jóvenes en su universidad.
Feliz piratería
Gracias por el A2A, Vaidyanathan Pk.
La primera mirada a la pregunta y lo único que me llamó la atención fueron “7-8 meses”. Eso es mucho tiempo. Al hacer una programación competitiva, obtendrá la confianza para abordar problemas invisibles, lo cual es un activo importante durante las entrevistas. Simplemente concentrándose en estructuras de datos (DS) y algoritmos, perderá la capacidad de producir código rápido y correcto. La mayoría de las veces, no se le permitirá usar la biblioteca de plantillas estándar (STL) durante las entrevistas (aunque si el foco de la pregunta es un concepto algorítmico que es ayudado por un DS, entonces se le puede permitir usar un STL DS )
Hay una cosa a tener en cuenta: mejorar sus habilidades de codificación y prepararse para ser ubicado no es lo mismo.
Prepararse para ser ubicado implica mucho más que el conocimiento adecuado de algoritmos y DS y la capacidad de producir el código correcto rápidamente. Involucra una comunicación adecuada de lo que sabe, la capacidad de explicar su código correctamente y no confundirse con las preguntas trampa trampas planteadas por los entrevistadores. En mi opinión, muchos entrevistados no prestan atención a estos aspectos, lo que afecta negativamente el desempeño de su entrevista.
De todos modos, volviendo al punto, para ser bueno en la programación competitiva, comience con topcoder, asista a los SRM para ver cómo le va en contra de un reloj y use las salas de práctica para fortalecer sus áreas débiles. Luego dirígete a LightOJ de Jan para practicar los problemas de manera inteligente. Mejorar en la programación competitiva implica práctica, práctica inteligente. No hay atajos.
Sin embargo, si su objetivo es no sudar, mejore la programación solo para que lo ubiquen (lo cual es una mala idea, pero no lo juzgo). La página en geeksforgeeks.org es para usted. Dirígete a LeetCode para practicar las preguntas de la entrevista. Leetcode también tiene un foro de discusión activo.
LPT: Esto es lo que solía familiarizarme con las preguntas de la entrevista. Toma un problema Lea el concepto y la solución (no se moleste en perder el tiempo y encuentre la solución, encuéntrela ). Asegúrate de entenderlo correctamente. Dirígete a Ideone.com y pega la solución, borra el bloque de funciones. Intenta recrearlo. Cree casos extremos y vea si su código lo maneja. Esto lo ayudará a escribir código estricto y también lo ayudará a escribir casos de prueba, que también es un componente integral de las entrevistas. La desventaja de que esto es un proceso lento (pero que tiene de 7 a 8 meses, no debería preocuparse por ello), es altamente efectivo.
¡Todo lo mejor!
Comience por obtener el 20% de su tiempo para dedicarlo al desarrollo de sus propias habilidades. Si es posible, será mejor si ese 20% proviene de una o dos horas al día en lugar de un día a la semana, ya que entonces puede hacer un hábito diario mejorar sus habilidades. Su productividad puede disminuir inicialmente (o puede que no cambie mucho si está reemplazando la navegación web u otras distracciones), pero el objetivo es hacer inversiones que lo harán más efectivo a largo plazo.
Entonces, ¿qué debe hacer con ese 20% de tiempo? Dado que está en una empresa de tecnología conocida, debe aprovechar los recursos disponibles para usted. Aquí hay 10 sugerencias:
- Estudie el código sobre las abstracciones principales escritas por los mejores ingenieros de la compañía y comprenda por qué se tomaron ciertas decisiones y cómo se implementaron . Por ejemplo, si está en Google, lea el código en algunas de las bibliotecas principales escritas por los primeros ingenieros como Jeff Dean, Craig Silverstein o Ben Gomes. Comience con los que ha usado antes y pregúntese si hubiera escrito un código similar para varias partes y cómo podría aprender de sus ejemplos.
- Si no es demasiado eficiente en su editor de texto o IDE, pregunte a algunos de sus compañeros de trabajo más efectivos si les importaría verlos por un momento mientras están codificando. ¿Están utilizando métodos abreviados de teclado o funciones de editor con las que no estás familiarizado pero que los hacen mucho más eficientes? Si es así, aprende y practica. Busque consejos de productividad en Google para cualquier entorno de desarrollo que utilice. Cuando aprendí por primera vez Emacs, por ejemplo, las muy buenas 10 formas específicas de Steve Yegge para mejorar su productividad con Emacs me hicieron notablemente más eficiente. Incluso al releer partes de esa página para esta respuesta, he aprendido algo nuevo.
- Lea todo el material técnico y educativo disponible internamente. Google, por ejemplo, tiene una amplia gama de codelabs que enseñan abstracciones básicas y guías de alta calidad de las mejores prácticas que los ingenieros veteranos han escrito para varios idiomas en base a décadas de experiencia. Si su empresa no tiene recursos similares, Google abrirá algunas de sus guías: https://code.google.com/p/google ….
- Domina los lenguajes de programación que utilizas . Lea un buen libro o dos sobre los idiomas. Concéntrese en desarrollar una comprensión sólida de los conceptos avanzados en ese idioma y familiarícese con las bibliotecas principales de idiomas. Asegúrese de que al menos uno de sus idiomas sea un lenguaje de script (por ejemplo, Python) que pueda usar como su navaja suiza para tareas rápidas.
- Envíe sus revisiones de código a los críticos más duros. Optimice para obtener comentarios buenos y reflexivos en lugar de reducir la barrera para que su trabajo se registre. Solicite una revisión más detallada sobre las implementaciones en las que no confía demasiado.
- Inscríbase en clases en áreas en las que desea ser más fuerte. Estos podrían ser ofrecidos en el campus de la compañía, en los campus universitarios cercanos o en línea. Muchas de las compañías tecnológicas más grandes incluso pagarán por sus clases. Si desea mejorar en la programación, tome más clases prácticas sobre temas como patrones de diseño o algún lenguaje de programación.
- Construya una buena lista de lectura de libros técnicos y comience a leer. Su empresa puede incluso reembolsarle. Aquí hay un comienzo: ¿Cuál es el libro más influyente que todo programador debería leer?
- Trabaja en diferentes tipos de proyectos y úsalos como oportunidades de aprendizaje. Si siempre se encuentra realizando tareas similares utilizando métodos similares, será difícil salir de su zona de confort y adquirir nuevas habilidades.
- Asegúrese de estar en un equipo con al menos algunos ingenieros superiores de los que sienta que puede aprender. Si no lo está, considere cambiar proyectos o equipos. Esto ayudará a aumentar su tasa de aprendizaje durante el 80% restante de su tiempo.
- Escribe más código. Si siente que la programación es su punto débil, dedique más tiempo a construir y escribir código, ya que no mejorará a menos que practique el oficio. En la medida de lo posible, aleje el tiempo de otras tareas relacionadas con la ingeniería, como administrar proyectos, corregir errores, asistir a reuniones, diseñar productos, etc.
¡Buena suerte!
¿Busca más formas de sobresalir como ingeniero de software? Descargue un capítulo de muestra gratuito de mi libro, The Effective Engineer . Está diseñado específicamente para los ingenieros de software de hoy en día, basado en entrevistas extensas con líderes de ingeniería en las principales empresas de tecnología, y está repleto de cientos de hábitos y técnicas accionables para acelerar su carrera.
La clave # 1 es codificar más y más.
El código solo no es suficiente, así que aquí hay algunos pensamientos:
- Sigue codificando. Cree herramientas, escriba demostraciones, pruebe nuevas bibliotecas. La codificación es como un músculo y necesita ser ejercitado. Incluso si deja de codificar por algún tiempo, lleva tiempo volver a la pista. Solo sigue codificando.
- Leer código Regrese y lea su propio código, lea el código de otras personas. Te sorprenderá ver cuán diferente era tu antiguo código y cuánto podría mejorarse. Lea el código de otras personas, pero no asuma que todo el código o cantidades masivas de código son buenas prácticas de codificación. Si tiene acceso a otros repositorios de código de su trabajo, léalo, obtendrá mucha información. Github también hace esto súper fácil.
- Haga revisiones de código y consulte algunas pautas de código. Google publica sus pautas de estilo de código y son bastante buenas. Las revisiones de código no tienen que ser formales y pueden ser para su propio entretenimiento y conocimiento. Lea, comprenda e intente pensar cómo mejorar el código. Aprenderá algunas técnicas realmente inteligentes del código de otras personas y, como consecuencia, identificará código ineficiente en otros lugares. No asuma que el código es bueno porque es extenso, porque proviene de un lugar grande como google o microsoft, o porque pertenece a algún proyecto famoso.
- Conozca sus herramientas como el dorso de su mano. No necesita conocer 25 editores, el IDE más nuevo o todos los enlaces vim y emacs. Sea lo que sea que use, esté lo suficientemente cómodo para que no sea una distracción.
- Sal y aprende algo más . Echa un vistazo a haskell o clojure, haz algunos SQL o NoSQL. Verifique algún otro lenguaje de script. Simplemente mantiene las cosas frescas en tu mente.
- Clave lo básico. Lea sobre lo que hace que las cosas funcionen en el idioma que más usa y cómo funcionan las cosas detrás de escena. ¿Sabes qué sucede con las generaciones de memoria en tu recolector de basura? ¿Alguna vez revisó el código generado por su compilador? Hay muchos artículos de este tipo en línea.
- Lea sobre conceptos de programación en lugar de lenguajes o sintaxis. Por ejemplo, lea sobre Patrones de diseño. Heads First Design Patterns es un libro increíble sobre este tema. Hay otros como Clean Code, Code Gems, Beautiful Code, Refactoring to Patterns, Coders at Work.
- Aprende algunas cosas pesadas de depuración . Descubra cómo depurar cosas después de la implementación, intente rastrear un bloqueo desde un volcado de bloqueo.
Todos en este hilo tienen razón. Haz TODO lo anterior. Piense en cómo las personas aprenden con éxito lenguas extranjeras. No solo leen libros escritos en francés (o lo que sea). Leen libros, participan en conversaciones en francés, miran películas en francés, practican vocabulario, escriben en francés, etc.
– Como dijo Vijay Sarathy: “Practica y disfruta practicando”. Lo cual considero que significa práctica al trabajar en el código que le interesa.
– Como dice Niall Peterson, “Fracasa. Luego triunfa. Luego falla otra vez. Luego triunfa. Y continúa este círculo. Si no fallas, entonces sabes que necesitas hacer algo más difícil”. Vea también: http://www.quora.com/quotesilike … y considere comenzar un diario como este, incluso si prefiere no hacerlo público: http://www.quora.com/Marcus-Gedu …
– Encuentre un proyecto de código abierto (en cualquier idioma que esté aprendiendo) y lea el código, trabajando para comprenderlo. Encuentre uno que tenga reputación de estar bien escrito y uno que tenga mala reputación. Continuamente lea el código de otras personas: lo bueno, lo malo y lo feo.
– Dedique al menos un poco de tiempo a estudiar todos los paradigmas principales de programación, por ejemplo, tanto funcionales como orientados a objetos, incluso si no planea utilizar un lenguaje funcional. Recomiendo encarecidamente trabajar con “The Little Schemer”. Si eres como la mayoría de los programadores, disfrutarás de la experiencia y la encontrarás esclarecedora. http://www.amazon.com/Little-Sch …
– Aprenda al menos un lenguaje de bajo nivel y cercano al hardware, como C o Assembly.
– Aprenda sobre patrones de diseño, algoritmos comunes, estructuras de datos, refactorización, pruebas unitarias y ágil, si está de acuerdo con estas prácticas, planea usarlas o no.
– Piensa en la importancia de NOMBRAR cosas. “Solo hay dos cosas difíciles en informática: invalidación de caché y nombrar cosas” – Phil Karlton. Comprenda que la programación se trata tanto de “hacer que funcione” como de comunicarse con los humanos. Tome esa segunda parte muy, muy en serio y siempre preocúpese por los nombres de sus identificadores y las otras formas en que su código puede ser claro o desconcertante.
Anécdota: un compañero de trabajo mío escribió un código que extraía algunos datos de un archivo XML con un campo llamado “descripción”. Él almacenó los datos en una variable llamada “desc”. Eso no es muy confuso, pero es lo suficientemente confuso como para que cada vez que leí su código, tuve una confusión momentánea, en la que pensé “¿Qué significa desc?” Como digo, esto fue momentáneo, pero el código ya es difícil de entender. No arroje obstáculos que dificulten su comprensión.
Cuando se trata de una batalla entre la facilidad de comprensión y el ahorro de pulsaciones de teclas, errar del lado de la facilidad de comprensión. Cambié la variable (y todas las referencias a ella) a “descripción”.
– Aprenda a intervenir y retroceder, intervenir y retroceder. La programación se trata de los pequeños detalles, como las funciones individuales y, también, las grandes preocupaciones arquitectónicas. También lo son muchas otras disciplinas, pero en la mayoría de los casos, diferentes personas atienden lo pequeño que lo grande. Por ejemplo, en un set de filmación, la mayoría de los directores no atienden las complejidades del equipo de grabación de sonido; Mientras tanto, los chicos de sonido no se preocupan por la trama de toda la película.
Muchos programadores deben hacer ambas cosas, y es difícil cambiar los modos mentales. Así que date mucha práctica para intervenir y retroceder.
– Si está mirando la lista anterior (que podría ampliarse fácilmente) y se siente intimidado, debe trabajar en ESO. Si su expectativa es “tenerlo todo” en un año, se sentirá decepcionado. Los programadores deben ser estudiantes de por vida. Nunca se gradúan, no deberían esperar, y deberían disfrutar nunca graduarse. Si eres del tipo que es infeliz a menos que alcances la línea de meta, esta no es una buena carrera para ti.
ACTUALIZACIÓN: este es un campo en el que los mentores realmente ayudan. Si puede encontrar un programador que sea mejor que usted (que debería ser fácil, sin importar su nivel de habilidad) que esté dispuesto a mirar su código críticamente y entrenarlo, crecerá a pasos agigantados.
Para mejorar las habilidades de programación, debe centrarse en los siguientes 4 temas.
- Lenguajes de programación
- Estructuras de datos
- Algoritmos
- Comprensión del sistema
Para mantener mi respuesta breve, no sugeriré ningún libro, pero me limitaré a una visión general de cada tema.
Cada tema es un gran tema de interés en sí mismo. Pero puede tratar de obtener la mayor cantidad posible gradualmente a largo plazo.
Lenguajes de programación
- Nunca te limites a un solo idioma. Siga aprendiendo varios idiomas: uno de procedimientos, uno orientado a objetos, uno de secuencias de comandos, uno funcional, etc.
- Además, no intentes aprender demasiados idiomas en un corto período de tiempo. Poco a poco siga aprendiendo un nuevo idioma cada año. Pero nunca olvides el viejo que aprendiste.
- No se concentre solo en la sintaxis. Centrarse en el paradigma del lenguaje, sus debilidades y fortalezas. Comprende dónde encaja bien cada idioma. Aprenda lo que el lenguaje diseñado para ofrecer.
- El buen dominio de 3-4 idiomas le dará una idea muy agradable sobre estos idiomas, lo que le será útil.
- Sigue practicando mucho. Casi a diario debe escribir un programa, incluso si es un programa de 10 líneas. Que sea un hábito que nunca muera.
Estructuras de datos
- Aprenda todas las estructuras de datos básicas: matriz, lista, árbol, gráfico, trie, diccionario / mapa, conjunto, etc.
- Aprenda las estructuras de datos avanzadas todo lo que pueda: matriz de sufijos, árbol de sufijos, etc.
- Implemente estructuras de datos en los idiomas que conozca.
- Comprender las operaciones básicas (lectura, escritura, etc.) complejidad de tiempo para esas estructuras de datos.
- Comprenda las fortalezas y debilidades de cada uno de ellos.
- Recuerde la estructura de datos compatible con las bibliotecas de idiomas (STL, clases, etc.).
- Sigue jugando mucho con ellos.
Algoritmos
- Aprenda todos los algoritmos fáciles: clasificación, búsqueda, gráficos de algos, etc.
- Aprenda todos los algoritmos avanzados que pueda: programación dinámica, retroceso, etc.
- Necesita dominar el cálculo de la complejidad del algoritmo.
- Debe aprender a diseñar su algoritmo personalizado según la necesidad.
- Sigue implementando muchos algoritmos.
Comprensión del sistema
- Comprenda la naturaleza de su sistema operativo de destino. ¿Qué soporta tu sistema operativo? ¿Cómo se ejecuta un proceso? etc.
- Comprender los segmentos del programa: datos, texto, pila, montón, etc.
- Si su idioma se basa en una máquina virtual, aprenda cómo funciona su VM a un alto nivel.
Herramientas [Opcional]
- Elige un editor adecuado.
- Prefiere compiladores, construye herramientas que sigan los estándares.
- Aprenda herramientas de análisis estático, herramientas de creación de perfiles.
Finalmente
- Escriba un montón de código, compile, ejecute, depure.
- Lea un montón de código escrito por otros, puede ser de proyectos populares de código abierto.
- Siga aprendiendo nuevos idiomas, nuevas estructuras de datos, nuevos algoritmos, nuevas herramientas año tras año.
Espero que esto ayude.
Únase a nosotros en CodeWars: su objetivo debe ser hacer al menos un kata (= problema) cada día.
No. dias. Apagado.
Comencé hace unos meses y era bastante pobre (tener que buscar en Google sintaxis simple en algunos idiomas T_T), pero luego me ayudó a ser más hábil y a aprender un montón de trucos diferentes e ideas ingeniosas para resolver problemas tras problemas .
Ah, y los problemas se clasifican por dificultad y argumento , lo que hace que sea mucho más fácil encontrar su mejor grado de desafío, ni frustrante ni demasiado fácil.
Y una vez que resuelve un problema, puede leer las soluciones de otros codificadores , lo que lo convierte en un excelente combo de aprendizaje (me refiero a obligarse a resolver X, luego lea otras soluciones para X).
Otros quoranes me alcanzaron allí y, entre ellos, Russell seguramente merece una mención como el mejor logro que conocí hasta ahora: aprendió mucho, está mejorando constantemente sus propias habilidades y debo admitir que leer algunas de sus soluciones más inteligentes es ahora un placer. . Incluso o tal vez particularmente cuando son mejores que los míos 😉
Nota final: si yo (un “viejo” autodidacta que comenzó cuando tenía 35 años sin educación formal, más sobre mi camino aquí) lo hice al top 100, seguramente tú también puedes 🙂
Espero que esto ayude, feliz codificación 🙂
Para aprovechar lo que dijo Giacomo Sorbi, CodeWars Es un gran lugar para comenzar. Creo que está estructurado perfectamente para aquellos que están aprendiendo a codificar. Tampoco sería una mala idea visitar codecademy.com.
Pero, como se mencionó anteriormente, es importante practicar todos los días, incluso si es solo un problema. Uso mi github como calendario para asegurarme de que al menos codifico todos los días.
Además, nada en contra de Java, que publicaste en tu pregunta, pero te sugiero que comiences a buscar específicamente Python. Verá que su sintaxis es muy parecida al idioma inglés. La razón principal por la que creo que alguien que está aprendiendo a codificar debería comenzar con Python es porque le permitirá concentrarse más en la resolución de problemas en lugar de aprender un montón de sintaxis extranjera. Y de eso se trata realmente la codificación / programación. No se trata de los idiomas que usa, se trata de resolver problemas , nada más. Entonces, cuanto más rápido pueda resolver problemas, más rápido progresará.
Si tiene alguna pregunta o necesita ayuda , siempre puede enviarme un mensaje . Eso va para cualquiera.
Aprenda algunos idiomas que defienden diferentes ideas y filosofías y construya algo significativo en cada uno.
Elija un lenguaje orientado a objetos como C #, Java, Ruby o Python para exponerse al estándar de la industria que es OOP. Por lo que he visto, las plataformas .NET y Java son los grandes jugadores, así que si estás interesado en aprender lo que gana trabajos, ten esto en cuenta.
Elija un lenguaje funcional como Clojure, Racket o Haskell para obtener exposición a la pureza funcional, la gestión del estado y los datos inmutables. Eche un vistazo a un lenguaje basado en ML (F #, OCaml, Haskell) aunque solo sea para ver lo que es tan increíble sobre los tipos de datos algebraicos y la tipificación fuerte.
Elija un idioma como Clojure, Erlang o Go que tenga un buen modelo de concurrencia.
Elija JavaScript porque está en todas partes.
Crea cosas que se adapten al lenguaje que estás usando. Por ejemplo, haga algo en Erlang que capitalice su modelo de actor.
Crédito adicional: Hay una gran cantidad de valor para poder comparar y contrastar idiomas. Para ese fin, sería útil construir lo mismo en diferentes idiomas. Por ejemplo, podrías construir un juego (tal vez un roguelike) en cada uno de tus 3 o 4 idiomas teniendo cuidado de notar cómo se desarrollan las propiedades de cada idioma en el diseño.
La visión a largo plazo: si construyes 10 cosas en 3 idiomas (30 cosas) serás un programador más capaz que el que construyó 30 cosas en 1 idioma. Definitivamente no extrapolaría que construir 1 cosa en 30 idiomas es una vez más mejor, ya que lleva un tiempo dominar un idioma. Concéntrese en 3 o 4 idiomas hasta que sienta que ha aprendido todo lo que tienen para ofrecer. Yo estimaría no menos de 2 años por idioma, por lo que 3 o 4 idiomas deberían demorar de 6 a 8 años, como mínimo.
Yo afirmaría que para ser realmente avanzado como programador, uno debe conocer al menos 4 idiomas bien sin contar los lenguajes falsos como HTML y CSS. Solía pensar que era un programador bastante bueno codificando profesionalmente en COBOL por un período y luego en .NET durante mis más de veinte años de carrera. Y luego Rails me llamó la atención y me abrió a una comunidad que abrazaba a Ruby y hacía cosas más increíbles de lo que había visto en mi trabajo de consultoría. Eso despertó mi apetito por los lenguajes de programación por completo. He estado aprendiendo uno tras otro y viendo innumerables charlas en cada uno. Aprendí más en los últimos cinco años de lo que aprendí durante los 15 años anteriores.
La verdadera revelación, sin embargo, ha sido la programación funcional. Las ideas en la comunidad de FP son algunas de las mejores en tecnología, en mi humilde opinión. (Estoy enamorado de los lenguajes basados en ML y Scheme). F # por diversión y ganancias es lo mejor de lo mejor cuando se trata de mostrar el poder de FP: ¡lee todo! Si lo asimilas todo, estarás codificando a un nivel completamente nuevo.
Una de las mejores maneras de mejorar la habilidad de programación es volver a implementar algunos proyectos existentes, preferiblemente en otro lenguaje de programación. El proceso de reimplementación lo lleva a hacer varias cosas:
- Lea el código existente, recopile todas las características funcionales y comprenda los diseños generales
- Codificación, prueba, descubrimiento de problemas al cambiar los lenguajes de programación (por ejemplo, de un lenguaje escrito a un lenguaje dinámico)
- Comprenda completamente algunas decisiones de diseño. Algunas veces, cuando acabas de leer el código, realmente no entiendes por qué es así hasta que escribes el código y encuentras el mismo problema
- El hecho de que realmente reescribas el código te obligará (mentalmente) a leer el código con más cuidado
- Conozca muchas bibliotecas (el código usa xxx en python y ¿hay algún proyecto equivalente en java que pueda usar para mi re-implementación?)
En resumen, la reimplementación le ahorra tiempo de encontrar una idea de proyecto, elaborar casos de prueba y le permite concentrarse en la parte de programación. También es una excelente manera de comprender completamente los aspectos internos de los proyectos que le interesan. Durante este proceso, también es posible encontrar algunos errores en los proyectos que está tratando de volver a implementar y esto incluso le da la oportunidad de contribuir ¡eso!
Mejorar sus habilidades de codificación se trata de la voluntad de hacer algo de una mejor manera. Ejemplo simple:
Digamos que escribe las siguientes líneas de código C:
#includeint main () { printf ("Hola mundo"); devuelve 0; }
Ser un mejor programador significa saber qué puede salir mal en este código y qué puedo hacer para mejorar la funcionalidad.
Ejemplos de preguntas que puedes hacerte a ti mismo:
1. ¿Cómo usarás una cadena aleatoria en lugar de Hello World?
2. ¿Cómo puede pasar la cadena como argumento al programa?
3. ¿Cómo puede garantizar una asignación de memoria óptima para el programa?
4. ¿Cómo se gestiona la memoria para este programa? ¿Hay cuellos de botella? En caso afirmativo, ¿qué son y cuándo pueden ocurrir?
5. Si tengo varios archivos, ¿cómo los convertiré en un solo ejecutable?
Otra forma de mejorar sus habilidades en el mismo programa, haciendo algunas otras preguntas:
1. Si quiero ejecutar el programa 100 veces, ¿cuáles son las mejores formas de hacerlo? (Te hará aprender sobre scripting)
2. Si la implementación de su libc es incorrecta (rara vez ocurre, sucede mucho con bibliotecas de terceros en todos los idiomas), ¿hay alguna manera de corregirla? De no ser así, ¿cuál es la información que tengo para poder defenderme? tales errores
3. ¿Cómo sabe el compilador dónde se encuentra el archivo stdio.h? ¿Dónde puedo verlo?
4. ¿Qué información se almacena en el binario (lo llevará a aprender sobre los encabezados ELF en Linux / otros formatos de encabezados para otros sistemas operativos)? ¿Qué significa un formato de archivo? ¿Cómo reconocen las computadoras que necesitan abrir Adobe Reader para un documento PDF?
La lista de preguntas que puede hacer sobre un programa de computadora son infinitas.
Es importante una comprensión holística del entorno en el que está ejecutando su software (SO, compilador / intérprete, versión del SO, versión del compilador, el navegador, el servidor web y todo lo demás en el ecosistema de software.
La otra parte es comprender cómo se comporta el lenguaje que está utilizando para ciertos tipos de problemas y algoritmos. ¿Cuáles son las fortalezas y debilidades de su idioma?
Por último, la comprensión fundamental de las estructuras de datos (teóricas y las permitidas por su lenguaje) y los algoritmos pueden ayudar mucho a mejorar la forma en que codifica.
Programación como las matemáticas no requieren nada más que práctica.
Para empezar, te sugiero que comiences con la Madre de todos los lenguajes de programación modernos “C”. Estudiando que desarrollarás el conjunto de habilidades básicas que te darán una idea de la sintaxis y la semántica. Esta información luego lo ayudará a dominar otros lenguajes de programación.
La programación gira en torno a tres construcciones lógicas también conocidas como el flujo de la lógica :
- Secuencia: Instrucciones suministradas a la computadora escritas en orden secuencial para ser procesadas una tras otra.
- Selección: o Toma de decisiones, seleccione una de las muchas rutas posibles para el flujo de la lógica.
- Iteración: o bucle, realice tareas repetitivas sin volver a escribir la misma lógica una y otra vez.
Los lenguajes de programación se dividen en dos grandes categorías.
Programación @Procedural
@Programación orientada a objetos
C está orientado a procedimientos, mientras que C ++ y Java están orientados a objetos.
Una vez que se sienta cómodo con los conceptos básicos del lenguaje de programación “C”, enseguida avanzará y aprenderá lenguajes avanzados que siguen el paradigma orientado a objetos como C ++ y Java.
Más tarde, después de practicar y pulir sus habilidades orientadas a objetos, puede pasar a Dominar patrones de diseño, por ejemplo, @ Model – view – controller para la programación de nivel Enterprise que lo prepara para desarrollar aplicaciones robustas y escalables.
Si está buscando hacer una carrera en programación de computadoras, le recomiendo encarecidamente que lo haga. Entonces, te sugiero que pases rápidamente a las tecnologías del lado del servidor de las que depende toda la humanidad actual y futura.
Un buen comienzo en tecnologías del lado del servidor: @ Tutoriales web en línea de W3Schools
La programación de computadoras no es suficiente, también se debe considerar la administración de la base de datos para agregar una guinda al pastel. Te encantará cuando lo pruebes. Como principiante, comience con @La base de datos de código abierto más popular del mundo
Espero que disfrutes este viaje, siendo ingeniero de software yo mismo te doy la bienvenida en esta divertida aventura.
¡Buena suerte!
La codificación es un arte, y como cualquier otro arte requiere práctica, mucha práctica.
Tome una dosis de en el desayuno, haga que RegEx en el almuerzo y gráficos en la cena.
Como mencionó, tiene habilidades básicas de programación en C y Java, por lo tanto, ahora el siguiente paso lógico es comenzar a aprender e implementar algoritmos en esos lenguajes de programación. Para los algoritmos de aprendizaje, sugiero el libro titulado ” Introducción a los algoritmos, 3ª edición”, coautor de Thomas Cormen.
La programación competitiva junto con el aprendizaje de algoritmos y las estructuras de datos es muy útil. Entonces, en lugar de aprender algoritmos o programación competitiva. Haz ambos. Hacer esto lo hará más competente en la comprensión, aplicación y modificación de algoritmos.
Los sitios web de programación competitiva más recomendados son CodeChef.com y TopCoder.com.
Intente obtener una parte de cualquier proyecto de código abierto , preferiblemente el que está teniendo un desarrollo activo en curso. Encuentre proyectos de código abierto que le interesen, y c
convencer a los miembros de que puede formar parte del equipo, esto se puede lograr aprendiendo la programación, encontrando errores y codificando parches para solucionarlos o una simple entrevista por Skype.
Formar parte del proyecto de código abierto te ayuda a aumentar drásticamente tus habilidades. También te ayuda a aprender cómo colaborar entre compañeros de equipo.
Además, mencionó que tiene vacaciones por venir, puede usar las vacaciones para obtener una pasantía .
Las pasantías pueden agregar un valor adicional a su currículum y obtener mucho conocimiento. Suponiendo que es de la India, algunos sitios para encontrar pasantías adecuadas son http://www.internshala.com y http://www.letsintern.com
También puede completar algunos cursos gratuitos en línea en diferentes ramas de algoritmos, estructuras de datos y programación durante sus vacaciones. Hay muchos sitios web que ofrecen cursos gratuitos. Completa 8-10 cursos en 25 días. Y serás un codificador altamente evolucionado. Mi sitio web favorito a este respecto es http://www.coursera.org
Hablando de ubicaciones, si estás en
India y buscar ser contratado por grandes nombres como Microsoft, LinkedIn, etc. Debes saber que las habilidades de programación son probablemente lo último que importa. Por lo general, hacen preguntas sobre algoritmos, estructura de datos y ciencias de la computación. Y tiene que descifrar una prueba de aptitud para llegar a la fase de entrevista, por lo tanto, es muy recomendable prepararse para la prueba de aptitud de forma paralela si no es lo suficientemente bueno para ello.
Ahora, para dividir su tiempo, veamos un horario ficticio que usted y yo podríamos seguir cuando tengamos vacaciones. (asumiendo que el deseo de mejorar es intenso).
- Comience su día escuchando una charla TED en tecnología, puede escuchar la charla completa o establecer su preferencia de tiempo y área de interés y dejar que TED decida qué charla es la mejor para usted.
- Inicie sesión en su computadora, consulte los foros, debe estar suscrito a una buena cantidad de foros relacionados con la programación y el desarrollo. Uno de ellos es http://www.stackoverflow.com . Vea qué preguntas están surgiendo en su área de interés y aprenda cosas nuevas todos los días.
- Leer un libro basado en algoritmos, ¿quizás un capítulo todos los días? Y realice el ejercicio dado cuando haya terminado.
- Toma una buena siesta. Escucha un poco de Pink Floyd .
- Prepárese para la prueba de aptitud, practique durante aproximadamente 1-2 horas diarias. Algunos buenos sitios web para esto son http://www.indiabix.com y http://www.m4math.com
- Inicie sesión en cualquier sitio competitivo y codifique un programa. Algunos programas toman al menos 3 días. Por ejemplo, http://www.CodeChef.com
- Al final del día, puede leer sobre un nuevo concepto de informática. Por lo tanto, mejorará todos los días , y la práctica regular durante un mes debería convertirlo en un gran programador. O al menos ponte en marcha. Recomiendo geeksforgeeks.com para esto.
Buena suerte. Espero que esto haya ayudado.
La mejor manera de pulir estas habilidades es usarlas. Ponerlos en un entorno laboral real te hará bien. También le permitirá obtener un conocimiento y una experiencia más profundos. Solo hay mucho que puedes aprender rápidamente por tu cuenta. Trabajar con otros también te permitirá beneficiarte de sus experiencias.
Entonces tiene aproximadamente dos (2) opciones:
- Toma una pasantía . Intenta postularte a una empresa. Consigue un trabajo como pasante para que no tengan que examinar demasiado tus credenciales. Sugiera buscar trabajos que le permitan trabajar en algo, ya sea un simple sistema de registro interno, un sitio web simple o incluso un trabajo de control de calidad. La clave es tener la oportunidad de usar sus habilidades y trabajar con otras personas más experimentadas. Si no obtiene una pasantía porque incluso sus habilidades actuales pueden ser insuficientes, puede probar la segunda opción. Además, hay algunas organizaciones y organizaciones sin fines de lucro que podrían beneficiarse de alguien que ayuda de TI como voluntario. Tal vez hacer un pequeño sistema de base de datos para una organización benéfica hará mucho bien.
- Encuentre un proyecto de código abierto y contribuya . Esto le permite probar sus habilidades y la mayoría de los proyectos de código abierto no rechazan a los voluntarios. Es posible que desee comenzar con algo simple, como la localización o la limpieza de errores y correcciones de la interfaz. Haga las correcciones y contribuya de nuevo. Pueden o no ser aceptados, pero usted ya está en camino de mejorar. Colabora con las comunidades que trabajan en este software de código abierto. En general, son muy útiles y definitivamente aprenderás y una o dos cosas de ellos. Hay mucho que hacer en este espacio.
Historia : Hace unos años, estaba ejecutando DevOps en una importante empresa de outsourcing de TI. Tuve un candidato que quería hacer un cambio de carrera. Solía ser un consejero en una escuela secundaria local altamente calificada. Su licenciatura era AB Psicología y no tenía los conocimientos de TI necesarios. Cuando presentó la solicitud, expresó su deseo de ingresar a una carrera como DBA. Nos contó lo que hizo para estudiar la tecnología de bases de datos. Incluso tomó algunos cursos de DBA en un instituto vocacional local (que regala capacitación gratuita a bajo costo). Para abreviar una larga historia, lo contraté como pasante. No le pagamos, pero le dimos cantidades crecientes de trabajo. Después del período de pasantía, lo contratamos como administrador de sistemas de nivel de entrada (con funciones de DBA). Finalmente, consiguió un trabajo en Oracle.
La clave es aceptar que ningún trabajo es demasiado pequeño. Debes comenzar desde algún lado. Cada vez que trabajes en código, mejorarás. La clave es desarrollar lentamente algo de experiencia y tratar de analizar en qué área te gustaría enfocarte. Después de lo cual, acumule algo de experiencia “reanudable” (de ahí las pasantías y el trabajo voluntario). Si realmente te gusta lo que estás haciendo, no será un problema acumular todas estas credenciales.
More Interesting
¿Cuál es la diferencia en las habilidades entre artistas visuales y músicos o compositores?
¿Cuáles son las formas de probar las habilidades de Java de un candidato?
¿Cómo puedo mejorar mis habilidades de debate?
¿Qué habilidad emergente debería adquirir ahora que será más valiosa en 2021?
¿Cuáles son las diferencias entre pasatiempos y habilidades?
¿Por qué Estados Unidos está invirtiendo en el desarrollo de habilidades en India?
¿Cuáles son algunos consejos para mejorar las habilidades de seguimiento?