Like my friend Grant says, now is always the best time to start coding. There's more and more learn to code content and ever more creative learning apps. Software engineers seem great at teaching each other and collaborating on best practices. As an architect learning to code, you get to enjoy these benefits.
My personal coding journey started in full force about three years ago. Like when we first learn to draw in an architectural way, learning to code is adopting a new way of thinking. I hope you’ll find that the architecture mind is a very good fit for this kind of problem-solving. More so, I hope that as you dive deeper, the coding mind will mix with the architecture mind. For me, insights from this mix are the most exciting thing about this learning experience.
DISCLAIMER: I AM NOT AN EXPERT I am still learning, so this is a map of my recommendations with my limited knowledge. Please double-check with a friend or colleague who has more experience.
The Map
Architecture gives us some special problems to play with. Starting with code or design software is not exclusive, you can do both at the same time (double the fun). My recommendation is to decide based on what you want to achieve with a small project.
Starting with Code
If you’re not natural with formulas, math, and data types or know them well, code may be the better place to start. Code starts with easy concepts and builds up from there. All programming starts with some fundamentals, like points and lines. These will haunt you later in the journey. Even though what you learn may not impact your design work in the beginning, you’ll soon find ways to blend the two.
Starting with Design
Architects are busy people, you may have to start on the software you work in because it’s all you have time for. Even if it's a steeper learning cliff, it’s easier to find small projects with big wins. Automating some of your clicking is a great place to start. With the time saved from less clicking, you'll have more time to code.
The Paths
There’s no best path for everyone. These four paths are what I “know best”. I’ve dabbled in each of them, some less than others. If you need specialist help, I’m likely not the guy, but I can point you in their direction.
JavaScript
JS is great because you can use it everywhere. Tools like codepen allow you to work in the browser and learn from the work of others. JS is well hated in the software community. There is a ton of different language-specific problems you have to deal with the deeper you go. It’s hard to argue with “any device with a browser” interoperability.
Why JS
available anywhere with a browser
great for data visualization
great for interactivity
Why not JS
confusing, code examples often in different styles and hard to decipher
frameworks can get out of hand
requires a lot of discipline to write clean code
Python
Python comes recommended as the starter language to learn. Good coding practices are a part of its DNA, and learners get readable examples. Python is versatile, packages exist for almost any task imaginable. Data analysis and machine learning workflows are often in Python. There's a plethora of domain-specific Python content across the web.
Why Python
a beginner-friendly language that's crazy powerful
great for data analysis
so much learning content!
Why not Python
versions and interpreters could be confusing
may have to match dev environment to each learning content
Revit
Revit is the name in BIM. If you are already using it, might as we as get more out of it. Revit is capable of some powerful things, even more so when enhanced with code. Learning about how Revit conceptualizes a building in data is a deep lesson in itself.
Why Revit?
It’s used in Architecture offices
There’s a lot of small tasks to automate
It teaches you a version of building as data
Why not Revit
You have to do everything “the Revit way”
Autodesk updates are somewhat unpredictable
Rhino
McNeel takes a different philosophy than Autodesk. As a result, this path is actually pretty different from the Revit one. Especially with the recent innovations in Rhino.Inside, there’s a broad world of opportunities for Rhino. Grasshopper is a fun program to play with, and personally, I like the packages better than what’s available on the Dynamo side.
Why Rhino?
It’s what everyone uses for form-making
Each new version brings some innovative features
It teaches geometric data fundamentals
Why not Rhino
You have to build a lot of structures to do “BIM”
Form-making is limited in its scope
Areas
No matter what path you take, there are some common areas we all pass in our journey. Like the languages or paths, there are way more beyond what’s listed here. Search and you will find more than you can consume.
Dev Environment
The development environment is the context for your code.
For JavaScript:
Node is the javascript runtime for the development
NPM is the package manager for Node (Node Package Manager)
Yarn is an alternative
For Python
The Python install comes with an interpreter
PIP is the package manager for Python
pipenv keeps your project environments clean
Scripting Notebooks
Coding notebooks are a fun way to work with code. Analyzing data and visualizing their results, or just taking notes and testing concepts, notebooks like an integrated development environment with a few extra bells and whistles. Jupyter is well established as a coding notebook, and the Jupyter/Python combination is very popular. Observable is relatively new, but it’s already amazing. It brings some new things into the mix in terms of collaboration and modularization that I’m excited to work more with.
Finding a code editor (IDE) you like
IDE stands for Integrated Development Environment. It’s basically a fancy text editor that gives you extra help when you’re coding. I use vscode, but there are great alternatives like atom, pyCharm, and many others. Test them out and see which one works for you.
Visual Programming
Visuals make intuitive sense to designers. Dynamo for Revit and Grasshopper for Rhino introduced many of us to the wonderful world of code. Scripts are quick to construct, and you can link them directly to what you are doing. Working with the data you know (what’s in your projects), helps tremendously in dealing with the data complexities of how computers understand buildings.
Custom Nodes
Visual programming will only take you so far (within GH and Dynamo anyway). We eventually run up against a wall where the solution seems easy logically but hard to implement given the tools we have. This is where custom nodes help us mix the power of code with the ease of visual scripting.
Visual Studio
C# will require Visual Studio. This is different from vscode (Visual Studio Code). Within Visual Studio, Visual Studio Community is free. Use that one if you are starting out.
pyRevit
pyRevit lives in a magical space. The ease of python with the power of Revit. Ehsan is a well-known contributor to the AEC community and continues to maintain the project. Gui, another big name in the AEC open source community, maintains revit-python-wrapper among other wonderful projects such as apidocs.co.
Packaged Solutions
There will come a point where you want to reuse your work, share your work with others, or package it for less technical users. Luckily the software world has already figured out most of that for us. I won’t go too deep here since I’m still very new at this, but a quick search should provide plenty of resources. Building APIs and Modules especially will be something that comes up in any language learning path.
This is not career advice
What’s covered here is only a small subset of all the awesome options available out there. Right now is definitely the best time to get into coding. I believe coding an essential skill for any architect and will become more so in the future. How we interact with our world is getting more digital and more complex, code is the language of expression in this new world. For future architects, coding will be just as natural as diagramming.
Comment below if you have any questions or suggestions!