Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
THE EXPRESSIVE POWER OF
PROGRAMMING LANGUAGES IN ARCHITECTURE
Maria João de Maya Gomes Cunha e Sammer
Thesis to obtain the Master of Science Degree in
ARCHITECTURE
Supervisor: Prof. Dr. António Paulo Teles de Menezes Correia Leitão
Co-supervisor: Prof. Dr. Miguel José Das Neves Pires Amado
EXAMINATION COMMITTEE
Chairperson: Prof. Dr. Manuel de Arriaga Brito Correia Guedes
Supervisor: Prof. Dr. António Paulo Teles de Menezes Correia Leitão
Member of the Committee: Prof. Dr. Francisco Manuel Caldeira Pinto Teixeira Bastos
May 2019
Declaração
Venho por este meio declarar que este documento é um trabalho original da minha autoria e que cumpre
todos os requerimentos do Código de Conduta e Boas Práticas da Universidade de Lisboa.
Declaration
I hereby declare that this document is an original work of my own authorship and that it fulfills all the
requirements of the Code of Conduct and Good Practices of the Universidade de Lisboa.
i
Agradecimentos
Dedico este trabalho à minha mãe, para quem também vai o primeiro e mais especial agradecimento. Pelo
teu apoio incondicional, pela tua força e motivação constantes, por todos os apertões e abanões que me
impediram de algum dia sequer pensar em desistir. A tudo te devo. Obrigada, mãe.
Agradeço também à minha irmã Constança, ao meu irmão Zé Maria e à minha família por serem a
segunda frente nesta batalha. Não vos sei dizer quantas foram as vezes que me ajudaram sem saberem.
Obrigada, família.
Um especial, ainda que insuficiente, agradecimento ao professor António Menezes Leitão. Primeiro,
pelo convite para integrar a sua equipa quando eu não sabia para que lado me virar. Segundo, por me ter
confiado um desafio que me fez sair da minha zona de conforto e evoluir enquanto aluna, investigadora e
pessoa. E, por fim, pelo seu apoio incondicional, persistência, paciência e dedicação. Esta tese começou
por ser um acaso e, agora que terminou, digo que foi um acaso feliz. E muito lhe devo. Obrigada, professor.
Agradeço também professor Miguel Amado pela sua coorientação e por me ter guiado numa melhor
contextualização deste trabalho.
A todos os meus mais queridos amigos que se importaram, interessaram e implicaram neste processo
com compreensão, carinho e muito apoio e força, obrigada. Bárbara, Constança, Gil, Pedro, obrigada.
E, finalmente, gostava de agradecer ao grupo de investigação ADA por ter tornado esta experiência
académica obrigatória em algo mais leve do que o peso que lhe tinha atribuído inicialmente. Pelos
conselhos, apoio, ajuda, boa disposição e muita (muita) paciência. Por se terem tornado num novo grupo
de amigos, bons amigos, com alguns dos quais pude partilhar aventuras maiores nos entretantos. Aos que
já foram embora, aos que sempre ficaram e aos que chegaram entretanto. Obrigada, ADA.
Esta tese foi suportada parcialmente por fundos nacionais através da Fundação para a Ciência e a
Tecnologia (FCT), UID/CEC/50021/2019, e pelo projeto Khepri, PTDC/ART-DAQ/31061/2017.
Contributions
During the development of this thesis, two scientific papers were published:
• Sammer, M., Leitão, A., & Caetano, I. (2019). From Visual Input to Visual Output in Textual
Programming. Intelligent & Informed: Proceedings of the 24th International Conference of the
Association for Computer-Aided Architectural Design Research in Asia (CAADRIA), Wellington,
New Zealand, pp. 645-654.
Best Paper Award CAADRIA 2019
• Sammer, M., & Leitão, A. (2019). Visual Input Mechanisms in Textual Programming for
Architecture. Architecture in the Age of the 4th Revolution: Proceedings of the 37th International
Conference on Education and research in Computer Aided Architectural Design in Europe
(eCAADe), Porto, Portugal, to appear.
ii
Abstract
We are living in an era where Architecture is caught between arts and technicalities, creativity and physics,
between hand-drawing and computing.
Algorithmic Design (AD), i.e., the use of algorithms to produce designs, is no longer a novelty in
the architectural practice. This has led to several international debates and even generated divergences
between professionals but, nonetheless, it is something that has already been built in Architecture, showing
clear evidence of rapid development.
Around the world, architectural studios have already adopted algorithmic and parametric approaches
to create three-dimensional virtual models of their projects, either generated in Computer-Aided Design
(CAD) tools, Building Information Modeling (BIM) tools, or both. Many of them even use this
methodology to assess these models through computational analysis, using a wide range of software that
covers different fields: thermal, structural, lighting, acoustics, among others.
AD requires programming, which can be achieved in two different ways, namely, using a Visual
Programming Language (VPL) or a Textual Programming Language (TPL). Despite being recognized as
more difficult to use and maintain for complex programs, VPLs are the clear preference of the majority of
architects that are also AD practitioners.
Nevertheless, an in-depth understanding of this phenomenon is missing. While it is true that VPLs,
such as Grasshopper, are more intuitive, faster to use, and easier to structure and learn, it is also true that
the expressive power of their abstractions is limiting, and the languages do not scale with the complexity
of the projects. On the other hand, TPLs, such as Python, are more demanding in terms of learning and
practice but have more expressive power, flexibility, and efficiency, also enabling a better collaboration
between different parts implicated in the writing of the same script.
It is this deeper and more complete understanding of the expressive power of programming
languages used in architecture that we propose to accomplish with the development of this thesis.
Keywords: Algorithmic Design, Programming Languages, Textual Programming Languages, Visual
Programming Languages, Grasshopper, Python.
iii
Resumo
Vivemos presentemente numa época em que a Arquitetura se equilibra entre a arte e a técnica, a criatividade
e as leis da física, entre o desenho num papel e o desenho num computador.
O recurso ao Design Algorítmico (DA), i.e., o uso de algoritmos para produzir modelos, já não é
uma novidade na prática da Arquitetura. Esta situação tem vindo a promover inúmeros debates
internacionais e inclusivamente a gerar divergências entre profissionais, mas, ainda assim, é algo que já se
instalou na prática da disciplina e que mostra claros indícios de um rápido desenvolvimento.
Muitos ateliers de arquitetura em todo o mundo já adotaram abordagens algorítmicas e paramétricas
para criar modelos virtuais tridimensionais dos seus projetos, gerados em ferramentas de CAD (Computer-
Aided Design), em ferramentas de BIM (Building Information Modeling) ou em ambas. Ademais, muitos
deles recorrem a esta metodologia para avaliar estes modelos através de análises computacionais, usando
um vasto leque de software disponível que cobre diferentes áreas: térmica, estrutural, iluminação, acústica,
entre outras.
O DA requer programação, que pode ser concretizada de duas formas distintas, nomeadamente,
usando uma Linguagem de Programação Visual (LPV) ou uma Linguagem de Programação Textual (LPT).
Apesar de serem reconhecidas como mais difíceis de utilizar e manter para programas complexos, as LPVs
são claramente a preferência da maioria dos arquitetos que são também profissionais de DA.
Apesar disso, falta correntemente uma compreensão mais aprofundada deste fenómeno. Enquanto é
verdade que as LPVs, como o Grasshopper, são mais intuitivas, mais rápidas de se usar e mais fáceis de
aprender, também é verdade que o poder expressivo das suas abstrações é limitativo, pelo que as linguagens
não escalam com a complexidade dos programas que definem. Por outro lado, as LPTs, como o Python,
são mais exigentes no que toca à aprendizagem e prática, mas têm um maior poder expressivo, flexibilidade
e eficiência, permitindo ainda uma melhor colaboração entre as diferentes partes implicadas na escrita de
um mesmo programa.
É este entendimento mais aprofundado sobre o poder expressivo das linguagens de programação
usadas em Arquitectura que propomos adquirir com o desenvolvimento desta tese.
Palavras-chave: Design Algorítmico, Linguagens de Programação, Linguagens de Programação Textual,
Linguagens de Programação Visual, Grasshopper, Python.
iv
Contents
List of Figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page vi
List of Tables and Charts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page xv
Abbreviations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page xvi
Glossary of Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page xvii
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 1
1.1. Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 1
1.2. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 4
1.3. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 4
1.4. Methodology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 5
1.5. Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 6
2. State-of-the-Art . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 9
2.1. Representation Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 9
2.2. Algorithmic Design in Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 15
2.3. Programming Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 17
2.3.1. Visual Programming Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 18
2.3.1.1. Grasshopper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 19
2.3.1.2. Dynamo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 19
2.3.2. Textual Programming Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 20
2.3.2.1. Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 20
2.3.2.2. Julia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 21
2.4. Tools, Libraries, and Programming Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 21
2.4.1. Grasshopper Plug-ins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 21
2.4.2. Rosetta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 22
2.4.3. Khepri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 23
2.5. Programming Languages Applied to Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 23
2.5.1. NBBJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 27
2.5.2. Zaha Hadid Architects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 28
2.5.3. Gehry and Associates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 29
2.5.4. Foster + Partners . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 30
2.5.5. UNStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 31
3. Characterization of Programming Languages in Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 33
3.1. Computational Power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 33
3.2. Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 33
3.3. Expressive Power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 34
3.4. User Interface Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 35
3.5. Limit of Complexity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 36
4. Comparative Study between a VPL and a TPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 37
4.1. Theoretical Comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 37
4.1.1. Abstraction Mechanisms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 37
4.1.2. Number Sliders and Boolean Toggles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 38
4.1.3. Immediate Feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 38
v
4.1.4. Traceability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 39
4.1.5. Recursion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 39
4.1.6. Visual Input Mechanisms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 40
4.1.7. Textual Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 40
4.1.8. Portability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 41
4.1.9. Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 41
4.2. Practical Comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 42
4.2.1. Series . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 43
4.2.2. Cross Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 44
4.2.3. Mapping and Remapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 45
4.2.4. Cull Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 46
4.2.5. Basic 3D Geometry and Boolean Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 46
4.2.6. Visual Input Mechanisms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 47
4.2.7. Attractor Mechanisms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 48
4.2.8. Spaceframes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 49
4.2.9. Paneling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 51
4.2.10. Brick Wall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 53
4.2.11. Pixel Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 54
4.2.12. BIM Paradigm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 56
4.2.13. Analysis Tools and Plug-ins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 57
4.2.14. Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 58
5. Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 63
5.1. Guidelines for choosing what approach to use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 63
5.2. Guidelines for future implementations in VPLs and TPLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 68
6. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 71
6.1 Reflections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 71
6.2. Future Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 79
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . page 83
vi
List of Figures
1. INTRODUCTION
Figure 1.1. Hand-drawing (above) and technical drawing (below) of Swimming Pools in Leça da Palmeira by
Álvaro Siza Vieira, Portugal, 1967.
Source: https://portuguesearchitectures.wordpress.com/2014/05/20/piscinas-de-leca-de-palmeira-alvaro-siza-vieira/
1
Figure 1.2. Digital environment of a CAD tool, AutoCAD.
Source: Castelo Branco, 2017.
1
Figure 1.3. Digital environment of a BIM tool, ArchiCAD.
Source: Castelo Branco, 2017.
1
Figure 1.4. Façade of the MCM Building by The_System Lab, Seoul, Republic of Korea, unknown date.
Source: https://curlytraveller.com/2014/05/a-walk-through-trendy-garuso-gil.html
2
Figure 1.5. Phoenix International Media Center by BIAD UFo, Beijing, China, 2016.
Source: https://biad-ufo.divisare.pro/projects/275852-phoenix-international-media-center
2
Figure 1.6. Proposal for the Port Authority Bus Terminal by Archilier Architecture, New York City, USA, 2016.
Source: http://archilier.com/projects/port-authority-bus-terminal/
2
Figure 1.7. Serpentine Pavilion by BIG Architecture, London, United Kingdom, 2016.
Source: https://big.dk/#projects-serp
2
Figure 1.8. Projects modeled in Grasshopper (left), a VPL for Rhino, and in Dynamo (right) a VPL for Revit.
Source (left): Frame from an online tutorial at: https://www.youtube.com/watch?v=oCfpy8gdATo
Source (right): http://buildz.blogspot.com/2013/06/dynamo-update-040.html
3
Figure 1.9. Portion of a complex project modeled in Grasshopper.
Source: http://rhinocentre.blogspot.com/
3
Figure 1.10. Project modeled in Python, a TPL, and visualized in AutoCAD.
Source: own authorship.
3
Figure 1.11. Application of AD in a project of architecture by a traditional Portuguese architectural studio.
Source: Caetano & Leitão, 2017.
4
Figure 1.12. The shell of the Hangzhou Tennis Center by NBBJ, Hangzhou, China, 2013.
Source: https://www.arch2o.com/case-study-computational-design-hangzhou-tennis-center/
5
Figure 1.13. Complex program in Grasshopper that generates the shell of the Hangzhou Tennis Center.
Source: Miller, 2011.
5
2. STATE-OF-THE-ART
Figure 2.1. Plan of a temple in the Gudea Diorite Sculpture, Mesopotamian period, 2120 b. C., Louvre Museum,
Paris, France.
Source: https://arthistoryproject.com/timeline/the-ancient-world/mesopotamia/gudea-diorite-sculpture/
9
Figure 2.2. Plan of an ancient Roman City.
Source: https://isabelceron.wordpress.com/2011/10/08/equity-in-the-city-1-three-lessons-from-the-ancient-roman-metropolis/
9
vii
Figure 2.3. The frontispiece of the second edition of the De Architectura Libri Decem edited by Perrault,
published in 1684.
Source: http://architectura.cesr.univ-tours.fr/Traite/Notice/B250566101_11604.asp
9
Figure 2.4. Illustration of the Doric Order of the 1684 edition of Vitruvius’ De Architectura.
Source: http://architectura.cesr.univ-tours.fr/Traite/Notice/B250566101_11604.asp
10
Figure 2.5. Borromini (17th century, Rome) where the narrowing of the floor, ceiling, and lateral walls give the
perspectival illusion of a longer corridor.
Source: http://www.didatticarte.it/Blog/?p=2144
10
Figure 2.6. Antoni Gaudí’s hanging chain models, 1889.
Source: http://dataphys.org/list/gaudis-hanging-chain-models/
10
Figure 2.7. Model and plans of Moretti’s parametric stadium, from the 1960 Parametric Architecture exhibition at
12th Milan Triennial.
Source: Davis, 2013.
11
Figure 2.8. Ivan Sutherland demonstrating the use of Sketchpad.
Source: http://history-computer.com/ModernComputer/Software/Sketchpad.html
11
Figure 2.9. Before (above) and after (below) applying design constraints to a graphical object in Sketchpad.
Source: http://www.madlab.cc/after-50-years-of-computer-aided-design/
11
Figure 2.10. The first version of AutoCAD released in 1982.
Source: https://www.archdaily.co/co/02-135981/autocad-cumple-30-anos-en-el-mercado
12
Figure 2.11. Illustration of a Constructive Solid Modeling process.
Source: https://fr.m.wikipedia.org/wiki/Fichier:Csg_tree.png
12
Figure 2.12. Coordinated views in current Revit, a BIM tool for architecture.
Source: https://www.cadstudio.cz/revitlt
12
Figure 2.13. ArchiCAD 2 version, released in 1986.
Source: https://blog.graphisoftus.com/archicad-user/project-migration-and-old-versions-of-archicad
13
Figure 2.14. Typical model in an early Pro/ENGINEER version.
Source: Weisberg, 2008.
13
Figure 2.15. Technical rendered section modeled in Revit.
Source: http://revit-detail.blogspot.com/2010/04/051-concrete-cast-insitu-element.html
13
Figure 2.16. Visualization of the structural analysis of a building.
Source: https://agetintopc.com/pt/autodesk-robot-structural-analysis-pro-2014-free-download/
14
Figure 2.17. Render of the interior of Morpheus Hotel, programmed in Grasshopper (left), and a recent picture of
the built result (right).
Source (left): http://www.macaubusiness.com/macau-interview-melco-morpheus-a-new-era-for-macau-belongs-the-city/
Source (right): http://www.zaha-hadid.com/architecture/city-of-dreams-hotel-tower-cotai-macau/
14
Figure 2.18. 3D rendered section of the Elbphilharmonie by Herzog & de Meuron, Hamburg, Germany, 2016.
Source: https://www.wallpaper.com/architecture/elbphilharmonie-concert-hall-herzog-and-de-meuron-opens-in-hamburg
14
viii
Figure 2.19. Design process – from sketches and physical models to computational analysis, rendering, and
construction – of the Swiss Re by Foster and Partners, London, UK, 2004.
Source (hand-drawing): https://en.wikiarquitectura.com/building/30-st-mary-axe-the-gherkin/
Source (physical models, analysis): https://www.archdaily.com/447205/the-gherkin-how-london-s-famous-tower-leveraged-risk-
and-became-an-icon-part-2
Source (render): http://davidhannafordmitchell.tumblr.com/
Source (photograph): https://mattjohnsonarchitecture.wordpress.com/2014/09/25/passive-and-active-design-in-the-swiss-re-
tower/
15
Figure 2.20. Exercise of surface mapping developed by students using a textual approach to AD.
Source: Leitão, 2013.
16
Figure 2.21. Design process and materialization of a student’s project on Islamic patterns using a visual approach
to AD.
Source: Agirbas, 2017.
16
Figure 2.22. Parametric model of Kartal-Pendik Masterplan by Zaha Hadid Architects, Istanbul, Turkey, 2006.
Source: Schumacher, 2009.
17
Figure 2.23. Images of an IBM 704 mainframe computer created in 1954.
Source: https://en.wikipedia.org/wiki/IBM_704
18
Figure 2.24. Different groups at the NATO Software Engineering Conference, Garmisch, Germany, 7th-11th of
October of 1968.
Source: http://homepages.cs.ncl.ac.uk/brian.randell/NATO/N1968/index.html
18
Figure 2.25. Programming environment using a VPL.
Source: own authorship.
18
Figure 2.26. Work environment using Grasshopper associated with Rhino.
Source: https://www.arch2o.com/10-parametric-plugins-every-architect-should-know/
19
Figure 2.27. Work environment using Dynamo associated with Revit.
Source: http://www.theprovingground.org/2013/07/autodesk-edu-videos-computational.html
20
Figure 2.28. Programming environment using Python, a TPL, associated with AutoCAD.
Source: own authorship.
20
Figure 2.29. Plug-ins for Grasshopper that connect it to analysis tools (left) and modeling tools (right).
Source: own authorship.
21
Figure 2.30. Structural analysis using Karamba3D.
Source: https://www.food4rhino.com/app/karamba3d
21
Figure 2.31. Wind analysis using SWIFT.
Source: https://www.food4rhino.com/app/swift
21
Figure 2.32. Front-ends (on the left) and back-ends (on the right) of Rosetta.
Source: own authorship.
22
Figure 2.33. Visualization of a light analysis using Rosetta’s back-end to connect with Radiance, in Rhino (top)
and AutoCAD (bottom).
Source: Leitão, Castelo Branco, & Cardoso, 2017.
22
Figure 2.34. Light analysis using the Diva-for-Rhino plug-in for Grasshopper (left) and using Rosetta’s back-end
connection with Radiance (right).
Source: Leitão, Castelo Branco, & Cardoso, 2017.
23
ix
Figure 2.35. Use of the results of the light analysis to inform the design.
Source: Castelo Branco & Leitão, 2017.
23
Figure 2.36. Design process of the dome of the Reichstag, the New German Parliament, by Foster and Partners,
Berlin, Germany, 1999.
Source: https://blog.quintinlake.com/tag/berlin/
23
Figure 2.37. Design variations of the elements of a façade.
Source: Cardoso, 2017.
24
Figure 2.38. Traceability in Grasshopper.
Source: own authorship.
25
Figure 2.39. Immediate feedback in Grasshopper.
Source: own authorship.
25
Figure 2.40. Color mapping in Grasshopper using visual gradients.
Source: https://softlabnyc.com/2015/01/01/color-mapping/
25
Figure 2.41. Grasshopper program with medium complexity.
Source: Frame from an online tutorial at: https://www.youtube.com/watch?v=03R1vXfIZF4
25
Figure 2.42. Luna Moth editing interface.
Source: Alfaiate & Leitão, 2017.
25
Figure 2.43. Luna Moth’s click and dragging feature to vary the value of the parameters.
Source: Alfaiate & Leitão, 2017.
26
Figure 2.44. Bi-directional traceability: select a geometry in the tool and is highlighted the part of code that
generates it (right); select a part of the code and it is highlighted the geometry it generates (left).
Source: Alfaiate & Leitão, 2017.
26
Figure 2.45. Rainier Square Tower by NBBJ, Seattle, USA, under construction.
Source: http://www.nbbj.com/work/rainier-square/
27
Figure 2.46. Reinvention of Rupp Arena by NBBJ, KY, USA, unknown date.
Source: http://www.nbbj.com/work/rupp-arena-reinvention/
27
Figure 2.47. Xiamen Eton Center, Xiamen, China, under construction.
Source: http://www.nbbj.com/work/xiamen-eton-center/
27
Figure 2.48. Hangzhou Tennis Center by NBBJ, Hangzhou, China, 2013.
Source: Miller, 2011.
27
Figure 2.49. Using Kangaroo physics engine to visualize gravity loading on the truss centerline model of the
Hangzhou Tennis Center.
Source: Miller, 2011.
28
Figure 2.50. Compilation of the workflow using an AD approach in the Hangzhou Tennis Center.
Source: Miller, 2011.
28
Figure 2.51. Galaxy SOHO by Zaha Hadid Architects, Beijing, China, 2012.
Source: http://www.zaha-hadid.com/architecture/galaxy-soho/
28
Figure 2.52. Szervita Square Tower by Zaha Hadid Architects, Budapest, Hungary, to be confirmed.
Source: http://www.zaha-hadid.com/architecture/szervita-square-tower/
28
x
Figure 2.53. Heydar Aliyev Center by Zaha Hadid Architects, Baku, Azerbaijan, 2012.
Source: http://www.zaha-hadid.com/architecture/heydar-aliyev-centre/
28
Figure 2.54. Morpheus Hotel by Zaha Hadid Architects, City of Dreams, Macau, 2018.
Source: https://www.archdaily.com/896433/morpheus-hotel-zaha-hadid-architects
29
Figure 2.55. Different façade typologies: flat (white), single-curved (red) and free-form (blue and pink).
Source: Van der Heijden, 2017.
29
Figure 2.56. Slide of the webinar demonstrating the complexity of the Grasshopper program that modeled
Morpheus Hotel, illustrating Ramon’s statement “scale is an issue”.
Source: Van der Heijden, 2017.
29
Figure 2.57. The Barcelona Fish sculpture (or El Peix) by Gehry and Associates, Barcelona, Spain, 1992.
Source: https://barcelonalowdown.com/frank-gehrys-golden-fish-sculpture/
29
Figure 2.58. Guggenheim Bilbao by Gehry and Associates, Bilbao, Spain, 1997.
Source: http://www.the-art-minute.com/pure-freedom/
30
Figure 2.59. Walt Disney Concert Hall by Gehry and Associates, Los Angeles, USA, 2003.
Source: https://www.expedia.com/Walt-Disney-Concert-Hall-Los-Angeles.d6068477.Vacation-Attraction
30
Figure 2.60. Drawing of Guggenheim Bilbao by Frank Gehry, design sketch of the riverfront elevation, 1991.
Exposed at LACMA, LA.
Source: http://www.lacma.org/gehry#highlights
30
Figure 2.61. The Millennium Tower by Foster and Partners, Tokyo, Japan, unbuilt.
Source: https://www.e-architect.co.uk/tokyo/millennium-tower-tokyo
30
Figure 2.62. Greater London Authority (City Hall) by Foster and Partners, London, UK, 2002.
Source: https://en.wikiarquitectura.com/building/city-hall/
31
Figure 2.63. Headquarters of Swiss RE (the Gherkin) by Foster and Partners, London, UK, 2004.
Source: https://londontopia.net/site-news/featured/30-st-mary-axe-10-interesting-facts-figures-gherkin/
31
Figure 2.64. Raffles City Hangzhou by UNStudio, Hangzhou, China, 2017.
Source: https://www.archdaily.com/879869/raffles-city-hangzhou-unstudio?ad_medium=gallery
31
Figure 2.65. Lane 189 by UNStudio, Shanghai, China, 2016.
Source: https://www.archdaily.com.br/br/875786/lane-189-unstudio?ad_medium=gallery
31
Figure 2.66. Westfield White City by UNStudio, London, UK, 2018.
Source: https://www.unstudio.com/en/page/10708/westfield-white-city
31
Figure 2.67. Design process of a façade system using PLs. Left: scripted closed polysurface. Middle: Grasshopper
program. Right: documentation generated in Revit.
Source: Miller, 2018.
32
Figure 2.68. Wasl Tower by UNStudio, Dubai, UAE, under construction.
Source: https://www.wernersobek.de/en/projects/focus-en/structures/2020t-dubai-tower/
32
Figure 2.69. Part of the Wasl Tower project modeled in Dynamo.
Source: Miller, 2018
32
Figure 2.70. Result of custom scripting components that highlight the variation of elements of the façade.
Source: Miller, 2018
32
xi
3. CHARACTERIZATION OF PROGRAMMING LANGUAGES
Figure 3.1. Simple program in a VPL, Grasshopper.
Source: own authorship.
34
Figure 3.2. Complex program in a VPL, Grasshopper.
Source: https://discourse.mcneel.com/t/whats-your-largest-grasshopper-script/60594/2
34
Figure 3.3. Simple program in a TPL, Python.
Source: own authorship.
35
Figure 3.4. Part of a complex program in a TPL, Python.
Source: own authorship.
35
Figure 3.5. Grasshopper’s visual user interface.
Source own authorship.
35
Figure 3.6. Khepri’s textual user interface.
Source: own authorship.
35
4. COMPARATIVE STUDY BETWEEN A VPL AND A TPL
Figure 4.1. Number slider and Boolean toggle in Dynamo (above) and in Grasshopper (below).
Source: own authorship.
38
Figure 4.2. Control flow in Rosetta.
Source: Leitão, Lopes, & Santos, 2014.
39
Figure 4.3. Error in Grasshopper when connecting the output of a component as its input.
Source: own authorship.
39
Figure 4.4. Möbius flowchart (above) and procedure (below).
Source: Janssen, Pung, & Chen, 2019.
41
Figure 4.5. Series component in Grasshopper.
Source: own authorship.
43
Figure 4.6. Cross Reference component in Grasshopper.
Source: own authorship.
44
Figure 4.7. Square of boxes.
Source: own authorship.
44
Figure 4.8. Grasshopper program that generates a grid of cubes equally spaced between them.
Source: Tedeschi, 2014.
44
Figure 4.9. Cube of boxes.
Source: own authorship.
45
Figure 4.10. Grasshopper program that generates a cube of cubes equally spaced between them.
Source: own authorship.
45
Figure 4.11. Remap Numbers or ReMap component in Grasshopper.
Source: own authorship.
45
xii
Figure 4.12. Illustration of the remap mechanism: (A) min_domain, (B) max_domain, (C), min_codomain, and
(D) min_codomain.
Source: own authorship.
45
Figure 4.13. Cull Pattern component in Grasshopper.
Source: own authorship.
46
Figure 4.14. Solids resultant of the implementation of geometric functions in Khepri.
Source: own authorship.
47
Figure 4.15. Three versions of the same Grasshopper program, only varying the geometry being imported into the
Geometry component.
Source: own authorship.
48
Figure 4.16. Nanjing International Youth Cultural Centre by Zaha Hadid Architects, Nanjing, China, 2018.
Source: http://www.zaha-hadid.com/architecture/nanjing-culture-conference-centre/
48
Figure 4.17. Messe Basel Exhibition Hall by Herzog & de Meuron, Basel, Switzerland, 2013.
Source: https://www.designboom.com/architecture/herzog-de-meuron-mch-messe-basel-hall/
48
Figure 4.18. MCM M:AZIT Store by THE SYSTEM_LAB, Seoul, South Korea, unknown date.
Source: https://www.imgrumweb.com/hashtag/TheSystemLab
48
Figure 4.19. Point attractor influencing the radii of a grid of circles.
Source: own authorship.
48
Figure 4.20. Grasshopper program of an attractor point.
Source: Tedeschi, 2014.
48
Figure 4.21. Façade of the Quality Hotel Friends by Karolina Keyzer and Wingårdhs, Solna, Sweden, 2013.
Source: https://www.archdaily.com/550536/quality-hotel-friends-karolina-keyzer-wingardhs
49
Figure 4.22. Different natures of visual inputs: one point, multiple points, or a curve.
Source: own authorship.
49
Figure 4.23. Space frame of Heydar Aliyev Center by Zaha Hadid Architects, Baku, Azerbaijan, 2012.
Source: https://www.masterbuilder.co.in/analysis-space-frame-structure/
49
Figure 4.24. Joe & Rika Mansueto Library by Murphy/Jahn, Chicago, USA, 2011.
Source: https://www.archdaily.com/143532/joe-and-rika-mansueto-library-murphy-jahn?ad_medium=gallery
50
Figure 4.25. Biosphere, Museum of the Environment by Buckminster Fuller, Montreal, Canada, 1967.
Source: https://www.ledevoir.com/culture/532673/la-biosphere-l-experience-d-une-sphere-sans-cesse-renouvelee
50
Figure 4.26. Grasshopper program of a space frame.
Source: https://www.youtube.com/watch?v=qNJ9FWrl-Wk
50
Figure 4.27. Spaceframe generated in Khepri.
Source: own authorship.
50
Figure 4.28. The BAD café by Nudes, Mumbai, India, 2015.
Source: https://www.archdaily.com.br/br/803978/the-bad-cafe-nudes?ad_medium=gallery
51
Figure 4.29. Soumaya Museum by FR-EE Fernando Romero Enterprise, Mexico City, Mexico, 2011.
Source: https://www.archdaily.com/452226/museo-soumaya-fr-ee-fernando-romero-enterprise?ad_medium=gallery
51
xiii
Figure 4.30. South Australian Health and Medical Research Institute by Woods Bagot, Adelaide, Australia, 2013.
Source: https://garciatamjidi.com/ajax/blog/349
51
Figure 4.31. Proposal for a Sustainable Transit Station by Erik Giudice Architecture, Jönköping, Sweden,
unknown date.
Source: https://www.archdaily.com/795601/erik-giudice-architecture-releases-proposal-for-sustainable-transit-station-inspired-
by-matchsticks?ad_medium=gallery
51
Figure 4.32. Grasshopper program of a paneling and morphing mechanism.
Source: Tedeschi, 2014.
51
Figure 4.33. Unit (above) and result of paneling and morphing over an imported surface (below).
Source: own authorship.
52
Figure 4.34. Façade of a Retail Store for Regal Shoes by Nudes, Assam, India, unknown date.
Source: https://www.facebook.com/inonesskin/photos/pcb.1823734907735804/1823734614402500/?type=3&theater
52
Figure 4.35. Geometry generated by the textual program created to resemble the façade of Regal Shoes.
Source: own authorship.
52
Figure 4.36. Mesquita Bait Ur Rouf by Marina Tabassum, Dhaka, Bangladesh, 2012.
Source: http://www.arquitecturaviva.com/es/Info/News/Details/9229
53
Figure 4.37. Terra Cotta Studio by Tropical Space, Quảng Nam, Vietnam, 2016.
Source: https://www.archdaily.com.br/br/792742/terra-cotta-studio-tropical-space?ad_medium=gallery
53
Figure 4.38. Brick Cave by H&P Architects, Đông Anh, Vietnam, 2017.
Source: https://www.archdaily.mx/mx/893082/cueva-de-ladrillos-h-and-p-architects
53
Figure 4.39. Grasshopper program of a simple brick wall (online tutorial), importing a curve as visual input.
Source: https://www.youtube.com/watch?v=a_8Ba8NjNWE
53
Figure 4.40. Brick wall generated by the Grasshopper program.
Source: own authorship.
53
Figure 4.41. Floating bricks appear when the curvature is too tight.
Source: own authorship.
53
Figure 4.42. Brick wall with a sharp curvature generated by the textual program.
Source: own authorship.
54
Figure 4.43. Winery Gantenbein by Gramazio & Kohler and Bearth & Deplazes Architekten, Fläsch, Switzerland,
2006.
Source: https://www.archdaily.com/260612/winery-gantenbein-gramazio-kohler-bearth-deplazes-
architekten?ad_medium=gallery
54
Figure 4.44. The MaoHaus by AntiStatics Architecture, Beijing, China, 2017.
Source: https://www.archdaily.com/886282/the-maohaus-antistatics-architecture
54
Figure 4.45. Swanston Square apartment building (Barak Building) by ARM Architecture, Melbourne, Australia,
2015.
Source: https://www.amusingplanet.com/2017/06/the-melbourne-building-with-face.html
54
Figure 4.46. Interior of Raiffeisen Bank by Studio NAU, Zurich, Germany, 2011.
Source: https://freshome.com/2011/05/05/an-original-bank-design-raiffeisen-office-in-zurich-by-nau/
55
xiv
Figure 4.47. Grasshopper program adapted from Tedeschi’s version of a pixel mapping mechanism.
Source: own authorship.
55
Figure 4.48. Pixel mapping result, using an image of Le Corbusier.
Source: own authorship.
55
Figure 4.49. Grasshopper program developed from an online tutorial.
Source: https://www.youtube.com/watch?v=ytxldTviqKc
55
Figure 4.50. Pixel mapping result, using an image of Le Corbusier’s Modulor.
Source: own authorship.
55
Figure 4.51. BIM model generated by Khepri in Revit, using a predefined family of circular windows.
Source: Sammer, Leitão, & Caetano, 2019.
57
Figure 4.52. Analysis generated directly and by hand in DIVA for Rhino, a lighting analysis tool.
Source: Leitão, Castelo Branco, & Cardoso, 2017.
57
Figure 4.53. Ladybug for Grasshopper to perform radiation analysis, using the “black box” components
predefined within the plug-in.
Source: https://www.food4rhino.com/app/ladybug-tools
58
Figure 4.54. Analysis generated by connecting a textual program directly with an analysis tool.
Source: Leitão, Castelo Branco, & Cardoso, 2017.
58
5. GUIDELINES
Figure 5.1. 2D drawing created using a CAD tool.
Source: https://forums.autodesk.com/t5/autocad-forum/autocad-2016-round-corners-become-right-angles/td-p/5929363
64
Figure 5.2. 3D model created using a BIM tool.
Source:
https://www.google.com/url?sa=i&source=images&cd=&ved=2ahUKEwjO5J22i6_iAhWhxoUKHd3uA6cQjRx6BAgBEAU&u
rl=http%3A%2F%2Fejobnet.info%2F%3Fk%3DAbonnement%2B%25C3%25A0%2BRevit%2BLT%2B%2BAcheter%2Ble%2
Blogiciel%2BRevit%2BLT%2B2019&psig=AOvVaw1KqdA1FtwSJP_O92ocITj8&ust=1558612800858661
64
Figure 5.3. Visual program that generates the envelope of the Hangzhou Tennis Center.
Source: Miller, 2011.
66
Figure 5.4. Component highlighted in red with error message in Grasshopper.
Source: own authorship.
69
Figure 5.5. Different types of documentation in Grasshopper: locally, with the mouse over an input/output (left);
or internally, by selecting the option Help (right).
Source: own authorship.
70
Figure 5.6. Searching mechanisms showing the available functions in Khepri.
Source: own authorship.
70
Figure 5.7. Typing mechanisms automatically showing the parameters of a function in Khepri.
Source: own authorship.
70
xv
List of Tables and Charts
Table 1. Analysis plug-ins for Grasshopper.
Source: own authorship.
22
Table 2. VPLs and TPLs applied to AD and the correspondent modeling tools.
Source: own authorship.
26
Chart 1. Relation of the complexity of a project to the approach chosen and the tools used.
Source: own authorship.
67
Chart 2. Integration of the third dimension of Analysis to the approaches and tools indicated in chart 1.
Source: own authorship.
67
Table 3. Advantages of the AD approach.
Source: own authorship.
73
Table 4. Advantages of creating programs with a VPL, Grasshopper, and a TPL within Khepri.
Source: own authorship.
75
Table 5. Disadvantages of creating programs with a VPL, Grasshopper, and a TPL within Khepri.
Source: own authorship.
75
xvi
Abbreviations
2D – Two-dimensional
3D – Three-dimensional
AD – Algorithmic Design
BDS – Building Description System
BIM – Building Information Modeling
BRep – Boundary Representation
CAAD – Computer-Aided Architectural Design
CAD – Computer-Aided Design
CD – Computational Design
CSG – Constructive Solid Geometry
GD – Generative Design
IDE – Integrated Development Environment
PD – Parametric Design
PL – Programming Language
TPL – Textual Programming Language
VPL – Visual Programming Language
xvii
Glossary of Terms
Algorithm – instructions translated through a set of rules that, in this context, are given to the computer to
process and perform a desired task.
Algorithmic Design – methodology that allows the construction of a design through algorithmic
descriptions, i.e., resorting to a group of instructions, rules, and constraints that the computer can process
to generate geometry.
Building Information Modeling Tools – group of computational tools that are conceived for modeling
3D elements in a digital environment. These elements are geometrical entities to which quantitative and
qualitative information is associated, being classified according to families (e.g., walls, slabs, windows,
doors, etc.). Examples of BIM tools for architecture are Revit and ArchiCAD.
Computer Aided Design Tools – group of computational tools that allows the modeling of 2D and 3D
geometry in a digital environment. They work with geometric objects such as lines, arcs, circles, and
polygons (in 2D), and boxes, cylinders, pyramids, and spheres (in 3D), supporting a set of commands that
manipulates this geometry. Examples of CAD tools for architecture are AutoCAD and Rhinoceros 3D.
Parameter / Variable – quantifiable value that can vary within the algorithm. When this value is changed,
the algorithm generates a different result.
Parametric Design – methodology that allows the manipulation of a design or parts of that design through
the attribution of variable parameters. These parameters can, therefore, be changed, thus generating a new
version of the design, maintaining the same rules and constraints of the implemented algorithm.
Parametric Model – algorithm that generates virtual models in a visualization tool, consisting of geometry,
attributes, and relationships. This parametric model resorts to functions and variable parameters (Heidari et
al., 2018).
Program – formal description of an algorithm. It must be built using a programming language that,
according to its structure, syntax, and semantics, feeds unambiguous information to the computer that then
processes the instructions structured in the program.
Programming Language – formal language that a computer can understand and process unambiguously;
a programming language can support different programming paradigms; however, it must obey to a rigid
structure, syntax, and semantics.
1
1. Introduction
This research is contextualized within the current methodologies to the architectural practice,
namely the use of computational approaches, such as Algorithmic Design (AD). Thus, this
thesis proposes AD as a representation method for architecture, whose implementation will
be studied considering the present context, in order to study future implications of its
application and implementation in the workflow of architects.
1.1. Framework
From the birth of the discipline itself, architecture has used different tools and methodologies
to be represented, explained, and sold throughout History.
Drawings and sketches are primary examples that have always been the base of the
expression of intentions, as architects use them to illustrate their visions, to sell their
concepts, and even to communicate with other professionals during later stages of the
construction of the project.
Nowadays, the architectural process still leans on these drawings and sketches to
create the initial concept, to structure constraints, to study dynamics, and to build up ideas.
However, these ideas, typically expressed in sketches, start as organic and flexible entities,
which are later consolidated in the technical drawings and models (figure 1.1.).
Due to all the technicalities associated with the process of building an architectural
project, architecture has always been influenced by new technologies and developments in
the fields of engineering. The discipline needs to deal with structure, lighting, acoustics,
drainage, and ventilation, among others, and the architect becomes the maestro of such an
orchestra. More recently, another paradigm started influencing architecture, having the
ability to connect every single one of the mentioned contributions: computation.
Computers are part of the common practice of architecture nowadays, as when
mentioning technical drawings, one is usually referring to documents digitally produced by
Computer-Aided Design (CAD) and Building Information Modeling (BIM) tools (figure 1.2.
and figure 1.3.). They are very useful for the construction processes, becoming the base to
other specialties’ technical documents, as well as for the construction of three-dimensional
models. These digital models can later be used either for their geometry – to showcase the
overall look of the project and even to produce virtual images, or to be assessed through
computational analysis tools, being analyzed according to their performance and behavior
towards different factors, such as lighting, acoustics, or structure.
Furthermore, computation opened a wider door for other possibilities that emerge
from the fields of programming, introducing a core concept: Algorithmic Design (AD). This
new methodology offers an alternative approach to the direct manual manipulation of the
envisioned geometry in the modeling tool. Instead of resorting to the factory-set features and
Fig. 1.1. Hand-drawing (above) and
technical drawing (below) of
Swimming Pools in Leça da
Palmeira by Álvaro Siza Vieira,
Portugal, 1967.
Fig. 1.2. Digital environment of a
CAD tool, AutoCAD.
Fig. 1.3. Digital environment of a
BIM tool, ArchiCAD.
2
commands of CAD and BIM tools to create a digital representation of the project, the
architect builds a program, an algorithm, to instruct the computer to perform the same tasks.
This program is a set of instructions, rules, and constraints that translate geometry
with relationships and attributes, which can also benefit from parametric reasoning and
mechanisms. Therefore, the AD approach is often merged with Parametric Design (PD)
methodologies, that allow the manipulation of a design or parts of that design through the
attribution of variable parameters inside the geometric relationships described in the
algorithm. Thus, the created program becomes a parametric model, since it generates
geometry with intrinsic relationships and variable quantities: by changing the values of the
parameters, a new version of the model is generated, maintaining the same constraints and
relationships defined. So, the question is, why are these algorithmic approaches more
advantageous than manual ones?
The manual manipulation of complex geometries in a modeling tool requires the
architect to undertake meticulous and time-consuming tasks, since each element of the
project has to be modeled individually. This demands careful attention to detail, since the
relationships between the different elements also have to be established manually. Any
alterations required to the final design will also have to be executed by hand. Thus, the
manual approach has a high cost of change: if there are geometric relations between the
manipulated elements, e.g., tangencies, uniform distribution, proportion, etc., and one of the
parts involved has to be altered, all the geometrically dependent parts must also be changed
according to these relations. Moreover, if the project includes geometries that depend on
repetition, patterns, mathematical relationships, or even randomness, modeling by hand
becomes tedious, extremely time-consuming, and error-prone, having severe consequences
in the cost of the project.
Therefore, the AD and PD approaches propose a solution to the conventional design
process, overcoming these limitations. The parametricism they lean upon means that
architects can consolidate the sketched idea into a shape without losing its flexibility: they
decide the parameters, their constraints, and how much they can vary. Hence, the cost of
change reduces drastically, since, in order to perform an alteration to the design, architects
simply need to give alternative values to the parameters they chose and generate a variation
of the previous design that still presents the same geometrical relationships and constraints
established in the program. Therefore, it allows for an easier and more efficient exploration
of design alternatives.
When applying these design methodologies, architects are able to extend the limits of
what is viably reproducible by hand on a computer, materializing more easily the full extent
of their imagination. Algorithmic thinking is a powerful skill that enables the architect to
explore and develop new esthetics, technical solutions, and formal alternatives to a design,
besides offering many advantages when envisioning and conceiving projects with great
Fig. 1.4. Façade of the MCM
Building by The_System Lab,
Seoul, Republic of Korea, unknown
date.
Fig. 1.5. Phoenix International
Media Center by BIAD UFo,
Beijing, China, 2016.
Fig. 1.6. Proposal for the Port
Authority Bus Terminal by
Archilier Architecture, New York
City, USA, 2016.
Fig. 1.7. Serpentine Pavilion by BIG
Architecture, London, United
Kingdom, 2016.
3
complexity, accuracy, or repetitive patterns (figure 1.4., figure 1.5., figure 1.6., and figure
1.7.).
In AD, the Programming Languages (PLs) that are used to build programs can either
be visual, textual, or both. The tendency in the present day regarding the architectural practice
is to use more intuitive environments to program, particularly using Visual Programming
Languages (VPLs), such as Grasshopper or Dynamo (figure 1.8.).
VPLs are more natural for beginners and, therefore, easier to learn. Furthermore, they
are equipped with user-friendly features, such as (1) immediate feedback, to visualize in real-
time what is being generated while the program is being developed; (2) traceability, to
highlight in the modeling tool the geometry generated by a selected part of the program; (3)
insertion of visual graphs and gradients inside the program; (4) customization of several
features, such as color, style, and name of the icons; and (5) visual input mechanisms, to
import geometry previously created in the modeling tool; among others. Despite these
advantages, there is a serious handicap that appears whenever the program reaches a certain
level of complexity: it becomes hard to understand (figure 1.9.) and, therefore, difficult to
maintain and extend, and some of these features simply stop working.
However, there are practitioners who believe that the expressive power of Textual
Programming Languages (TPLs), such as Python (figure 1.10.), prevails over the struggles
of using VPLs in complex projects. The main obstacle to the use of TPLs is in the more
demanding learning process. However, if these difficulties can be overcome by simpler
implementations and a more user-friendly learning structure, the inherent advantages of the
mastery of a TPL are believed to be rewarding regarding the ease with which complex
projects can be built, changed, and maintained.
Fig. 1.8. Projects modeled in Grasshopper (left), a VPL for Rhino, and in Dynamo (right) a VPL for Revit.
Fig. 1.9. Portion of a complex project
modeled in Grasshopper.
Fig. 1.10. Program modeled in Python, a TPL, and
visualized in AutoCAD.
4
1.2. Motivation
The role of the architect goes beyond the mere design of spaces for certain contexts. The
social, economic, and environmental importance of architecture also imposes the
responsibility of being updated and aware of the overall tendencies of the era we are living
in; and we are living in a technological era.
Personally, it is motivating to propose an extension of the curriculum of the
architectural course and delve into more recent themes such as AD. Even though the
application of this methodology in the current architectural design process in Portugal is just
starting, this approach aids the materialization of the architect’s imagination in a wide range
of architectural project scales (figure 1.11.). Thus, architects become able to more easily
accomplish new esthetics, exploring further alternatives and adaptations of the design, and
even to more efficiently find sustainable and economic solutions to their proposals.
Scientifically, the main motivation of this thesis is to evaluate AD as a representation
method for architecture. This entails determining the limits of algorithmic approaches using
TPLs and VPLs, in order to define a set of guidelines to help the architect when choosing the
approach that best suits the needs of a particular project. Furthermore, understanding the
limits and the expressive power of the two types of languages will allow the development of
strategies and techniques to improve TPLs for architecture.
Programming languages do not substitute the pencil and the piece of paper where the
architect freely and organically sketches ideas and concepts. However, they might be the
future that will replace the manual usage of CAD, BIM, and analysis tools.
1.3. Objectives
Considering that this thesis evaluates and proposes AD as a representation method for the
architectural practice, the objectives to fulfill relate to the understanding of the applicability
and implementation of this methodology in the current design process.
Fig. 1.11. Application of AD in a project of architecture by a traditional
Portuguese architectural studio.
5
Therefore, we propose to address the current barriers to the use of TPLs among
architects, considering that the clear majority prefers to use VPLs, such as Grasshopper, to
develop their projects in whole or in part.
Ultimately, we are looking for the limits of complexity that invalidate the usage of a
VPL over a textual one. This moment should occur when programs are so complex that the
main advantages of using a VPL are no longer valid, resulting in an unnecessarily complex
program, that, visually, is difficult to understand. The Hangzhou Tennis Center by NBBJ
(figure 1.12. and figure 1.13.) is an illustrative real case of this situation. By studying and
analyzing these moments, we can reflect on how VPLs can stretch in order to meet this
necessity of simplification.
On the opposite end, this same line of thought will help to comprehend how a TPL
can be simplified in an attempt to compete directly with VPLs from early stages of the
construction of the program, so that its greater advantage is no longer solely valid when
working on complex projects. This analysis will provide us with the necessary tools to
suggest new implementations and simplification of the learning process of languages like
Python, with the goal of bringing them closer to the user, in this case, the architect.
1.4. Methodology
The main questions this thesis proposes to answer are (1) whether VPLs do really meet all
the needs of clarity, performance, legibility, and the possibility of cooperation when
managing complex programs, and (2) how a TPL can compete with the current usage of VPLs
from early stages of a program’s development. Hence, the methodology adopted focuses on
three main stages: (1) contextualization, (2) assessments, and (3) conclusions.
Regarding the first stage of contextualization, we will define three different moments:
(1) a presentation of the state-of-art on these and other related questions and of the current
application of algorithmic approaches in architecture, (2) a definition of the core concepts
that are specific to this investigation, and (3) a theoretical comparison regarding the
implementation and application of both visual and textual programming languages.
In order to assess the theory presented in the first stage, this methodology follows a
practical comparison of the contextualized criteria. From this evaluation of the practical
Fig. 1.12. The shell of the Hangzhou
Tennis Center by NBBJ, Hangzhou,
China, 2013.
Fig. 1.13. Complex program in Grasshopper that generates the shell of the Hangzhou Tennis Center.
6
application and implementation of VPLs and TPLs, the third and final stage will focus on
structuring guidelines and strategies (1) to establish the relative advantages of visual and
textual approaches for different scales of complexity and (2) to propose further
implementations that can counteract the existing tendency and bring textual languages closer
to their users, competing with visual languages from the early stages of the development of
AD programs.
1.5. Structure
This thesis is structured in three main sections: (1) a contextualization section, where the
information needed to the understanding of the work development is provided, (2) a
development section, where the criteria presented are assessed in both theory and practice,
and (3) a reflection section, where the guidelines, the proposed strategies, and the conclusions
about the work developed are structured.
The contextualization section is divided into three chapters:
1. Introduction: general contextualization of the research through the description of
the Framework (1.1.), Motivation (1.2.), Objectives (1.3.), Methodology (1.4.), and Structure
(1.5.), previously presented.
2. State-of-the-Art: overall contextualization of the work related to the theme of this
investigation, namely regarding the evolution of Representation Methods (2.1.) until the
present day; the definition and application of Algorithmic Design (AD) in today’s
architecture (2.2.); the evolution of PLs until their current application in the architecture
realm (2.3.), including a review on the types of PLs and the description of some representative
examples; a revision on the main and most used tools, libraries, and plug-ins available for
AD (2.4); and a summary of the main PLs used specifically in the practice of architecture
(2.5), identifying some of the architectural studios in the world that are currently using them
to generate their projects through AD.
3. Characterization of Programming Languages for Architecture: introduction
and definition of the core concepts that are specific to the development of this investigation,
such as Computational Power (3.1.), Performance and Efficiency (3.2.), Expressive Power
(3.3.), User Interface Features (3.4.), and Limit of Complexity (3.5).
Those concepts constitute the criteria to classify PLs, relating to their appeal in terms
of performance and ease of use. This contextualization represents the first step in the
understanding of both the tendency of using VPLs over TPLs and of the potentialities and
advantages of the textual approach over the visual one.
The assessment of the developed work is contemplated in the fourth chapter:
4. Comparative Study between VPLs and TPLs: in order to address the main
questions of this investigation regarding the relative use of visual and textual programming
7
languages, the fourth chapter integrates both a theoretical (4.1.) and a practical comparison
(4.2.) between the two types of languages.
In the theoretical comparison, we enumerate a set of topics that describe and explain
some features and mechanisms provided by VPLs and/or TPLs, some of which are inherent
to VPLs or to textual ones, and others were already implemented in both paradigms.
Regarding the practical comparison, we assess the features and mechanisms
previously presented by programming real case studies. These case studies represent either
the assessment of (1) geometric behaviors and structures commonly used in AD for
architecture or (2) programming mechanisms that aid in the generation of those geometric
behaviors and structures.
Finally, the last stage of this thesis is divided into two main chapters.
5. Guidelines: first reflection on the question related to the relative use of VPLs and
TPLs according to the intended results. We aim to structure a set of situations where the use
of VPLs has more advantages and others where the user has more benefits in adopting a
textual approach.
Other reflection to be made in this chapter regards the guidelines to the
implementation of features, mechanisms, and abstractions that might bring TPLs closer to
their users and able to compete with VPLs from early stages of the design process.
6. Conclusions: in this chapter, the main unanswered questions that motivated the
development of this thesis are discussed according to the conclusions taken from this
investigation.
Firstly, we structure some Reflections (6.1.) about (1) the proposal of AD as a
representation method for architecture, (2) the impact and benefits of algorithmic thinking
within the architecture curriculum, (3) the relative advantages of VPLs and TPLs when
integrated within the workflow of the architect, and (4) the barriers to surpass regarding the
algorithmic approach to choose.
Lastly, the Future Work (6.2.) proposes new lines of investigation that we consider to
be relevant contributions to the development of AD in architecture and which, therefore, will
extend the findings of the study even further.
9
2. State-of-the-Art
To better contextualize this research, it is crucial to understand the origin and consequent
evolution of some of the main concepts of the investigation.
Therefore, the description of the current practice of architecture and its more recent
methodologies and approaches should be explained as the result of a continuous development
of the ways architects use to express ideas and concepts from the earliest times of mankind.
2.1. Representation Methods
Since the birth of mankind as a collective species, communication has been the key to its
survival and development. Alongside with the first sounds and gestures, drawings were made
inside caves to express reality, to communicate intentions, or even to tell stories. Millenniums
after the Neanderthal period, at the time of the first civilizations, drawings were still part of
the report of people’s daily lives and past stories, plans and projects for the future. The
Egyptians are an illustrative example, with a complex legacy of hand-painted drawings on
monuments’ walls, also using a language expressed through icons – the hieroglyphs. Some
believe that the first references of architectural drawings were from the period of ancient
civilizations. The Gudea Statue (figure 2.1.) exposed at the Louvre Museum in Paris, from
the Mesopotamian period (4000 years ago), is holding an architectural plan, thus constituting
one of the most iconic examples of that (Pilsitz, 2017).
We came a long way since the Ancient era, and, up to the present day, our knowledge
has been developing exponentially; and so have the methods and techniques we use to express
ourselves. Nevertheless, it becomes clear that, throughout all these centuries of evolution, the
expression of architectural thoughts and ideas has always been made through visual methods:
drawings, plans, sections, schemes, and physical models, among others. Acknowledging this,
Austin and Qattan (2016) refer to architects as “visual thinkers”, since architecture is
predominantly represented through visual communication.
The Greek and Roman antiquity brought different contributions to the evolution of
representation methods in architecture, culminating with some of the first urban drawings,
such as the plans of Roman cities (figure 2.2.). Moreover, regarding the systematization of
architectural projects, a novelty emerged. During the 1st century b.C. lived a man that is now
unmistakably recognized as one of the first theorists of architecture. Marcus Vitruvius Pollio,
or Vitruvius for short, was a man of multiple facets, whose most prominent achievement was
undoubtedly his multi-volume treatise: De Architectura Libri Decem (figure 2.3.), his only
work to survive to the present day. In the set of ten books, he studied the architecture of the
Greco-Roman period and rationalized the used system of proportions and ratios. This
systematization, however, was explained solely using textual descriptions and did not include
drawings to illustrate them. Thus, this was the first example in architecture where language
in the textual form was the only representation method used to illustrate an idea. Nonetheless,
Fig. 2.1. Plan of a temple in the
Gudea Diorite Sculpture,
Mesopotamian period, 2120 b. C.,
Louvre Museum, Paris, France.
Fig. 2.2. Plan of an ancient Roman
City.
Fig. 2.3. The frontispiece of the
second edition of the De
Architectura Libri Decem edited by
Perrault, published in 1684.
10
later on, this factor represented an obstacle, since the Latin used by Vitruvius proved to be
incoherent and difficult to decipher.
During the Medieval period, one can observe considerable progress in the techniques
of orthographic projections, such as plans and elevations, but it is not until the Renaissance
that the representation methods in architecture witnessed a great development: the discovery
of perspective. Furthermore, after the assimilation of the historical and architectural
importance of the legacy of the Antiquity – not only of the ancient buildings but also of
Vitruvius’ treatise – humanists based new manifestos on the study and translation of De
Architectura. The first printed editions already comprised drawings and schemes to better
illustrate the explained concepts and ideas (figure 2.4.). Authors such as Alberti (1404–1472),
Serlio (1475–1554), Vignola (1507–1573), and Palladio (1508 –1580) interpreted, drew, and
proposed new ways of building the Modern era, using the teachings of Vitruvius to base new
visions built upon the critical sense of their own time. In their treatises and manifestos,
drawings were a critical contribution to the understanding of the described solutions.
Furthermore, the perspectival drawing allowed for a better comprehension of some
abstractions often represented in orthographic projections, such as plans and sections. For the
first time, drawings incorporated the third dimension in the paper, a concept that came to
have implications in the materialization of the architectural principles of the following period,
the Baroque. The Baroque period was also characterized by the materialization and
manipulation of perspective in the built space, reflected in a sophisticated complexity and
optical illusion effects, such as the Borromini’s Spada Palace (figure 2.5.).
Even though they have certain limitations, “drawings have been the stable medium of
architecture over centuries and this was possible as the architect relied on typology”
(Tedeschi, 2014, p. 18), i.e., the use of typological solutions that were already preconceived
and well proven to work. Up until this time in the History of Architecture, drawings were not
only a medium of communication but also a system in which architects relied on in order to
explore their designs within a set of formal structural constraints, an approach described as
form-making. However, in the late 19th century, this idea started being questioned and
replaced by a new way of thinking: a form-finding approach – a forward process to find an
optimal geometric solution that is statically in equilibrium within a design loading
(Adriaenssens, Veenendaal, & Williams, 2014). Some of the pioneers of this time, such as
Antoni Gaudi (1852–1926) and Frei Otto (1925–2015), have rejected typology and looked to
self-information processes in nature as a way to organize buildings. For instances, Gaudi
shaped the design of his buildings according to the application of the force of gravity, one of
nature’s parametric inputs (Heidari, et al., 2018) (figure 2.6.). Therefore, since “the form
could not descend from proven solutions, the traditional drawing could not be used as a tool
to predict design outcomes” (Tedeschi, 2014, p. 18). In return, physical models became
crucial to the design investigation of architects and engineers that believed in this approach.
Fig. 2.6. Antoni Gaudí’s hanging
chain models, 1889.
Fig. 2.5. Section and plan of the
corridor of Spada Palace by
Francesco Borromini (17th century,
Rome) where the narrowing of the
floor, ceiling and lateral walls give
the perspectival illusion of a longer
corridor.
Fig. 2.4. Illustration of the Doric
Order of the 1684 edition of
Vitruvius’ De Architectura.
11
Nowadays, architects continue to explore different approaches and techniques that
improve their communication in terms of efficiency, effectiveness, clarity, appeal, and
realism, and computers commonly play an important role in this process. Visual
representations have been used for centuries, “executable visual representations, however,
have only arisen with the advent of the computer” (Menzies, 2002, p. 94). Some decades ago,
after the time when hand-drawings and physical models were the only methods of visual
communication available for architects, visual representations conquered a new dimension:
they became digital. Therefore, the following evolution of representation and computational
methods aided to build Algorithmic Design (AD) as we know today, an approach to design
where geometry is represented by rules and constraints set within an algorithm.
Parametric Architecture was firstly defined by the Italian architect Luigi Moretti
(1907 - 1973), in 1939, by the original expression Architettura Parametrica (Bucci &
Mulazzani, 2000). He studied the relationships between dimensions dependent upon the
various parameters (Moretti, 1971), that would become the basis to a new architectural
language, nowadays known as algorithmic design. Moretti truly challenged the standards of
conventional architectural practices of his time by suggesting that computers were the
engines of a new architecture, without which it would be impossible to process the parameters
and their relationships. Some of his work was exposed during the 12th Milan Triennial in
1960, such as his proposal for a parametric stadium (figure 2.7.).
Even though the theory behind this new idea was the product of an intersection
between architecture and mathematics, its implementation would have to rely on
technological developments in the field of computation. Therefore, Moretti’s proposal can
be considered ahead of its time, not only because of the innovation of the concept, but also
because of the lack of technological developments at the time to put it into practice.
Parametric architecture would only have its true application fifty years later.
The seed of computation for architecture was planted in 1939, but it was only in the
60s that its implementation first started to blossom through the development of computational
tools for the architectural practice. As reported in Brad Myers’ paper A Brief History of
Human-Computer Interaction Technology (1998), in 1963, the predecessor of modern
Computer-Aided Design (CAD) tools was publicly demonstrated: Sketchpad, by Ivan
Sutherland (figure 2.8.). The now ubiquitous direct manipulation interface, where visible
objects on the screen are directly manipulated with a pointing device, was demonstrated in
his doctoral thesis using a light pen to support the manipulation of objects, including grabbing
and moving them, changing size, and establishing constraints (Myers, 1998) (figure 2.9.).
Therefore, Sketchpad was the first direct transition of the traditional drawing board of
a conventional architectural studio to a digital environment, using a light pen and commands
to match the pencil, rubber, and ruler. Nevertheless, the application of such tools was not
received immediately in the architectural common practice, even though its promising
Fig. 2.8. Ivan Sutherland
demonstrating the use of Sketchpad.
Fig. 2.7. Model and plans of
Moretti’s parametric stadium, from
the 1960 Parametric Architecture
exhibition at 12th Milan Triennial.
Fig. 2.9. Before (above) and after
(below) applying design constraints
to a graphical object in Sketchpad.
12
potentialities were sufficient to trigger the development of more sophisticated tools within
the same paradigm.
The principles of digitalization of the drawing board proposed by Sutherland were
later incorporated into commercially successful software available for architecture, such as
AutoCAD (1982) (figure 2.10.). During this process, the wall separating the practice of
architecture from that exclusive to the computer scientists began to narrow with the
introduction of the possibility of working with programming languages in the construction
of programs within a modeling tool. Autodesk, the company that developed AutoCAD, made
available in 1986 one of the first programming languages for architecture, AutoLisp. On the
one hand, AutoCAD, through the digitalization of the drawing board, met the needs of the
architect to both accelerate repetitive tasks and manage multiple design layers (Tedeschi,
2014) and, by making geometric models seemingly easy to change, it even aided to reduce
the working hours that the architect spent on manually changing or creating new
representations (Davis, 2013). On the other hand, AutoLisp allowed the extension of the
tool, enabling automation and mechanization in order to reduce the time and effort architects
spent when reproducing their ideas in a digital environment. However, even though the
language was created to be applied to the architectural process of conceiving technical
documentation in AutoCAD, it was still not suitable for architects, since it was difficult to
learn and apply for those unfamiliar with programming and untrained to think
algorithmically.
A parallel event with critical impact in the evolution of representation methods in
architecture was the beginning of the development of today’s Building Information Modeling
(BIM) tools, whose conceptual underpinnings go back to the earliest days of computing
(Quirk, 2012). Douglas C. Engelbart was a pioneer in the understanding of BIM principles
and the first author to predict this new approach to computational processes in architecture
in his book Augment of Human Intellect: A Conceptual Framework (1962). He described the
work method of a future architect designing a building in a computer as focused on an object-
based design, with the ability to store objects and their associated information in a relational
database and the possibility of parametrically modifying them (Engelbart, 1962). After the
invention of Sutherland’s Sketchpad, “many other researchers started conceptualizing a
‘futuristic’ design paradigm that revolved around the three-dimensional design approach and
object-orientation” (Sawhney, Singh, & Ahuja, 2017, p. 5), with the appearance and
improvement of solid modeling programs in the computational representation of geometry.
The following decades of the 1970s and 1980s were also marked by the development
of two fundamental methods to display and record shape information: (1) Constructive Solid
Geometry (CSG), a system used in solid modeling that allows to build solid objects from
other solids by combining, intersecting, or subtracting them (figure 2.11.), and (2) Boundary
Representation (BRep), a method where solids are represented as a collection of connected
surfaces, defined by their limits.
Fig. 2.11. Illustration of a
Constructive Solid Modeling
process.
Fig. 2.10. The first version of
AutoCAD released in 1982.
Fig. 2.12. Coordinated views in
current Revit, a BIM tool for
architecture.
13
Along with these methods, the implementation of libraries of objects was a crucial
contribution to the development of BIM tools. The first software to describe these individual
library elements that could be retrieved and added to a model was Building Description
System (BDS), designed in 1974, the first project to succeed in creating a building database
(Sawhney, Singh, & Ahuja, 2017). BDS already resorted to a user graphical interface,
different orthographic and in perspective viewports (figure 2.12), and a sortable database
from where the user could retrieve information stored by categories, i.e., attributes such as
materials and suppliers. The following researches and developments on the subject led to the
first version of a BIM tool for architecture, ArchiCAD, in 1984 (figure 2.13.).
The next progression in the History of Computer Science that had direct implications
in the development of AD as we know today was the introduction of Pro/ENGINEER
software, also in 1987, developed by Samuel Geisberg (figure 2.14.). It was the first
mainstream system that fully implemented the concepts of Sketchpad that, besides the digital
manipulation of geometry using a light pen to “draw” in a computer, also allowed the
implementation of geometric relationships between the drawn elements. These geometric
relationships were communicated to the computer through a specific type of computer
program, nowadays known as parametric model (Davis, 2013). Therefore, Pro/ENGINEER
represented the first implementation of concepts such as parametric architecture and
parametricism, previously presented by Moretti and intended in Sutherland’s studies.
Sutherland originally aimed to make computers accessible to new classes of users,
namely artists and draughtsmen, without losing the power of abstraction that is critical to
programmers (Sutherland, 2003). Therefore, Pro/ENGINEER allowed users to associate and
control tridimensional parametric components by user input constraints (Tedeschi, 2014) and
answered to the need of many designers to build more sophisticated programs in order to
manage increasingly complex projects.
Even though this technological development did not admit a fluid and organic work
method as intuitive and natural as a hand-drawing, it allowed greater efficiency and flexibility
in the architect’s workflow dynamics in phases following the conceptual sketches. It not only
formalized the architect’s ideas with greater accuracy and efficiency but also gave him an
extension of the design spectrum to explore with the new tools available. Actually,
Sutherland stated that “it is only worthwhile to make drawings on the computer if you get
something more out of the drawing than just a drawing” (Sutherland, 2003, p. 110).
Nowadays, computation and programming became the paradigm that enabled
architecture to evolve and develop more sophisticated and efficient approaches to visual
communication. On the one hand, hand-drawn documentation has already been extended to
the digital realm: (1) three-dimensional models can be used to capture videos and rendered
images with the use of textures and light; (2) BIM tools create realistic building relationships
with the use of families associated with technical information that also permit to easily obtain
technical sections (figure. 2.15.), maps of quantities, interactive schedules, and budgets; and
Fig. 2.14. Typical model in an early
Pro/ENGINEER version.
Fig. 2.15. Technical rendered
section modeled in Revit.
Fig. 2.13. ArchiCAD 2 version,
released in 1986.
14
(3) all the analysis software that assess the models through various analysis: thermal, lighting,
structure, and acoustics, among others. (figure 2.16.). On the other hand, programming
enabled the exploration of this new means of communication with greater efficiency, reduced
cost of change, shortened time of production, and with the implementation of automatic
mechanisms that replace repetitive, time-consuming, and error-prone tasks previously done
by hand.
The representations methods evolved to become so accurate and sophisticated that
they are now able to express sensitive data, such as the one obtained through analysis. This
extends the spectrum of what can be presented in an architectural project: not only plans and
sections – that sometimes are too abstract for a full understanding by those unfamiliar to that
type of representation – but also realistic images of interior spaces (figure 2.17.) or 3D
sections of the project (figure 2.18), rendered videos and animations of the ambience, and
even interpretive diagrams of the project’s performance. This aids architects to better explain
the idea and demonstrate the final impact of their proposal, working as an appealing
marketing tool to present and sell architectural projects.
As much as technology evolves and brings new techniques and tools of graphic
representation for architecture, the architect, as a visual thinker (Austin & Qattan, 2016), will
always express himself primarily and instinctively through a pencil or pen and a piece of
paper. Moreover, and although computation for architecture already brought many
possibilities and advantages to the discipline – not only regarding the representation methods
but also changing the work dynamics during the architectural project – it is relevant to
emphasize the perspective brought by Pilsitz (2017). Besides the critical look at the
fundamental skills of architects and at the future influential factors in the fields of drafting,
the author highlights the value of the individuality and creativity, that is increasingly
conquering a preponderant role in the 21st century. Independently from the feedback and
results obtained through computational methods, the final design decisions lay on the
architect’s critical sense and individual identity as a designer.
Fig. 2.17. Render of the interior of Morpheus Hotel, programmed in Grasshopper (left), and a recent picture
of the built result (right).
Fig. 2.18. 3D rendered section of the
Elbphilharmonie by Herzog & de
Meuron, Hamburg, Germany, 2016.
Fig. 2.16. Visualization of the
structural analysis of a building.
15
2.2. Algorithmic Design in Architecture
We are presently witnessing a paradigm shift in the realm of architecture with the integration
of approaches, such as AD, in the architect's workflow. This section aims to contextualize
the integration of the algorithmic approach in the current architectural practice.
As the art and science of idealizing and conceiving spaces, architecture is inseparable
from the social, technological, environmental, and scientific context of the era in which it is
inserted. During the last decades, technological developments in the fields of computer
science have come to assist and facilitate the practice of architecture. The rapid and
increasing extension of computational approaches to architecture has been empowered by the
reciprocal fecundation between architectural theories and all the possibilities and
potentialities provided by digital technologies (Fusero et al., 2013). In addition to the new
digital tools commonly available, computation also allowed the extension of the creative
spectrum of the architect, with the introduction of algorithmic and parametric thinking.
This new architectural reasoning constitutes a shift from the more traditional
architectural practices, a phenomenon that is the subject of Terzidis paper Algorithmic
Design: A Paradigm Shift? (2004). As with any other radical paradigmatic change in science
or arts, controversy always emerges.
The main controversy that has been arising is related to more than only formal
materialization of ideas or styles. Regarding computational thinking in architecture, the main
question is related to the ethics of the design process: the value of the fluidity of a hand-
drawn idea entirely conceived in the architect’s mind against the uncreative and insensitive
automatism of designs generated by computers. Irrespective of all the opportunities
guaranteed by the algorithmic process and thinking – concretized through the new tools and
parametric methodologies developed – the creative solutions generated through
computational methods are still the object of great criticism (Castellano, 2011). In the same
paper mentioned above, Terzidis makes a strong statement that might clarify the misguided
interpretation that computers can substitute the architect, saying that “computational formal
explorations do not intend to eradicate human imagination but rather extend its potential
limitations” (Terzidis, 2004, p. 206). He goes even further by believing that computation is
not a substitute for human creativity but offers the means to explore, experiment, and invest
in an alternative realm (figure 2.19.). Furthermore, the ultimate design decision is always up
to the architect. Regardless of all the possible design variations, alternatives, and new
possibilities presented by a computed generation of form, architects ultimately still lean on
their critical sense, sensibility, and creativity to build their idea.
The power of applying computer science methodologies to architecture is in
conquering not only new tools, that allow a more efficient and rigorous workflow, but also
extending the creative reasoning with algorithmic thinking. In other words, architects become
Fig. 2.19. Design process – from
sketches and physical models to
computational analysis, rendering,
and construction – of the Swiss Re
by Foster and Partners, London,
UK, 2004.
16
able to allow their imagination to go even further, based on their capabilities in mastering
new approaches like algorithmic design.
As previously defined, Algorithmic Design (AD) is an alternative approach to the
manual manipulation of geometry in a modeling tool, as the architect uses algorithms,
implemented through programming languages, to create that geometry in a digital
environment (Leitão, Lopes & Santos, 2014). This allows the user to transcend factory-set
limitations of the currently used 3D software (Terzidis, 2004) such as CAD and BIM tools,
as well as to overcome the challenges of normal mouse-based approaches when modeling
complex geometries (Castelo Branco & Leitão, 2017). In sum, the architect builds the
program that generates the geometry in the used tool, instead of generating the geometry by
hand.
Mastering AD requires an extension of the conventional architectural reasoning, as
architects should learn to think parametrically, focusing on new concerns such as the logical
sequence of formulas, parameters, and geometric relationships that explain and translate the
idea of their design. The rethinking of the structure of the architectural curriculum to include
the development of programming skills and parametric reasoning, in order to meet the
demands of the discipline nowadays, have been proposed by some authors (Leitão, 2013 –
figure 2.20.; Agirbas, 2017 – figure 2.21.). Moreover, assuming that programming should be
taught, other authors already discussed the best approaches and strategies (Eid & Milham,
2012; Ivanović et al., 2015). Nevertheless, some of the proposed questions remain
unanswered.
The methodology that is being suggested is that architects should learn how to use
programming languages to program and explore variations of their own projects, instead of
delegating this task to programmers. The rationale behind this proposal lies in the fact that
when external programmers - who are completely dissociated either from the principles of
the project or from the architectural reasoning - translate a project through an algorithmic
description, they are not predicting which possible parameters or variations go according to
the architect's idea, which can result in a program of a parametric model that is not changeable
within the appropriate variables. On the other hand, if architects, the holders of all the ideas
and concepts associated with a project, are in charge of programming its materialization
through AD, they can test and explore the limits of their own imagination and can even find
solutions that fit the context and concept even better than their initial idea.
“To be original and to be in control, the designer has to understand, if not originate,
his own algorithm, and know how to drive it” (Aish, 2005, p. 12). Authors such as Robert
Aish believe that architects should acquire programming skills inside the architectural
paradigm, i.e., without becoming necessarily software engineers. In his paper From Intuition
to Precision (2005), he explains that the algorithmic thought allows architects and designers
to embed their design logic within “an interactive design system which is driven by the
designer’s hand and evaluated by the designer’s eye” (Aish, 2005, p. 12). Once again it is
Fig. 2.21. Design process and
materialization of a student’s
project on Islamic patterns using a
visual approach to AD.
Fig. 2.20. Exercise of surface
mapping developed by students
using a textual approach to AD.
17
emphasized the importance of the architect’s critical sense and ability to make decisions
according to his professional and personal beliefs, contributing to humanize a process that
has been increasingly relying on machines to be executed.
The impact of technological evolution on the discipline of architecture has been so
preponderant that it has generated great controversy regarding the paradigm of the
contemporary era. Patrik Schumacher has strongly contributed to the proliferation of these
beliefs through manifestos that announced the emergence of a new architectural style: the
Parametricism (Schumacher, 2008). The partner at Zaha Hadid Architects is also the author
of Parametricism as a Style – Parametricist Manifesto (2008) and Parametricism - A New
Global Style for Architecture and Urban Design (2009) (figure 2.22.), where he claims that
“architecture finds itself at a midpoint of an ongoing cycle of innovative adaptation” (2008,
p. 1). For the author, Parametricism defines this moment in the History of Architecture, that
he describes as the architectural style that achieved an extensive supremacy within the
contemporary architectural avant-garde (Schumacher, 2008) and that can be understood as a
research program based upon the parametric paradigm. These statements are controversial,
paradigmatic, and have created strong divergencies between other professionals.
Even though manifestos such as Schumacher’s do address the powerful attributes and
benefits of computational design (Castellano, 2011), many authors still go against the
presented principles and ideas. However, the main tendency among AD practitioners is to
assume that “Parametricism or not, clearly we are on the cusp of an extraordinary shift in
creative potential and priorities and with-it architectural practice” (Burry, 2011).
In addition to the controversy surrounding these logistical issues about the role of
programming in architecture and the extension of the architect's curriculum to include
algorithmic and programming skills, other AD-related questions focus more on the
implementation of this methodology for architecture: if architects should learn to program,
what programming language should they use? The following sections contemplate an
introduction to the concept of programming languages as well as a review on the two most
relevant types of PLs for the understanding of this study.
2.3. Programming Languages
Programming Languages (PLs) are used to translate the intentions of the user into instructions
that the computer can understand and process, being a formal medium to express ideas and
not solely a means to get a computer to perform operations (Leitão & Santos, 2011). There
are many types of programming languages, as some are developed for specific applications
and others have the flexibility to serve various purposes.
The History of PLs is very recent when compared to other fields and, when referring
to PLs applied to architecture, one can say that their history is still blossoming. Arguably,
this history starts with the invention of Fortran.
Fig. 2.22. Parametric model of
Kartal-Pendik Masterplan by Zaha
Hadid Architects, Istanbul, Turkey,
2006.
18
Fortran was developed by IBM and had its first appearance in 1957 (figure 2.23.),
being the first widely known and used programming language (Wirth, 2008; Sammet, 1972).
The 1950s were very important for the dissemination of computers, that became available to
institutions and universities, as well as to the recognition of a new profession: programmers.
It was in this context that several companies started hiring the so-called programmers, who
had the skills to communicate with the machines through programming, a complex, creative
task that required human inventiveness to produce efficient programs (Backus, 1981).
Programming languages were, thus, created to facilitate this programming process.
The first computers required a level of programming that made it clear to be a very
demanding task. Part of the solution was to create more tools, implement automation, and
develop better programming languages. The 1960s was also the period when the discipline
of computer science was born.
One major milestone in the History of PLs, that also enabled the distinction of this
new discipline, were the 1968 and 1969 conferences sponsored by NATO1 (figure 2.24.).
These conferences provided a strong baseline to understand the current state of the practice
of software engineering (Boehm, 2006), besides representing the first time practical issues
regarding the struggles of the new discipline were discussed (Wirth, 2008). The well-known
term “software crisis” was born inside these discussions to refer to all the issues exposed
(O’Regan, 2012).
Even though PLs have been created to be used in countless different applications and
fields, in the architectural practice, the use of programming languages is limited, as they need
to interact with digital modeling tools such as CAD and BIM tools. Usually, these tools offer
specific programming environments and languages, e.g., AutoLISP for AutoCAD,
RhinoScrip for Rhino, Grasshopper for Rhino, and Dynamo for Revit.
As already mentioned, in AD, the implementation of the algorithms can be done
through two main types of languages: Visual Programming Languages (VPLs) and Textual
Programming Languages (TPLs).
The following sections will describe these concepts in more detail.
2.3.1. Visual Programming Languages
Visual programming languages (figure 2.25.) use icons and connections to feed
information and instructions to the computer, structuring diagrams of blocks connected by
wires (Schaefer, 2011). According to Noone and Mooney (2018), a VPL is any programming
language that allows users to manipulate the underlying code graphically, thus specifying the
execution of a program without textual scripting (Menzies, 2002). In a VPL, programs consist
of icons that can be manipulated interactively and according to some spatial grammar (Myers,
1 NATO - North Atlantic Treaty Organization.
Fig. 2.24. Different groups at the
NATO Software Engineering
Conference, Garmisch, Germany,
7th-11th of October of 1968.
Fig. 2.25. Programming
environment using a VPL.
Fig. 2.23. Images of an IBM 704
mainframe computer, in 1957.
19
1990), i.e. iconic elements of data – that can contain either values, functions, or geometry,
for example – related between each other through output-input relations.
In the following sections, we describe two relevant VPLs.
2.3.1.1. Grasshopper
Grasshopper is described as a VPL because it meets the specifications of a language
that allows the construction of programs through icons (called components) and connections
(called wires). These components represent programming abstractions, such as functions,
parameters, or even geometry (Ferreira & Leitão, 2015), being organized in a series of menus
from where they can be dragged into the work environment (figure 2.26.). Hence, the created
program represents a data flow graph that consists of the connection between these
components where the information flows into and out (Payne & Issa, 2009).
Unlike RhinoScript, a TPL for Rhino, Grasshopper requires no deep knowledge of
programming or scripting, but still allows designers to build from simple geometry to the
awe-inspiring (Davidson, 2018). Nonetheless, it is possible to extend the functionalities of
Grasshopper with the introduction of written code, using TPLs such as Python, C#, and
VB.NET.
2.3.1.2. Dynamo
Dynamo, just like Grasshopper, is a VPL. The main difference is in the application it
is associated with, since Grasshopper is a VPL for a CAD tool (incorporated in Rhino), and
Dynamo enables the user to write visual programs generated in Revit, a BIM tool (figure
2.27.). Therefore, besides all the modeling features, it also includes icons (called nodes) that
import to the work environment the families of objects available in Revit.
Dynamo also supports the use of code blocks, i.e., nodes in which it is possible to
write small scripts using TPLs such as Python. These code blocks enable the creation of small
algorithms that introduce more complex functionalities, extending the features of the
available factory-set nodes (Ferreira & Leitão, 2015).
Fig. 2.26. Work environment using Grasshopper associated with Rhino.
20
Autodesk released an online manual about Dynamo (2018), where its application is
described as a visual programming tool that aims to be accessible to both non-programmers
and programmers alike. It gives users the ability to visually script behavior, to define custom
pieces of logic, and to script using various TPLs (Autodesk, 2018).
2.3.2. Textual Programming Languages
Contrarily to VPLs, textual programming languages, as the name suggests, belong to
the category of programming languages that use written text to build programs, using a one-
dimensional stream of characters (Brown & Kimura, 1994). These programs structure a script
of written instructions and descriptions that the computer understands and processes
unequivocally (figure 2.28.). Just like any other language in the world, textual programming
languages also obey specific syntax and semantics.
In the following sections, we describe two relevant TPLs.
2.3.2.1. Python
Python is a textual programming language easy to understand due to its resemblance
to mathematics, extendibility, and user-friendliness (Payne, 2010). It was created in 1991 and
has been used successfully in thousands of real-world business applications around the world,
including many large and mission-critical systems and companies, such as Google, NASA,
Wikipedia, Facebook, and Yahoo (Python Software Foundation, 2001).
Fig. 2.28. Programming environment using Python, a TPL, associated with AutoCAD.
Fig. 2.27. Work environment using Dynamo associated with Revit.
21
Being considered suitable for beginners or even non-programmers, the language is
currently benefiting from a considerable momentum in the AD community, particularly
because it is one of the scripting languages of Rhino (Leitão & Proença, 2014), providing
predefined functions with the possibility of programming user-defined ones.
2.3.2.2. Julia
Julia is a high-level, high-performance dynamic language used for numerical
computing (Julia, 2018). It is also a TPL, with a very intuitive syntax for non-programmers
due to its resemblance to mathematics. In addition, it allows the effortless creation of built-
in and user-defined functions.
Even though the number of users of this language is lower than Python’s, Julia’s
community of developers is contributing with several external packages at a rapid pace (Julia,
2018), developing the language’s functionalities and applications.
2.4. Tools, Libraries, and Programming Environments
Some of the best known visual and textual programming languages can be extended to
connect to other computational tools and libraries in order to enlarge the spectrum of
application of AD, for instances, with computational analysis. The following sections present
some of these tools and libraries applied to the PLs they work within.
2.4.1. Grasshopper Plug-ins
Grasshopper allows the improvement and extension of its abstractions and application
through external contributions. Some of these contributions, the plug-ins, provide new
abstractions to extend the available set, while others extend the applicability of the language
by allowing the connection with other modeling and analysis tools (figure 2.29.).
Grasshopper’s plug-ins are organized in an online library, and they can cover different
fields such as manipulation of geometry, automation processes, or even different kinds of
building analysis. Some of the most well-known are Diva-for-Rhino, Ladybug, Geco,
Karamba3D (figure 2.30.), and SWIFT (figure 2.31.). The following table presents some of
the plug-ins available in Grasshopper, associated with the type of analysis they perform.
Fig. 2.29. Plug-ins for Grasshopper that connect it to analysis tools (left) and modeling tools (right).
Fig. 2.30. Structural analysis using
Karamba3D.
Fig. 2.31. Wind analysis using
SWIFT.
22
Plug-in Type of Analysis
Butterfly Airflow and Ventilation
Dragonfly Climate
Esquissons Acoustic
GECO Environmental (connects to Ecotect)
Honeybee Thermal, Daylight (connects to Radiance), Glare, and Energy (connects to Energy Plus/OpenStudio), etc.
Kangaroo Physics Structural
Karamba3D Structural
Ladybug Geometry, Solar Radiation and Weather Data (connects to EnergyPlus)
ParaStaad Structural (connects to StaadPro)
PIGEON Ventilation
Sunflower Solar Analysis Sunlight
SWIFT Wind
TRNLizard Thermal and Daylight
2.4.2. Rosetta
Rosetta is an AD tool that allows the use of different programming languages (front-
ends) in order to create programs that interoperate with different CAD tools (Lopes & Leitão,
2011) (figure 2.32.). More recently, BIM tools were added to this list of back-ends, such as
Revit (Feist et al., 2016). This means that, by using one of the TPLs supported by Rosetta,
such as Python, one can create a program of a 3D model that can be generated and visualized
in one or more of the possible modeling tools. Therefore, the geometry generated through
Rosetta is portable, since the same program can be read by different applications. This
portability is assured by an abstraction layer that contains the common functionalities
amongst the modeling tools, such as transformations and shape constructors (Castelo Branco,
2017).
The aim of Rosetta is to aid architects in using a computational design process to
generate and manipulate complex geometry (Rosetta, 2017). At the moment, the tool admits
several TPLs, such as Python, Racket, JavaScript, and Processing, and is already
implemented in modeling tools such as AutoCAD, Rhinoceros 3D, SketchUp, ArchiCAD,
Table 1 – Analysis plug-ins for Grasshopper.
Fig. 2.33. Visualization of a light
analysis using Rosetta’s back-end to
connect with Radiance, in Rhino
(top) and AutoCAD (bottom).
Fig. 2.32. Front-ends (on the left) and back-ends (on the right) of Rosetta.
23
and Revit (figure 2.33.). Besides modeling tools, Rosetta was extended to interact directly
with some analysis tools, namely Radiance – for thermal and light analyses (Leitão, Castelo
Branco, & Cardoso, 2017), and Robot – for structural analysis (Aguiar, Cardoso, & Leitão,
2017).
This integration brings many advantages, such as the ability to extract from a single
program the information needed for more than one analysis tool – avoiding the time-
consuming task of creating a specific analysis model for each analysis needed. Furthermore,
the direct articulation between tool and program guarantees that there is no loss of
information (figure 2.34.), which reduces errors of misinterpretation of the analyzed model,
also avoiding the generation of unreliable information.
After receiving these results, the architect becomes able to make more informed
decisions when adjusting the design to have better performances (figure 2.35.), a process that
can also be automatized using optimization algorithms. Optimization within this
methodology includes the automated generation of the same model, only varying a specific
parameter or group of parameters – within a range of values given by the architect – and the
immediate assessment of each one.
2.4.3. Khepri
Khepri is an algorithmic design tool whose development was based on Rosetta,
revising the way users interact with it (Algorithmic Design for Architecture, 2018). It also
allows the creation and manipulation of geometric data in CAD and BIM tools through a
program written in a TPL, Julia.
Khepri is still in early development, constituting the base of an ongoing project with
the ultimate goal of surpassing Rosetta’s features and implementing new methodologies to
bring the tool closer to the user, in this case, the architect. Moreover, the tool is also
expanding for the analysis realm, as it is being developed with new implementations for
different analysis tools.
Currently, Khepri allows a model to be generated in AutoCAD, Rhino, and Revit and
assessed through Robot, a structural analysis tool, and Radiance, a lighting analysis tool.
2.5. Programming Languages Applied to Architecture
A programming language is more than just a means for instructing a computer to perform
tasks: it is a formal medium for expressing ideas (Abelson & Sussman, 1996), just like a
drawing. In architecture, PLs allow the implementation of algorithms in order to take
advantage of computers and generate the intended design in a modeling tool (Leitão &
Proença, 2014). Nevertheless, it is difficult to create an architectural project using AD
methodologies without resorting to drawings as the first approach to the design (figure 2.36.).
Fig. 2.34. Light analysis using the
Diva-for-Rhino plug-in for
Grasshopper (left) and using
Rosetta’s back-end connection with
Radiance (right).
Fig. 2.35. Use of the results of the
light analysis to inform the design.
Fig. 2.36. Design process of the
dome of the Reichstag, the New
German Parliament, by Foster and
Partners, Berlin, Germany, 1999.
24
Both drawing and programming are tools to materialize an idea, and architects choose
the one that best fits their needs according to the stage of development of a project. After the
first conceptual phase of drawings and sketches, instead of manually modeling the project in
CAD and BIM tools, the algorithmic approach is an answer for a more efficient way of
working, since it enables architects to structure parametrically their idea, to explore design
variations (figure 2.37.), and to avoid time-consuming and error-prone tasks. What remains
to be answered is which programming languages best suit the field of architecture.
Even though some publications mention that, as demonstrated in several comparative
studies on VPLs and TPLs, there is no compelling evidence regarding their relative
advantages (Menzies, 2002), nowadays, there is an overwhelming tendency for the use of
VPLs over the use of TPLs among architects. One possible explanation is the visual nature
of the discipline that leads architecture to gravitate towards more visual ways of
programming, in which designers are given visual feedback to help understand what a
program does (Austin & Qattan, 2016). Grasshopper is the most deserving representative of
its group, featuring several mechanisms that are undeniably user-friendly. Clarisse and Chang
also concluded that visual programming environments use information in a format closer to
the user’s mental representations of problems, besides allowing data to be processed in a
similar manner that objects are manipulated in the real world (1986). Furthermore, Menzies
mentions the work of Hirakawa and Ichikawa (2002) to transmit the advantage of using visual
expressions as a means of communication, since it circumvents the need of learning
computer-specific concepts, managing a user-friendly computer environment that non-
specialists can easily use.
Another reason for VPLs’ success is in the notorious time and care invested in the
development of the current VPLs for architecture, as well as in the intention and target to
whom they were created, e.g., Grasshopper, for example, was specifically developed inside
a CAD tool to offer architects a more approachable alternative to RhinoScript. Other authors
such as Boeykens and Neuckermans defended that programming should take part of the
architect’s curriculum, albeit not necessarily by writing code (2009), proposing VPLs as a
solution.
This overall propensity can also be associated with the fact that the first TPLs that
were made available for AD, such as AutoLISP, were not adapted to less experienced users.
However, modern TPLs already provide a variety of linguistic features that are designed to
surpass the limitations of traditional TPLs, becoming hypothetical competitors to VPLs
(Leitão, Santos & Lopes, 2012).
As mentioned previously, Grasshopper provides a series of features that make it very
appealing for beginner programmers: interactive sliders; immediate feedback (figure 2.38.);
traceability - that enables the user to select a component from the program and see what it
generates in the CAD tool (figure 2.39.); an interactive environment; color paneling;
Fig. 2.37. Design variations of the
elements of a façade.
25
organizational features; and components with visual graphs and gradients (figure 2.40.),
among others.
Nonetheless, most of these characteristics fail when the project becomes complex.
Besides, if outsider practitioners try to read a Grasshopper program with some degree of
complexity, they most certainly will struggle to understand it (figure 2.41.). Moreover, its
simplicity does not include sophisticated abstractions, which usually leads to the overuse of
copy and paste mechanisms, introducing redundancy. In turn, “redundancy leads to
maintenance problems because modifications in duplicated components must be manually
propagated to all instances” (Leitão, Santos & Lopes, 2012, p. 143), resulting in small-sized
programs that usually are not developed in detail for later phases of the projects.
Albeit programs created in Grasshopper do achieve interesting aesthetic results, their
explanatory power is limited, as the program that is being illustrated rapidly becomes too
large and confusing (Leitão, Lopes & Santos, 2014). This happens not only due to the features
of the programming language – and the visual illegibility of countless boxes connected with
wires – but also because of the structuring and organizational mechanisms, that are not
intuitive or easy to use.
One answer to this problem might be in using a TPL for AD. In Schaefer (2011)
testimony, he described the use of a VPL to create a program as a trial-error process. He
confessed that he only believed he had found a solid response to his intentions when he used
an icon that allowed the insertion of textual code, a process that, ultimately, he described as
“cheating” (Schaefer, 2011). This comes to support other lines of thoughts such as Austin
and Qattan (2016) that determine that if architects want to deal with complex algorithms,
they need to move past visual programming and immerse in core programming fundamentals.
AD is reaching a point where the programs are increasingly more complex, being
important to start developing good tools for both program documentation and comprehension
(Leitão, Lopes & Santos, 2014). Luckily, some TPLs already have a considerable application
in AD, being available in several generative design tools, such as Python for RhinoPython
and Rosetta, and Julia for Khepri.
In order to combine the advantages of VPLs and TPLs, a lot of effort has been made
towards the implementation of visual features in environments that use textual programming.
Rosetta, for instance, has already implemented features like sliders to easily vary the
parameters. Furthermore, it already surpassed the capabilities of the current VPLs for
Fig. 2.39. Traceability in
Grasshopper.
Fig. 2.38. Immediate feedback in Grasshopper.
Fig. 2.42. Luna Moth editing
interface.
Fig. 2.41. Grasshopper program
with medium complexity.
Fig. 2.40. Color mapping in
Grasshopper using visual gradients.
26
architecture, by extending the spectrum of front-ends and back-ends in a single tool, making
it easier for the architect that solely needs to master one TPL to produce geometries in more
than one CAD or BIM tool. Another example is Luna Moth (figure 2.42.), an Integrated
Development Environment (IDE) for AD that is available on the web, demonstrating the
relationship between a program and its results (Alfaiate & Leitão, 2017). The visualization
of this relationship is accomplished through user-interaction mechanisms similar to number
sliders (figure 2.43), immediate feedback, and traceability (figure 2.44.).
Even though TPLs are less used by architects, there are more languages within the
textual paradigm that have application in AD that VPLs developed to support the algorithmic
approach to architecture. The following table enumerates and associates the most used
programming languages for AD with the modeling tools they are used in.
Textual Programming Language Modeling Tool
Racket AutoCAD, Rhino, Revit, ArchiCAD, SketchUp (*)
Python AutoCAD, Rhino, Revit, ArchiCAD, SketchUp (*)
JavaScript AutoCAD, Rhino, Revit, ArchiCAD, SketchUp (*)
Processing AutoCAD, Rhino, Revit, ArchiCAD, SketchUp (*)
AutoLisp AutoCAD, Rhino, Revit, ArchiCAD, SketchUp (*)
Julia AutoCAD, Rhino, Revit (**)
RhinoPython Rhinoceros 3D
RevitPython Revit
VisualBasic.NET AutoCAD (plug-in), Revit, Rhinoceros
Ruby SketchUp
C# Revit (plug-in), AutoCAD
C++ ArchiCAD
GDL ArchiCAD
Mel Maya
MAXscript 3ds Max
(*) using Rosetta or (**) Khepri
In addition to the more restricted number of visual languages with application in AD,
each VPL available has a limited range of application, since they were created to operate in
one modeling tool alone. Nevertheless, some languages like Grasshopper already made
available plug-ins that allow the connection of the created program to visualization and
generation in BIM tools, e.g. the Rhino-Grasshopper-ArchiCAD toolset enables the direct
communication to generate BIM models through Grasshopper’s visual scripting interface.
Nonetheless, this answer to these limitations might not be sufficient to increase the
advantages of the use of VPLs for complex programs.
Visual Programming Language Modeling Tool
Grasshopper Rhino
Dynamo Revit
GenerativeComponents Microstation
Table 2 – VPLs and TPLs applied to AD and the correspondent modeling tools.
Fig. 2.43. Luna Moth’s click and
dragging feature to vary the value of
the parameters.
Fig. 2.44. Bi-directional
traceability: select a geometry in the
tool and is highlighted the part of
code that generates it (right); select
a part of the code and it is
highlighted the geometry it
generates (left).
27
On the other hand, AD tools such as Khepri do offer true opportunities in facilitating
the programming process for architects. Regardless of the initial time taken to learn and
master a textual language, this effort is quickly offset by the features of these tools. In
addition, Khepri is in current development in an effort to connect to more visualization and
analysis tools, enabling a safer and more lossless information transfer and ensuring reliable
information to improve the project’s performance.
Nowadays, sounding references in contemporaneous architecture have been
challenging themselves to build and think increasingly complex projects. Worldwide famous
architectural studios such as NBBJ, Zaha Hadid Architects, Gehry and Associates, Herzog &
the Meuron, and Foster + Partners are just some of the names that have created great buildings
with complex geometry and optimized performances. These studios have already
incorporated algorithmic methodologies in their design processes, since they recognize that
the answer for the increasing demands for formal innovation and performance-driven systems
could not be in conventional work methods and tools such as BIM packages (Miller, 2011).
The use of AD undoubtedly brings advantages to the design process. Within the
context of an architectural studio, one of the biggest advantages of AD is in facilitating
collaboration between different parties involved in the construction of the same program.
This possibility becomes crucial in a world emerged in an era of internationalization, in which
is valued not only the contributions of professionals from various fields, but also the ability
to efficiently communicate between different parts of the world.
The following sections present some architectural studios that incorporate AD in their
practices, as well as some of the projects that benefited from this approach.
2.5.1. NBBJ
NBBJ is an innovative architecture firm with an international team that also includes
professionals of different areas besides architecture, contributing to a varied, complete, and
more informed work dynamic.
NBBJ signed many known projects of large scale and impact, such as Rainier Square
Tower (figure 2.45.), the reinvention of Rupp Arena (figure 2.46.), and the Xiamen Eton
Center (figure 2.47.). The Hangzhou Tennis Center (figure 2.48.) is one of the most
significant parametric buildings in the world and has already been documented, discussed,
and the subject of studies, such as The Hangzhou Tennis Center - A Case Study in Integrated
Parametric Design (2011), by Nathan Miller. As the name suggests, the author approaches
the design methodology applied to the design process of the shell of one of the stadiums
inside the sports complex, explaining that an integrated parametric system was created to
conceptualize, document, and simulate the complex geometric systems (Miller, 2011).
The project not only benefited from algorithmic approaches in the conception of the
formal behavior of its shell, but also in the assessment of the structural performance through
Fig. 2.46. Reinvention of Rupp
Arena by NBBJ, KY, USA,
unknown date.
Fig. 2.47. Xiamen Eton Center by
NBBJ, Xiamen, China, under
construction.
Fig. 2.45. Rainier Square Tower by
NBBJ, Seattle, USA, under
Fig. 2.48. Hangzhou Tennis Center
by NBBJ, Hangzhou, China, 2013.
28
structural simulation tools (figure 2.49.). The studio chose to work with Grasshopper and
Rhino within the AD methodology (figure 2.50), recognizing the necessity of designers to
search for novel processes that are able to extend and overcome the limitations of the standard
tools available for architects.
Therefore, a parametric algorithm was created and expanded to include some
integrated capabilities, such as the definition and control of the variables of the design, the
efficient test of alternatives, and the production of analysis-ready structural models (Miller,
2011). NBBJ also mention the importance of cost control and minimization of waste,
something that could only be accomplished with such efficiency through AD (NBBJ, 2018).
Moreover, one of the biggest challenges of coordinating projects with international teams is
in the collaboration process, a difficulty that was also answered through the algorithmic
methodology, since working with PLs allowed the creation of algorithms to coordinate
information within the team of collaborators and external documentation tools.
2.5.2. Zaha Hadid Architects
Zaha Hadid Architects (ZHA) is one of the most recognizable architectural studios
worldwide due to the impact, innovation, and audacity of their creations. The type of projects
they design, in most of the cases, truly benefits from algorithmic approaches, since they are
characterized by their organicity, patterns, receptiveness, scale, and complexity. Examples of
that are the projects of Galaxy SOHO (figure 2.51.), the proposal for the Szervita Square
Tower (figure 2.52.), and the Heydar Aliyev Center (figure 2.53.).
The Morpheus Hotel (figure 2.54.) was the subject of multiple discussions,
publications, and seminars due to the innovation within the used AD approach. The greater
interest in this project is in the modeling of the façade that has three different behaviors: flat,
single-curve, and free-form (Heijden, 2017, Feb. 8, figure 2.55.). Therefore, it was imperative
to have a close collaboration with structural engineers and other specialists in order to
accomplish a design that would not be disassociated from the architect's idea, but rather meet
all feasibility and safety requirements.
The team presented the design process in the webinar The Morpheus Hotel: from
Design to Production (2017), involving speakers from both the architecture studio and the
Fig. 2.51. Galaxy SOHO by Zaha
Hadid Architects, Beijing, China,
2012.
Fig. 2.53. Heydar Aliyev Center by
Zaha Hadid Architects, Baku,
Azerbaijan, 2012.
Fig. 2.52. Szervita Square Tower by
Zaha Hadid Architects, Budapest,
Hungary, to be confirmed.
Fig. 2.49. Using Kangaroo physics
engine to visualize gravity loading
on the truss centerline model of the
Hangzhou Tennis Center.
Fig. 2.50. Compilation of the workflow using an AD approach in the Hangzhou Tennis Center.
29
façade consultants. One of the most interesting testimonials on the subject was Ramon Van
der Heijden’s, a computational design specialist at the façade consultants Front Inc. that also
worked in this project. During his participation in the webinar, Ramon puts into perspective
the limitations of Grasshopper, saying that, even though the tool is pretty good in processing
complex geometry, “scale becomes an issue” (Heijden, 2017, Feb. 8; figure 2.56.) when there
is the need to work with models with the complexity of the Morpheus Hotel. The alternative
he introduces to the problem of large Grasshopper programs is dissection: the program
becomes simpler with the use of modulation tools, such as clusters, that group large portions
of the program into components. Thus, the program becomes a set of components, so that the
whole model is a giant network linking smaller models. This facilitates collaborative work,
as was imperative for the development of this particular project.
Besides being applied to the virtual generation of the model, the AD approach also
aided the fabrication phase, since the programs created in Grasshopper were used in the
conception of the pieces that structured the façade. The final 3D model represents a set of
inputs that not only generates the final design but also, and simultaneously, generates the
fabrication data, producing automatically hundreds of thousands of fabrication drawings.
This is one example of an architectural project where, in the words of one of the
webinar’s speakers, Miron Mutyaba, senior designer at ZHA, “the use of parametric tools
became an absolute necessity”, since the “manual modeling was not an option” (Heijden,
2017, Feb. 8). This same line of thought is shared by Heijden, who stated that “traditional
BIM is not a viable option”.
Even though the Morpheus Hotel was programmed using Grasshopper, a VPL, the
fabrication phase required the use of textual programs, in order to ensure that the documents
fabricated would result in the correct parts.
2.5.3. Gehry and Associates
Frank Gehry (1929 - ) is mostly known for “using bewildering postmodern shapes to
challenge the modern architectural design paradigm by snubbing the doctrine of ‘form
Fig. 2.54. Morpheus Hotel by Zaha
Hadid Architects, City of Dreams,
Macau, 2018.
Fig. 2.55. Different façade
typologies: flat (white), single-
curved (red) and free-form (blue and
pink).
Fig. 2.56. Grasshopper program that modeled Morpheus Hotel, illustrating Ramon’s
statement “scale is an issue”.
Fig. 2.57. The Barcelona Fish
sculpture (or El Peix) by Gehry and
Associates, Barcelona, Spain, 1992.
30
follows function’” (Wu et al., 2016). He is considered one of the most influential architects
of the 21st century for inventing a new language, as he could not prescind the computer to
design his buildings (Bennis, 2003).
It is mainly on this matter that the studio Gehry and Associates stands out, also
introducing a name that was crucial for the introduction of parametric modeling to the
architecture industry: Rick Smith. Smith was a CAD technician that worked with CATIA2 in
the aerospace industry. According to Daniel Davis (2013), he was hired in 1991 by Frank
Gehry to help in the design of the sculpture El Peix for the 1992 Barcelona Olympics (figure
2.57.) using CATIA, which represented one of the first applications of software of this caliber
in the architectural practice.
This partnership between Gehry and Smith ended up lasting over a decade, with the
employment of parametric modeling in the design process of the studio, including other
prominent works, such as the Guggenheim Bilbao (figure 2.58.) and the and the Walt Disney
Concert Hall (figure 2.59.) (Davis, 2013). The collaboration was so successful that led to the
foundation of Gehry Technology in 2001, where the developed work included not only the
generation of parametric models of the architectural projects of Gehry and Associates, but
also in the development of CATIA in order to be more easily used by architects.
Frank Gehry is undoubtedly recognized by his close interest in computational
processes that aid to develop an architectural project. However, and above all else, he is
passionate for his drawings (figure 2.60.) and physical models. In fact, every building
imagined by the architect is firstly sketched in the paper, with “a sense of off-hand
improvisation, of intuitive spontaneity” (Knight, 2012, Sep. 7).
2.5.4. Foster + Partners
Norman Foster (1935 - ) is a prominent architect known for his innovative structural
designs that also saw in computation for architecture a way to extend the expression of his
intentions and the materialization of his ideas. In some of his research, he states that
“computer screens have already replaced the traditional drawing board and some of the most
fundamental aspects of our profession are changing as a result of this technology” (Foster,
2003, p. 1). Foster is also known for his environmental awareness, defending the fast
development of these digital tools to allow the execution of many concepts and ideas
previously explored that were not possible to accomplish before.
Furthermore, Foster (2003) refers to the proposed project of the Millennium Tower
(figure 2.61.) to explain the integration of computational methodologies in architecture to
develop more sustainable projects. The creation of a virtually self-sufficient and self-
sustaining building could be a utopia a few years ago, although the architect believes that, in
the present day, all technological means are available to build projects alike.
2 CATIA – Computer-Aided Three-Dimensional Interactive Application.
Fig. 2.58. Guggenheim Bilbao by
Gehry and Associates, Bilbao,
Spain, 1997.
Fig. 2.59. Walt Disney Concert Hall
by Gehry and Associates, Los
Angeles, USA, 2003.
Fig. 2.61. The Millennium Tower
by Foster and Partners, Tokyo,
Japan, unbuilt.
Fig. 2.60. Drawing of Guggenheim
Bilbao by Frank Gehry, design
sketch of the riverfront elevation,
1991. Exposed at LACMA, LA.
31
Another example mentioned by the author is the headquarters building for the Greater
London Authority, also known as City Hall (figure 2.62.). The shape of the building was also
generated as a result of digital analysis with the aim to reduce the energy needs of the building
(Foster, 2003), and manipulated to obtain an optimum performance by reducing the façade
area exposed to direct sunlight.
Foster emphasizes that the technological and computational developments applied to
architecture allowed greater efficiency in obtaining optimum results regarding the
performance and sustainability of large buildings. Another exemplary building is the
headquarters of Swiss Re (figure 2.63.). Foster + Partners counted with the collaboration of
ARUP to develop the structure, that explained that 3D computer modeling was used
extensively in the dimensioning of the steel frame structure, allowing the architect to
coordinate this design process (ARUP, 2018). Moreover, the use of computation facilitated
the transition from the drawing board to the fabrication phase, simplifying the process of
obtaining crucial technical information to build the project. Furthermore, Foster refers to
parametric modeling as the technique that enables that efficiency, since any element of the
design can be amended and automatically regenerate the model according to those changes.
2.5.5. UNStudio
UNStudio is an international architectural firm that is currently based both in Europe
and Asia. They are known for their organic and large-scale projects, whose development also
relies on programming approaches. Examples of that are the Raffles City Hangzhou (figure
2.64), Lane 189 (figure 2.65), and the Westfield White City (figure 2.66.).
There are already several studies and publications authored by some members of
UNStudio regarding their project methodologies, being one of the most recent the
international presentation of Harlem Miller (2018) about knowledge sharing and the
education of future generations of architects concerning the world of computation and
programming for architecture. The paper describes the formats used to share and acquire
knowledge within the firm, mentioning several courses in software workflow, parametric
design and scripting, and geometry rationalization (Miller, 2018). Additionally, UNStudio
provides custom tooling to their team of architects and other specialists, where PLs such as
Grasshopper (figure 2.67.), Dynamo (figure 2.68.), and Python are used to generate
customized tools that are distributed within the office to perform specific tasks.
Therefore, the choice of the software and other modeling and programming tools is
key to establish the workflow of a project, being one of the priorities at the beginning of its
development. This is well illustrated with the case study of the Wasl Tower (figure 2.69.),
which primary objective was to simplify both digital and manufacturing workflows and,
therefore, achieve a greater design quality, work efficiency, and coordination between project
phases and teams (Miller, 2018).
Fig. 2.65. Lane 189 by UNStudio,
Shanghai, China, 2016.
Fig. 2.63. Headquarters of Swiss Re
(the Gherkin) by Foster and
Partners, London, UK, 2004.
Fig. 2.64. Raffles City Hangzhou by
UNStudio, Hangzhou, China, 2017.
Fig. 2.66. Westfield White City by
UNStudio, London, UK, 2018.
Fig. 2.62. Greater London Authority
(City Hall) by Foster and Partners,
London, UK, 2002.
32
The project of the Wasl Tower was developed using different modeling and
programming tools: (1) the base geometry was modeled using the native design software of
the studio, Rhino, that would then be used to (2) feed secondary geometry rationalization
plug-ins in Grasshopper to finally (3) be pipelined into documentation tools such as Revit.
For projects such as the Wasl Tower, whose façade is composed by a repetitive
element that suffers a transformation, it is crucial that not only repetitive tasks are automated,
but also that it becomes possible to assess the generated geometry in order to get information
on its performance and feasibility (figure 2.70.).
UNStudio has shown in their built projects, proposals, and international publications
that they not only rely on computational and programming methodologies to develop their
workflow dynamics within the architectural studio, but they also emphasize the importance
of developing and transmitting this new technological knowledge to the new generations of
architects to come. This reinforces the preponderant role of programming approaches and
tools to develop more reliable and ambitious projects, with better performances and built
results.
Fig. 2.69. Wasl Tower by
UNStudio, Dubai, UAE, under
construction.
Fig. 2.68. Part of the Wasl Tower
project modeled in Dynamo.
Fig. 2.70. Result of custom scripting components that highlight the variation of elements of the
façade.
Fig. 2.67. Design process of a façade system using PLs. Left: scripted closed polysurface. Middle:
Grasshopper program. Right: documentation generated in Revit.
33
3. Characterization of Programming Languages in
Architecture
In order to better comprehend the specific criteria that we will assess to compare the current
use and application of VPLs and TPLs for architecture, we will first contextualize the
classification of programming languages in general.
To do so, we will introduce and define four main concepts that characterize PLs and
that are related to their appeal in terms of performance and ease of use in architecture: (1)
computational power, (2) performance and efficiency, (3) expressive power, and (4) user
interface features. Moreover, there is a fifth aspect in the process of programming geometry,
whose analysis depends on all the criteria mentioned before: the (5) limit of complexity that
is supported by the program, while maintaining all the features and mechanisms provided by
the language.
3.1. Computational Power
The computational power of a programming language is the measurement of the complexity
of the problems that can be described using that language (Leitão & Proença, 2014).
Logically, if the programming language handles the generation of an extremely
complex program, it is characterized by high computational power. However, it has already
been proven that most PLs are Turing-complete, being built and maintained to deliver full
computational power, which means that all of them should be able to solve all the problems
that they are instructed to solve.
Therefore, computational power, even though is an aspect that is included in the
characterization of a programming language, it is not a differentiator, as opposed to other
characteristics, such as performance and expressive power.
3.2. Performance
Even though PLs are expected to have the same computational power, since they all must be
able to process instructions of all levels of complexity, what may differ between them is the
time they take to perform that same instructions, i.e., its efficiency.
Performance defines the efficiency with which PLs compute an instruction. The faster
the language can process the information given in order to solve a problem, the better its
performance is. Thus, if two programming languages compute the same program at different
speeds, they have different performance levels.
Therefore, we can also relate the performance level of a PL to its appeal, since it is
preferable to choose a faster language to compute a given instruction.
34
3.3. Expressive Power
The expressive power of a programming language, as the name suggests, reflects the ability
and ease of expressing ideas using that PL. In other words, it can be understood as a
measurement of the breadth of ideas that can be described in that language (Leitão & Proença,
2014). Hence, it is dependent on the features of the language in terms of the abstraction
mechanisms it provides to define those ideas through algorithmic descriptions, being also
related to the human effort that is needed to describe them (Leitão & Proença, 2014).
These abstraction mechanisms provided by some PLs help to reduce the complexity
of the defined ideas, supporting the creation of concepts by solely focusing on a single type
of property of the things that are perceived (Nederveen, Bakkeren, & Luiten, 1993). For
instances, potentiation is an abstraction of a succession of multiplications, representing a set
of operations in one single and simple expression.
An important example of an abstraction mechanism, usually associated to TPLs, are
higher-order functions, which allow to only implement the part of a certain computation that
is common, leaving the variable parts of that computation to be implemented as functions
that are inputted as parameters of the abstraction. In other words, higher-order functions are
functions that receive other functions as arguments or return functions as a result.
In VPLs such as Grasshopper, the abstractions provided by the language are visually
represented and manipulated through boxes and connections between them (figure 3.1. and
figure 3.2.). The lack of flexibility in building algorithms through these abstractions is a
disadvantage of VPLs, since the user can only use the predefined abstractions, that are not
editable. This limitation can be surpassed by more experienced users through the use of
textual programming inside the visual program.
In sum, the more mechanisms a language provides, the easier it is for the user to
implement complex ideas in a program and, thus, the greater is its expressive power.
Fig. 3.2. Complex program in a VPL,
Grasshopper.
Fig. 3.1. Simple program in a VPL, Grasshopper.
35
The following sections of this thesis will reflect and demonstrate the practical
meaning of the expressive power of a language by comparing the intuitive abstractions
available in VPLs for architecture with the flexibility of programming mechanisms of TPLs
that allow the architect to create those abstractions from scratch (figure 3.3. and figure 3.4.).
3.4. User Interface Features
As architects, we value an intuitive and appealing work environment. The user interface is
the digital environment in which we work with certain software or computational tools, i.e.,
the communication area between the user and the computer. This feature is completely
different in VPLs and TPLs, since VPLs benefit from a graphical user interface, while TPLs
offer a textual user interface.
In VPLs such as Grasshopper, the visual user interface works with a drag-and-drop
system of visual elements and connections (figure 3.5.). The programming environment
represents a canvas where the architect freely distributes the icons, taking advantage of
several features to organize the program, such as alignment and grouping mechanisms;
customizable features, such as names and colors; and the visualization features for the
representation of the icons and their connections.
Regarding TPLs, the user interface offers fewer appealing features, being also more
constraint to the strict syntax of the used language (figure 3.6.). Nevertheless, it aids the
architect by recognizing the structure of what is being typed and anticipating and identifying
specific parts of the program, such as the beginning of the definition of a function, the use of
comments in the program, and conditional terms such as if and else (that become highlighted
in a different color).
Fig. 3.5. Grasshopper’s visual user interface. Fig. 3.6. Khepri’s textual user interface.
Fig. 3.4. Part of a complex
program in a TPL, Python.
Fig. 3.3. Simple program in a TPL, Python.
36
The user interaction with the programming language will also be an essential criterion
for the understanding and comparison between VPLs and TPLs that we propose to fulfill in
the next sections.
3.5. Limit of Complexity
The limit of complexity is not a linear criterium, as it cannot be quantifiable nor qualifiable.
The complexity of a program in a VPL can be proportional to the number of components and
connections – and usually, a visually complex program is a heavy program to compute.
However, there are cases where the computational power needed to process a certain
component, and generate the outputs associated, is bigger than the one needed in a modest
group of components.
We define that the limit of complexity is a characteristic of a program, as it is
noticeable whenever a program starts to crash or not giving an immediate response to the
requests or to the alteration of parameters within the correspondent paradigm.
With the development of this investigation, we also aim to test this limit of complexity
of current programming languages for architectures, for both VPLs and a TPLs. This
assessment will be demonstrated along with the increasing complexity of the exercises being
solved using both types of languages in order to better identify the moment where the
performance and efficiency of the language start to become compromised.
37
4. Comparative Study between a VPL and a TPL
In order to compare both VPLs and TPLs in their current application for architecture, we will
develop a study both in theory and in practice.
Regarding theory, we will compare both types of languages according to what is
expected of them to offer in terms of features, mechanisms, and performance. To accomplish
that, we will cover each of the most appealing or useful features and mechanisms and describe
the extent of their implementation in current VPLs and TPLs for architecture.
Then, we will assess those characteristics by testing their implementation and
application while programming hypothetical case studies. These case studies will be
organized according to (1) programming mechanisms that aid the generation of geometries,
e.g., mapping and cross references, or (2) common geometric behaviors and structures in
architecture, e.g., attractors and spaceframes.
For this evaluation, we will use Grasshopper as a VPL and, as a TPL, Khepri, a
programming environment that uses the textual programming language Julia, in order to
better explore both paradigms in the context of the architectural practice.
4.1. Theoretical comparison
Both visual and textual programming languages are characterized by features that ease the
programming process for the architect. There are already some publications (Boshernitsan &
Downes, 2004; Burnett & Baker, 1994; Burnett et al., 1995) about the characteristics that
qualify visual programming languages and that bring them closer to the user, as well as
studies (Noone & Mooney, 2018; Eid & Millham, 2012; Green & Petre, 1992, Navarro-Prieto
& Cañas, 2001) that already introduce a comparison between these advantageous
characteristics and others that define TPLs in general.
To analyze the power, qualities, and limitations of both VPLs and TPLs, we will
explain some of the features and mechanisms that they offer. Some of these features are
exclusive to VPLs, while others are better implemented in TPLs. Other cases will be
introduced where some visual features were already implemented for TPLs or, the other way
around, some programming mechanisms inherent to TPLs that were already extended to the
visual realm.
4.1.1. Abstraction Mechanisms
Any programming language should not only provide and allow to combine primitive
data and procedures in order to create more complex ones, but also be able to build abstract
calculation patterns so that they can be treated as simple operations. This mechanism is called
abstraction and is a core concept of programming. For example, potentiation is a
38
mathematical abstraction of a succession of multiplications. Therefore, abstractions simplify
complex ideas.
In TPLs, abstractions are expressions that compute a series of more complex
operations, without the need to expose that complexity. For example, instead of thinking
about the implementation of a function that creates a continuous curve along positions that
are at the same distance r from a central point p, we can use the predefined abstraction
circle(p,r) to create that particular curve.
In VPLs, abstractions are represented by icons, or boxes, in the programming
environment. This is also one of the strongest advantages of VPLs: these icons are predefined
to represent geometry, functions, and other mathematical entities, allowing architects to focus
solely on devising the logic of the geometry of a project, instead of concerning about the
intricacies of their implementation. Using the same previous example, in Grasshopper the
icon, or component, Circle CNR receives as input a center point, a normal, and a radius,
returning a circle as output.
4.1.2. Number Sliders and Boolean Toggles
Number sliders and Boolean toggles are visual mechanisms that allow to easily
change the value of an input. Both mechanisms are represented in VPLs by boxes, where the
user can, click and drag along to increase or decrease a numeric value, or double click to
alternate between Boolean values (figure 4.1.).
There is already some research that accomplished the implementation of similar
mechanisms inside the textual programming environment. As mentioned, Luna Moth
(Alfaiate et al., 2017) provides user-interaction mechanisms similar to Grasshopper’s sliders
where, instead of clicking and dragging, the user scrolls with the mouse over the value of the
parameter in the program in order to change it.
4.1.3. Immediate Feedback
Immediate feedback allows the user to visualize in the modeling tool and in real time
what is being created and changed in the programming environment. Regarding VPLs,
languages like Grasshopper enable the programming and modeling windows to co-exist in
the monitor, facilitating the visualization of this feature. Other VPLs such as Dynamo, create
a visualization environment inside the programming window that also allows the user to
benefit from immediate feedback.
In what concerns TPLs, there is some research, such as Processing (Reas & Fry, 2007)
and Luna Moth (Alfaiate et al., 2017), that already succeeded in implementing this feature in
a textual programming environment. Another relevant research worth mentioning is Rosetta
(Lopes & Leitão, 2011), that aims to improve program comprehension through the
Fig. 4.1. Number slider and Boolean
toggle in Dynamo (above) and in
Grasshopper (below).
39
establishment of a correlation between the design and the program, also implementing
mechanisms similar to immediate feedback.
4.1.4. Traceability
Traceability is another feature inherent to VPLs that highlights in the modeling tool
the geometry that is being generated by a selected part or parts of the program. For example,
when the user selects a Sphere component in Grasshopper’s environment, the sphere that it
generates changes color in the modeling tool.
Once again, the textual programming environment Luna Moth (Alfaiate et al., 2017)
not only was able to implement this visual feature in the textual paradigm but also surpassed
its current implementation in VPLs by being bi-directional. This means that it allows the
selection of a part of the program to highlight, in the modeling tool, the geometry it generates,
but it also enables the selection of geometry in the modeling tool to highlight the part of the
program that generates it. Rosetta (Lopes & Leitão, 2011) goes even further, extending the
concept of bi-directional traceability by allowing the visualization of the control flow of the
program, highlighting in the program not only the parts that generate a selected geometry but
also identifying the order followed by the computer and the decisions it made while
computing the program’s instructions (figure 4.2.).
4.1.5. Recursion
Recursion is a programming abstraction mechanism that allows a function to invoke
itself during its own evaluation, a feature that is inherent to many TPLs. Recursion is
considered one of the most important programming mechanisms, since complex problems
might have a very simple recursive solution. Usually, in TPLs recursion requires a
conditional form: if A, then B, else C, where A is the conditional, B is the base case that has
an immediate result, and C is the recursive case that turns the original problem into a simpler
subproblem. Exponentiation is a typical mathematical problem that can be solved through
recursion.
Supposedly, while using a VPL, recursion would correspond to a component whose
output would feed the input of the same component until the invocations of the function
Fig. 4.3. Error in Grasshopper when
connecting the output of a
component as its input.
Fig. 4.2. Control flow in Rosetta.
40
ended. In its original implementation, Grasshopper does not allow recursion (figure 4.3.),
only supporting this functionality through plug-ins.
4.1.6. Visual Input Mechanisms
Visual Input Mechanisms (VIMs) are inherent to VPLs and they allow the user to
import geometry that was previously produced in a modeling tool as an input to the program.
This feature is particularly helpful when (1) the intended geometry is easier to produce by
hand or (2) when it is necessary to use already existing geometry, e.g., a city plan. It is also
possible to (3) use, as an input to an AD program, geometry that was itself produced as an
output of another AD program, as it happened with the development of the Morpheus Hotel
(Heijden, 2017).
This feature was recently implemented in a TPL as a result of the investigation
developed during this thesis (Sammer, Leitão, & Caetano, 2019; Sammer & Leitão, 2019).
These researches demonstrate the implementation not only of VIMs in a textual context, but
also extends its flexibility in order to: (1) allow or prevent dependency from the modeling
tool and (2) introduce other textual programming mechanisms such as metaprogramming.
Metaprogramming is the use of programs to generate other programs, being utilized in this
research to generate, in the AD program, fragments that represent existing visual inputs.
These fragments, when executed, generate exactly the same visual input that was selected in
the first place. With the implementation of VIMs for TPLs, we were able to conclude that
one of the biggest advantages of TPLs over VPLs is the flexibility of data treatment and
manipulation according to the intentions of the architect.
However, the use of VIMs in the context of textual programming may require
compromising the performance of this interactive visualization. VPLs like Grasshopper
solely generate a temporary visualization of the geometry in the modeling too and, in order
to the program to be generated in the form of geometric data, the user must use the bake
option. Contrastingly, in textual environments such as Khepri, the implementation of these
visual mechanisms is allied to the direct and real-time generation of geometry, which is a
more time-consuming process (Sammer & Leitão, 2019).
4.1.7. Textual programming
Even though VPLs for architecture were developed to cover all the functionalities of
a TPL, they do not have the flexibility to change the abstractions available, i.e., the set of
icons that come with the VPL cannot be altered within their own definition and
implementation. This might lead to situations where the available abstractions are not suitable
for the idea to be generated, which usually leads to very complex programs that combine
several of the available abstractions to program the intended idea. Therefore, VPLs also
provide the possibility of inserting textual code in the program to overcome this problem. For
example, Grasshopper supports languages such as Python, C#, and VisualBasic.
41
More recently, on-going projects such as Möbius (Janssen, Jung, & Chen, 2019)
already considered a hybrid approach to programming, in order to surpass some of the
described limitations of VPLs: they propose, in the context of the mentioned investigation,
to provide customized visual programming environments that enable their users to create
custom-made high-level and domain-specific functions inside a visual programming context.
This approach takes the structure of a VPL and allows the extent of its limitations by
customizing the different components with textual code (figure 4.4.).
4.1.8. Portability
In computation for architecture, a program is considered portable when it is able to
generate the geometry it defines in different modeling and analysis tools.
Even though the most common VPLs for architecture were created inside a specific
modeling tool, e.g. Grasshopper is integrated into Rhino and Dynamo generates geometry in
Revit, this portability can be indirectly achieved through the use of plug-ins. Even though
these plug-ins allow the program to communicate with other modeling and analysis tools,
they can be fallible for projects of greater complexity and not as intuitive to work with as the
most used abstractions within the visual language.
Contrastingly, textual programming environments such as Khepri, already aimed at
this target, allowing a program to be intrinsically generated in a wide range of CAD, BIM,
and analysis tools. Therefore, users simply need to inform the program about the back-end
that they intend to use.
This ability represents a clear advantage for the design process, since the architect can
decide which tools to use according to the main objectives of each phase of the design
process, without the need of dissecting or duplicating the program to fulfill the data needs of
each tool to be used.
4.1.9. Conclusions
From this theoretical comparison, we were able to establish some relative advantages
between VPLs and TPLs.
Visual features and mechanisms in VPLs
We confirm that, in theory, the abstractions, features, and mechanisms provided by
visual approaches are significantly more appealing and intuitive for less experienced
programmers such as architects. Nevertheless, some of these advantages might become
compromised in practice for more complex programs, as we will assess in the following
sections.
Fig. 4.4. Möbius flowchart (above)
and procedure (below).
42
Scalability and flexibility of TPLs
Regarding TPLs in particular, the scalability of programs becomes one of the strongest
advantages of the textual paradigm. This scalability is associated to a high-performance level
that is a consequence of the intrinsic flexibility of the textual approach. Therefore, the user
can build programs that integrate different levels of complexity of the same project, decide
which parts are to be generated through the use of interaction phases, and even generate the
same information in different modeling and analysis tools.
Visual features in TPLs and performance
Furthermore, we were also able to verify that there is already some research that
fulfilled the effort to implement visual features in a textual programming context. However,
and even though projects such as Processing (Reas & Fry, 2007), Luna Moth (Alfaiate et al.,
2017), and Rosetta (Lopes & Leitão, 2011) were able to bring TPLs closer to visual users,
their application ended up being restricted to a scientific and academic context. Therefore,
they ended up not to avenge in a wider industry nor to have effective application in the
processes of developing architectural projects.
Still, the awareness of this gap between theory and practice has been debunking more
focused research on the progress of more sophisticated and robust tools such as Khepri. This
programming environment is also being developed to incorporate the possibility of using
visual mechanisms as a way to bring textual programming closer to architects (Sammer,
Leitão, & Caetano 2019; Sammer & Leitão, 2019).
However, the use of visual features and mechanisms in a textual programming context
may compromise the performance of a program, as we already proved with the investigation
regarding the implementation of visual input mechanisms in Khepri. Therefore, it is up to the
architect whether this direct interaction and use of visual features are relevant to the
programming process or not.
Nevertheless, from this theoretical comparison, we can already conclude that there is
no impediment to the implementation of the most appealing features and mechanisms
inherent to VPLs in a textual programming context. This integration might be an answer to
surpass the barrier between architects and TPLs and facilitate the early stages of the learning
process, allowing a more dynamic and direct visualization and interaction with the modeling
tool in use.
4.2. Practical comparison
In order to validate the analysis of the previous section and draw more informed
conclusions about the effectiveness of the characteristics approached in theory, we will test
what they mean in practice and report the extent of their functionality when creating programs
for architectural designs. The practical comparison will, thus, clarify the extent of the
theoretical advantages by testing the limit of such features and mechanisms.
43
Since we are also looking for the limit of complexity that compromises the use of
VPLs, we adopted a methodology where the problems solved are successively becoming
more complex. The nature and organization of the introduced architectural problems were
inspired by the work of Tedeschi, that spent several years developing exercises in
Grasshopper for his book AD_ Algorithms-Aided Design: Parametric Strategies using
Grasshopper (2014).
Therefore, the challenges are developed both in Grasshopper and in Khepri, in their
current versions. The proposed challenges will also be organized according to the main
objective of the exercise: either to implement a specific programming mechanism or to create
a typically used geometry.
4.2.1. Series
Series is an abstraction that returns a list of values within a given domain. In
Grasshopper, the component that represents this abstraction receives as inputs the first value
of the series (S), the step size for each successive number (N), and the number of values in
the series (C) (figure 4.5.).
Alike Grasshopper, where the Series component is predefined, this abstraction is also
easily implemented in a TPL as follows:
series(start, step, count) =
count == 0 ?
[] :
[start, series(start + step, step, count - 1)...]
This implementation applies a recursion mechanism, explained in the previous
section, that successively computes the start + step expression for each decreasing value
of count, ending and closing the list created when this count value equals zero. Therefore,
the implemented function series() also receives as parameters the starting value of the
series (start), the increment of values (step), and the number of values intended (count).
julia> series(0, 3, 4) 0
3
6
9
This representation in Julia is what we obtained when using the Read-Eval-Print-Loop
(REPL) window of the programming environment. This functionality allows Khepri to
interact with the user while executing this cycle: it waits for an expression or instruction
(represented by the prompt julia>) that then it reads, evaluates, and determines the value
to after return the correspondent result.
Similarly to what happens in Grasshopper, the most frequently used abstractions are
predefined in Julia or within Khepri. That is precisely what happens with the series()
operation that is already available in the programming environment, implemented on top of
Fig. 4.5. Series component in
Grasshopper.
44
Julia's predefined range() function, that receives the length of the list, the stop value, and
the number of values to compute.
4.2.2. Cross Reference
Grasshopper’s Cross Reference component allows the automatic generation of two
lists containing the combinations between the lists given as input (figure 4.6.).
In order to better visualize the results of this programming mechanism, we will
reproduce a simple exercise created by Tedeschi (2014) that generates a square of boxes
(figure 4.7.). The Cross Reference component is, then, used to generate a list of boxes along
the x-axis that is reiterated along a list of positions along the y-axis.
The Grasshopper program goes as follows:
Using Khepri, there is a simpler way to obtain the same results: instead of generating
two independent lists, one with boxes along the x-axis and other with positions along the y-
axis along which those boxes will be iterated, we create a list of lists of positions, i.e., a
matrix. This type of iterations has its most direct implementation in the For Cycle:
for x in series(0,2,5), y in series(0,2,5)
box(xy(x, y))
end
The For Cycle iterates a variable along a list of values. For each value, it evaluates
the body of the For Cycle which presumably depends on the current value of the variable.
However, as we intend to have a more direct comparison between TPLs and VPLs,
we are also able to implement a new abstraction closer to the behavior of Cross Reference,
the crossref() function. This implementation still represents a simpler and more direct
way to achieve the same results as Grasshopper’s, while benefiting from other mechanisms
of textual programming. Therefore, the mentioned function is implemented as follows:
crossref(as, bs) = [(a, b) for a in as, b in bs]
julia> crossref([1,2,3], [4,5,6])
(1, 4) (1, 5) (1, 6)
(2, 4) (2, 5) (2, 6)
(3, 4) (3, 5) (3, 6)
The crossref() function receives two lists and returns a list of tuples (pairs of
values) that cross every element of the first list with every element of the second. Using this
new function, we can rewrite the program that generates the square of boxes as follows:
Fig. 4.6. Cross Reference
component in Grasshopper.
Fig. 4.8. Grasshopper program that generates a grid of cubes equally spaced between them.
Fig. 4.7. Square of boxes.
45
map(crossref([0, 1, 2, 3, 4], [0, 1, 2, 3, 4])) do (x,y)
box(xy(x,y))
end
This exercise is also useful to understand, on a smaller scale, the implications of
making changes to a program, in this case, to accommodate other dimensions. For example,
if, instead of a square of boxes, users want a cube of boxes (figure 4.9.), extending to a third
spatial dimension, in Khepri they solely need to add a third iteration along the z-axis within
the For Cycle we have shown previously:
for x in series(0,2,5), y in series(0,2,5), z in series(0,2,5)
box(xyz(x, y, z))
end
If the user wants to make the same modifications in Grasshopper, for this scale of
alterations, the program complexity also does not increase considerably (figure 4.10.).
In this case, the alterations made were not sufficient to conclude which paradigm
better deals with the cost of change. However, we still need to assess the necessity of
changing a program for more complex projects, where these modifications start to impose
obstacles in the maintenance of visual programs.
4.2.3. Remapping
In Grasshopper, the remapping mechanism is accomplished with the Remap Numbers
component (figure 4.11). This component receives a list of values and returns a list of the
correspondent values remapped into a new domain given as input.
To translate directly this mechanism in the textual form, we implemented the
remap() function that, like the Grasshopper’s component, receives a value inside a source
domain (from the minimum of the domain A to its maximum B) and makes it correspond to
another value inside a target domain (from the minimum of the codomain C to its maximum
D) (figure 4.12.).
remap(value,(A, B),(C, D)) =
C + (D - C)/(B - A)*(value - A)
Considering that this function solely computes one single value, and in order to obtain
a similar result to the one generated in Grasshopper, the textual approach relies on the use of
higher-order functions as follows:
Fig. 4.9. Cube of boxes.
Fig. 4.10. Grasshopper program that generates a cube of cubes equally spaced between them.
Fig. 4.11. Remap Numbers or
ReMap component in Grasshopper.
Fig. 4.12. Illustration of the remap
mechanism: (A) min_domain, (B)
max_domain, (C), min_codomain,
and (D) min_codomain.
46
julia> map(v -> remap(v, (1,6), (0, 12)), 1:6)
0.0
2.4
4.8
7.2
9.6
12.0
The map() function was predefined in Khepri to receive a set of values (in arrays,
tuples, and iterators, among others) and apply to them a given function inside a given domain.
In this particular case, the map()function operates to a list of v values the remap() function
defined to obtain a list of mapped values inside that new target domain.
4.2.4. Cull Pattern
Another useful abstraction is Grasshopper’s Cull Pattern component, that receives a
list of values and a pattern in Boolean values as inputs and returns a list of values filtered by
that pattern. For example, if we associate to the component the pattern [False, False, True],
the output will be the values of the input list with the indexes 3, 6, 9, 12, etc. (figure 4.13.).
The created implementation within Khepri, the cull() function, follows the same
reasoning: we want to define a function that receives a “template” or Boolean pattern and a
list of values, in order to return a list filtered by that input pattern.
cull(template, as) =
[a for (a, t) in zip(as, cycle(template)) if t]
To use such function, the user simply needs to associate a list of Boolean values and
a list of numeric values as follows:
julia> cull([false, false, true], [1, 2, 3, 4, 5, 6, 7, 8, 9])
3
6
9
4.2.5. Basic 3D Geometry and Boolean Operations
Grasshopper also provides geometric abstraction, i.e., that reproduce geometries
parametrically, such as boxes, cones, cylinders, and spheres. However, the implementation
of these abstractions was made within the modeling tool Rhino and, therefore, the geometric
operations of the program mimic the behavior of the tool’s operations. This has consequences
such as the fact that volumes are treated as surfaces and not solids, which might have
implications when performing Boolean operations. The Cylinder component is an example
of this limitation, as the geometry created by the component is merely a surface representing
the curved surface of the cylinder, without the top and bottom bases. In order to close the
cylinder, the user must add another component, the Cap Holes component.
In a TPL implementation, Khepri already provides all these operations and more. The
implemented set of geometric functions include box(), cone(), cylinder(),
regular_pyramid(), sphere(), regular_pyramid_frustum(), cone_frustum(),
Fig. 4.13. Cull Pattern component
in Grasshopper.
47
and torus()(figure 4.14.). Alike Grasshopper’s abstractions, these functions also take
arguments that allow the parametrization of the geometry generated, such as:
cone(centerpoint_base, base_radius, apex_point)
cylinder(centerpoint_base, radius, centerpoint_top)
sphere(centerpoint, radius)
4.2.6. Visual Input Mechanisms
As previously presented, VIMs are a particularly helpful feature provided by VPLs
that allows the user to import geometry that was previously modeled in a modeling tool as
input to the program. With the development of the recent investigations (Sammer, Leitão, &
Caetano, 2019; Sammer & Leitão, 2019), to which this thesis was a contribution, we were
able to extend the implementation of VIMs to the textual paradigm.
These researches also worked as a practical confirmation of some premises
established in theory regarding the relative performance of VIMs within a VPL and a TPL.
Given that languages like Grasshopper are closely linked with the modeling tool they work
with, which allows the visualization of geometry that has not yet been generated, the
portability of textual programs created in Khepri requires that this relationship is necessarily
more restrictive. This means that VIMs within the textual programming context may
compromise the performance of the programs, since the geometry is automatically generated
and regenerated in every iteration, which is a time-consuming computation.
In this case, the implementation of VIMs within Khepri includes a set of predefined
functions, e.g. select_point() and select_surface(), that, when executed, ask the
user to select from the modeling tool the geometry to import. However, this approach does
not establish a dependency between the program and the geometry selected as input, which
means that any alteration in this geometry is not taken into account unless it is reselected. To
achieve dependency, alike Grasshopper, the user must inform Khepri by using other
predefined functions such as with_shape_dependency(), that allows to re-execute
automatically the program whenever the input is changed in the modeling tool.
To evaluate this mechanism, we can go back to the example given in the Cross
Reference section, that already takes advantage of VIMs in Grasshopper. We used two
programs to create a square of boxes and a cube of boxes, where the unit box to be iterated
was imported from Rhino into a Box component. The Box component, however, is quite
limiting because it solely allows storing boxes. If we change that component for the Geometry
component, we can import different types of geometry to be iterated according to the rules
defined in the rest of the program (figure 4.15.).
To achieve similar results in Khepri, we can also reuse the same example where,
instead of defining parametrically the geometry to iterate, the user selects from the modeling
tool the visual input intended after the program is executed.
Fig. 4.14. Solids resultant of the
implementation of geometric
functions in Khepri.
48
template = select_shape()
for x in series(0,2,5), y in series(0,2,5)
move(template, vxy(x,y))
end
4.2.7. Attractor Mechanisms
Attractor mechanisms create a geometrical visual effect where a geometrical entity is
assumed as an attractor, towards which other geometries react according to given parameters.
Some of the built projects that resort to this geometric behavior are the Nanjing International
Youth Cultural Centre by Zaha Hadid Architects (figure 4.16.), the Messe Basel Exhibition
Hall by Herzog & de Meuron (figure 4.17.), and MCM M:AZIT Store by THE
SYSTEM_LAB (figure 4.18.).
A simple example demonstrated in Tedeschi’s book (2014) is a surface of circles,
which radii vary according to the distance between the center of each circle and a
given/imported geometrical entity, e.g. a point (figure 4.19. and figure 4.20.). A built example
of this is the façade of the Quality Hotel Friends by Karolina Keyzer and Wingårdhs (Solna,
Sweden, 2013), where the radii of the grid of circular windows vary according to both the
distance to the attractor and the sine function (figure 4.21.).
This example also illustrates the use of the remapping mechanism explained
previously, as the ReMap component is the one responsible for performing distance-based
transformations using attractors. Therefore, the component is used to remap, in this case, the
distances between each circle and the attractor proportionally to a new domain of given
values (maximum and minimum radii), so that the circles do not cross each other. This new
remapped list of values, that are proportional to the list of distances but inside a new given
Fig. 4.17. Messe Basel Exhibition
Hall by Herzog & de Meuron,
Basel, Switzerland, 2013.
Fig. 4.18. MCM M:AZIT Store by
THE SYSTEM_LAB, Seoul, South
Korea, unknown date. Fig. 4.20. Grasshopper program of an attractor point, that makes the radii of a grid of circles vary
according to the distance.
Fig. 4.15. Three versions of the same Grasshopper program, only varying the geometry
being imported into the Geometry component.
Fig. 4.19. Point attractor influencing
the radii of a grid of circles.
Fig. 4.16. Nanjing International
Youth Cultural Centre by Zaha
Hadid Architects, Nanjing, China,
2018.
49
domain, will then be used as input to the component that will scale each circle according to
their distance to the attractor point.
Using Khepri, we can use some of the programming abstractions previously
presented, such as the For Cycle, to create the grid of circles, and the remap()function, to
remap the radius of each iterated circle according to its distance to the attractor point.
attractor_circles(p, r, count, q, r_min, r_max) =
let ps = [p+vxy(x, y)
for x in series(0, 2*r, count),
y in series(0, 2*r, count)],
dists = [distance(p, q) for p in ps],
domain = extrema(dists)
[circle(p, remap(d, domain, (r_min, r_max)))
for (p, d) in zip(ps, dists)]
end
attractor_circles(xy(1,2), 1, 10, xy(8, 14), 0.01, 0.8)
Even though this exercise illustrates an attractor point, the attractor mechanism can
also use a list of points, a line, or a curve as attractor geometries. In order to accommodate
those changes in the Grasshopper program, the user must alter all the group of components
that are influenced by the nature of the new attractor.
Contrastingly, while using a TPL, the user can take advantage of other mechanisms
that are facilitated with the textual approach. One example is the ability to create a single
program that is able to identify different types of visual inputs according to the type of
selection being made by the user. Therefore, the architect can select (1) one single attractor
point, (2) multiple and separated positions to work as individual attractor points, (3) or
multiple sequential positions that then create an attractor curve (Sammer, Leitão, & Caetano,
2019) (figure 4.22.). After the interaction between the user and the modeling tool, the
program identifies which type of attractor was requested and generates the results
accordingly.
4.2.8. Spaceframes
Spaceframes are a type of structure built from single trusses connected to create a
surface. Even though this structure is commonly hidden inside the envelope of a building,
such as in the Heydar Aliyev Center by Zaha Hadid Architects (figure 4.23.), they can also
be used for their aesthetics, lightness, and transparency, such as in Joe & Rika Mansueto
Library by Murphy/Jahn (figure 4.24.) and the Biosphere, the Museum of the Environment
by Buckminster Fuller (figure 4.25.).
The programming of spaceframes is particularly helpful for more advanced stages of
the design process, mainly when the architect has to deal with structure feasibility. The
generation of a digital model is, therefore, crucial for further computational analysis.
The Grasshopper program used to create a spaceframe includes the analysis of an
imported surface along which the trusses will adapt to. From that analysis, it is able to extract
Fig. 4.23. Space frame of Heydar
Aliyev Center by Zaha Hadid
Architects, Baku, Azerbaijan, 2012.
Fig. 4.22. Different natures of visual
inputs: one point, multiple points, or
a curve.
Fig. 4.21. Façade of the Quality
Hotel Friends by Karolina Keyzer
and Wingårdhs, Solna, Sweden,
2013.
50
the matrix of points along the surface and another matrix of the correspondent apexes, that,
when connected, create a pyramidal mesh (figure 4.27.). Even though the Grasshopper
program that is shown (figure 4.26.) seems visually simple, there are some components used
to accomplish that simplicity that require more advanced knowledge in the programming
language, namely when working with lists.
In Khepri, the definition of a spaceframe can be visually more complex due to all the
abstractions that are created specifically for the creation of the geometry. In this case,
functions such as spaceframe_nodes() and spaceframe_struts() were defined
within the body of the program to then structure the spaceframe() function as follows:
spaceframe(ptss) =
let ais = ptss[1]
bis = ptss[2]
cis = ptss[3]
spaceframe_nodes(ais)
spaceframe_nodes(bis)
spaceframe_struts(ais, cis)
spaceframe_struts(bis, ais)
spaceframe_struts(bis, cis)
spaceframe_struts(bis, ais[2:end])
spaceframe_struts(bis, cis[2:end])
spaceframe_struts(ais, ais[2:end])
spaceframe_struts(bis, bis[2:end])
if length(ptss) == 3 # no nodes left?
spaceframe_nodes(cis)
spaceframe_struts(cis[2:end], cis)
else
spaceframe(ptss[3:end])
spaceframe_struts(bis, ptss[4])
end
end
spaceframe(spaceframe_pts(map_division(in_world,
select_surface(), 10, 10)))
This function receives as input a matrix of points, that can also result from the analysis
of an imported surface, as it happens in the Grasshopper example. This matrix is then
analyzed to extract the nodes’ positions, that are combined to create each strut between them.
Even though the textual approach starts requiring an increased amount of code, it still brings
other advantages regarding the construction of spaceframes, namely by allowing the
flexibility of combining and connecting different positions to generate different types of
spaceframes, e.g., simple linear trusses, crossed bars, etc.
Fig. 4.27. Spaceframe generated in
Khepri.
Fig. 4.26. Grasshopper program of a space frame.
Fig. 4.25. Biosphere, Museum of the
Environment by Buckminster
Fuller, Montreal, Canada, 1967.
Fig. 4.24. Joe & Rika Mansueto
Library by Murphy/Jahn, Chicago,
USA, 2011.
51
4.2.9. Paneling
Paneling is a geometrical mechanism that allows a certain geometrical entity to be
iterated along a surface. This geometrical entity can change according to the functions
imposed to it. Built examples of this mechanism are the façade of the BAD café by Nudes
(figure 4.28.), the Soumaya Museum by FR-EE Fernando Romero Enterprise (figure 4.29.),
and South Australian Health and Medical Research Institute by Woods Bagot (figure 4.30.).
To illustrate the programming of the paneling mechanism, we will reproduce the
proposal for a Sustainable Transit Station Inspired by Matchsticks by Erik Giudice
Architecture (figure 2.31.). A similar exercise was solved by Tedeschi in his book, where the
Grasshopper program (figure 4.32.) first (1) evaluates the geometrical unit to be iterated in
order to (2) create a boundary box that is tangent to that geometry. Then, (3) a grid is
generated over the surface – that, in this case, is a VIM imported from Rhino (see section
4.2.4.), and (4) extruded to create unit “boxes” over the same surface. The boundary box of
the geometrical unit is (5) arrayed over each individual volume of the three-dimensional grid
and (6) distorted accordingly along with the geometry unit.
To replicate the image of the Sustainable Transit Station, we imported from Rhino a
surface and the geometrical unit to be iterated along it (figure 4.33.), both generated manually
in the modeling tool.
Once again, even though the program seems simple in its structure, the components
used are more sophisticated and already require a deeper knowledge of the programming
language. Furthermore, its simplicity is only apparent, considering that it is needed a greater
amount of computation to generate this mechanism, which compromises other appealing
features such as immediate feedback.
When translating this solution to an equivalent in Khepri, there are some limitations
to consider regarding the intrinsic characteristics and specifications of the modeling tool in
use. One limitation is that the modeling tool used for this evaluation, AutoCAD, does not
support non-uniform scaling. Thus, it makes it impossible to distort the element so that it fits
the subdivided surface, as it happens with the Grasshopper program. Furthermore, in this
particular case, we consider that the Grasshopper approach becomes limiting when creating
geometry that is not distorted according to the position inside the surface.
Fig. 4.30. South Australian Health
and Medical Research Institute by
Woods Bagot, Adelaide, Australia,
2013.
Fig. 4.32. Grasshopper program of a paneling and morphing mechanism.
Fig. 4.29. Soumaya Museum by FR-
EE Fernando Romero Enterprise,
Mexico City, Mexico, 2011.
Fig. 4.28. The BAD café by Nudes,
Mumbai, India, 2015.
Fig. 4.31. Proposal for a Sustainable
Transit Station by Erik Giudice
Architecture, Jönköping, Sweden,
unknown date.
52
Khepri already provides mechanisms to iterate a geometry along a surface. This
approach is used, for instance, to model surfaces like the façade of the Retail Store for Regal
Shoes by NUDES (figure 4.34.). Therefore, the pragmatic way of tackling this exercise using
a textual approach would require the definition of the unit element using a function such as
unit_hollow_triangles():
unit_hollow_triangles(p0, p1, p2, p3) =
let f = 0.3,
h = 0.2
extrusion(hollow_triangle(p0, p1, p2, f), h)
extrusion(hollow_triangle(p0, p2, p3, f), h)
end
s = select_surface()
iterate_quads(unit_hollow_triangles, map_division(in_world, s, 10, 10))
The unit_hollow_triangles() is, therefore, responsible for the generation of
one geometrical unit similar to the one modeled by hand in the Grasshopper example (figure
4.33.), with the advantage of being completely parametric in its implementation.
Furthermore, we also defined mathematically the surface and used that definition to
create a grid of points that are organized in groups of four (p0, p1, p2, and p3), defining
quadrangles along the surface (quads).
iterate_quads(f, ptss) =
[[f(p0, p1, p2, p3)
for (p0, p1, p2, p3)
in zip(pts0[1:end-1], pts1[1:end-1], pts1[2:end], pts0[2:end])]
for (pts0, pts1)
in zip(ptss[1:end-1], ptss[2:end])]
Thus, it is now legible that the unit element itself must also be defined within 4 points
to be iterated along all the quads created over the surface.
The function interate_quads() receives as arguments the function that defines the
geometric unit (f) and the matrix of points that define the surface (pts). In the particular
case of the façade for Regal Shoes, the unit geometry is a simple box and the surface can be
described by a sine behavior in both directions u and v, as given in the following example
(figure 4.35.):
pts = map_division((u,v)->xyz(u,0.5*(sin(u)+sin(v)),v),
0, 30, 50, 0, 30, 50)
iterate_quads((p0, p1, p2, p3) -> box(p0, distance(p0,p1)), pts)
Nevertheless, it is important to reinforce the idea that it is up to the user to decide
which approach is more advantageous. Thus, it is also possible to choose the alternative
approach of using VIMs to import the unit element, the surface from the modeling tool, or
both, instead of defining them textually. However, as explained, there must be some
compromise regarding the performance of these mechanisms in the textual context.
Fig. 4.34. Façade of the Regal Shoes
Retail Store by NUDES, Assam,
India, unknown date.
Fig. 4.35. Geometry generated by
the textual program created to
resemble the façade of Regal Shoes.
Fig. 4.33. Unit (above) and result of
paneling and morphing over an
imported surface (below).
53
4.2.10. Brick Wall
Brick walls are mainly known for their construction and structural application, even
though they can also contribute as part of the design aesthetics of the architectural space.
Some of the projects that integrated brick walls are the Mesquita Bait Ur Rouf by Marina
Tabassum (figure 4.36.), the Terra Cotta Studio by Tropical Space (figure 4.37.), and Brick
Cave by H&P Architects (figure 4.38.).
The challenge is to create a program that generates a parametric brick wall along a
line or curve. We can use other implemented mechanisms such as VIMs to aid the solving of
this challenge, importing the line or curve as an input to the program.
In Grasshopper, the program used imports a curve as an input to iterate the brick wall.
The result is a group of bricks that intercalate with hollow spaces and move in relation to
each other to accommodate the shape of the curve. The program was developed as an online
tutorial (figure 4.39.) and it has some issues, such as the fact that the bricks do not rotate in
their position according to the influence of the curve, which can originate unfeasible
situations, such as floating bricks (figure 4.40. and figure 4.41.).
To overcome this particularity of the followed tutorial in the textual program, the new
wall created has now the ability to recognize the influence of the curvature of the curve
imported to rotate the bricks accordingly.
Therefore, the program created in Khepri creates a spline s from a group of given
points that then is used as a parameter of the wall_of_bricks() function.
s = spline([xy(190,-50), xy(160,-80), xy(80,-70), xy(10,-50), xy(-20,-80)])
wall_of_bricks(curve, n, m, bl, bc, bh) =
let brick(p) = right_cuboid(add_y(p, bh/2), bl, bh, add_xy(p, bc, bh/2))
ps = division(curve, 2*n)
for j in 0:2:m
map(p -> brick(add_y(p,j*bh)), ps[1:2:end])
map(p -> brick(add_y(p,(j+1)*bh)), ps[2:2:end])
end
end
wall_of_bricks(s, 40, 10, 4, 1, 2)
The function implemented resorts once again to functions such as map() to iterate a
brick for each point calculated over the curve given as input. Furthermore, it calculates two
Fig. 4.40. Brick wall generated by
the Grasshopper program.
Fig. 4.39. Grasshopper program of a simple brick wall (online tutorial), importing a curve as visual
input.
Fig. 4.41. Floating bricks I
Grasshopper appear when the
curvature is too tight.
Fig. 4.38. Brick Cave by H&P
Architects, Đông Anh, Vietnam,
2017.
Fig. 4.36. Mesquita Bait Ur Rouf by
Marina Tabassum, Dhaka,
Bangladesh, 2012.
Fig. 4.37. Terra Cotta Studio by
Tropical Space, Quảng Nam,
Vietnam, 2016.
54
vectors in each point, a tangent and a normal, that then give the orientation of each brick
according to its position, as it is defined that the brick must be parallel to both vectors.
The result is a brick wall composed of bricks that adapt to the curvature of the wall
by rotating (figure 4.42.). This corrects the errors detected in the exercise solved in
Grasshopper, so that even for sharp curves, the bricks rotate and fit so that there are no gaps
between them, generating a buildable brick wall.
Even though it is possible to build a program in Grasshopper that solves this problem,
it would require to work with normal vectors and lists, which is something that potentiates
its complexity regarding the components to use, that, therefore, might not be as intuitive for
less experienced users.
4.2.11. Pixel Mapping
Another interesting geometric behavior on surfaces is the creation of the illusion of
an image by modifying that surface’s elements. These elements can be openings, bricks,
slabs, etc. that are amplified, rotated, or deformed to create the illusion of an image. Built
examples are the Winery Gantenbein by Gramazio & Kohler and Bearth & Deplazes
Architekten – which façade is composed by bricks that rotate to create an image of grapes
(figure 4.43.), the MaoHaus by AntiStatics Architecture – where an image is obtained through
the thickness of the elements that constitute a surface grid and through the curvature of that
surface grid (figure 4.44.), and the Swanston Square apartment building by ARM
Architecture – where the thickness of the horizontal elements of the façade create the image
of a face (figure 4.45.)
The mechanism behind this effect is called pixel mapping, where an image source is
evaluated in order to obtain values from its pixels. These values are, then, used to manipulate
the units or the behavior of the surface.
To exemplify this effect, we will use as reference an exercise developed by Tedeschi
(2014), where an image is created by varying the radius of circles over a surface. This
mechanism is similar to the one used in the interior design of the Raiffeisen Bank by Studio
NAU (figure 4.46.), where, instead of circles, they used a triangular mesh, varying the area
of the openings to represent faces. This exercise is, therefore, an adaptation of Tedeschi’s to
incorporate the triangles instead of circles (figure 4.47. and figure 4.48.).
This program uses a surface as an input, above which it creates a triangular grid to
extract triangles. The size of each triangle is, then, scaled according to the factor that is given
by the max between the value of each pixel and 0.1 (to avoid null results). The value of the
pixel is obtained through the scale of light or darkness of the image (as we are using a black
and white image).
Fig. 4.43. Winery Gantenbein by
Gramazio & Kohler and Bearth &
Deplazes Architekten, Fläsch,
Switzerland, 2006.
Fig. 4.44. The MaoHaus by
AntiStatics Architecture, Beijing,
China, 2017.
Fig. 4.45. Swanston Square
apartment building (Barak
Building) by ARM Architecture,
Melbourne, Australia, 2015.
Fig. 4.42. Brick wall with a sharp
curvature generated by the textual
program.
55
This type of mechanisms can easily scale in complexity, according to the type of
alterations to be made to the elements of a surface. The example given by Tedeschi already
shows a mastery of the language, that is not always accomplished by less experienced users.
The following example (figure 4.49.) shows another application of the pixel mapping
mechanism with a greater scale of complexity. In this case, the bricks of a wall similar to the
one used in the previous section rotate according to the relative values of the pixels of an
input image (figure 4.50.).
Even though the principle is the same, this second program is very different from the
first. This also translates the idea that different users have the freedom to program the same
thing in very different ways, which sometimes is a disadvantage concerning the legibility and
understanding of one another’s programs.
This flexibility is also extended to the textual realm, even though with limitations.
Textual languages such as Julia within Khepri offer alternatives for the implementations of
abstractions but the syntax and structural rules of the language make it readable for others
that did not create the program.
In Khepri, there are two ways of implementing pixel mapping: either (1) using the
pixels of the image to define the number of iterations – corresponding to each pixel a
geometrical element that will be distributed and modified according to the given parameters,
or (2) mapping each geometrical element within the correspondent closer pixel of the image.
Fig. 4.49. Grasshopper program developed from an online tutorial.
Fig. 4.50. Pixel mapping result,
using an image of Le Corbusier’s
Modulor.
Fig. 4.48. Pixel mapping result,
using an image of Le Corbusier.
Fig. 4.46. Interior of Raiffeisen
Bank by Studio NAU, Zurich,
Germany, 2011.
Fig. 4.47. Grasshopper program adapted from Tedeschi’s version of a pixel mapping mechanism.
56
The second is more advantageous that the first approach, since the user may not have full
control over the number of pixels of an imported image.
bricks_of_image(image, p, w_rows, w_cols, l, w, h, s) =
let (i_rows, i_cols) = size(image)
for (row, offset) in zip(1:w_rows, cycle([0, s/2])), col in 1:w_cols
rotated_brick(p+vxz(col*s+offset, (w_rows-row)*h), l, w, h,
rotation_from_color(
image[round(Int, row*(i_rows/w_rows)),
round(Int, col*(i_cols/w_cols))]))
end
end
bricks_of_image(img, u0(), 70, 50, 10, 4, 5, 12)
The bricks_of_image() function receives an image (img), a point (p) where the
wall begins, the number of bricks in both directions (w_rows, w_cols), and the length (l),
width (w), and height (h) of each brick, and the gap between bricks (s) of the wall.
By comparison, we start understanding that both programs in a VPL and a TPL tend
to become more intricate with the complexity of the geometry or of the mechanisms used.
However, while the textual program adds lines of code and maintains the legibility and
structure, the visual program, besides losing some helpful features such as immediate
feedback, also become difficult to understand.
4.2.12. BIM Paradigm
Nowadays, the architectural process of conceiving a built space usually includes the
construction of digital models in Building Information Modeling (BIM) tools, such as Revit
or ArchiCAD. These tools are particularly helpful in later stages of the design process,
allowing architects to easily obtain technical sections, maps of quantities, and budget
calculations. The documents generated by these tools can, then, be used to inform other areas
of expertise, such as structure, HVAC, plumbing and draining, and lighting, among others.
Nevertheless, as the construction of BIM models is usually associated with later stages
of the design process, these models are expected to be final, losing their flexibility and, thus,
the possibility of changing the design. Any alteration on these models is, therefore, expensive
and may prone to errors. The algorithmic approach circumvents this limitation, by creating a
program that can easily be used to also generate the geometry in other tools, including BIM
tools.
There are VPLs already design within the BIM paradigm, such as Dynamo, that works
with Revit. For other commonly used VPLs, such as Grasshopper, BIM is not intrinsic to the
implementation of the language, even though there are plug-ins developed to extend this
feature. Nevertheless, the use of plug-ins in Grasshopper may be more challenging for less
experienced users, as they require specific knowledge about the way their components work,
and the information required to feed those components.
57
The portability that has been achieved in textual programming environments such as
Rosetta and Khepri, allows this connection with BIM tools to be smoother and simpler (Feist
et al., 2016). However, considering that BIM tools require more information than CAD tools,
the user must foresee the necessity of this connection in the program by structuring it to
accommodate that type of specific information, e.g. whether a box is a wall or a slab.
Khepri is being developed to integrate more BIM tools as back-ends and currently
already performs the connection with Revit (figure 4.51.). This implementation was tested
recently in the same investigations that approached visual input mechanisms within a textual
approach (Sammer, Leitão, & Caetano, 2019; Sammer & Leitão, 2019).
Thence, the user simply needs to inform Khepri which is the back-end in use and the
model is generated in the mentioned modeling tool.
4.2.13. Analysis Tools and Plug-ins
Another clear advantage of computational processes applied to the architectural
practice is the ability to assess digital models through analysis tools, in order to better predict
and adapt the performance of projects according to the intended criteria. Nowadays, projects
can be digitally analyzed according to their structure, thermal behavior, lighting, acoustics,
and aerodynamics, among others.
The use of analysis tools is of great utility for architects, since it provides useful
information to aid in the design process. Thence, the architect is able to make more informed
design decisions based on the simulations obtained through digital analysis of the geometry
of a project, enhancing the safety, sustainability, and performance of buildings to be built.
However, the manual use of analysis tools can become challenging, since some of
them require specific information that may differ from the 3D models created in modeling
tools. Therefore, to import directly 3D models into some of these tools can lead to errors and
incoherent information (figure 4.52.) whenever the geometry fed to the tool is not in the
Fig. 4.51. BIM model generated by Khepri in Revit, using a predefined family of circular windows.
Fig. 4.52. Analysis generated
directly and by hand in DIVA for
Rhino, a lighting analysis tool.
58
specific format required. AD aids greatly in this matter, since it allows the flow of
information from the program directly to the tool – and not from a 3D model to the tool.
In commonly used VPLs such as Grasshopper, there was a fast urge to fulfill these
analysis request by, once again, extending the base features with plug-ins. The set of available
analysis plug-ins for Grasshopper is extensive, and some of the most commonly used have
already been addressed in Table 1.
These plug-ins are, therefore, a set of components that indicate both the inputs to
provide and the outputs they generate (figure 4.53.). However, these components are
predefined abstractions to which implementation users do not have access too. Therefore,
they cannot truly understand how it works within the so-called “black box”, nor can they
make modifications or corrections to meet other outcomes within that pre-definition.
Therefore, and even though it is possible to connect VPLs such as Grasshopper to
other analysis tools, this connection is not as intuitive as the overall use of the language,
which can become a barrier for less experienced users.
On the other hand, and as presented in previous sections, Khepri is a textual
programming tool that allows the user to build programs that can be generated in different
digital tools, including analysis ones. This intrinsic portability represents a great advantage,
since it allows the user to integrate within one single script the information needed to feed
multiple modeling and analysis tools. Therefore, and once again, the user simply needs to
inform Khepri about the back-end to connect to, without concerning about filtering,
modifying, or adapting the model to provide the requested information of a specific tool.
This direct connection between a single program and analysis tools overcame some
limitations regarding specific data requirement, circumventing the misinterpretation or loss
of information (figure 4.54.).
4.2.14. Conclusions
With the previous evaluations, we are now able to draw conclusions regarding the
behavior and performance levels of VPLs and TPLs for the different scales of complexity
assessed throughout this section.
Fig. 4.53. Ladybug for Grasshopper to perform radiation analysis, using the “black box”
components predefined within the plug-in.
Fig. 4.54. Analysis generated by
connecting a textual program
directly with an analysis tool.
59
Complexity and performance
The first issue to address regards the performance of the features and mechanisms
provided by programming languages for different levels of complexity of the programs
created. It becomes evident that, for simpler programs, the interactivity and visual
intuitiveness of VPLs like Grasshopper truly facilitates the understanding of what is being
programmed. Features like number sliders associated with mechanisms like immediate
feedback are crucial characteristics of VPLs that bring them closer to more visual users, such
as architects. However, as it was predicted, these main appealing features and mechanisms
become compromised for a greater complexity level and, in some cases, they might even stop
working.
This complexity can be understood in two different dimensions: the visual and the
computational. Usually, they are related, considering that the more visually complex a
program is, the more computation it requires. Nevertheless, we have also shown programs
that are visually simple and computationally demanding, due to the sophisticated abstractions
they apply. In either case, features and mechanisms such as the mentioned above may become
unfeasible for the work dynamic on a visual program, requiring a long time to be computed
and losing their relevance.
A complex program in a TPL can also be associated with a program with sophisticated
abstractions or a program with a considerable amount of instructions and functions to be
computed. However, the main difference is that, regardless the length of the program or the
computational demands of its abstractions, the absence of heavy visual mechanisms hardly
compromises the performance in TPLs, that can even be optimized by the ability to stage
operations for greater computational demands.
This means that the program can integrate interaction phases that allow users to define
which functions should be computed and when, managing the time of the generation of
geometry according to their intentions. This allows postponing more demanding operations
to only after simpler precedent decisions are made within the design process.
Complexity and readability
Another dimension of complexity regards the visual appearance of a program. In
VPLs, a program that is visually complex generally compromises its readability and
understanding. In an attempt to circumvent this problem, languages like Grasshopper already
offer, within its user interface, mechanisms of alignment, grouping, and other tools to
organize the program. Still, for a greater scale of complexity, it is not the arrangement or
documentation of the components of a program that will make it more readable.
Programs with a higher degree of complexity become difficult to read and decipher,
not only by third parties but also by those responsible for their construction. Furthermore,
this issue has direct implications in the maintenance of the program, aggravated by the loss
of visualization mechanisms, such as immediate feedback and traceability.
60
In sum, a visually complex program in Grasshopper is difficult to understand, modify,
and maintain.
Contrastingly, complex textual programs do not mean illegible programs. In fact, the
scalability of textual languages is also associated with this characteristic: it is not a larger
number of lines of code that make the program more complicated to understand. This happens
because of the uniformity of the formal structure of the language, as well as all the available
searching mechanisms and features to organize and comment abstractions within the
program.
Maintenance and cost of change
Algorithmic approaches have already proven that they greatly enhance the efficiency
and flexibility of the workflow of an architectural project, by not only allowing a freer
experimentation of the design space, but also by reducing the cost of change. However,
within algorithmic approaches, this flexibility differs between paradigms.
A complex program created in a VPL not only becomes difficult to understand and
decipher, but it also becomes more challenging and less intuitive to alter, manage, and
maintain. This difficulty is illustrated by the way a program is created: if the drag-and-drop
and connection of boxes representing abstractions can be a puzzling task, the process of
altering and managing that visual information can only be even more confusing.
Although there are mechanisms within visual programming environments that allow
organizing a program, mechanisms that were applied in the development of projects like the
Morpheus Hotel (Heijden, 2018), for a great complexity this task continues to represent a
challenge and can take longer than would be feasible within the design process.
On the other hand, programs created within the textual paradigm do not suffer from
this limitation, since the cohesive structure of a textual code allows to clearly search and
identify which parts of the program generate which geometry. Considering that this structure
is represented by a set of functions that call other functions, increasing its degree of
complexity, any change made in a primary function is automatically propagated to those who
invoke it.
Therefore, the cost of changing a program in a TPL is lower than when programming
in a VPL, since the readiness with which those changes are made in the textual approach is
more intuitive and easily performed.
Abstractions and flexibility
The visual complexity of programs can also be overcome by the use of more
sophisticated abstractions, that are able to synthesize complex operations and instructions.
Grasshopper already provides components that compute demanding operations or manage
large data sets. However, these abstractions are not modifiable within their own
implementation, meaning that it is not possible to make alterations to better answer to other
61
similar requests. To overcome this limitation, the solution usually comprises the combination
of several abstractions, which can increase the visual and computational complexity of the
program.
To keep up with the current demands of its users, Grasshopper relies on individual
developers to provide new plug-ins with new abstractions. However, this process can become
untrustworthy, as we cannot fully assess the quality of the plug-ins created, besides being
difficult to use, since these new abstractions are implemented within a foreign reasoning and
might not be the most intuitive for other users.
Using the textual approach, these limitations are surpassed by the intrinsic flexibility
of the paradigm. Even though it is possible to predefine some abstractions within a
programming tool, such as in Khepri, there is an endless combination of instructions and
operations that, combined with programming mechanisms such as recursion or higher-order
functions, structure a much simpler approach to programming new abstractions. Therefore,
the principle is to create new abstractions based on predefined ones, benefiting from the
freedom of structuring them according to specific requests.
We can then conclude that, even though TPLs require a greater abstraction power
from their users, since they cannot immediately see what is being programmed and changed,
the continuous use will translate in a gradual mastery of the approach, as some of the most
used abstractions and mechanisms become intuitive to use in the long term.
Visual mechanisms and performance
Other conclusion taken from this assessment regards the implementation of visual
features within the textual context and its correspondent performance. For that, this thesis
contributed for researches responsible for the implementation of VIMs within Khepri
(Sammer, Leitão, and Caetano, 2019; Sammer & Leitão, 2019), from which we were also
able to understand the impact of integrating visual mechanism in the textual approach.
VPLs are developed and strongly integrated within specific modeling tools and, in
this case, we used Grasshopper that is developed within Rhino. This allows a deeper
connection between modeling tool and programming language and can be illustrated by the
ability to solely visualize in Rhino a visual representation of the geometry created in
Grasshopper, i.e., without computing the geometry within the modeling tool. This has a big
impact on performance, since the more demanding operations of generating the geometric
data are solely performed when the user bakes the visualization generated by the program.
Visual mechanisms implemented within the textual approach may require a greater
time of computation when compared with VPLs. This happens because, unlike Grasshopper,
the geometry programmed in Khepri is being generated in the modeling tool every time the
program is executed, which represents a time-consuming task. Therefore, even though visual
mechanisms in TPLs offer clear advantages regarding the interactivity with the modeling
62
tool, the relevance of their use and the compromise of performance required should always
be considered by the user, that has the freedom to choose to use them or not.
Portability and plug-ins
Another important point assessed with this study is related to the ability to generate
the same program in different modeling and analysis tools, i.e. portability. VPLs can either
be developed and integrated within CAD or BIM tools, even though they also provide plug-
ins to extend their portability and allowing the program to connect with others.
Grasshopper provides a large set of plug-ins to not only generate the program in BIM
tools such as Revit and ArchiCAD, but also to feed information to analysis tools that assess
the geometry created, such as Ladybug and Kangaroo. However, some of these plug-ins can
be difficult to use for less experienced user, regardless the all the documentation usually
available.
On the other hand, textual programming environments like Khepri were already
created and developed to integrate portability of the programs defined. Even though users
must create a program that predicts the use of tools with more specific data requests, such as
BIM tools, the alterations to the program are minimal, as they solely need to inform Khepri
which back-end to connect with.
63
5. Guidelines
After studying the theoretical features of both types of languages and assessing their practical
application when used to program from simple to complex geometries, we are now able to
draw some guidelines regarding two aspects of their use and implementation: (1) to establish
a methodology that reflects on the use of either VPLs or TPLs according to the intentions of
the architect in applying AD and (2) to propose guidance in the implementation of further
features and mechanisms in TPLs that might bring them closer to their users from early stages
of the design process, competing directly with VPLs.
5.1. Guidelines for choosing which approach to use
There are different types of architects, with different beliefs and work methods, as there are
different types of projects, varying in context, function, program, scale, complexity, and
aesthetics. Each stage of the design process requires different approaches to design. As
previously discussed, the first creative steps usually include a brainstorm that is materialized
through sketches and drawings, the more intuitive, practical, and organic method of
expression used by architects. The question that now arises considers the following stages
after the conception of an idea: how to materialize and formalize a sketched concept?
The current conventional approach used in the majority of the design studios around
the world usually encompasses the manual use of CAD and BIM tools. However, what is the
extent of this manual approach with regard to the complexity of a project? When is it
advantageous to use an AD approach? And, considering that the architect chooses to benefit
from AD, to what extent does one take advantage of a VPL or when is it justified to adopt a
textual approach? The following description reflects on a methodology that associates the
increasing complexity of the project and of its formal outputs to be generated and the work
method that best meets the correspondent needs of its materialization.
The conventional manual approach is worth using when the project solely includes
simple geometry and requires a low level of experimentation and exploration of the design
space. The documentation produced using a conventional manual approach is only effective
when the design is final and when there is no need for flexibility regarding the final outcomes.
Otherwise, the cost of change in this approach is considerably high. When choosing the
manual approach, there are two possible ways of materializing a design intention: either using
CAD tools or BIM tools.
Architects use CAD tools to formalize 2D drawings of a final project (figure 5.1.),
being an easier and more intuitive methodology that better resembles the traditional drawing
board used to draw and sketch, besides also being the more familiar among architects and
other engineers. They are useful for creating rigorous technical drawings with a low level of
repetition, dependency between geometry, and other tiresome tasks. However, this type of
orthographic projections requires a greater capacity for abstraction from those who interpret
64
the drawings, an ability that is not often intrinsic to clients or other entities less familiar with
these methods of representation.
For this reason, CAD tools started by also integrating 3D modeling capabilities, even
though they continue to work exclusively with geometries and volumes. Nevertheless, and
even though 3D models already allow a more familiar visualization of the final product,
creating a 3D model in a CAD tool is still a task with a certain degree of difficulty. Therefore,
within modeling tools, this difficulty was compensated by the development of similarly
intuitive tools that, although more demanding to work with, provide more complete
information about the modeled geometry: BIM tools (figure 5.2.).
In the current architectural practice, there is already a tendency towards the
replacement of CAD tools with BIM tools. This may be associated with the greater variety
of documentation that can be extracted from BIM documents, besides the 3D model itself:
not only 2D technical drawings, but also all technical information regarding materials,
properties, and prices, among others. Furthermore, these tools can also be associated with
powerful render engines that produce virtual images of the projects even closer to what they
would actually look like in reality. In addition, BIM tools, by dealing with objects with
physical and technical properties, still allow the extraction of quantitative information, such
as maps of quantities and budgets, which have proved to be essential for the management of
architectural projects.
In sum, CAD and BIM tools within the manual approach are very intuitive to use and
they have been quickly incorporated both in the architecture curriculum and the design
practice inside architectural studios, as that they became common knowledge between
Fig. 5.1. 2D drawing created using a CAD tool.
Fig. 5.2. 3D model created using a BIM tool.
65
architects and engineers from other specialties. However, they may not be the most adequate
approach when dealing with less common types of shapes, namely organic geometry. This
limitation is intrinsic to the principles of the implementation of some of these tools, e.g., in
BIM tools objects are described with properties and attributes, such as slabs being horizontal
boxes and walls vertical ones. This means that BIM is unlikely to represent a slab that turns
into a wall, for example. Furthermore, as the cost of change is considerably high for the
manual approach, BIM tools, in particular, are efficient to use in final stages of the design
process, i.e., when the concept for the project is already set.
Whenever the project reaches a certain level of geometrical complexity, requires a
higher level of flexibility and experimentation, or even compels to benefit from optimization
and analysis, algorithmic approaches should be considered.
Assuming that AD potentiates both the development and the final materialization of
an architectural project, there are still two different levels of complexity to consider: (1) an
experimentation phase, where it is beneficial to have a dynamic direct interaction between
the modeling tool and the AD program, prevailing a simplified generation and visualization
of the results; and (2) a full integration phase. This full integration approach includes (1) the
complete development of the project, merging the geometrical generation of the model
(visualized in CAD and BIM tools), the assessment through analysis tools, and the possibility
of performing optimization according to the intended objectives, and (2) the production of
powerful documentation, such as renders, animations, and real-time visualization and
navigation, including virtual reality (Leitão, Castelo-Branco, & Santos, 2019).
When the requirements to meet solely include more experimental manipulation of
simplified geometry, in order to benefit from visual interaction mechanisms, such as
immediate feedback, VPLs offer true benefits. Therefore, languages like Grasshopper may
be more advantageous than current TPLs for architecture to easily and intuitively create
simpler algorithms that only need to fulfill an experimental purpose – without the need of
being developed to generate a full definition of a complex project.
This limit of complexity supported by VPLs is here addressed as a reflection about
the conclusions taken from the comparative assessment between VPLs and TPLs. As we were
able to verify, whenever the program requires a more demanding computation, some of the
appealing visual features and mechanisms become compromised, either by becoming slower
to respond or by simply stop working. Furthermore, the legibility of a complex visual
program can be challenging, being a particular disadvantage when working collaboratively,
since the program becomes too hard to understand for those who did not create it. Therefore,
it can be said that it is nearly impossible – or, at least, not feasible timewise – to understand
a program such as the one created for the shell of the Hangzhou Tennis Center (figure 5.3.).
Moreover, a maintenance problem arises. The lack of abstraction mechanisms leads to a
tendency for the overuse of copy and paste mechanisms, introducing redundancy. In turn,
redundancy leads to programs that are hard to change and maintain because, if there is a
66
change to be done to one of the elements, all the ones that were copied to be equal will also
have to be changed. In these cases, the user finds more advantages in building a single
program using a TPL.
VPLs are, therefore, adequate for a lower level of complexity and a more limited time
to invest in an AD approach, since they allow to quickly and intuitively created programs
that simulate in real time the changes being made during the exploration of the design, but
take longer to create extended programs of complex projects.
On the other hand, textual programming is more demanding to master, besides also
being less interactive and less intuitive to use by architects. However, the programs created
have fewer problems in scaling to very large and complex programs, without compromising
neither their legibility nor their performance.
Within the algorithmic approach, the increased complexity associated with the tools
to which the PLs are associated extends this methodology to an orthogonal relation,
considering that CAD tools provide simpler documentation than BIM tools, to which more
complex information can be associated.
In VPLs, there are different languages that fit different paradigms, e.g. Grasshopper
for a CAD tool and Dynamo for a BIM tool, even though it is also possible to extend this
predefined implementation with the use of plug-ins. This methodology adds considerable
complexity to the way the user interacts with a language, besides being less intuitive to use.
On the other hand, the textual approach presented in the context of programming
environments for architecture, such as Khepri, provides intrinsic portability of the programs
created. Therefore, Khepri allows to trivially change the back-end in which the program is to
be generated, and it includes simpler modeling tools such as CADs and more informative
ones such as BIMs.
The following scheme summarizes and systematizes the described orthogonal
methodology, relating the complexity of a project to both the paradigm and the tools chosen
to generate the documentation of that project.
Fig. 5.3. Visual program that generates the envelope of the Hangzhou Tennis Center.
67
There is a third dimension to consider that relates to analysis tools. They can be
associated with either the manual or the algorithmic approach and integrated within CAD or
BIM tools associated with them. Therefore, the representation we are looking for that
integrates all the approaches and relates the complexity of the information and documentation
obtained through them can be represented in a 3D graph as shown in chart 2.
In sum, architects should choose their design approach according to (1) the type of
documentation to produce at the different stages of the design process, (2) the level of detail
intended from that documentation, (3) the application of that documentation – that can be
merely illustrative or used for more technical applications, (4) the time available for the
production of that documentation, (5) the flexibility required from that documentation, (6)
whether it is necessary to generate the same documentation in different modeling tools, (7)
whether it is necessary to assess the geometry generated with analysis tools, or even (8)
whether the project benefits from optimization.
Nevertheless, all the research and conclusions drawn on the theme are strong
arguments for us to consider TPLs the most advantageous approach for architecture in the
long term. Nevertheless, there is still a strong barrier regarding the learning process of TPLs,
that usually take more time and effort to be mastered. Therefore, we will also suggest some
guidelines concerning implementations within Khepri that have the potential to facilitate the
initiation in the textual approach for architects.
Chart 1 – Relation of the complexity of a project to the approach chosen and the tools used.
Chart 2 – Integration of the third dimension of Analysis to the approaches and tools indicated in chart 1.
68
5.2. Guidelines for future implementations in TPLs
Given the long-term advantages of TPLs in the development of complex projects, as
well as in all variants of analysis, optimization, and visualization of the obtained results, the
textual approach to AD offers a solution to the barriers encountered when using VPLs for
programs with greater complexity. However, the demanding learning process and the lack of
mechanisms of visualization and interaction with the modeling tools, make TPLs still
unappealing for architects.
For this reason, this research also aims to propose guidelines for future
implementations in the development of textual programming environments for architecture,
such as Khepri. These guidelines are based on the study of the current use and utility of visual
features and mechanisms in VPLs that can also be implemented in a textual context.
Recent research derived from this thesis (Sammer, Leitão, & Caetano, 2019; Sammer
& Leitão, 2019) has proved that there is no impediment to implement visual features within
the textual programming context. However, this merge between both visual and textual
paradigms may raise other questions regarding the relevance of a hybrid approach.
Considering the framework previously presented, that gives the architect the freedom
to choose the methodology that best suits the needs of a certain stage of the project – always
considering the textual programming will better suit projects with great complexity and with
the need to integrate optimization and analysis, the use of the implemented visual features
within a TPL should also be up to the architect’s will. This choice should consider the
adjustments to be made when some visual features are used, e.g., the performance of the
program can become compromised when using dependency on shapes that were imported,
providing a similar behavior to Grasshopper’s immediate feedback that becomes very time-
consuming.
Therefore, considering that the possibility of using visual mechanisms should be
integrated at least to facilitate early stages of the learning process of TPLs, we now present
some guidelines regarding not only further possible visual implementations but also the
integration of other programming mechanisms within the textual approach. These guidelines
are drawn to be integrated within textual programming environments, in this particular case,
in Khepri.
Error detection and Debugging
Whenever an error occurs in Grasshopper, the responsible component is highlighted
in red and a message is generated informing what are the reasons for that error. This
mechanism is crucial to the understanding of the program and aids in the comprehension and
solution of the errors found, even though those messages might not always be clear to
interpret (figure 5.4.)
69
In Khepri, error messages are also generated whenever something is not working
accordingly. However, they are also hard to understand, being difficult to identify where the
error actually occurred and why. This can be a serious limitation, considering that, by typing,
one is more likely to make mistakes than by drag-and-dropping static abstractions, as happens
with VPLs. Thus, users of textual languages are more likely to receive these error messages,
which reinforces the strong limitation represented by their incomprehensibility.
To surpass this limitation, we suggest the implementation of clearer error messages
that better point out in what function the error occurred and what needs to be altered to correct
that error. This mechanism can be complemented by more visual implementations of error
tracking such as control flow visualization mechanisms.
Control flow
Rosetta already implemented a control flow visualization mechanism that enables the
visualization of the sequence of operations followed by the computer to perform the given
instructions in the program. As mentioned, this mechanism can be very useful when
combined with error detection mechanisms, as it would allow the user to not only be informed
about what are the lines of code with error, but also the implications they had in the rest of
the program, showing the sequence of instructions followed by the computer through where
the error was propagated.
Therefore, the implementation of a similar mechanism should also be considered in
the development of Khepri, as it represents an alternative feature that really aids the user in
understanding what is being programmed and executed.
Documentation mechanisms
Components in Grasshopper are built to inform the user about the inputs they receive
and outputs they generate, as each component is described in the correspondent
documentation within the language (figure 5.5.). This is a helpful feature for less experienced
users, since it allows them to intuitively learn about each component and progress alone in
the mastery of the language.
This feature is already being developed within Khepri, as all the predefined
abstractions are also documented and described within their own implementations.
Furthermore, the user can also benefit from a typing mechanism where, by typing the function
Fig. 5.4. Component highlighted in red with error message in Grasshopper.
70
intended, Khepri opens a slider window will all the alternative functions available that are
related to the text being written (figure 5.6.). This also happens when the function is chosen
and Khepri inserts automatically the parameters they receive, so that the user can simply fill
the gaps with the values of those parameters (figure 5.7.).
However, since this programming environment is in its early stages of development,
the documentation provided is incomplete and still not easily consulted. Therefore, this work
should continue to be done to new abstractions and implementations within an independent
user interface that allows architects to freely search for the information needed to understand
and use the predefined functions and mechanisms in Khepri.
Traceability
Another mechanism that should improve greatly program comprehension is the ability
to see which geometry is being created by which part of the program, and the other way
around. Therefore, we propose further research on projects like Luna Moth (Alfaiate et al.,
2017) to understand how its traceability mechanism can be applied to a conventional textual
programming environment that can be connected with different modeling tools. This
implementation would circumvent the lack of immediate consultation of what is being
programmed.
Nevertheless, the use of this implementation should be optional, since we already
concluded that visual features and mechanisms within the textual approach may compromise
the performance of a program.
Predefined abstractions
As Khepri is a work-in-progress, it is crucial to continue this investigation in order to
identify which abstractions should be predefined within the body of the tool, so that they may
be used without the need to know their implementation. During the development of this
thesis, we already implemented general functions such as series(), crossref(), and
cull(), but it is convenient that this work continues in order to create a wider library of
abstractions that make easier the programming process for architects.
Fig. 5.6. Searching mechanisms
showing the available functions in
Khepri.
Fig. 5.7. Typing mechanisms automatically showing the parameters of a function in Khepri.
Fig. 5.5. Different types of documentation in Grasshopper: locally, with the mouse
over an input/output (left); or internally, by selecting the option Help (right).
71
6. Conclusion
The perspectives about what architecture really means, what it does, and what it should do
vary from region to region of the world, from culture to culture within a region, from person
to person from a certain culture. However, there is a common reality to all architects that
relates to the representation methods used to illustrate, explain, and sell their intentions for a
project.
The evolution of the tools and methods used by architects to express their concepts
and ideas has always followed the progression of humanity’s needs in different fields. More
recently, the discipline has acknowledged the benefits of computer science and programming
to accomplish new esthetics, associated with better performances and a more sustainable
impact. Furthermore, the automation of certain tasks previously executed manually allowed
a more accurate and efficient work process, besides reducing the propensity for errors. This
also came to extend the conventional orthographic projections with 3D models, offering a
more appealing and elucidating representation method. Programming, in particular,
introduced Algorithmic Design (AD), which allows the creation of programs as an alternative
approach to the manual manipulation of geometry in modeling tools.
6.1. Reflections
Algorithmic Design as a Representation Method for Architecture
Programs created within the AD approach represent an algorithmic description of
geometry that, then, is generated in computational tools for architecture. This approach
enables architects to create parametric models of projects through the establishment of rules
and constraints, which, in turn, allow the exploration of design variations more effortlessly
and efficiently.
This represents one of the greatest advantages of adopting an algorithmic approach:
the architect is able to easily explore the design space within the rules and constraints defined
by him. That is the main reason why it is crucial to be the architect in charge of the creation
of the algorithm, i.e., to be in control of the behavior of the geometry and decide within which
criteria and range of values the model is parametric.
This exploration of geometrical variations within a parametric model also influences
the cost of change of digital projects. AD reduces this cost drastically, by automating the
generation and regeneration of geometry, as the architect simply needs to change parts of the
program, and not the geometry itself. This fact comes to surpass the limitations of the manual
approach, where any manual alteration in complex sets of geometry is a time-consuming,
error-prone, and, therefore, expensive task. Thence, any alteration in an AD program is, then,
propagated according to the rules within the algorithm, which means that geometry with
dependency upon other geometries is also automatically changed correspondingly. The
72
results of those modifications are also automatically regenerated in the chosen tool, where it
is computed a new version of the design.
Moreover, the algorithmic approach also allows further control and minimization of
errors in the project generated. Thus, AD not only allows the propagation of alterations
through the set of rules and constraints defined within the algorithm, but also informs the
user about possible errors in the definition of the geometry. Additionally, some PLs also
provide mechanisms that facilitate the tracking of changes in the geometry and the detection
of errors created while creating or modifying a program. The organization of an AD program
also aids in the structuring of a project, in the isolation of parts of that project, and in the
consequent management and manipulation of the geometry, partially or in whole.
Besides the effortless exploration of the design space, the low cost of change, and the
minimization of errors in digital models, there are various other advantages in adopting AD
as a representation method to support architectural projects.
The translation of geometry into algorithms allows portability, which means that a
single program can generate models in multiple modeling and analysis tools. The great
advantage of the AD approach when compared with the manual use of these tools is that it
dismisses the construction of different digital models for different tools. This also has an
impact on the use of analysis tools, that generally require simplified geometries of the original
model, which duplicates the architect's work. Moreover, the adaptation to the simplification
requirements of these tools may drive to a misrepresentation of the original geometry, which,
in itself, leads to results that are not completely accurate.
The direct provision of algorithmic information to analysis tools circumvents these
problems, since the information is filtered directly from the program to meet their
requirements. In addition to the reduced amount of work by dismissing the duplication of
models, this approach greatly reduces the loss of information, which translates into more
reliable results.
Programming for architecture can even provide powerful mechanisms that facilitate
the manipulation and management of geometric data. Metaprogramming is one of those
mechanisms that allow generating programs within an AD program by inverting the flow of
information: instead of creating a fragment of program that generates geometry within a
modeling tool, the architect is able to incorporate an existent geometry from the modeling
tool within a fragment of program obtained through metaprogramming. For an architect, this
possibility of integrating this type of sophisticated programming mechanisms can be very
useful to the understanding of the programs created, to the management information, and to
the integration and manipulation of existent geometry.
Furthermore, and even though the learning curve of TPLs is more demanding, the
mastery of the textual approach allows the simplification of frequently used abstractions with
the mechanization of the available operations. Mechanization results in predefined
73
abstractions that regard more complex geometries or geometric mechanisms. One practical
example is the generation of spaceframes, that can be translated as a mechanic process of
creating struts and nodes connect in a 3D mesh along a surface. Therefore, the
implementation of spaceframes can be mechanized within Khepri, by internalizing their
definition within the body of mechanisms of the tool. The result is a function that architects
do not have to define or to know how it is implemented, that they solely call in the program
and give the parameters of their choice. Through this process, this type of mechanized
operations conquers meaning to the user, which allows a more fluid and simplified workflow.
Furthermore, some PLs for architecture further enable optimization mechanisms
associated with the results obtained through different analysis. This is a strong advantage in
the light of nowadays demands, where buildings must fulfill a set of requirements regarding
performance and sustainability. Therefore, the parametrization of the models allows
obtaining multiple design alternatives – varying in the parameters and range of values chosen
by the architect, associated with performance values regarding different criteria. The
automation of this process relieves architects from adjusting the program for each iteration,
as they solely need to look at the final data to choose the design variation that best suits their
intentions. The following table resumes all the advantages offered by the AD approach, in
contrast with a manual approach, that justifies and encourages the mastery of algorithmic
methods and thinking among architects.
ADVANTAGES OF THE AD APPROACH
Easy exploration of the design space
Efficient and effortless manipulation of geometry
Automation of repetitive, time-consuming, and error-prone tasks
Mechanization of the available operations
Low cost of change
Reduction and control of errors
Portability and integration with multiple modeling and analysis tools
Flexibility in managing complex geometric data
Efficient creation, experimentation, and production of documentation from digital models
Effective and efficient collaborative work
Implementation of visual mechanisms through metaprogramming
Generation of optimal solutions using optimization algorithms
In sum, AD incorporates all the advantages of the digitalization of the drawing board
and extends them to a new realm of optimization, accuracy, and efficiency. Besides allowing
the production of powerful representations of design, such as 3D models, renders,
animations, and videos, the architect is free to explore this advantages within a parametric
approach, that allows to effortlessly explore the design space of the project, to assess more
accurately the generated models, and to obtain more reliable information to aid in the design
decisions, also extending this information with mechanisms such as optimization.
Table 3 – Advantages of the AD approach.
74
Algorithmic Design as an Architectural Reasoning
Nevertheless, AD has the potential to be more than just a support to the digital
representation of a project, as it can further influence other aspects of the design process,
namely the architectural reasoning, with the introduction of algorithmic thinking. Therefore,
by acknowledging the potentialities associated with the algorithmic generation and
assessment of geometry in modeling and analysis tools, architects are able to challenge their
design intentions to accomplish new and bolder aesthetics.
The basis to this conclusion comes from the premise that, with so many tools available
to generate, assess, and optimize projects developed through AD, there are little limitations
to what is feasible to reproduce digitally or not. The fact that the data obtained through
analysis and optimization are increasingly more accurate and trustworthy, architects are able
to rely on that information to defy the limits of what was buildable before the appearing of
algorithmic approaches. AD not only allows a digital generation and visualization of
geometry, aiding in the production of appealing and realistic virtual documentation, but also
provides a stronger bridge to later stages of the design process, namely construction.
Moreover, algorithmic thinking further potentiates other domains of the architectural
process of conceiving ideas. One of those domains relates to the process of algorithmizing
ideas and the results obtained through that process. The ability to explore a wider design
space within a range of values given by the architect is related to the generalization of an idea
during the creation of an algorithm. This generalization is accomplished through the
assignment of parametric variables, i.e., dimensions, values, and measures that can vary
within a set of rules and constraints that constitute a generic algorithm. If an algorithm is
created to only compute one static geometry, the design space is limited, and the alternative
designs do not vary much. However, if an idea is translated in a generic algorithm that is able
to generate that same specific idea and many similar others, the possibilities are endless,
which introduces a curious factor to the design process: surprise. When a specific idea is
generated by a generic algorithm, the architect can choose to be surprised by other outcomes
of the computation. The introduction of randomness is one of the mechanisms that compute
this surprise factor, giving random values within a range chosen by the architect. Therefore,
the algorithms can be created with different degrees of randomness applied to different parts
of the geometry to be created, and the architect can explore the surprise outcomes of each
iteration. The advantage of such mechanisms is in the possibility of generating random results
that might be more appealing, functional, or performant than the first specific idea that was
base to the building of a more generic algorithm. Therefore, the surprise factor of
computation multiplies the inventiveness of the architect, that is able to generate new shapes
within the frame and rules of an initial idea.
We strongly believe that architects of the present day should learn how to program,
due to all the benefits of being in charge of the algorithmic process and thinking and to take
full advantage of the design parametrization and exploration. Therefore, architects should
75
extend their curriculum to incorporate programming skills, by learning both how to think
algorithmically and how to work with Programming Languages (PLs) for architecture. And
through this affirmation, we now extend these conclusions to reflect the programming
paradigm architects should use. After all, what is the best approach? Visual or Textual?
AD with Visual or with Textual Programming Languages?
The main conclusion regarding this subject is that the answer to these questions is
relative and dependent upon different factors, such as the type of documentation to be
produced, the type of exploration process adopted by the architect, the availability of the
architect in working with AD, and the long-term utility of the AD models, among others.
In theory, Visual Programming Languages (VPLs) and Textual Programming
Languages (TPLs) have the same computational power, which means that they are both
capable of resolving all solvable computational problems. However, with the development
of this investigation, we were able to conclude that this theoretical data has a different
expression in practice. Other criteria such as performance, expressive power, user-interface
features, and limit of complexity make the languages heterogeneous in the relative
advantages and disadvantages they offer, which are summarized in the tables that follow.
VPLs like Grasshopper do offer clear advantages regarding the learning process and
the appeal to the use of algorithmic approaches. In the visual paradigm, programming
ADVANTAGES OF VPLs ADVANTAGES OF TPLs
Immediate Feedback Readability of complex programs
Traceability Supports recursion mechanisms
User-interaction mechanisms Sequential interaction phases
Visual input mechanisms Visual input mechanisms
Predefined intuitive abstractions Portability of the programs created
Less background knowledge More flexible abstractions
Visually intuitive and appealing for architects Higher-Order Functions
Easy experimentation of the design space Scales easily for complex programs
Features customization Integration of final stages of the design process
Optimization plug-ins Optimization libraries
Graphs, images, and gradients inside the program Greater flexibility
More broadly used by architects Programs easier to manage and maintain
DISADVANTAGES OF VPLs DISADVANTAGES OF TPLs
Does not scale for complex programs Takes more time to learn and master
Does not support recursion Less intuitive and appealing for architects
Unreadability of complex programs Requires knowledge on programming
Lack of sophisticated abstraction mechanisms No sophisticated visual features and mechanisms
Predefined and inflexible abstractions Fewer customization features and mechanisms
Maintenance problems for complex programs Least used by architects
Loss of interactivity in complex programs No interactivity
Table 4 – Advantages of creating programs with a VPL and a TPL.
Table 5 – Disadvantages of creating programs with a VPL and a TPL.
76
abstractions, such as functions and geometry, are represented as boxes (the so-called
components), and the flow of data between those boxes as connecting wires. This flow-chart
form is more familiar to architects, who are thus relieved of having to know what is behind
the implementation of each component, focusing solely on the dynamics of connecting the
available abstractions to create a visual algorithm. However, these predefined abstractions
also represent a limitation for architects, who are restricted to the set of available operations,
not having the freedom and the means to make small changes within these components to
achieve more personalized and adapted results. The solution is usually to combine a larger
number of available components that could actually be simply implemented as a single one.
This freedom of implementing new abstractions becomes exclusive to plug-in developers, an
area that already starts to segregate from the architectural domain. Another alternative would
be to use specific components that allow the insertion of textual programs, which proves that
some issues in scaling or adapting programs solely have a solution in the textual paradigm.
Thus, we already understood that this flexibility is inherent in textual programming,
as architects building a program are able to freely combine all the possible predefined
operations and define new ones within the same structure and reasoning. These predefined
operations are implemented within the body of Khepri and also dismiss the architect of
knowing how they are implemented. The main difference from VPLs is that, if architects
need to make alterations within a pre-implemented function, they have the means to do so.
Another clear advantage of VPLs is the available visual features and mechanisms,
such as immediate feedback, traceability, and visual input mechanisms, that allow a closer
interaction both with the program and with the modeling tool in use, which facilitates the
understanding of the program. Nevertheless, we strongly believe that those advantages fall
short when contextualized within the real potentialities of AD for architecture. VPLs working
with complex problems show limitations, such as the loss of the appealing features and
mechanisms mentioned above. Moreover, this scalability problem is extended to program
comprehension, since complex visual programs become hard to understand, modify, and
maintain.
TPLs within programming tools such as Khepri, on the other hand, come to surpass
the scalability problems by supporting sophisticated abstractions and programming
mechanisms like recursion, that simplify complex problems in simpler sub-problems.
Therefore, the programs created keep the same structure regardless of the amount of code or
the computational demands of the functions created, also allowing the user to organize,
search, and modify the program easily.
Another limitation regarding VPLs that conditions their application in architecture
relates to the tools they work with, since they are integrated and implemented within a
specific modeling tool, such as Grasshopper for Rhino. The lack of intuitiveness of using
plug-ins to extend this limitation, that sometimes might not work accordingly to the user’s
wishes, leads us to conclude that it is more beneficial to engage in more generic approaches,
77
i.e., that enables us to work with various tools. This portability is an intrinsic feature of TPLs
implemented in programming environments such as Khepri, which allows a single program
to generate the same model in different modeling and analysis tools. The interaction with the
program to obtain this portability is simple, since the user solely has to inform Khepri which
is the back-end to use. Even though this portability demands that the program incorporates
as much information as required by the most complex tool to use, it provides strong
advantages when managing and developing projects in the long term, mainly projects with a
great level of complexity that need to be fully developed digitally.
The efficiency of program building is another aspect that differentiates both
paradigms. This aspect is related to productivity, since it measures the time and effort spent
while creating a program. VPLs for architecture provide an intuitive mechanism to build a
program, since the user solely needs to search for the components, drag and drop them in the
programming window, and connect them to create the algorithm. Although it is an intuitive
way of working and similar to the way we materialize our reasoning, it is a relatively time-
consuming process, especially if the user takes special care in dropping the components in
an organized way. The use of the mouse simultaneously with the keyboard, together with the
freedom to place components unconstrainedly in the programming window, makes building
a visual program a more time-consuming and sometimes confusing task.
In contrast, writing a text is the primary process of using a computer. Any architect
accustomed to writing on computers is able to construct a textual program almost
uninterruptedly. The only disadvantage of this process is the greater propensity to errors, that
are more likely to occur by typing than by dragging static objects. However, we believe that
the attention needed to detect in advance any typing errors takes no more time than the
required during the process of building a visual program. From experience, we can say that
an expert building a program in a VPL takes more time than an expert writing an equivalent
program in a TPL. The relevance of this factor, as mentioned previously, is the productivity
of building an algorithm, as the use of TPLs is more productive than the use of VPLs,
consuming less time and demanding less effort.
In a world increasingly dominated by software, we need to think about what is the
percentage of programs built around the world that are created using TPLs. The answer is the
overwhelming majority, which makes us reflect on why this is not the trend observed in
architecture, where the majority of architects that practice AD is still using VPLs.
Presently, the bigger limitation to the use of TPLs is in the demanding learning process
and in the lack of appealing features and mechanisms that aid architects to understand and
master the program they are creating. However, as a product of this investigation, we were
also able to conclude that there is no impediment to the future implementation of visual
features and mechanisms within the textual approach that promise to bring TPLs closer to
architects. By using this strategy, TPLs might start to become more accessible for less
experienced users and more easily integrated into the workflow of architects worldwide.
78
The Barriers to Surpass
As already stated, TPLs are less appealing and intuitive to use. Programs textually
structured are more abstract and difficult to understand in the beginning. However, this
limitation can easily be overcome, not only by adapting the implementation of TPLs for
architects, but also by insisting on their integration within the architectural curriculum. After
all, when technical drawings were first developed and adopted as representation methods of
architectural projects, they were also considered abstract and difficult to interpret by those
less familiar with the technique. Actually, one can affirm that for some people that do not
deal with technical drawings on a daily basis, plans, elevations, and section are still difficult
to construe.
Furthermore, and besides practical limitations regarding the implementation of TPLs
for architecture, that, in their current format of application, are considered less appealing and
intuitive to use, there are other psychological obstacles in what concerns the tendency to use
VPLs over TPLs.
Architects that are familiar with the visual paradigm within the AD approach tend to
accommodate to what it provides, which sometimes means that they also accommodate to
the limitations of the languages they are used to work with. This is corroborated by Paul
Graham (2003): programmers tend to get attached to their favorite languages, i.e., the
languages that are more familiar and comfortable to them. One possible explanation behind
this is the fact that languages become more than just technology, they become a habit of mind
(Graham, 2003). In the case of VPLs, a habit that does not scale or allow evolution within
the paradigm.
We conclude that this phenomenon also applies to architects using AD: when they
start using and mastering the visual approach, which guarantees them the results they want
in a more instinctive way, it is not worth thinking or investing in any other approach.
Therefore the transition to TPLs is not natural, since users of VPLs prefer to
circumvent the limitations within the visual approach than evolve to more powerful methods
to develop algorithmic programs. Solely the users that understand the most powerful
languages are able to see the differences between them (Graham, 2003), and VPLs are far
from being the most powerful approach to AD.
Once again, this limitation can only be surpassed in the core of the integration of AD
for architecture: architects should first learn to master algorithmic thinking in order to be
comfortable in creating textual AD programs of their designs. It is only through the insistence
that textual approaches will be able to become generalized in the world of architecture.
Although it is expected to be a lagging process, mainly due to the overwhelming impact of
VPLs in the current practice of architecture, the potential of textual languages will begin to
bring competitive advantages to the architects who adopt them. Thus, the trend may reverse
79
when, to keep up with this advantage, other architects and architectural studios also start
investing in TPLs to compete directly with those who already use them to create architecture.
The last consideration in favor of TPLs, that is a potentiality to explore in order to
surpass the initial limitations of the textual paradigm, regards the intellectual flexibility in
using both paradigms. The fact that TPLs are more demanding to learn and use is related to
the knowledge of programming required that, in VPLs, is not necessarily mandatory.
Therefore, an architect who learns the fundamentals of programming when working with a
TPL, quickly and easily transitions and learns to work with a VPL. The opposite, however,
is no longer the case, since the lack of in-depth knowledge of the principles of programming
makes it difficult for an exclusive VPL user to write a program using a TPL.
6.2. Future Work
The assessment of this research is based on a comparative methodology, whose evaluation is
guided by the theoretical and practical analysis of two programming languages, a VPL,
Grasshopper, and a TPL within a textual programming tool for architecture, Khepri. Some of
the guidelines comprised within the development of this thesis already bring about further
investigation.
In an immediate way, we suggest the continuation of the comparison of other visual
components of Grasshopper and the equivalent textual abstractions in Khepri, predefined or
not. This allows to both (1) understand in greater depth the advantages and limitations within
both paradigms and (2) extend the set of predefined abstractions within Khepri, in order to
provide a broader range of operations that aid in the programming process for architects.
Furthermore, the deeper understanding of how current PLs for architecture are used
and what are the main benefits and barriers to their relative application will give us further
and more concise information to establish stronger bases for the implementation and
development of TPLs for architecture. The main objective is to create a textual programming
tool for architecture that, regardless of the demanding learning curve, is able to offset the
initial investment to master the textual approach with advantages for building architectural
projects with varying degrees of complexity. Thence, these implementations should also be
extended to programming mechanisms provided to bring TPLs closer to architects and to be
able to compete directly with the best known and used VPLs from early stages of the design
process. This thesis has already shown two contributions of that methodology with the
implementation of visual input mechanisms, that are inherent to VPLs like Grasshopper,
within Khepri (Sammer, Leitão, & Caetano, 2019; Sammer & Leitão, 2019).
The second line of investigation comes to complement the initial approach to
portability in both paradigms. Therefore, we propose to extend the comparison of VPLs and
TPLs in their current application for BIM and analysis tools. The investigation of the
implementation of Grasshopper’s plug-ins will give more insight regarding their true utility
for architects and the adequacy of the workflow they propose. Thus, we will be able to assess
80
the relevance of implementing similar mechanisms in a textual approach, which will
represent a starting point for further extend this portability in Khepri.
Another possible aspect to pursue as future work, which complements the previous
proposal to explore other modeling tools, will be to address visual languages that are
integrated directly within other modeling paradigms, namely Dynamo that is implemented
within Revit, a BIM tool. Even though Dynamo is not supported by a community of users as
large as Grasshopper’s, this direct integration within Revit may bring new solutions for better
implementations of BIM tools in a textual approach. Furthermore, this investigation can add
a parallel comparison between (1) a VPL for a CAD tool that is extended with plug-ins to
connect to BIM tools and (2) a VPL that is already integrated within a BIM tool. An example
of this would be to assess Geometry Gym for Grasshopper and Dynamo, in order to provide
information regarding the relative advantages of both types of implementations. The
conclusions taken from this comparison would also be valuable information to further extend
Khepri to the BIM realm.
Finally, the last proposal for future investigation regards the integration of the
algorithmic methodology within the conceptual phase of the development of an architectural
project, working as another tool for conceiving and developing ideas. Currently, AD solely
represents an alternative approach to the manual usage of modeling and analysis tools, being
a support for the generation and visualization of geometry. However, we believe that it can
bring further advantages for the architect if the ideas started to be conceived within an
algorithmic thinking, simultaneously with the creation of the algorithm that later generates
those ideas. A possible evaluation of this proposed methodology would be a comparative
study of the development of proposals for the same project using both approaches: one team
of architects using the conventional approach, creating and manipulating manually the
various computational tools available for architecture, such as CAD, BIM, and analysis tools;
and another team working with an algorithmic approach from the beginning of the conceptual
phase, with the integration of all the available tools in a single program. This study may
provide useful clarification regarding (1) the compared efficiency of both work methods, (2)
the physical effort and time needed in the development of the proposals, (3) the efficiency of
the collaboration process within the team, (4) the time needed to generate digital models and
other supports to the communication of the project, (5) the variety of documentation produced
within the same time-frame, (6) the quality and accuracy of the results obtained, (7) the
performance of the final idea, and (8) the interest and relevance of the result obtained
according to the objectives to fulfill with the project proposal, among others.
83
References
Abelson, H., Sussman, G. J., & Sussman, J. (1996). The Structure and Interpretation of Computer Programs. Cambridge: MIT Press.
Adriaenssens, S. (Ed.), Block, P. (Ed.), Veenendaal, D. (Ed.), & Williams, C. (Ed.) (2014). Shell Structures for Architecture. London:
Routledge.
Agirbas, A. (2017). Teaching by Coding in Architecture Undergraduate Education: A Case Study with Islamic Patterns. Proceedings
of the 17th International CAAD Futures Conference, Istanbul, Turkey, pp. 249-258.
Aguiar, R., Cardoso, C., & Leitão, A. (2017). Algorithmic Design and Analysis Fusing Disciplines. ACADIA 2017: Disciplines &
Disruption, Processing of the 37th Annual Conference of the Association for Computer Aided Design in Architecture
(ACADIA), Cambridge, Massachusetts, USA, pp. 28-37.
Aish, R. (2005). From Intuition to Precision. Digital Design: The Quest for New Paradigms, Proceedings of the 23 rd International
Conference on Education and research in Computer Aided Architectural Design in Europe (eCAADe), Lisbon, Portugal, pp.
10-14.
Alfaiate, P. & Leitão, A. (2017). Luna Moth: A Web-based Programming Environment for Generative Design. Sharing Computational
Knowledge! Proceedings of the 35th International Conference on Education and research in Computer Aided Architectural
Design in Europe (eCAADe), 2, Rome: Sapienza University of Rome, pp. 511-518.
Algorithmic Design for Architecture (2018). [Online]. Retrieved from: https://algorithmicdesign.github.io/index.html [Accessed:
Accessed: Jun. 22, 2018].
ARUP (2018). 30 St Mary Axe. [Online]. Retrieved from: https://www.arup.com/projects/30-st-mary-axe?query=gherkin [Accessed:
Oct. 9, 2018]
Austin, M. & Qattan, W. (2016). ‘I’m a Visual Thinker.’ Rethinking algorithmic education for architectural design. Living Systems
and Micro-Utopias: Towards Continuous Designing, Proceedings of the 21st International Conference of the Association for
Computer-Aided Architectural Design Research in Asia (CAADRIA), Melbourne, Australia, pp. 829–838.
Autodesk (2018). The Dynamo Primer. [Online]. Retrieved from: http://dynamoprimer.com/en/ [Accessed: Mai. 14, 2018].
Backus, J. (1981). The History of Fortran I, II and III. Richard L. Wexelblat (Ed.) (1981). History of Programming Languages.
Proceedings of a 1978 ACM SIGPLAN conference, New York: Academic Press.
Bennis, W. (2003). Frank Gehry: Artist, leader, and “Neotenic.” Journal of Management Inquiry, 12(1), pp. 81- 87.
Boehm, B. (2006). A view of 20th and 21st century software engineering. Proceedings of the 28th International Conference on Software
Engineering (ICSE ’06), Shanghai, China, pp. 12 – 29.
Boeykens, S., & Neuckermans, H. (2009). Visual Programming in Architecture: Should Architects Be Trained as Programmers?
Joining Languages, Cultures, and Visions, Proceedings of the 13th International CAAD Futures Conference, Montréal: Les
Presses de l’Université de Montréal, pp. 41-42.
Boshernitsan, M. & Downes, M. (2004). Visual Programming Languages: A Survey. Technical report no. UCB/CSD-04-1368,
Berkeley: University of California.
Brown, T.B., & Kimura, T. D. (1994). Completeness of a Visual Computation Model. Software – Concepts and Tools, no. 15, pp.
34–48.
Bucci, F. & Mulazzani, M. (2000). Luigi Moretti: Works and Writings. New York: Princeton Architectural Press.
Burnett, M. M. & Baker, M. J. (1994). A Classification System for Visual Programming Languages. Journal of Visual Languages and
Computing, 5(3), pp. 287-300.
Burnett, M. M., Baker, M. J., Bohus, C., Carlson, P., Yang, S., & Van Zee, P. (1995). Scaling up Visual Programming Languages.
Computer, 28(3), pp. 45-54.
84
Burry, M. (2011). Scripting Cultures – Architectural Design and Programming. London: John Wiley & Sons Ltd.
Castellano, D. (2011). Humanizing Parametricism. Parametricism (SPC), ACADIA Regional 2011 Conference Proceedings, Lincoln,
Nebraska, USA, pp. 275-279.
Castelo Branco, R. & Leitão, A. (2017). Translating Algorithmic Design from CAD to BIM. KINE[SIS]TEM '17 - From Nature to
Architectural Matter International Conference, Lisbon, Portugal.
Castelo Branco, R. (2017). Integrated Algorithmic Design. Master’s Thesis, Lisbon: Instituto Superior Técnico.
Davidson, S. (2018). Grasshopper: Algorithmic Modeling for Rhino. [Online]. Retrieved from: http://www.grasshopper3d.com/
[Accessed: Mai. 14, 2018].
Davis, D. (2013). Modelled on Software Engineering: Flexible Parametric Models in the Practice of Architecture. Ph.D. Thesis,
Melbourne: RMIT University.
Eid, C. & Millham, R. (2012). Which introductory programming approach is most suitable for students: Procedural or visual
programming? American Journal of Business Education 5, (2012), pp. 173–178.
Engelbart, D. C. (1962). Augmenting Human Intellect: A Conceptual Framework. SRI Project No. 3578, California: Stanford Research
Institute.
Feist, S., Barreto, G., Ferreira, B., & Leitão, A. (2016). Portable Generative Design for Building Information Modelling. Living
Systems and Micro-Utopias: Towards Continuous Designing, Proceedings of the 21st International Conference of the
Association for Computer-Aided Architectural Design Research in Asia (CAADRIA), Melbourne, Australia, pp. 147–156.
Ferreira, B., & Leitão, A. (2015). Generative Design for Building Information Modeling. Real Time, Proceedings of the 33rd
International Conference on Education and research in Computer Aided Architectural Design in Europe (eCAADe), 1,
Vienna: Vienna University of Technology, pp. 635–644.
Foster, N. (2003) Architecture and Sustainability. Retrieved from: https://www.fosterandpartners.com/media/546486/essay13.pdf
Fusero, P., Massimiano, L., Tedeschi, A., & Lepidi, S. (2013). Parametric Urbanism: A New Frontier for Smart Cities. Planum. The
Journal of Urbanism, 2(27), pp. 1-13.
Graham, P. (2003, Apr.). Beating the Averages. [Online]. Retrieved from: http://paulgraham.com/avg.html [Accessed: Mar. 22, 2019]
Green, T. R., & Petre, M. (1992). When visual programs are harder to read than textual programs. Human-Computer Interaction:
Tasks and Organisation, Proceedings of ECCE-6 (6th European Conference on Cognitive Ergonomics). GC van der Veer, MJ
Tauber, S. Bagnarola & M. Antavolits. Rome: CUD, pp. 167-180.
Heidari, A., Sahebzadeh, S., Sadeghfar, M., & Taghvaei, B. E. (2018). Parametric Architecture in its Second Phase of Evolution.
Journal of Building Performance Simulation, 9(1), pp. 13-20.
Heijden, R. (2017, Feb. 8). The Morpheus Hotel: From Design to Production: Live Webinar. [Online]. McNEEL-Wiki, 3–5. Retrieved
from https://vimeo.com/203509846 [Accessed: Feb. 19, 2018].
Hirakawa, M. & Ichikawa, T. (1994). Visual languages studies – a perspective. Software - Concepts and Tools, 15, pp. 61-67.
Hirakawa, O., & Chang, S. K. (1986). VICON: A Visual Icon Manager. Visual Languages. New York: Plenum Press, pp. 151-190.
Ivanović, M., Budimac, Z., Radovanović, M., & Savić, M. (2015). Does the choice of the first programming language influence
students’ grades? Proceedings of the 16th International Conference on Computer Systems and Technologies, pp. 305–312.
Janssen, P., Pung, D., & Chen, K. W. (2019). Visual Programming for Geo-COmputation - Towards Tools for Tool Makers. Intelligent
& Informed: Proceedings of the 24th International Conference of the Association for Computer-Aided Architectural Design
Research in Asia (CAADRIA), 2, Victoria University of Wellington, Wellington, New Zealand, pp. 665 - 674.
Julia (2018). [Online]. Retrieved from: https://julialang.org/ [Accessed: Jun. 24, 2018].
Knight, C. (2012, Sep. 7) Frank O. Gehry: Sketches. ArcSpace. [Online]. Retrieved from: https://arcspace.com/studio/frank-o-gehry-
sketches/ [Accessed: Oct. 9, 2018]
85
Leitão, A. & Proença, S. (2014). On the Expressive Power of Programming Languages for Generative Design: The Case of Higher-
Order Functions. Fusion, Proceedings of the 32nd International Conference on Education and research in Computer Aided
Architectural Design in Europe (eCAADe), Newcastle upon Tyne: Faculty of Engineering and Environment, pp. 257-266.
Leitão, A. & Santos, L. (2011). Programming Languages for Generative Design: Visual or Textual? Respecting Fragile Places,
Proceedings of the 29th International Conference on Education and research in Computer Aided Architectural Design in
Europe (eCAADe), Ljubljana, Slovenia, pp. 549-557.
Leitão, A. (2013). Teaching Computer Science to Architects – A Proposal. Future Traditions, Proceedings of the 1st eCAADe Regional
International Workshop, Porto: Faculty of Architecture of University of Porto, pp. 95-104.
Leitão, A., Castelo Branco, R., & Aguiar, R. (2017). Algorithmic-Based Analysis: Design and Analysis in a Multi Back-end
Generative Tool. Protocols, Flows and Glitches, Proceedings of the 22nd International Conference of the Association for
Computer-Aided Architectural Design Research in Asia (CAADRIA), Suzhou, China, pp. 137-147.
Leitão, A., Castelo Branco, R., & Cardoso, C. (2017). Algorithmic-Based Analysis - Design and Analysis in a Multi Back-end
Generative Tool. Protocols, Flows, and Glitches: Proceedings of the 22nd International Conference of the Association for
Computer-Aided Architectural Design Research in Asia (CAADRIA), Xi'an Jiaotong-Liverpool University, Suzhou, China,
pp. 137-146.
Leitão, A., Castelo Branco, R., & Santos, G. (2019). Game of Renders: The Use of Game Engines for Architectural Visualization.
Intelligent & Informed: Proceedings of the 24th International Conference of the Association for Computer-Aided
Architectural Design Research in Asia (CAADRIA), 1, Victoria University of Wellington, Wellington, New Zealand, pp.
655 - 664.
Leitão, A., Lopes, J., & Santos, L. (2014). Illustrated Programming. ACADIA 2014: Design Agency, Proceedings of the 34th Annual
Conference of the Association for Computer Aided Design in Architecture (ACADIA), Los Angeles, USA, pp. 291–300.
Leitão, A., Santos, L., & Lopes, J. (2012). Programming Languages for Generative Design: A Comparative Study. International
Journal of Architectural Computing, 10(1), pp. 139–162.
Lopes, J., & Leitão, A. (2011). Portable Generative Design for CAD Applications. ACADIA 2011: Integration Through Computation,
Proceedings of the 31st Annual Conference of the Association for Computer Aided Design in Architecture (ACADIA),
Calgary/Banff, Canada, pp. 196–203.
Menzies, T. (2002). Evaluation Issues for Visual Programming Languages. Chang, S. (Ed.), Handbook of Software Engineering and
Knowledge Engineering, 2, Emerging Technologies, London: World Scientific Publishing Co. Pte. Ltd, pp. 93-101.
Miller, H. (2018). Cultivating Next-GEN Designers - The Systematic Transfer of Knowledge. Computing for a better tomorrow,
Proceedings of the 36th International Conference on Education and research in Computer Aided Architectural Design in
Europe (eCAADe), 1, Lodz: Lodz University of Technology, Poland, pp. 25-34.
Miller, N. (2011). The Hangzhou Tennis Center – A Case Study in Integrated Parametric Design. Parametricism (SPC), ACADIA
Regional 2011 Conference Proceedings, Lincoln, Nebraska, USA, pp. 141-148.
Moretti, L. (1971). Ricerca Matematica in Architettura e Urbanisticâ. Moebius IV no. 1, pp. 30-53. Republished in: Bucci, F. &
Mulazzani, M. (2000). Luigi Moretti: Works and Writings. New York: Princeton Architectural Press.
Myers, B. A. (1990). Taxonomies of visual programming and program visualization. Journal of Visual Languages & Computing, 1(1),
pp. 97–123.
Myers, B. A. (1998). A Brief History of Human-Computer Interaction Technology. Interactions, 5(2), pp. 44–54.
Navarro-Prieto, R., & Cañas, J. J. (2001). Are visual programming languages better? The role of imagery in program comprehension.
International Journal of Human-Computer Studies, 54(6), pp. 799-829.
NBBJ (2018). A City Blossoms. [Online]. Retrieved from: http://www.nbbj.com/work/hangzhou-stadium/ [Accessed: Jul. 30, 2018].
Nederveen, S., Bakkeren, W., & Luiten, B. (1993). Information Models for Integrated Design. CAAD Futures ’93, Proceedings of the
5th International CAAD Futures Conference, Pittsburgh, USA, pp. 375-390.
86
Noone, M., & Mooney, A. (2018). Visual and Textual Programming Languages: A Systematic Review of the Literature. Journal of
Computers in Education, 5(2), pp. 149-174.
O’Regan G. (2012). History of Software Engineering. A Brief History of Computing, London: Springer.
Payne, A. & Issa, R. (2009). The Grasshopper Primer. Robert McNeel & Associates.
Payne, J. (2010) Beginning Python: Using Python 2.6 and Python 3.1. Indianapolis: Wiley Publishing, Inc.
Pilsitz, M. (2017). Drawing and Drafting in Architecture: Architectural History as a Part of Future Studies. Periodica Polytechnica
Architecture, 48(1), pp. 72-78.
Python Software Foundation (2001). [Online]. Retrieved from: https://www.python.org/ [Accessed: Jun. 23, 2018].
Quirk, V. (2012, Dec. 7). A Brief History of BIM. ArchDaily. [Online]. Retrieved from: https://www.archdaily.com/302490/a-brief-
history-of-bim [Accessed: Out. 13. 2018].
Reas, C. & Fry, B. (2007), Processing: a programming handbook for visual designers and artists. The MIT Press, Cambridge,
Massachusetts & London, England.
Rosetta (2017). [Online]. Retrieved from Rosetta official website: http://web.ist.utl.pt/antonio.menezes.leitao/Rosetta/index.html
[Accessed: Jun. 22, 2018].
Sammer, M. & Leitão, A. (2019). Visual Input Mechanisms in Textual Programming for Architecture. Architecture in the Age of the
4th Revolution: Proceedings of the 37th International Conference on Education and research in Computer Aided Architectural
Design in Europe (eCAADe), Porto, Portugal, to appear.
Sammer, M., Leitão, A., & Caetano, I. (2019). From Visual Input to Visual Output in Textual Programming. Intelligent & Informed:
Proceedings of the 24th International Conference of the Association for Computer-Aided Architectural Design Research in
Asia (CAADRIA), Wellington, New Zealand, pp. 645-654.
Sammet, J. E. (1972). Programming languages: History and Future. Communications of the ACM, 15(7), p.601-610.
Sawhney, A., Singh, M. M., & Ahuja, R. (2017). Worldwide BIM Overview. Wu, P., Li, H., & Wang, X. (Eds.) (2017). Integrated
Building Information Modelling, Sharjah: Bentham Science Publishers, pp. 1 – 45.
Schaefer, R. (2011). On the limits of visual programming languages. SIGSOFT Softw. Eng. Notes 36(2), pp. 7–8.
Schumacher, P. (2008). Parametricism as a Style – Parametricist Manifesto. Darkside Club, 11th Venice Architecture Biennale, pp. 1-
5.
Schumacher, P. (2009). Parametricism - A New Global Style for Architecture and Urban Design. AD Architectural Design - Digital
Cities, Vol 79, No. 4.
Sutherland, I. E. (2003). Sketchpad: A Man-machine Graphical Communication System. Technical Report, number 574, Electronic
Edition, Cambridge: University of Cambridge.
Tedeschi, A. (2014). ADD _ Algorithms-Aided Design: Parametric Strategies using Grasshopper. 1st edition. Potenza: Le Penseur
Publisher.
Terzidis, K. (2004). Algorithmic Design: A Paradigm Shift in Architecture? Architecture in the Network Society, Proceedings of the
22nd International Conference on Education and research in Computer Aided Architectural Design in Europe (eCAADe),
Copenhagen, Denmark, pp. 201-207.
Wirth, N. (2008). A Brief History of Software Engineering. IEEE Annals of the History of Computing, 30(3), pp. 32–39.
Wu, H. C., Ho, M. C., Lai, M. M., & Chen, Y. H. (2016). Humanizing building with digital technology: Frank Gehry’s architectural
evolution. 2016 International Conference on Applied System Innovation (ICASI), Okinawa: Institute of Electrical and
Electronics Engineers Inc. (IEEE), pp. 1-4.