2010-03-12 8 views
15

Por último, hmm, 6 meses He estado leyendo en Programación en C, me encontré K & Rv2, Guía de socket de BEEJ, Programación Expert C, Programación de sistemas Linux, la especificación ISO/IEC 9899: 1999 (real, y no borrador). Después de recibirlos de Amazon, tengo Linux instalado y lo hago.¿Cómo impulsar aún más como programador?

He terminado con K & R, aproximadamente a la mitad de la Programación de Expert C, pero aún me siento débil como programador, estoy seguro de que se necesitan más de 6 meses de lectura para ser realmente hábiles, pero mi pregunta es esto:

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 en general muy aburridos. ¿Cómo elevo mis habilidades y me vuelvo realmente grandioso? He invertido dinero, tiempo y un estilo de vida general para algo que realmente deseo, pero no estoy seguro de cómo lograrlo exactamente.

¿Podría alguien explicarme, quizás si necesito programar continuamente, qué es exactamente lo que debo codificar? Estoy bastante seguro, la codificación de los programas del mundo hola no me va a enseñar más de lo que ya sé sobre algo.

Un amigo mío dijo "leer" (con énfasis en leer) una página de hombre al día, pero leer es todo lo que hago, quiero hacerlo, ¡pero no estoy seguro de qué! Estoy interesado en la seguridad, pero no estoy seguro como novato de qué codificar que se consideraría suficiente.

Ah, espero que no elimine esta pregunta :)

Gracias

+6

De la misma manera se llega al Carnegie Hall. – kemiller2002

+3

Para una gran cantidad de preguntas sobre cómo mejorar sus habilidades de programación, haga una búsqueda en Google de "site: stackoverflow.com improve programmer" - esto se ha preguntado aquí muchas veces antes. –

+2

"Hay una etiqueta para eso": http://stackoverflow.com/questions/tagged/self-improvement – harpo

Respuesta

3

"leer" y la práctica lo que se lee que es la mejor manera.

8

Peter Norvig tiene some ideas about that

+0

No creo que esto sea lo que realmente está preguntando, en absoluto. Más sobre cómo mejorar, y no cuánto tiempo lleva. –

+1

+1 para el enlace sin embargo. –

+0

@rogue: Norvig ofrece una excelente receta para llegar allí, leer nuevamente. ;) –

6

tratar de aplicar unos algoritmos no triviales. No sé qué ejemplos se incluyen en los libros, pero puede intentar escribir

  • Una calculadora algebática. Ingrese "sin (2) + 5! * 3^(1/2)" y obtendrá 208.755394335 como salida.
  • Un editor de texto que resalta la sintaxis desde cero.
  • Escriba un codificador/decodificador PNG (o cualquier otra imagen o formato de sonido) desde cero.
  • Escribir un editor de imágenes (por ejemplo, relleno de inundación no es completamente trivial)
  • ...
+0

Jaja, sí, hice un lector de BMP monocromático con un editor hexadecimal y volteando píxeles en MS Paint :) – Jacob

13

mayoría de los cuales son generalmente muy aburrido

aprender algo que encuentre interesante, entonces el resto caerá en su lugar.

18

Lo que realmente te ayudaría a aprender es a iniciar un proyecto. Podría ser cualquier cosa, implementando un cliente/servidor de chat, un intérprete de comandos de Unix, un programa simple para almacenar listas de compras, lo que sea. El objetivo es elegir algo que le interese y trabajar para implementarlo; se sorprenderá de lo mucho que aprenderá en el camino, y no querrá renunciar porque está trabajando en algo significativo para usted.

Básicamente, aprenderá mucho leyendo. Para obtener el verdadero conocimiento, deberá resolver problemas reales.

+0

Secundado: aprenderá más trabajando en un proyecto de mascota que lo motivará más de lo que lo hará con ejercicios genéricos de un libro o sitio web. * Hacer * también te ayuda a recordar la teoría ... – CJM

+0

+1 - Esta es realmente la única respuesta que tiene sentido para mí. Realmente no puedes entender lo que * no sabes * hasta que te enfrentas a problemas del mundo real que te sobrepasan los límites de lo que * sabes. * –

+0

+ 1- Estoy de acuerdo, esta es la única manera. Aprende de los proyectos que no puedes realizar porque están más allá de ti, e incorpora algo nuevo (usa clases, herencia, interfaces, etc.) en cada nuevo proyecto. A veces, hacer un juego puede ser una solución divertida. – DMan

1

Encuentro la práctica mucho más útil para aprender conceptos que para leer sobre ellos. A menudo lo que voy a hacer es determinar un problema que quiero resolver con el software, luego hacerlo por intentando el problema. Utilizaré los recursos en el camino, pero es realmente más útil intentar lo que lees, en lugar de leer todos los libros sobre el tema.

Además, Code Golf es una buena manera de encontrar programas divertidos para intentar.

+1

Un programador que hace Code Golf es como un matemático que hace Soduku ... un poco una distracción del trabajo real. –

2

Necesita desafiarse a sí mismo con un proyecto más grande y complejo. Trabajar a través de fragmentos de código, como tienden a hacerlo la mayoría de los ejemplos de libros, no te llevará mucho más allá de los ejercicios de capítulos.

Estás trabajando en ser un desarrollador de libros inteligentes. ¡Haz algo en el mundo real y conviértete en una calle inteligente!

1

Código Hello World, luego código Hello World distribuido a través de una red, o en 3d, o utilizando una base de datos. No pienses que las cosas son demasiado triviales hasta que las hayas hecho. Implementa algoritmos para asegurarte de que sabes cómo hacerlo. Haz código que creas que es divertido.

+1

printf ("Hola mundo en 3D"); –

0

Hazlo. No hay un atajo para ser un "gran" desarrollador, como cualquier otra nave, requiere mucho tiempo, práctica y paciencia. Solo hazlo.

2

Código de golf y Project Euler son buenos - pero son más sobre la solución de problemas y las matemáticas que la programación.

Busque un proyecto de Opensource (probablemente no sea el kernel de Linux) que le interese, descargue la fuente e intente utilizarla. Lo ideal es algo que sea una biblioteca en lugar de una aplicación, por lo que debe aprender a leerlo para usarlo con sus propias cosas.

No se preocupe: solo se necesitan unos 10 años para convertirse en un buen programador.

1

Si le interesa la seguridad, intente codificar una aplicación web teniendo en cuenta la seguridad. Si creas algo así 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 estilo potencialmente nuevo además de C. Y luego, cuando estés hecho con su proyecto, compare el código con otro software similar. Si te quedas atascado en tu proyecto, también puedes ver 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 de muchas maneras, pero ambas comparten muchas preocupaciones de seguridad.

0

Aprender a programar es como aprender a hablar un idioma extranjero. Inicialmente es muy frustrante y a menudo aburrido. Es solo después de obtener un grado de fluidez en un idioma determinado que su productividad aumenta. En el mismo sentido, solo aprender las reglas no es suficiente. Al igual que con el aprendizaje de idiomas, si no lo usa y lo usa a menudo, será difícil retenerlo y mantener su interés.

Lo que funciona para una persona no siempre funciona para otra. Code golf puede funcionar para usted, o le puede parecer 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, producción de un juego, etc. A veces, simplemente tratando de descubrir 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.

0

Algunas ideas de proyectos:

  • a pequeños proyectos de bases de datos: lista de contactos, colección de DVD, etc. hace hincapié en el archivo de E/S, las estructuras de datos de búsqueda, etc.
  • calculadora simple: Destaca I interactiva de E/S, análisis, estructuras en forma de árbol, etc.
  • NNTP simple (Usenet) o cliente de chat: Redes y protocolos
0

Sólo se puede aprender la lengua, cuando se esté utilizando. Los ejemplos o ejercicios simples nunca le darán una visión profunda del lenguaje. Personalmente, también encontré que los ejercicios al final de un capítulo son aburridos y no mundanos, así que no los hice. Como otro estado, encuentre un proyecto que le interese. 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, eche un vistazo a cómo puede lograrlo. Deberá utilizar algunas bibliotecas de ayuda, para la interfaz de usuario y también para el servidor. ¡Y luego comienza a trabajar! (Por supuesto, el proyecto debe ser factible para usted, por lo tanto, no apunte como 'escribir un procesador de texto mejor que Winword'.)

Otra forma es buscar un proyecto de OSS que le interese y donde te faltan algunas características. ¡Implementa esos! El gran beneficio es que obtiene una revisión de fuente que probablemente sea más difícil que la de cualquier profesor. Una vez que aprendiste esos estilos de codificación, probablemente ya te hayas olvidado del idioma en sí.

4

Has dicho que estás interesado en la seguridad. Busque algunos exploits y trate de entenderlos. Mejor aún, intente encontrar un exploit usted mismo, 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 como para ser interesantes, y tienen la conexión al mundo real que los hace más satisfactorios que un "hola" mundo "programa.

¿O qué tal escribir un módulo de kernel de Linux? No son tan difíciles de escribir, solo hay un poco de barrera de entrada (hay mucho que aprender antes de que puedas tener tu "triángulo negro"). Cree un dispositivo de caracteres que devuelva una secuencia infinita del último byte que le escribió (llámelo/dev/fortytwo si lo desea). Luego, asegúrese de que funcionará cuando dos procesos lo utilicen simultáneamente.

Busque algún proyecto con código malicioso pero comunidad amigable, y limpie parte de él. GCC y el kernel serían malas elecciones aquí :)

+0

¿Porque el código es genial o porque la comunidad no? –

+0

LOL, quise decir que GCC y el kernel no tienen un código malo. O lo que podrías pensar que es malo, hay alguna buena razón que aún no has descubierto, etc. Además, estos proyectos son muy grandes, y todas las frutas de bajo costo están en un estado crónico de escogencia, por lo que es difícil encontrarlas. algo para hundir los dientes como un no interno. –

0

Comience un proyecto y termínelo. Póngalo en línea, hágalo de código abierto, obtenga comentarios.

+3

, ... ???, ganancia –

0

Puede encontrar leyendo Código completo 2 útil. Es un buen libro sobre prácticas de programación.

.

2

Ir a trabajar. En serio, busque trabajo para un principiante y deje que alguien con una mayor guía de conocimiento usted (si tiene suerte) o consulte la base de código para obtener consejos útiles (si tiene menos suerte).

De otra manera, usted puede comenzar un proyecto para usted como algunas personas sugirieron y mejorar su conocimiento cuando surja la oportunidad.

Sin embargo, no me gustaría mezclar estos dos mundos - no empieces por acordar un trato por un dinero - Probablemente seas propenso a sobre/sobreestimar el costo del tiempo, no tendrás un buen conocimiento de soluciones más grandes, etc. Es mejor tener a alguien que lo guíe o tenga más tiempo para aprender cosas.

Ah, y por cierto. - leer libros (CC2, algunos libros de patrones de diseño, "Código limpio" son un buen lugar para comenzar y excelentes libros de referencia para toda la carrera) y blogs (Lo sabrá cuando lo vea).

0

considerar leer más contenido en los "conceptos" de la programación que puramente sintaxis:

unirse a una lista de correo/boletín/revista/podcasts para los programadores en su área de especialización: http://www.drdobbs.com/cpp/;jsessionid=XVZEO0SKOCRRBQE1GHPCKH4ATMY32JVN

Visite StackOverflow. com y trate de resolver problemas periódicamente para darse un desafío mental y ayudar a los demás.

1

Primero, necesita escribir software en un grupo de al menos dos, para que pueda obtener comentarios. Si está trabajando solo, busque la forma, ya sea usando SO u otro formulario, como Programmers para obtener comentarios.

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 un montón de ideas de programación interesantes provienen de trabajar en los sistemas de medición y facturación de agua. Trabajar en problemas de programación de agua me ayuda a mantener la mente alerta cuando aparecen otros problemas, como comparar a los afiliados al seguro de salud.

Ya sea que se centre más en proyectos de servidores web o servidores, mantenga su conocimiento de idiomas actualizado y lo suficientemente pequeño como para conocer bien el idioma. 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 planees escribir kernel de Linux, embedded embedded o código de extensión de Python, te sugiero que aprendas Scala o Clojure, y quizás Ruby además de Javascript y PHP.

Sin embargo, lo que prevalecería sobre el idioma que aprende es alguien con un proyecto interesante dispuesto a contratarlo y aprender bien su lenguaje de implementación. Es decir, si le gusta el Lenguaje A, pero alguien está dispuesto a contratarlo para que trabaje en su proyecto implementado en el Lenguaje B, luego abrace el proyecto, porque su crecimiento como programador vendrá de una buena contribución al proyecto en lugar del lenguaje que usted conoce .

Finalmente, conviértase en un buen solucionador de problemas, y esas habilidades se extenderán más allá de escribir software. En estos días, si soy valioso, es porque puedo trabajar en un montón de problemas, no solo en programación.

Cuestiones relacionadas