¿Cómo presionar más como progtwigdor?

Durante los últimos, hmm, 6 meses he estado leyendo en Progtwigción en C, obtuve K & Rv2, la guía de conectores de BEEJ, la progtwigción de Expert C, la progtwigció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 Progtwigción de Expert C, pero todavía me siento débil como progtwigdor, estoy seguro de que se necesitan más de 6 meses de lectura para ser verdaderamente 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 progtwigs 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ía suficiente.

Ah, espero que no borres esta pregunta 🙂

Gracias

Aprenda a progtwigr en 21 días http://sofes.miximages.com/c/ars_longa_vita_brevis.png de Abstruse Goose

Además, aprende a progtwigr en diez años.

Lo que realmente te ayudaría a aprender es comenzar un proyecto . Podría ser cualquier cosa, implementar un cliente / servidor de chat, un shell de Unix, un progtwig 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 .

la mayoría de los cuales son generalmente muy aburridos

Aprende algo que te parezca interesante, luego el rest caerá en su lugar.

Peter Norvig tiene algunas ideas sobre eso.

Trate de implementar algunos algoritmos no triviales. No sé qué ejemplos están incluidos 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 syntax 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 como 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 la conexión con el mundo real que lo hace más satisfactorio que un “hola”. progtwig “mundo”.

¿O qué tal escribir un módulo del 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.

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

“lee” y practica lo que lees cual es la mejor manera.

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 progtwigción.

Encuentre un proyecto Opensource (probablemente no sea el kernel de Linux) en el que esté interesado, 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 progtwigdor.

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 propenso a un costo de tiempo de sobrestimación / sobreestimación, 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).

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!

Encuentro la práctica mucho más útil para aprender conceptos que leer sobre ellos. A menudo, lo que haré es determinar un problema que quiero resolver con un 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 progtwigs divertidos para intentarlo.

Codifique Hello World, luego codifique Hello World distribuido a través de una red, en 3D o usando 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.

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 progtwigción web puede ser diferente de la progtwigción de sistemas en muchas formas, pero ambas comparten muchos problemas de seguridad.

Primero, debe 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 Progtwigdores 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 progtwigción provienen de trabajar en los sistemas de medición y facturación del agua. Trabajar en los problemas de progtwigción del agua mantiene mi mente aguda cuando surgen otros problemas, como comparar inscripciones de seguros de salud.

Ya sea que se centre más en la web o en los proyectos de back-end de servidores, mantenga su conocimiento del idioma actualizado y lo suficientemente pequeño como para conocerlo 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 contratarlo para trabajar en su proyecto implementado en el Idioma B, luego adopte el proyecto, ya que su crecimiento como progtwigdor 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 escribir software. En estos días, si soy valioso, es porque puedo trabajar en muchos problemas, no solo en la progtwigció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.

Aprender a progtwigr es como aprender a hablar un idioma extranjero. Inicialmente es muy frustrante y muchas veces 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 usa, y lo usa a menudo, será difícil retener y mantener su 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 encoding, 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.

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

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. Deberá usar algunas bibliotecas auxiliares, para la interfaz de usuario y también para el servidor. 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. ¡Ponlos en práctica! 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 encoding, probablemente ya te olvidaste del lenguaje en sí.

Iniciar un proyecto y terminarlo. Ponlo en línea, hazlo de código abierto, obtén retroalimentación.

Considere leer más contenido sobre los “conceptos” de progtwigción que puramente syntax:

  • No me hagas pensar por Steve Krug
  • Código Completo: Un Manual Práctico de Construcción de Software

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

Visita StackOverflow.com e intenta resolver problemas periódicamente para enfrentarte a un desafío mental y ayudar a otros.

Es posible que la lectura de Code Complete 2 sea útil. Es un buen libro sobre prácticas de progtwigción.

.