No hay absolutamente nada malo en BASIC. En muchos sentidos es una buena manera de empezar - no hay bucle de compilación-edición-recompilación, si escribes PRINT 42*3 lo hace. Si escribes CIRCLE 100,100,50, dibuja uno. Sí, puedes hacerlo "mejor", pero entonces acabas con un montón de bucles de eventos y demás. Es mucho más sencillo si el código se ejecuta secuencialmente.
La culpa, OMI, es de Microsoft. Crearon un BASIC basado en el original de Dartmouth. Este tenía muchos defectos. Las variables eran una letra seguida opcionalmente por un número. Sólo GOTO estaba disponible para las estructuras (aparte de FOR/NEXT). GOSUB se utilizaba para los números de línea.
La mayoría de ellos son fáciles de solucionar. Puedes tener GOSUB por ejemplo. Los parámetros están bien, pero tener subrutinas con nombre hace que el código sea mucho más legible. Puedes tener nombres de variables más largos y locales. Puede añadir bucles REPEAT, IF THEN ELSE y así sucesivamente. Puedes editar y mantener los números de línea - las máquinas commodore solían hacer esto, según recuerdo (?). Puedes hacer que los números de línea sean opcionales. Puedes añadir OOP y demás.
Lo malo de BASIC son las implementaciones específicas que se usaban en la mayoría de los ordenadores de finales de los 70 a mediados de los 80.