¿Qué puede gustarnos del lenguaje c?

En un día como hoy el título viene que ni pintado: What’s to love
about C?
.

Por lo demás, un recordatorio de algunas de las cosas que nos proporciona
este lenguaje, que a veces descartamos demasiado rápido:

– Access to the hardware
– Guaranteed simple flow
– Clear and unambiguous
– A macro preprocessor
– Conditional compilation
– Libraries and API
– Small to tiny binaries
– Speed

Personalmente tengo una relación de amor-odio con la programación y me da pereza escribir (o retocar) programas en c, pero tampoco es algo que dejaría de lado sin más.

Anuncios

Añadir una instrucción a Python

Conocer como funciona un compilador es una buena idea para cualquiera que tenga que ver con la informática.
Este artículo no va de eso, pero da algunas pistas de las interioridades de un lenguaje que es bien interesante, Python: Python internals: adding a new statement to Python.

This article doesn’t attempt to suggest the addition of an until statement to Python. Although I think such a statement would make some code clearer, and this article displays how easy it is to add, I completely respect Python’s philosophy of minimalism. All I’m trying to do here, really, is gain some insight into the inner workings of Python.

Las aplicaciones en Java tienen más fallos

Ahora que el Java está de moda por los problemas de su ‘infraestructura’ (ver, por ejemplo, Grave vulnerabilidad sin parche en Java está siendo aprovechada por atacantes ) me ‘toca’ rescatar una noticia que tampoco deja en buen lugar al lenguaje.

Lo contaban en Java apps have most flaws, Cobol apps the least, study finds y se trata de un análisis de esos masivos (Que, por lo tanto, hay que tomar con prevención):

Cast Software, a maker of software quality tools that evaluate the engineering soundness of the architecture and coding of an application, analyzed the 745 applications which combined for some 365 million lines of code. The company Thursday released a report detailing the conclusions of that analysis.

Sobre Java, podría ser falta de formación y/o experiencia:

As for Java, Curtis said he can only speculate on the problems, but said that “there are many people going into Java now that really don’t have strong computer science backgrounds. We may just be seeing the fact that there is an awful lot of people writing code who aren’t gurus in software engineering.”

En New Worldwide Software Quality Study From CAST Exposes Millions in Hidden IT Costs también comentan, con cifras más concretas:

“Our findings, although conservative, revealed an average technical debt of $3.61 per line of code,” said Curtis. “A significant number of applications examined in the study — nearly 15% — had over a million lines of code which means even the smallest of those contains over $3.6 million in technical debt.”

Otras conclusiones:

– Despite assumptions to the contrary, outsourced and in-house developed applications didn’t show any difference in structure quality. The same was true for onshore and offshore applications.
– Java EE applications were the most prevalent among those studied and received significantly lower performance scores as well as carrying greater technical debt than other languages
– Established development methods such as agile and waterfall scored significantly better in structural quality than custom methods, while waterfall scored the highest in transferability and changeability.
– COBOL applications scored the highest in security, while .NET applications received the lowest security scores

Se puede ver la nota de prensa original en: New Worldwide Software Quality Study from CAST Exposes Millions In Hidden IT Costs

Curioso. Tomar con prevención, claro.

Aplicaciones web, herramientas y seguridad

En [PDF] Exploring the Relationship Between Web Application. Development Tools and Security un documento interesante que trata justamente de eso: cómo las diversas herramientas disponibles para el desarrollo de una web afectan desde el punto de vista de seguridad.

Mediante una revisión manual del código y una herramienta de penetración automatizada comprobaron 9 implementaciones de la misma aplicación web realizada en tres lenguajes de programación diferentes:

Our findings are:
(1) we do not find a relationship between choice of programming language and application security,
(2) automatic framework protection mechanisms, such as for CSRF and session management, appear to be effective at precluding vulnerabilities, while manual protection mechanisms provide little value, and
(3) manual source code review is more effective than automated black-box testing, but testing is complementary.

Los lenguajes elegidos fueron Perl, PHP y Java.

El número mayor de fallos:

One of the Perl implementations has by far the most vulnerabilities, primarily due to its complete lack of XSS protection. This does not seem to be related to the fact that Perl is the language used, however, since the other two Perl implementations have only a handful of vulnerabilities, and few XSS vulnerabilities.

Que parece tener más bien que ver con la habilidad de los desarrolladores.

Sobre el tipo de fallos detectados:

Manual review is the clear winner for authentication and authorization bypass and stored XSS vulnerabilities, while black-box testing finds more reflected XSS and SQL injection vulnerabilities.

Naturalmente, es un estudio limitado y pequeñito (y a la vez grande, teniendo en cuenta la idea de 9 equipos desarrollando la aplicación) del que no se pueden sacar conclusiones estadísticas, pero aporta algo de luz al tema.

Una historia de los lenguajes de programación

Una lectura breve (pero no tanto, sólo en comparación con lo que intenta resumir) para estos días de vacaciones o marcha lenta: A Brief, Incomplete, and Mostly Wrong History of Programming Languages.

Python y la seguridad

El otro día hablábamos de Bibliotecas para evitar problemas en PHP. Ahora me doy cuenta de que llevo unos días guardando un enlace a Python Security, un proyecto de la OWASP donde se almacena información genérica (válida para cualquier lenguaje) y soluciones o código relevante para algunos de los temas. Se trata de un proyecto vivo, así que irá mejorando, seguramente.

Bibliotecas para evitar problemas en PHP

Ya hablamos en Dos grandes errores en las aplicaciones web y consejos para evitarlos del API que preparaba la gente de OWASP, ESAPI con el objetivo de simplificar las cuestiones relativas a la seguridad para desarrolladores en Java. También parece que se preocupan de otros lenguajes, como PHP, Python, Ruby …

Sin embargo en esta entrada me quería centrar en dos entradas veraniegas sobre el particular: Librería PHP para evitar SQL injection y XSS, donde se nos habla de Genius Open Source Libraries y Prevenir ataques XSS con PHP donde se comenta sobre el PHP Input Filter.

No las he visto en detalle pero es bueno que vayan surgiendo este tipo de iniciativas y que los programadores dispongan de estas herramientas para aligerar su trabajo.

Para aprender C

Durante mucho tiempo cuando alguien quería aprender C el libro que le recomendaban invariablemente era el The C Programming Language de Kernighan y Ritchie. No estoy seguro de que sea el más recomendable para una aprendiz (sobre todo si a la vez tiene que aprender a programar) pero me hizo gracia ver esta loa en Programming Books, part 4: The C Programming Language.

¿Cuál recomendaría yo? Recomenbada, más bien, porque hace tiempo que nadie me pregunta por un libro para aprender C: a mi me lo recomendó un compañero profe y era el que solía decir, C: A Software Engineering Approach, de Darnell y Margolis, sin quitarle el mérito al otro. Seguramente, cualquiera que programe en C habitualmente debería leerlo también.

Popularidad de los lenguajes de programación

A partir de diversas fuentes en Programming Language Popularity. En las búsquedas de Yahoo! el lenguaje más popular sería C++, seguido de C y Java. En las búsquedas de empleo de Craig List (a través del buscador Yahoo!) el más popular sería PHP, seguido de C++ y C. Según los datos de la librería Powell’s Books el triunfador sería Java, seguido de C++ y Visual Basic. Según Freshmeat (hacía un montón de tiempo que no veía referencias a este sitio) el primero sería C, seguido de Java y C++. Según Google Code el ganador es C, Java y C++. Para Del.icio.us el primero es JavaScript seguido de Java y Python. Finalmente, según Ohloh el primero es C, luego Java y luego C++.

En el resultado combinado (peso 1 para cada una de las estadísticas) el ganador sería Java, seguido de C y C++.