profesional - cursos de programacion
¿Cómo presionar más como programador? (21)
Durante los últimos, hmm, 6 meses he estado leyendo en Programación en C, obtuve K & Rv2, la guía de conectores de BEEJ, la programación de Expert C, la programación de sistemas Linux, la especificación ISO / IEC 9899: 1999 (real, no borrador) . Después de recibirlos de Amazon, instalé Linux y lo conseguí.
Terminé con K&R, aproximadamente a la mitad de la Programación de Expert C, pero todavía me siento débil como programador, estoy seguro de que se necesitan más de 6 meses de lectura para ser realmente hábil, pero mi pregunta es la siguiente:
He hecho todos los ejercicios en K & Rv2 (en el capítulo 1) y algunos en otros capítulos, la mayoría de los cuales son generalmente aburridos. ¿Cómo levanto mis habilidades y me vuelvo verdaderamente grande? He invertido dinero, tiempo y un estilo de vida general para algo que realmente deseo, pero no estoy seguro de cómo lograrlo.
¿Podría alguien explicarme, tal vez si necesito codificar continuamente, qué es exactamente lo que debo codificar? Estoy bastante seguro de que codificar los programas de hello world no me va a enseñar más de lo que ya sé.
Un amigo mío dijo "leer" (con énfasis en leer) una página de manual al día, pero leer es todo lo que hago, lo que quiero hacer, ¡pero no estoy seguro de qué! Me interesa la seguridad, pero como novato no estoy seguro de qué código se considerará suficiente.
Ah, espero que no borres esta pregunta :)
Gracias
la mayoría de los cuales son generalmente muy aburridos
Aprende algo que te parezca interesante, luego el resto caerá en su lugar.
"lee" y practica lo que lees cual es la mejor manera.
Algunas ideas de proyectos:
- Pequeños proyectos de bases de datos: lista de contactos, colección de DVD, etc. Enfatiza E / S de archivos, estructuras de datos de búsqueda, etc.
- Calculadora simple: enfatiza E / S interactiva, análisis, estructuras en forma de árbol, etc.
- NNTP simple (Usenet) o cliente de chat: redes y protocolos
Aprender a programar es como aprender a hablar un idioma extranjero. Inicialmente es muy frustrante ya menudo aburrido. Solo después de que adquiera un grado de fluidez en un idioma determinado, verá que su productividad aumenta. En la misma línea, solo aprender las reglas no es suficiente. Al igual que con el aprendizaje de idiomas, si no lo usas y lo usas a menudo, será difícil retener y mantener tu interés.
Lo que funciona para una persona no siempre funciona para otra. Code golf puede funcionar para usted, o puede resultarle tedioso, por ejemplo. Personalmente me gusta hacer algo que tenga un valor genuino, pero ese soy yo. Experimente un poco con diferentes tipos de proyectos de codificación, tal vez código de golf, tal vez proyectos de código abierto, produciendo un juego, etc. A veces, tratar de averiguar cómo responder a las preguntas de otras personas ayuda. Eventualmente encontrarás lo que funciona para ti. Solo recuerda, estudiar no es suficiente, tienes que aplicar esos estudios.
Code Golf y Project Euler son buenos, pero tienen más que ver con la resolución de problemas y las matemáticas que con la programación.
Encuentre un proyecto de Opensource (probablemente no sea el kernel de Linux) que le interesa, descargue la fuente e intente usarlo. Lo ideal es que sea una biblioteca en lugar de una aplicación, así que tienes que aprender a leerlo para usarlo con tus propias cosas.
No se preocupe: solo se necesitan 10 años para convertirse en un buen programador.
Codifique Hello World, luego codifique Hello World distribuido a través de una red, en 3D o utilizando una base de datos. No pienses que las cosas son demasiado triviales hasta que las hayas hecho. Implementar algoritmos para asegurarse de que sabes cómo. Haz el código que crees que es divertido.
Considere leer más contenido sobre los "conceptos" de programación que puramente sintaxis:
Únase a una lista de correo / boletín / revista / podcasts para programadores en su área de especialización: http://www.drdobbs.com/cpp/;jsessionid=XVZEO0SKOCRRBQE1GHPCKH4ATMY32JVN
Visita .com e intenta resolver problemas periódicamente para enfrentarte a un desafío mental y ayudar a otros.
Encuentro que practicar es mucho más útil para aprender conceptos que leer sobre ellos. A menudo, lo que haré es determinar un problema que quiero resolver con el software y luego intentarlo . Utilizaré recursos a lo largo del camino, pero es realmente más útil probar lo que lee, en lugar de leer todos los libros sobre el tema.
Además, Code Golf es una buena manera de encontrar programas divertidos para intentarlo.
Es posible que la lectura de Code Complete 2 sea útil. Es un buen libro sobre prácticas de programación.
.
Hazlo. No hay un atajo para ser un "gran" desarrollador: como cualquier otro oficio, se necesita mucho tiempo, práctica y paciencia. Simplemente hazlo.
Iniciar un proyecto y terminarlo. Ponlo en línea, hazlo de código abierto, recibe comentarios.
Ir al trabajo. En serio, encuentre un trabajo para un principiante y deje que alguien con un mayor conocimiento lo guíe (si tiene suerte) o revise el código base para obtener sugerencias útiles (si tiene menos suerte).
De otra manera, puede comenzar un proyecto para usted mismo como algunas personas sugirieron y mejorar su conocimiento a medida que surja la oportunidad.
Sin embargo, no mezclaría ambos mundos; no empiece por acordar un acuerdo por un dinero. Probablemente sea más propenso a subestimar o sobreestimar el costo, no tendrá un buen conocimiento de soluciones más grandes, etc. Es mejor tener a alguien que te guíe o tener más tiempo para aprender cosas.
Ah, y por cierto. - lea libros (CC2, algunos libros de patrones de diseño, "Código limpio" es un buen lugar para comenzar y excelentes libros de referencia para toda la carrera) y blogs (lo sabrá cuando lo vea).
Lo que realmente te ayudaría a aprender es comenzar un proyecto . Podría ser cualquier cosa, implementar un servidor / cliente de chat, un shell de Unix, un programa simple para almacenar listas de la compra, lo que sea. El punto es elegir algo en lo que esté interesado y trabajar para implementarlo, se sorprenderá de lo mucho que aprende en el camino y no querrá renunciar porque está trabajando en algo significativo para usted.
Básicamente, solo aprenderás mucho leyendo. Para obtener un verdadero conocimiento, tendrá que trabajar a través de problemas reales .
Necesitas desafiarte con un proyecto más grande y complejo. Trabajar a través de fragmentos de código, como lo hace la mayoría de los ejemplos de libros, no lo llevará más allá de los ejercicios del capítulo.
Estás trabajando en ser un desarrollador de libros inteligentes. ¡Haz algo del mundo real y vuélvete listo para la calle!
Peter Norvig tiene algunas ideas sobre eso.
Primero, necesita escribir el software en un grupo de al menos dos, para que pueda obtener comentarios. Si está trabajando solo, entonces encuentre una manera, ya sea utilizando SO u otra forma, como Programmers para obtener retroalimentación.
A continuación, encuentre algo que le interese, y las ideas del proyecto seguirán. Trabajo en un entorno municipal, pero lo que más me intriga es la instrumentación para el agua. Me gusta mi otro trabajo, pero muchas ideas interesantes de programación provienen de trabajar en los sistemas de medición y facturación del agua. Trabajar en los problemas de programación del agua mantiene mi mente aguda cuando surgen otros problemas, como comparar a los afiliados a los seguros de salud.
Ya sea que se centre más en proyectos de back-end web o de servidor, mantenga su conocimiento del idioma actualizado y lo suficientemente pequeño como para saberlo bien. Desde mi experiencia, si conoces bien un lenguaje basado en Algol, como C, probablemente puedas aprender otro lenguaje similar como C ++, Java o Perl. C es un lenguaje maravilloso, pero a menos que planee escribir un kernel de Linux, un código de extensión Python o un código Python especializado, sugeriría aprender Scala o Clojure, y tal vez Ruby además de Javascript y PHP.
Sin embargo, lo que prevalecería sobre el idioma que aprendes es alguien con un proyecto interesante que esté dispuesto a contratarte a ti ya tu propio lenguaje de implementación. Es decir, si le gusta el Idioma A, pero alguien está dispuesto a contratarle para trabajar en su proyecto implementado en el Idioma B, luego adopte el proyecto, ya que su crecimiento como programador provendrá de una buena contribución al proyecto en lugar del idioma que conoce. .
Finalmente, conviértase en un buen solucionador de problemas, y esas habilidades se extenderán más allá de la escritura de software. En estos días, si soy valioso en todo, es porque puedo trabajar en muchos problemas, no solo en la programación.
Si está interesado en la seguridad, intente codificar una aplicación web teniendo en cuenta la seguridad. Si creas algo como un foro, no solo aprenderás sobre una serie de problemas de seguridad, sino también sobre cómo usar múltiples tecnologías como bases de datos, servidores web y un nuevo idioma y un nuevo estilo potencialmente distinto de C. Y luego, cuando estés hecho con tu proyecto, compara el código con otro software similar. Si te quedas atascado en tu proyecto, también puedes mirar proyectos similares para ver qué hacen. Y puede ser tan simple o tan complicado como quieras que sea.
La programación web puede ser diferente de la programación de sistemas en muchas formas, pero ambas comparten muchos problemas de seguridad.
Solo puedes aprender el idioma cuando lo estás utilizando. Los ejemplos o ejercicios simples nunca le darán una visión profunda del lenguaje. Personalmente también encontré los ejercicios al final de un capítulo aburridos y no mundanos, así que no los hice. Como otro estado, encuentre un proyecto en el que esté interesado. Esto puede ser cualquier cosa, desde un simple juego de mesa hasta un sistema de corte de video. Si descubrió lo que sería interesante para usted, observe cómo puede lograrlo. Necesitará usar algunas bibliotecas auxiliares, para la interfaz de usuario y también para el backend. Y luego empieza a trabajar! (Por supuesto, el proyecto debería ser factible para usted, por lo tanto, no intente "escribir un procesador de textos mejor que Winword").
Otra forma es cavar para un proyecto OSS en el que esté interesado y en el que le faltan algunas características. Implementar esos! El gran beneficio es que obtienes una revisión de la fuente que probablemente sea más difícil para cualquier maestro. Una vez que aprendiste esos estilos de codificación, probablemente ya te olvidaste del lenguaje en sí.
Trate de implementar algunos algoritmos no triviales. No sé qué ejemplos se incluyen en los libros, pero podría intentar escribir
- Una calculadora algebrática. Ingrese "sin (2) + 5! * 3 ^ (1/2)" y obtendrá 208.755394335 como salida.
- Un editor de texto de resaltado de sintaxis desde cero.
- Escriba un codificador / decodificador PNG (o cualquier otro formato de imagen o sonido) desde cero.
- Escribir un editor de imágenes (por ejemplo, el relleno por inundación no es del todo trivial)
- ...
Usted dice que está interesado en la seguridad. Ve a buscar algunas hazañas y trata de entenderlas. Mejor aún, intente encontrar un exploit, para una vulnerabilidad conocida (mejor: desconocida).
Escriba un cliente NNTP, o un servidor SMTP, o cliente, y utilícelo para enviar su correo. Muchos de estos protocolos de Internet son lo suficientemente simples para no ser muy difíciles de implementar (la mayoría de los protocolos basados en texto), pero lo suficientemente matizados para ser interesantes, y tienen una conexión con el mundo real que lo hace más satisfactorio que un "hola". programa "mundo".
¿O qué tal escribir un módulo de kernel de Linux? No son tan difíciles de escribir, solo hay una pequeña barrera de entrada (mucho que aprender antes de que puedas tener tu "triángulo negro"). Cree un dispositivo de caracteres que devuelva un flujo infinito del último byte que escribió en él (llámelo / dev / fortytwo si lo desea). Luego, asegúrese de que funcionará cuando dos procesos lo utilicen simultáneamente.
Busca algún proyecto con código de mierda pero una comunidad amigable, y limpia algo de eso. GCC y el kernel serían malas elecciones aquí :)