2011-02-16 17 views
11

Ok, he estado programando en Delphi durante 3-4 años y me considero un diseñador de aplicaciones de nivel intermedio con una buena comprensión de los conceptos. ¿Pero cómo me pongo mejor? Acabo de ver la fuente de un par de componentes que uso con bastante frecuencia (virtualtreeview, asynccalls) y el código que hay allí me detiene. Sí, puedo entender partes de él, pero otras cosas simplemente pasan por encima de mi cabeza.Delphi - ¿Cómo puedo mejorar

Entonces, ¿dónde están los mejores recursos para mejorar mi capacidad de programación? Libros, blogs u otras fuentes de información?

+0

Esta pregunta está en el límite 'subjetiva e incontestable'. –

+4

Quizás sea así, pero creo que será información útil para ayudar no solo a mí mismo sino a los demás. – Simon

+0

Es útil, pero no puede responderse objetivamente. Se votó para cerrar y pasar a Programadores SO, donde pertenecen tales preguntas subjetivas. –

Respuesta

11

Las habilidades de programación son como músculos; la mejor manera de mejorarlos es ejercitándolos. Si quieres aprender a ser un mejor codificador, trabaja en un proyecto más difícil de lo que has trabajado antes. Haga una idea para algo que le gustaría escribir, pero realmente no sepa cómo hacerlo, y comience a escribir. Una vez que te encuentras con conceptos que no entiendes, búscalos y terminarás agregando nuevos conceptos y habilidades a tu repertorio.

+5

Pero al igual que el entrenamiento muscular: lo importante es trabajar en los proyectos correctos. Simplemente hacer más de lo mismo no lo hace mejorar –

-2

El código de virtualtreeview es terrible. No te preocupes por eso

Para ser realmente bueno en la programación orientada a objetos, es posible que desee probar Smalltalk por un tiempo. Y para algo completamente diferente, agregue el marco web Seaside.

[edit] Hay varias razones por las que buscar en Seaside es una buena idea. Es un excelente ejemplo de crear excelentes abstracciones sobre atrocidades como html, css y javascript, por lo que es posible hacer un desarrollo web de una manera razonable. Muestra cómo crear interfaces fluidas y cómo usarlas para que sean mucho más productivas.

Después de 20 años de Turbo Pascal y Delphi, mi estilo de codificación mejoró significativamente con el uso de Smalltalk. Debería haberlo encontrado antes.

Virtualtreeview por el contrario, consta de una enorme cantidad de código mal estructurado. Sin abstracciones, métodos demasiado largos, malas estructuras de datos. La única ventaja que tiene es que se usa ampliamente, por lo que es poco probable que se encuentre con errores si se conservan las piezas bien usadas.

[edit2] Y cuando se sienta cómodo con Smalltalk and Seaside, intente ejecutarlo en Gemstone, una base de datos orientada a objetos. Eso le mostrará cómo deberían ser las bases de datos (invisibles) y le hará argumentar en contra de las bases de datos relacionales para siempre.

+0

¿Por qué Seaside es interesante para una persona delphi? Smalltalk es genial. Sin duda vale la pena aprender, pero debes tenerlo claro. –

+0

El consejo de Smalltalk solo podría valer la pena una votación. Con el consejo de Seaside suena más como un anuncio que como un buen consejo. –

+0

No, Seaside merece otro voto positivo –

4

creo que sería crecer mucho en sus habilidades delphi si:

  1. aprender a construir componentes. Lea book de Ray Konopka en Custom delphi Components, o su EDN article.

  2. Estudie las fuentes JEDI JVCL y JEDI JCL. Las bibliotecas Jedi API y JWSCL también son valiosas, como fuente de información. La documentación de MSDN (Microsoft) también tiene un valor incalculable, como fuente de documentación de la plataforma para los diversos subsistemas de Windows con los que tendrá que interactuar.

  3. Obtenga una copia del libro Mastering Delphi gigante de Marco Cantu, o Texeira and Pacheco's Delphi Developer's Guide.

  4. Obtenga información acerca del desarrollo controlado por pruebas, pruebas unitarias, control de versiones (conozca varios sistemas, como Subversion, Git, Mercurial, etc.), integración continua y otras técnicas de nivel profesional.

+0

Sí, tengo el libro de Marco Cantu. Útil pero aún podría ir más allá. Me gusta la idea de aprender a construir componentes, persistir en eso. He implementado el control de versiones en mi trabajo, pero nunca profundicé en las pruebas unitarias. Gracias por las sugerencias. – Simon

3

Si quiere descubrir un código que no es el suyo, tiene que empezar y ensuciarse. Divide las partes del código que deseas comprender en un programa "mínimo" y depúralo línea por línea. Muy a menudo, eso te dirá qué está pasando en los niveles bajos. A veces, solo eso te dará la comprensión que necesitas.

Pero cuando te quedas perplejo por cómo funcionan las construcciones de código, entonces ingresa partes de las líneas ofensivas en Google para obtener una respuesta. Eso a menudo lo llevará a publicaciones de blogs o artículos que están discutiendo códigos similares que explican los conceptos y cómo funciona el código.

A veces voy al Google Code Search y selecciono el idioma Pascal/Delphi para buscar. Encuentro que el código aquí da una perspectiva diferente y a menudo tiene comentarios y otra información que ayuda a entender las ideas.

Si no puedo entenderlo de otra manera, vengo a StackOverflow, que es un recurso fantástico para la información de Delphi de los programadores Delphi muy conocedores y experimentados. Si es algo que usted, como programador intermedio ya no puede descifrar, entonces probablemente sea una buena pregunta aquí en SO, y obtendrá respuestas excelentes en poco tiempo que estoy seguro que ayudarán a su comprensión y aprendizaje. .

10

Comprender el código que utiliza conceptos con los que no está familiarizado es difícil. Mi consejo:

  • elegir uno o dos proyectos que usted no entiende, y los vuelve a poner en práctica. A partir de su pregunta, intente escribir su propio componente de árbol (o lista) e intente escribir un marco de trabajo de subprocesamiento simple donde pueda despachar trabajos y recuperar su trabajo en un determinado momento. Estas son versiones simplificadas de los dos proyectos que mencionaste.

    Como programador, usted aprende haciendo. Ninguna cantidad de teoría compensará la experiencia de haber abordado y resuelto un problema. [*]

    Cuando solucione estos dos problemas, encontrará algunos de los mismos problemas que los autores de Virtual Treeview y AsyncCalls. (Si tiene problemas, ¡pregunte aquí al SO!) No solo aprenderá las mismas cosas que aprendió, sino que probablemente regrese y vuelva a leer su código y comprenda algunas de las cosas que están haciendo.

    No se deje tentar por el hecho de que tiene implementaciones de trabajo de los conceptos en torno (los proyectos originales) y el código de copia; siéntase libre de buscar inspiración, pero no la copie. Escríbelo tú mismo.

    Recuerde que tanto Mike Lischke como Andreas Hausladen son personas muy inteligentes. No se desaliente si es un trabajo duro. Muchos programadores hacen toda su carrera simplemente siendo competentes (como suena) sin esforzarse para intentar o aprender algo más difícil (así que si no te molesta que lo diga, ¡bien por hacer la pregunta!)

Un par de otras ideas:

  • aprender otro idioma. Delphi es genial, pero "piensas" en un idioma, por lo que si aprendes bien otro idioma estarás expuesto a otros conceptos o formas de pensar, o a diferentes maneras de hacer lo mismo. Esto realmente abre tu mente.

    Por ejemplo, C++ es grande para el uso de RAII, template metaprogramming (esto es más poderoso que lo que las plantillas de Delphi lo permiten), algunas cosas bastante sorprendentes en las distintas bibliotecas adicionales, tales como boost, y el tiro en el pie :) Un el lenguaje funcional cambiará completamente tu forma de pensar (y tengo que admitir que soy un poco hipócrita aquí: he estado expuesto a ellos pero no me 'conozco' a mí mismo. Quiero.) Objective C podría ser bueno para una persona diferente asumir lo que significa orientación a objetos (tanto C++ como C++ son ambos lenguajes basados ​​en C orientados a objetos, pero muy diferentes). Se entiende la idea.

  • Para ver esos proyectos específicos: una respuesta en esta página aconseja pasar por línea por línea. Me parece que para comprender el código que no he usado antes, esto puede ser abrumador. Una vez leí en el blog de un miembro del personal de Embarcadero algunos consejos al , utilice un generador de perfiles, porque le dará una buena vista de alto nivel de (a) todas las clases/métodos/partes de un programa y (b) cuáles son las partes más comúnmente usadas, y probablemente las más esenciales, y cómo todo se engancha. No me puedo atribuir el mérito de esa sugerencia, pero creo que es un buen consejo. Recomiendo usar AQTime.

    Es por esta razón que encuentro respuestas como 'find Foo, study the source' inútil: usted es un programador, ¡por supuesto, verá la fuente! Cómo ver la fuente, esa es una pregunta más interesante.

  • Por último, si llega al punto en el que ha estado "buscando el origen de un par de [proyectos] y el código allí simplemente tocones [usted]" o si hace algo de lo anterior y no entiendo algo, pregunte aquí en SO!

[*] Nota: No estoy abogando no conocer la teoría subyacente, simplemente que hay un conocimiento/confianza que se obtiene al hacer algo por sí mismo que es esencial.

+0

Buen consejo. Gracias David. Acabo de comenzar C# (hace 3 meses) en el trabajo ya que estamos comenzando el cambio de Delphi. Hay algunas "diferencias" interesantes entre los dos y estoy seguro de que descubriré más. – Simon

+1

Para entender cómo mirar el código, use Smalltalk. 30 años después, otros IDE todavía no están cerca de ofrecer una experiencia similar. –

4

La mejor manera (para mí) para entender cómo funciona el código que no puedo seguir a partir de mirar el código solo es conseguir abajo y sucio y observar el código en cuestión. Ponga una cantidad de puntos de interrupción y comience a rastrear el código mientras se está ejecutando.

Cuanto más lo hagas, más mejorará tu capacidad de seguir código luego de solo mirarlo.

Además, no se han hecho todavía, me gustaría sugerir fuertemente una lectura a través de los siguientes libros:

Patrones de diseño: Elementos de software reutilizables orientada a objetos (ISBN 0-201-63361-2)

Escrito en 1994, sigue siendo tan relevante hoy como lo era en aquel entonces (si no más).

Lo importante es que te enseña a reconocer ciertos patrones en el código y te da un vocabulario para describir qué secciones completas de código hacen con un solo término.

En el modelo que construyes en tu mente sobre lo que hace una pieza compleja de código y cómo interactúa, ya no tienes que guardar todos los detalles minúsculos, sino que puedes construir una abstracción de nivel superior en tu mente describe el código para ti mismo como la interacción de bloques funcionales basados ​​en ciertos patrones de diseño.

Naturalmente, esto supone que el código en cuestión está bien diseñado. Algunas veces, algunos códigos son simplemente un desastre que puede hacer espagueti celoso y una incapacidad de su parte de seguir y entender el código no es una falla suya, sino de la persona que escribió el código.

2

La programación es compleja.

La aplicación RAD típica tiene formularios con código en controladores de eventos, módulos de datos con consultas y ninguna clase.

Puede escribir cientos de aplicaciones como esa y aprender solo cómo usar varios componentes y sus propiedades y eventos.

Este es el principal problema con Delphi, es fácil y natural hacer las cosas mal. RAD = MALO Lamentablemente, probablemente el 90% de las aplicaciones se escriben así.

Entonces, ¿qué tiene de malo este enfoque? Falta una arquitectura. ¿Por qué es eso malo? No es resistente a cambios. Cuando cambien sus requisitos, tendrá que hacer más cambios de los que haría con una aplicación diseñada correctamente.

Ahora es bien aceptado que las aplicaciones se deben estructurar en capas.

separación típica de capas es objetos

  • Negocios/reglas
  • mapeo de datos/persistencia
  • GUI

Con Capa de negocio limpiamente separado que puede tener Win32 GUI, interfaz gráfica de usuario Web, Dispositivo móvil GUI ...

Con la capa de persistencia limpiamente separada puede Las mismas capas de Negocio y GUI cambian de decir Interbase a Postgreso.

También es mucho más fácil escribir pruebas.

Ahora déjame advertirte ahora, este es un camino largo y difícil de tomar. Te llevará años dominar y nunca estarás completamente hecho.

Cuando haces que tu aplicación esté bien diseñada y estas capas se configuran, y lo haces funcionar, y se lo muestras emocionado a tus colegas, te darán una apariencia extraña y dirán: Bueno, dejé esta consulta en la forma, ejecuta y se ve igual. Pero sabrás mejor.

No estoy de acuerdo con las sugerencias para aprender otro idioma. Es decir, en mi humilde opinión, simplemente pasar el problema. La habilidad para organizar y estructurar adecuadamente su aplicación es independiente del idioma. Cualquier lenguaje verdadero de OO es suficiente, así que no hay necesidad de aprender otro en este punto.

Tampoco creo que mirar la fuente de VirtualTreeView o controles similares le enseñará mucho. Aprenderá sobre Winapi, pero si bien es útil, eso no ayudará con el diseño de la aplicación.

Para resumir, busque en google recursos sobre diseño de aplicaciones, objetos comerciales, arquitectura, OPF, patrones y pruebas.

0

No estoy seguro de que haya una respuesta simple a su pregunta.

Una forma de mejorar constantemente su comprensión de los fundamentos es a través de la práctica y la repetición. Una forma interesante de lograr esto es la llamada code kata, que se inspira en las artes marciales.

El concepto en sí es independiente del idioma y hay mucho énfasis en TDD, que me gusta. Julian Bucknall parece ser un fan, también. Algunas personas incluso record their katas. Una búsqueda rápida en Google muestra muchas referencias diferentes.

0

Si trabaja como parte de un equipo, participe en la revisión del código de pares, utilizando una herramienta como Code Collaborator o ReviewBoard. No solo aprenderá de los demás y sus comentarios sobre su código, sino que también desarrollará una visión crítica de su propio trabajo y comenzará a codificar mejor.

Cuestiones relacionadas