Hungarian rapsody

A computação é uma ciência “recente”, que se move quase que na velocidade da luz em comparação com as demais ciências.

Em pouco tempo diversas mudanças ocorrem e tecnologias dominantes são praticamente varridas quase que para baixo do tapete em “segundos”.

É uma área em constante mudança que acontecem desde a concepção da tecnologia em seus mínimos detalhes, mesmo os invisíveis a olho nú, até aqueles estruturais e que abalam o ecossistema todo, ecoando através dos tempos deixando sua marca nos mais diversos meios de comunicação.

Nesse cenário a indústria de desenvolvimento de software moderna tem aprendido muito através do desenvolvimento de novas ferramentas que auxiliam a construção de tecnologias e produtos, entretanto nem sempre existiram IDE’s poderosas capazes de integrar com debuggers e analisadores estáticos, dentre outros ferramentais disponíveis na atualidade.

Borland Turbo C 2.0

No inicio dos anos 90, IDE’s como Turbo Pascal 5.0 e Turbo C 2.0, da Borland, começavam a revolucionar a forma como softwares eram desenvolvidos, com seus debuggers integrados, excelentes editores de código com seus syntax highlighting.

Entretanto nessa época os desenvolvedores, em sua grande maioria, não terceirizavam sua confiança e competência nas IDE’s e na maioria das vezes utilizavam ou desenvolviam técnicas para auxiliar a organização, compreensão e depuração do código.

Charles Simonyi

Nessa mesma época, Charles Simonyi, um jovem engenheiro de software nascido na Hungria e que havia sido recrutado por Bill Gates para trabalhar no desenvolvimento da suite Microsoft Office na Microsoft, começou a popularizar uma técnica que já havia sido criada por ele em seu antigo emprego na Xerox PARC.

Essa técnica consiste em uma notação de código, independente de plataforma e linguagem, que tenta padronizar prefixo de nomes de variáveis de acordo com seus tipos e comportamento, bem como estilo de nomes de funções (se estendendo a classes) de forma a deixar o desenvolvimento uniforme e com um padrão conhecido e documentado, auxiliando a compreensão principalmente em grandes projetos e por pessoas diferentes.

Esse padrão é conhecido como notação húngara (hungarian notation) e foi popularizada pela Microsoft em suas literaturas oficiais, principalmente nos anos 90, sendo ainda um padrão forte dentro da empresa até os dias atuais.

Programming Windows 3.1

Eu mesmo conheci essa notação em 1993, quando adquiri a terceira edição de Programming Windows 3.1, de Charles Petzold – Microsoft Press, esse também um dos melhores escritores de livros técnicos que eu já li (menção honrosa também a Peter Norton), me apresentando assim essa notação.
Me rendendo ao entusiasmo de Petzold, decidi tentar escrever todo software que eu pudesse, utilizando notação hungara para saber se traria algum benefício, não só por isso mas também porque meus softwares começavam a se tornar cada vez maiores e complexos, portanto eu deveria tornar as coisas mais compreensíveis para o EU do futuro.

Apesar de ser alguém, corportivamente falando, com raízes fortíssimas no UNIX, tendo iniciado no XENIX, passado por SCO UNIX, IBM-AIX e Sun Solaris, confesso que era bastante influenciado pelo estilo Microsoft, antes dela se tornar esse elefante branco que é hoje, pois ela era a Google da época e portanto uma forte influenciadora dentre os jovens programadores, algo em proporções muito maiores do que ela mesmo representa nos dias atuais junto aos programadores mais jovens.
Pessoalmente, a Microsoft foi um dos pais do padrão MSX, portanto era “alguém” por quem eu tinha um certo carinho até então e por isso usar uma notação difundida pela Microsoft e não pela galera do UNIX, a qual eu estava mais corporativamente inserido, não foi nada estranho.

Sobre a notação húngara, abaixo vou deixar alguns exemplos retirados desse documento, que é bem simples e direto e que faço questão de deixar aqui em meu site, mas também fazer referência ao link original onde ele originalmente está hospedado aqui e que me pareceu ser uma plataforma de ensino inglesa bem interessante.

[]’s
PopolonY2k

Dennis Ritchie the father of everything

Since Dennis Ritchie passed away, I have been thinking to write something about this guy, not just because to me he is the most important computer scientist since early days of modern computer systems, but just because he was the father of everything we are running today.

The C programming language (Book cover)
The C programming language (Book cover)

Unfortunately the world did not give to him, what is in my opinion, the deserved attention in the moment of his death, because 7 days before another great entrepreneur had passed away, so the world media and market was more affected by his death. I’m talking about Steve Jobs, that is known as a great entrepreneur and business man, but without the work of Dennis Ritchie helping him indirectly, maybe his progression would have been more difficult than it was.

This is because all basic software of Apple, like MacOS X and IOS was written using the C language, created by Dennis Ritchie several years before at Bell Labs, and considering that both operating systems are UNIX-Like, the importance of Dennis Ritchie for Apple’s present day success increases, because he was the creator of UNIX too.

The Bell Labs.

It is impressive the influence of Dennis Ritchie in all modern languages, like, C#, Java, Shell scripting, and a lot of others that have their dialect based on C language, but when he created the C language I think that has was just thinking about reusing his works in new models of computers that were been born in the mid seventies.

In those days computer use was restricted to universities and big companies. Considering the corporate world I can say that this environment was a controlled place and it’s growth was maintained by other big companies like Hewlett Packard and IBM, but in university and the world of research this growth was more open and with no boundaries, I think that was almost chaotic.

At this time a well known research lab was the source of the biggest researches of the sixties and seventies, considering the computer science scene. This lab sponsored the development of a computer digital language whose main goal was to create a generic and abstract language capable to access the low level resources of any machine using a lightweight set of reserved commands, making it easier to learn than machine language.

I’m talking about the Bell Laboratories, a well known research institute at that time, created by another great genius and the father of all modern communication found today, Alexander Graham Bell. I remember in the early nineties I thought Bell Labs to be the most important place of technology since the sixties until those days and I was really fascinated by their creations, since C, UNIX and C++, all related to computer science, but if we consider the big legacy of Bell Laboratories, I must cite the transistor invention and the telephone, this one being the big start-up of Bell labs.

Dennis Ritchie and Ken Thompson at Bell Labs
Dennis Ritchie and Ken Thompson at Bell Labs

Maybe you know Bell Labs as AT&T, a big american telecommunication company from the eighties and nineties, but in fact AT&T is older than we know and the relationship with Bell labs came from the twenties and in my point of view, AT&T was a company behind the Institute Bell Labs, giving it financial support to develop the base of the current digital technology in the world.

Today Bell Labs is part of a French telecommunications company, known as Alcatel-Lucent and the good news about this is that the new company is keeping focus on technologies based on networking, software and other digital technologies. On the other hand other basic technologies like semiconductor research was taken apart.

The creation of the C language

 In the early nineties, I was very interested to learn about computer languages because I had started to study computer science in university and I was living a special moment where my colleagues and teachers were exchanging a lot of information about computer languages, mathematics, physics and other basic concepts.

In this motivating scenario where all seemed to be new, I was presented to the C language by several colleagues and specifically by a teacher, that was a student of the author of the well known best selling book Turbo C – The complete reference, Herbert Schildt.

The new edition of a classic - by Herbert Schildt.
C – The complete reference (Herbert Schildt)

Herbert Schildt was my first gate to the C language and after I started to learn just reading his books I wanted to learn about the creator of C language and why it was created, then the big question is why Dennis Ritchie created the C language ?

There are a lot of theories and tales about the motivation of the creation of the C language but in fact the real reason why Dennis Ritchie created the C language was because he was involved in UNIX development in conjunction with his big friend and colleague Ken Thompson, in the early seventies.

In those days, the UNIX operating system was barely beginning and it was completely written in assembly language for the DEC PDP-7 and it was known that PDP-7 was almost obsolete, then when the new DEC PDP-11 was released, the UNIX system would be dead too fast, because the compatibility between those machines was not so simple and natural as in modern computers.

UNIX (Thompson/Ritchie creation)
UNIX (Thompson/Ritchie creation)

The best choice was to look for a new, powerful and abstract language to use in his port of the UNIX operating system and the first choice of Ken Thompson was the B language, that is a variant of an older language, called BCPL.

Unfortunately B lacks a lot of features to help the programmers make good, abstract and scalable softwares.

Knowing all of these limitations Dennis Ritchie started to create the C language, based on some concepts of B language but without all of the features lacking of the B language.

After this, in the mid seventies the UNIX system was completely rewritten using the C language and until now UNIX and C, both, have been the most important technologies present on several modern computers and for overall learning in computer science too, thanks to Dennis Ritchie and Ken Thompson.

The legacy

Today we are living a great moment in the area of technology, a moment when new and exciting technologies are being born every day. But I think that we must never forget about these grand masters of computer science, that in the past created the strong base that we are using now and Dennis Ritchie is for me the most important of all computer scientists. Just because other great masters like Bjarne Stroustup, the father of C++, James Gosling, the father of Java and many other important guys, based their creations on Dennis Ritchie’s work.

C++ (Created by Bjarne Stroustrup)
C++ (Created by Bjarne Stroustrup)

I believe that Dennis Ritchie is directly and indirectly influencing all generations of new computer scientists and the IT professionals in general, because almost all commercial and open source technologies are based on his work.

Just to cite an example, today we have open technologies like Java and the other hand we have closed technologies like C#, these are two technologies that are now competing for attention from most professionals of the technology information market, but it is known that both share the same syntax and other features, and why not say, the same spirit of C language…….the spirit of Dennis Ritchie.

Ken Thompson and Dennis Ritchie
Ken Thompson and Dennis Ritchie

Enjoy the silence.

[]’s
PopolonY2k

References

Dennis Ritchie (Bell Labs page)
http://cm.bell-labs.com/who/dmr/

Dennis Ritchie death announcement (NY Times)
http://www.nytimes.com/2011/10/14/technology/dennis-ritchie-programming-trailblazer-dies-at-70.html?_r=0

Steve Jobs death announcement (TechCrunch)
http://techcrunch.com/2011/10/05/steve-jobs-has-passed-away/

Apple WebSite
http://www.apple.com

MacOSX (Wikipedia)
http://en.wikipedia.org/wiki/OS_X

IOS (Wikipedia)
http://en.wikipedia.org/wiki/IOS

The C language (Wikipedia)
http://en.wikipedia.org/wiki/C_(language)

Bell Labs (Alcatel website)
http://www3.alcatel-lucent.com/wps/portal/belllabs

UNIX
http://www.unix.org/

C# (Wikipedia)
http://en.wikipedia.org/wiki/C_Sharp_(programming_language)

Java (Wikipedia)
http://en.wikipedia.org/wiki/Java_(programming_language)

Shell Script (Wikipedia)
http://en.wikipedia.org/wiki/Shell_script

Hewlett Packard
http://www.hp.com/

IBM
http://www.ibm.com

Alexander Grahan Bell (Wikipedia)
http://en.wikipedia.org/wiki/Alexander_Graham_Bell

C++ (Wikipedia)
http://en.wikipedia.org/wiki/C%2B%2B

AT&T
http://www.att.com/

Alcatel-Lucent
http://www.alcatel-lucent.com/

Turbo C – Complete reference (Amazon)
http://www.amazon.com/Turbo-Complete-Reference-Herbert-Schildt/dp/0078817765

Herbert Schildt
http://en.wikipedia.org/wiki/Herbert_Schildt

Ken Thompson’s bio at Bell Labs
http://www.bell-labs.com/history/unix/thompsonbio.html

DEC PDP-7
http://www.linfo.org/pdp-7.html

DEC PDP-11 (Wikipedia)
http://en.wikipedia.org/wiki/PDP-11

B Language (Wikipedia)
http://en.wikipedia.org/wiki/B_language

BCPL Language (Wikipedia)
http://en.wikipedia.org/wiki/BCPL

Bjarne Stroustrup
http://www.stroustrup.com/

James Gosling
http://nighthacks.com/roller/jag/