[ contenidos | #winprog ]

Porqué deberías aprender la API antes que la MFC

La Controversia

Muchas personas entran al IRC y preguntan "¿Que es mejor, MFC o API?" y muchas otras personas están dipuestas a responder "MFC es un m..." o "API es una m...", ya sea porque quizás una o lo otra estubo involucrada en algún evento traumático en su infancia, o simplemente porque todos dicen que una es mejor que la otra.

Los argumentos estándar son:

Y así...

Mi Respuesta

Primero de todo vamos a aclarar que son la API y la MFC. API es un término genérico que significa Aplication Programming Interface (Interface para la Programación de Aplicaciones). Sin embargo, en el contexto de la programación en Windows, esto se refiere específicamente a la API de Windows, la cual es el nivel mas bajo de interacción entre las aplicaciones y el sistema operativo. Los drivers, por su puesto, tienen aún niveles inferiores y trabajan con diferentes conjuntos de llamadas a funciones, pero para la gran majoría de desarrollo en Windows esto no es relevante. MFC es una Librería de Clases, un conjunto de clases C++ que han sido escritas para reducir la cantidad de trabajo que tomaría realizar ciertas cosas utilizando la API. La MFC además introduce dentro de la aplicación un esqueleto (o framework) Orientado a Objetos, de cual puedes tomar ventaja o ignorarlo si deseas, como lo hacen la mayoría de los principiantes debido a que este framework no está apuntado a escribir reproductores de mp3, clientes IRC o juegos.

Entonces, ¿Cuál es el framework correcto?... Para principiantes, aquellas personas que simplemente están aprendiendo a programar, creo que deberían trabajar con la API hasta que estén a gusto con la manera en que funcionan las aplicaciones y comprendan todos los mecanismos básicos que hay detrás de cosas como el Loop de Mensajes, GDI, Controles y quizás aún mutlithreading y sockets. De esta forma comprenderán los cimientos de todas las aplicaciones en Windows y podrán aplicar este conocimiento común a MFC, Visual Basic o cualquier otro framework que no sporte todo lo que la API hace, simplemente porque dicho framework ya hace una gran cantidad de cosas y no puede soportar todas esas pequeñas cosas que nadie usa. Entonces, cuando necesites usar esas cosas, es ahí dinde puedes agregarlas tu mismo utilizando tus conocimiento sobre la API.

¿Pero la MFC no es mas fácil? En cierta forma, es mas fácil cuando muchas tareas comunes son realizadas por uno mismo, reduciendo la cantidad de código que realmente necesitamos tipear. Sin embargo, menos código no significa "mas fácil" cuando no entendemos el código que necesitamos escribir, o cuando no entendemos cómo funciona dicho código. Generalmente los principiantes que utilizan los wizards para comenzar sus aplicaciones, no tienen idea que hace la mayoría del código que se ha generado y pierden una gran parte del tiempo intentando darse cuenta donde agregar cosas o que cambios deben hacer para para alcanzar un cierto resultado. Si comienzas a escribir tus programas desde cero, ya sea utilizando la API o MFC, entonces comprenderás todo lo que está puesto allí ya que fué puesto por vos mismo y solo usarás las cosas que entiendes como funcionan.

Otro factor importante es que la mayoría de las personas que están aprendiendo por primera vez la API Win32, no tienen una fuerte base en C++. Intentar comprender la programación en Windows utilizando la MFC y aprender C++ al mismo tiempo puede ser una tarea monumental. Si bien no es imposible, estará lejos de ser mas productivo que hacerlo teniendo conocimientos sobre C++ y la API.

Entonces, básicamente...

Lo que pienso es que deberías aprender la API hasta que te sientas cómodo con ella y luego intentar con la MFC. Si luego, pareciera ser que tiene sentido y puedes ahorrar tiempo con la MFC, entonces úsala.

Sin embargo, y esto es importante... si quieres trabajar con la MFC sin entender la API y luego buscas ayuda por algo y la respuesta que obtienes hace referencia a la API (como por ejemplo "Usa el HDC provisto en el mensaje WM_CTLCOLORSTATIC"), seguramente quedes colgado ya que no entiendes como traducir un objeto de la API a uno de la MFC. En ese momento estarás en problemas y las personas se frustrarán contigo por no aprender todo aquello que necesitas de la API antes de intentar usar la MFC.

Personalmente prefiero trabajar con la API, solo me parece mejor. Pero si tengo que escribir una terminal para una base de datos o un host para un conjunto de controles ActiveX, consideraría seriamente usar la MFC ya que podría eliminarme una gran cantidad de código que, en otro caso, debería reinventar.


Copyright © 1998-2003, Brook Miles (theForger). All rights reserved.

Versión en Español: Federico Pizarro - 2003