 Hello and welcome to Computational Thinking for Designers, I am Tadi Akopia and welcome to DevCon 21 presentations. A little bit about me. I am a design technologist and developer with background architecture. Over the years, I've had experience in architecture, engineering, construction, building information modeling, virtual design and construction and connecting a lot of data workflows to one another. And also using my knowledge of coding and computational design for creating courses, being a speaker in events and just trying to get the community out there to learn more about the practice of using visual technology in building design and construction. A little bit about my team. We are HMC Architects Digital Practice. We're kind of like the advocates and support for the user groups in our company to encourage them to use better data analytic tools, process automation and integrate software workflows as well as training them. Which is a big topic of today's how you would get people more comfortable with these kinds of visual solutions. The premise here is at HMC we want to get a lot of our designers and architects comfortable with the idea of using code, low code and some basic tools in coding to work on projects and we want to get them used to it without them feeling intimidated since a lot of them have zero coding experience. And we thought that one way of doing that would be using computational thinking to create a baseline of making them understand how the logic of code can work in projects. So what is our audience that we have to train for? What are they comfortable with? What do they like to teach? And what exposure do we have to all of this? Well, as you can see in the pretty pictures on the right here, they're very visually oriented people. The starting point is that most of them are architects and most of them like to draw everything they see. They're very technically oriented in that regard but at the same time they need to be able to see what they're doing. And they produce tons and tons of drawings. Of course these days it's all computers and 3D models. But when it comes to actual coding with text and packages and a lot of deployment and good stuff, they're not very, very few of them, a very, very, very small percentage of architects who know any of this stuff. So how do we introduce technical coding in an intuitive way to them so they can use the new tools out there? We want to bridge the gap of coding for creative designers and make them feel comfortable. Otherwise they might think it's too technical or abstract or intimidating or make them feel anxious to even try because it's out of their comfort zone. So one way to think about that is patterns. There's a architect named Christopher Alexander. He wrote the book on design patterns, which was originally meant for building architecture but got adopted by software and computer architecture. And so these architecture patterns, design patterns, coding patterns, anti-patterns actually have a nice crossover between architects for buildings and architects for code. So we also want to talk about thinking patterns. And one thinking pattern I mentioned before is computational thinking, which is the thought process for expressing solutions as computational steps or algorithms that could be carried out by computer. So very discrete steps, make it so that it's rigorous and easy to lay out everything. And here are the key points in computational thinking, using abstractions and pattern recognition to represent the problem in different ways. Logically organizing and analyzing data, breaking the problem down to smaller parts, which is very critical when it comes to trying to assess a problem. Some people just kind of take it for granted. They already know what they need to do with the problem without addressing the might need steps. Approaching the problem using programmatic thinking techniques such as iteration, simple representation and logical operations. We're formulating the problem into order steps, another critical step. And identifying, analyzing and implementing solutions with the goal of making more efficient combination of these solutions based on recursion. And trying to take a specific problem and generalizing it to a variety of problems so it can be used. So this is the kind of approach that you can use for anything, whether it's designing, coding, cooking food. The thinking itself can be applied anywhere. So we want to give them a framework that can take the kind of vague, almost fuzzy process of creating buildings and make it so they can feel comfortable doing coding with computational design. And the process is the same. It can be used to any field in this case. You start with what you don't have, you modify it, you create, you find recursion and you update it. So they want to give me this cycle of thinking, this pattern of thinking. And then there's just sequences, problem solving methods, abstract concepts from computational thinking can lend itself very well to solving kind of problems we have in any field. So it's all about getting those ordered steps in a row. One gap we do have to address though is the people we're trying to train at HMC are maybe not familiar with the essentials like inputs and outputs, data types, data flow, recursion. So we have to prepare how to understand these problems down steps and the fundamentals of processing that data must be handled first. Of course, everybody wants to do cool stuff like in this example. This is what architects really want to do. They want to get straight to the point and start designing awesome buildings that can be quickly developed. This is like a proposal, like a hundred story glass tower that's modified designers kind of looking around seeing what they got here. Architects love this kind of stuff. They love trying to take a big idea they have and make it into a reality and then kind of refining it. So they want something visual something they can enjoy. But to get there they have to go through all these steps of understanding the tools and disposal. And on left is the your typical kind of Python code you would see just defining in this case in geometry on the right is visual scripting and that's also Python. It's called pyflow. Now there's a link at the bottom here if you're interested in trying it out. Basically it takes the Python coding languages and it just makes it interactive so they can use these nodes to have things like the integers, the rays, going to the branches. And people can feel like they can play around with it and move around. It's a good way to kind of make people who aren't familiar with code, text coding, editing code kind of understand the logical operations involved. By using just your typical IDE script it may not be so obvious what they're doing with until they're very much trained but we're just trying to get them to understand the thinking patterns. A visual scripting medium is actually very useful and that's what a lot of designers actually use and that's what we're trying to get them to use in agency. For architects in general, the two big ones are artist, Revit and rhinoceros, Revit, or sorry rhinoceros, it's a general purpose 3D modeling software. You can model just by anything you want, building, jewelry, cars, you name it. And Revit is a specific purpose building modeling software that has basically an SQL database hooked up to a 3D modeling interface which is parametrically fine and it has a lot of controls and less fluid. And both of these have visual scripting plugins. These are open source projects. And Dynamo is the one for Revit and Grasshopper is the one for rhinoceros. We're trying to get them used to this but in order to use these tools we need to show them how to use the computational thinking steps and how to bridge that gap of really structuring how you think through a design problem. But because we're using software that are already trained on like Revit and rhinoceros, they are already more confident that they can get started because at the end of the day these scripting languages directly relate to the modeling software. They communicate to the API and let you create workflows and tools and buttons that don't come with the software without having to code with X. So here's an example of a Dynamo one for Revit. On the left is the visual scripting and the blue highlighted area can be distilled into this Python text. So while it might seem much more convenient to do in Python, if somebody's not familiar with computer program concepts, CS concepts, Python language, then they might be able to knock it out pretty quick with the visual scripting because they can at least kind of see for themselves where to start with what inputs they need, how to organize the content. It's all in front of them. It gets kind of hairy the longer these things go, but it's easier to read if you're not able to read code that the stuff on the right is going to be gibberish to you. So we want to give them a starting point so that they actually can get to the Python scripting. And this one example here shows you how you can take inputs and make it into a design output. So the input here is showing you we want to make some coordinates for force in a building tower. So the top half shows you the XYZ coordinates we need to use. And the bottom half shows you the inputs for model like concrete floors, number of levels, wall type, curtain wall, glass. We then take those inputs, modify them, the same middle called polycurve by point is basically connecting the dots. And then we multiply the polycurve by the number of levels and we tell the levels we want the floors of a six inch foundation slab. And based on just those inputs in the processing, we can get floors and walls. And that's something concrete and architect can understand floors and walls, they get that. And when you're done, this is what you get. You get the geometry on the left being translated into a model on the right. So they can preview the geometry and get a full build. This is the kind of payoff that a lot of designers out there feel comfortable with. They're like, okay, I get it. I understand that I can create the coordinate system that I can lead to this whole building that can then start documenting without having to, you know, copy paste and modify a ton of stuff at one. You can change it on the fly. You can add more points to your coordinates, things like that. So this is the kind of lead in that makes them feel comfortable to software. And, you know, it's interactive. You can do things like check out shapes and click on the different nodes and see what they can do for you. So they can play around with it while still basically working with a type of coding. Same with grasshopper. You can use it to make some nuance adjustments to your model. So you don't have to constantly try to tweak it yourself manually or any designer can feel confident. They can save a ton of time doing things this way. The slider is having to model everything tediously. So this is the kind of thing that makes them feel comfortable with the coding environment. But to get started, we try to, you know, give them a training regiment. They've never seen this kind of stuff or they won't get better at it. With these visual scripting, we try to say, okay, pretend you're baking a cake, like on the pop image there. So what would it take to get a bake a cake? Well, you need the oven. Well, what do you put in the oven? You put in the dough. Well, how do you get the dough? You have to mix it. What do you need to mix it with any ingredients? So we tell them, okay, what is it you're trying to achieve? You're trying to make a building? What do you need to do then? We work backwards. You know what they want, but by using the most discrete steps possible, how can we get there? And so you work backwards to get the inputs and then we have another scenario. We use diagrams to draw it out again saying, okay, if we want a peanut butter and jelly sandwich, you don't need peanut butter and jelly, but else you also need bread. But the bread itself might be a loaf. We have to cut it in half. Each slice of that loaf has to be input into a node with one on peanut butter, one on jelly, and then those two nodes go together to a peanut butter and jelly sandwich. So you start seeing, okay, like if you had to physically do this, you would just start putting things together, but you had to tell a computer how to do this. You have to be very explicit and account for every step. So that's how we try to diagramically explain this to them. And then we just show them how to do the exact same thing with a computer where we're using the visual scripting language again here. And we just say, okay, this time pretend it's coffee that we're working on. We want to get coffee, so we need to have temperature, water, coffee in the cup. The water needs to get heated, so we process the temperature here. And this is all just diagrammatic. We're actually doing anything here. It's just to get them comfortable using the visual scripting medium. So we put the water and the coffee cup together saying pour liquid in the cup. Now we have a cup of coffee. And then we have to figure out how much we want to put in the coffee, 12 ounces. We can't take that for granted. We don't know how big the coffee cup is. So then we finally have our coffee cup. Then once we get used to this thinking process of inputs and discrete steps and analyze, then we can get them to do it with an actual model, which is the same thing. Inputs, division of the surfaces, connecting them again and creating a design output on the right here. So that's how we're training them to get really used to that computational thinking and create a logical workflow so they can move on and do something like this where it's an actual building. If you ever saw one of these really groovy buildings out in the world, it's usually created with software like Rhino and Grasshopper and Revit. And by giving them use to these inputs and outputs and computational thinking and the discrete steps involved, then people can see that they can do it themselves with a few more steps, a little more savvy in this small environment. But they can't really get very far if they don't know how to process things. Some people have an intuitive grasp on it, but the more defined approach you can provide, the easier it will be to get them to where they want to design so they don't have to do much trial and error and get lost in circles. The approach we're getting to teach them is a very fundamental concept of computational thinking in the first place. That can be applied to anything to the thinking of how you can use that workflow to put together any kind of concept into a workflow diagram and then getting into these visual scripting languages so they can get some useful work done that makes them happy to be designing. At HMC, we're trying to bridge into a standard different direction, parametric design, computational design, general design. At this point, it's mostly computational design, but we're going to start from there and really expand from what's possible. And we want to make sure we pay attention to people's learning styles. A lot of people can learn different ways, visual, audio, text, touch, but architects are very visual with a little bit of touchiness, so we're trying to make it feel as comfortable as possible to visually see things and provide the resources necessary to supplement them. And we have a whole training and learning platform. It's in-house with some external tools like Lenten Learning, but through our own portal so that people can get training, structure training, training that's consistent with these kinds of computational thinking paradigms so that they don't, you know, get different kinds of training and it starts feeling like you're learning it 10 different ways from 10 different people and it has to be consistent. And the idea is we would train different people, junior or senior people, people tech savvy, people not so savvy on tech, and just, you know, train them, get them to a database and create an example of what's possible with their skill set. So an example to write this person is very good on Dynamo, Revit, and CAD and maybe a little work on Grasshopper so we can provide the right training. So that's how we take somebody and develop them further. And the goal eventually is to train a lot of the designers who work on the models day-to-day to make some cool concepts in their projects. And this is a real example of an H&C project in the Bay Area that is using environmentally responsive design to create louvers for a facade. And you can see on the top left there we have some energy analysis models showing, you know, the heat map that light gain, the solar gain in the room of this building, this library. And on the bottom you can see all those nodes. Now it's a very sophisticated series of nodes created for this project. In a nutshell, it takes the geometry input, turns it through a bunch of different processes, and it uses a couple of specialty nodes to control for solar exposure. And then depending on how much solar exposure you want, how much light exposure you want, it will adjust and give you a generative design of the curtain wall panels. And then you can use that to set the room. On the top right you can see what's, you know, all these controls and configurations that we've used to figure out what the spaces look like with the different panel types. On the bottom right you see the panel generation showing us giving some examples starting from a very straightforward, you know, filled up panel to different slots so it doesn't look repetitive, but it still does its job by protecting people from the sun. But at the same time being energy efficient. So we use these tools without having to, you know, train people on software like IES or something like that, which is especially software for energy analysis or train them how to code. We can use, you know, visual scripting to get a lot of this done. It does take a little bit of training and practice, but once they get comfortable with the logic of it, the computational thinking of it and the tools, they can do this kind of work to become better architects. They can get more work done the way they want to get it done. They don't feel like the software is trying to tell them what to do. They feel like they have more control and we have better results for our clients because they see what kind of quality work we do for our buildings and it's cool to show us kind of work off and encourage others. So the key concepts in review is coding competition design is more important for the average person these days, including architects. Everybody needs to learn a little bit of computational thinking, a little bit of coding to get ahead in this world and make a difference in what they're trying to do. But you have to make a compatible training style to get people comfortable with the concept. Not everybody is just going to sit down and learn Python or JavaScript or any other language. A lot of people are not comfortable with that. Computational thinking establishes the baseline thinking so that people get comfortable with how you would need to talk to a computer. And you can use resources compatible to trainees, reduce the anxiety and give them examples that are familiar projects to the non-coder like a building, something that they can feel easy enough working with. Create some structured coursework to move them along with hand knowledge. Let them try skills on a project and share the results. Review, upgrade, continue training indefinitely. If you take anything from here, it's make sure people are comfortable with how you train them. Otherwise, nothing you do will get to them. You speak from experience. Here are some resources on computational thinking and design patterns. You should see the visual scripting tools, our digital practice and the visual scripting of Python Dynamo. If you want to see the text and the visual come together, have a link down there for you. And that's it. Thank you so much. If you want to share my context, please reach out to me if you have any questions about anything I talked about today. If you want to chat a little bit or whatever. QR code, GitHub, LinkedIn, e-mail, Twitter, all that jazz. Thanks, guys. Thanks a lot, guys. It was a pleasure speaking at DevCon. It's CZ 2021.