About the talk
This video was recorded at virtual Code BEAM V America conference, which took place on 10-12th March 2021 - https://codesync.global/conferences/code-beam-v-america-2021/
More great virtual tech conferences - https://codesync.global
What Counts as a Programming Language
by Chelsea Troy.
The talk aims to show folks what we can learn from questioning how we categorize things rather than ignoring things outside our arbitrary categories. It also aims to help folks understand that most "universal truths" aren't as universal as we might be led to believe—and why it matters.
This talk should appeal to programmers of all stripes!
SPEAKER - Chelsea Troy
Chelsea writes code on projects like the Zooniverse Citizen Science Mobile App and the NASA Landsat Image Processing Pipeline. She looks for clients who are saving the planet, advancing basic scientific research, or providing resources to underserved communities. She has been known to take projects in mobile development, web development, and machine learning. She streams some programming sessions to YouTube, so you can watch her code (and narrate!) in real time. She then turns the recordings into educational materials.
Chelsea also teaches Mobile Software Development and Python Programming at the Master’s Program in Computer Science at the University of Chicago. She is the author of chelseatroy.com and a book called Remote Work Sucks (the title is kind of a trap). She organizes two conferences: PromptConf (Chicago area, very technical) and ORD Camp (Chicago area, not nearly as technical).
Chelsea flings barbells around for fun. She drives an electric cafe cruiser named Gigi.
Code BEAM V America
I'm a hardened shell of professional software engineer wrapped around a soft core of science-obsessed child. Proof: chelseatroy.com/tag/space I try to write about what I've been up to lately at chelseatroy.com, so that's a more current source for what I'm doing than LinkedIn is. I'm also on Twitter more frequently than LinkedIn (though my feelings about the platform are complicated). My handle there is @HeyChelseaTroyView the profile
My name is Chelsea Troy as mentioned. I am a staff software engineer at Motorola on a team called pocket. I teach a couple of courses at University of Chicago, in their master's program in computer, science. And I blog at Chelsea Troy. Cam. You can see the URL right there. I'm also on Twitter at, hey Chelsea, try and you can see the handle right there. And today, we're going to be talking about what counts as a programming language. I have to confess this is a little bit of a sneaky title because this is a talk ultimately about something called as soon contact. And that's what
we're going to start with in this talk. Now, assume context is a broader, a broader topic than programming languages specifically and it applies in a lot of areas that aren't specifically, what counts as a programming language, but we need to understand assume context in order to address the question of what counts as a programming language. And so will be discussing that the beginning of this truck. But before we do that, I want to start this talk the way that you would expect a talk entitled. What counts is a programming language to start?
And I'm going to do that by introducing some prior art. So, before I wrote this talk, I went on a search engine and searched for the question. What counts is a programming language? To see what sorts of results? I would get sand in particular. Here are two of the most inclusive examples that I saw on the internet of explanations for this question. So, codecademy describes a programming language as the tools. We use to write instructions for computers to follow Wikipedia. Similarly, describes. A programming language is a
formal language, comprising, a set of instructions, the produce various kinds of output. Now, these both sound like relatively inclusive, definition. The second one, in particular, a formal language. Comprising, a set of instructions that could apply to a variety of different things. It could apply even to potentially some natural languages in which commands are given. But these two definitions pretty considerably from what comes up. When you walk into an office or into a conference and you ask software
engineer, what counts as a programming language. In having this conversation. I've had a number of different questions come up. Does it have to be Turing complete to be a programming language? For example, in practice is typically connotes, whether you can assign variables, have friends logic looping. Those kinds of things. And this is a question that often comes up on whether or not something is a programming language. Is it Turing? Complete? Another one is, does it have to be usable? For solving a specific kind of problem. That is is a programming
language. Just anything that a programmer uses to do their job, or we just finding it in the Practical firms like that. And by that definition does that mean that everything that I use is a programming language just because I'm a programmer and I'm using it. How about this one? Does it have to actually be used for for solving that specific kind of problem? Good example, that I like to use here is a problem that we use to teach people programming languages, which is to write tic-tac-toe on the command line. So do use a programming language to write some sort of command line,
tic-tac-toe implementation. And we generally wouldn't argue that what they're using isn't the programming language. Maybe, you know, Alex Turner or python or Ruby that they're using. But we can also solve the Tic Tac Toe problem with a little bit of conversation and four lines drawing with a pencil, right? It's that make the programming languages that we use to make a tic-tac-toe game. Any less of programming languages because we don't necessarily use them to solve the Tic Tac Toe problem. Finally does it have to have a compiler or an interpreter know this one is the
most interesting to me because it seems that the for often like the most technically rigorous. But at its core, what a compiler generally does, is it converts computer code from a front-end? That is the same text that we're riding into something that into machine code into something that a machine could wrap or an interpreter would then run, you know, and so in a way, we have this compiler in this interpreter scripture that says what you need to be doing is you need to be converting
your front end programming language into into by code, that can run on a virtual machine code that can run on a specific machine. At its core, though, that requirement is a type of translation. Now, we have compilers that might do that compilation in full. We also have trans filers that might convert one. Programming language friend in into, for example, another programming language into the bike code, that use for that front. End the wave at Coughlin compiles down to the jvm originally designed for At what point do we draw the boundary on?
What kind of translation counts as compilation? Is it at the point where were using specifically machine put a virtual machine or do we count in that compilation process, the translation of CSV to Json or Json to CSV on one natural language to another? And so this is an area where without those specific boundaries this may really be the most inclusive of all of these strictures. Now I just learned I don't think necessarily these strictures are as useful to us as we might assume that they are when we're having this conversation. So I want to move to some
specific questions and might give us a better handle on how we decide whether something is a programming language. Now, another question that sometimes comes up is what a markup language programming language. And this one, I would say that there was a little bit less debate around some of the others I think in a lot of the conversations that I've had any way. It's generally accepted that a markup language doesn't count as a programming language. We don't count things like HTML, R, markdown or allergies on, either date of representation for Max, and they don't necessarily Implement
any kind of logic in there. Right? We aren't specifically, we aren't specifically using these for branch logic in those kinds of things. They aren't what we would say to him completing past that Turing, complete test. Now, this one is not available at all. And some of the ones that are more debatable and I want it. I want to stop here and note that it is rather interesting. That's the way we tend to Define. What counts is a programming language, often Falls along the lines, of which things are largely done by the dominant demographic in
Tech. And which ones are alive by the marginalized demographics in Tech. We see a trend of folks Ewing sometimes, for example, running programming as a less technical Topics in back in programming, which was largely along the lines of the demographics of who tends to be a front-end programmer, who tends to be a back-end programmer and going back in history and see if he's in the seventies. When Computing wasn't considered, such a technical tasks was precisely the time. The women were largely, the ones completing Computing tasks and as it
became More largely male profession and also became largely a more regarded as technical profession. So I don't want to lose sight of that as we're talkin about what counts as a programming language. Welcome back to that. There's an area where there's a little bit more debate, is a query language of programming language, so sequel for declarative use for fetching data out of a relational database. Cipher is a query language that we use for getting data out of a graph database. Now. We'll talk a little bit more about it later. But when we
talk about whether a query language is a programming language. I find it there tends to be more disagreement. Then we're talking about whether a markup language is a problem. So maybe it's time to take a step back and think about what it is. We're trying to describe. When we describe a programming. We said programming languages, but maybe some context is missing here. Now. Let's talk about what context me. A context is a descriptor that characterizes your specific situation. The state that I grew up in is a context, the cultures of my parents is a
context, the country I grew up in at the context the language that I spoke as I was growing up. It's also a context, those context shape, our experiences of the world. So I'll give you an example in English. We have a word for red and we have a word for pink. Think his attention red red mixed with white. And when we look at pink or red, we have a very specific idea of which of them is what she's telling the difference between pink and red is something that we think of as two different colors. Now that's not the
case with blue their dark blue, various shades of blue and then light blue but I don't know whether I would say that this pain is dark blue or light blue. That would be an easier distinction to make if my first language were rushed because Russia has a number of different words, for different shades of blue. Literally the way that I see color is different than the way that somebody with a different first language sees color. This is the best example that I can think of to microcosmic Lee demonstrates that the things that inform our context.
Also shape, our perspective, the way we see the world. It's really important for us to be aware of that context, because when we are unaware, of the context that were in, we can accidentally mistake our specific case, with an imaginary General. We can consolidate. What we perceive to be true with what is actually through. We can conflate the way we use things with the way things are not realizing that others might see them from a completely different angle. Now, before we return to programming languages,
let's look at another example of a context, specific idea, to make this clear. Is the phrase on the slats that? I'd like you to read? Generally, it is better to optimize our code for legibility, then for Speed. Can I see a show of hands in the crowd agrees with this? You're very generally, it's better to optimize our code for legibility than for Speed. All right. I see a few hands up, like, a little tear in the normal. That's interesting. I'll talk about why that is.
The vast majority of my career has been spent writing end-user applications in recently. I wrote my first interpreter for programming language. I was following Bob Nordstrom's crapping interpreters Project online and one of the first things that happens is there is this very large K statement used to determine which tokens are in the programming language that you are. And I thought well that seems a little bit messy that doesn't indicate the hierarchy of these different tokens. And so I rewrote it with some nested, some nested if else reach out to
Bob. And I asked why is it written with a giant K statement when it could be written? Like this? And it's so much clearer to understand which which tokens are being used and why and he responded to me and he said, yes that is clearer for a new developer to understand. But the thing is, it's slower as conditionals one more slowly and they have to run one after the other. And that's the condition was blocked on. The original condition was so that I was going to take a lot longer to run. Then the case statement. User application. I have the luxury
of thinking about legibility more than speed in general because my programming language is fast enough for 14 keys and values is going to happen instantly from a human perspective, regardless of how I do it. But the reason that that's the case, the reason I have that luxury is that the people who wrote the programming language optimized for Speed, rather than legibility, I get to optimize for legibility in my end-user application because the programming language designers optimized for really wonderful example of this is in the open-source.
You can take a look at it, the heart of the sea, python interpreter 1500 line. And if that is too big for computer too low, but it doesn't, it's listed in 240 Institute. A statement. You can go and look at the actual code. It's really amazing. But it really gives you an appreciation. Gave me an appreciation for the way that solving different problems changes. Whether this thing that's generally true is true. Another one, generally. Composition is preferable to inheritance. Do you agree with this? Composition generally preferable to inheritance.
This is one that I've talked about with a few licks. Her dad's phone that we talked about among among Ruby developers as well. And In general. Again, when were talking about this? We're talkin about end-user applications and applications built on a framework. Like rails are Android, or iOS. Write would rather compose things together, then inherit from classes in functional programming as well. We'd rather compose functions together. Here's the thing. We're reading it and user application in a framework. We're inheriting
from space. In iOS you inherit from The View controller, Android you inherit from an activity and rails you inherit from a controller as well. The reason for this is it behind the scenes those objects need to take care of a lot of different things in particular. For example, with the mobile Frameworks. We are talking about an application needs to fit on a device, the size of my palm. It just doesn't happen to be that much memory available. Object conservation is extremely important and framework developers have two options. One of those options is
make the end-user application developers. Worry about object conservation that's going to make developing those applications harder and inevitably end users are not going to do it right? Or rather end-user application developers and So instead what happens, if the framework handles a lot of the object conservation steps for you, in super classes that you inherit from to write an end-user app. Again, we have the luxury of preferring composition to inheritance in an end-user application because the framework designers have used inheritance to
abstract some of the Gory details away from us. This is true in a specific context. And not others. So now we have to talk about what generally means, we said generally in both of these cases. What did it mean in most cases? Which cases? Are those most cakes? When we teach beginner programmers, we use generally because we want them to have a place to start. We don't want to overcomplicate things or the NFL just started. And I think I think that's the right tools. But I also think that by the time we reached the point where we are teaching those
Airline is considered General to maybe a little less so cuz it's a little more back-end specific, right? Now that we know, I think about this term, generally, we find ourselves needing to do it again here. When we say that something is in general programming language, when we mean by that. Anyway, to figure that out would be the contrast General programming languages from what we consider to be domain specific. Programming, languages, diaper, domain specific language for information database, R-Spec domain, specific language
for unit. Testing Ruby application domain specific language for munging. Potentially, by the way, if you're more interested in red dresses, there is a really great talk by Betty hable about rednecks has and about how wide those are designed the way that they are. We have this word General and we're contrasting that with domain specific. Here's the thing. What is the general case is? In fact specific to a domain? And we only think it's General instead of domain specific because we consider its domain to be the default, one.
What is general? Programming languages are, in fact domain-specific, programming languages, but their specific to The Domain that were using in most cases. Much in the way that, for example, we have this idea of a unisex t-shirt, but there isn't really such thing as a unisex t-shirt. There's a men's got t-shirt, which is what we're referring to. When we say unisex t-shirt women's cut T-shirt which are considered a special case. Even the women are half the world population. So, what might that specific case be
for general program? I might do the default domain for programming languages might be and user applications where the user can change something. We're not talking about static websites because we as we've established Market languages that make up static websites, generally considered to be not programming languages. But when we are building an app where their inputs and forms and connections to databases, that's the sort of problem, but we find ourselves solving with General
programming languages. No. Maybe this really isn't some kind of default domain. Maybe it's just the one that has received the most attention. We can talk about why that might be in the questions later if you like, but I'll skip over that for now to talk about some other donkeys where we use programming languages. What I'm showing you here is some example code alloy. Alloy is a model verification school. We are developing a large or potentially complex.
Is it to verify our assumptions about the way the bat domain is going to work. Here? I'm using alloy to verify the rules around the way of pipeline is going to be built. I want to make sure that there isn't any way to have my stage has become circular. I want there to be a beginning and an end and I want there to be a linear process through the stages from beginning to end. No, you wouldn't use alloy to write an end-user application. You would he use alloy to
ensure that you understand your domain model? Before you write that. In general, these are application developers aren't using something like a light where they aren't using. There's another one called toi plus that we use for formal verification. Instead, the solution that we have alighted on in and use our application development is to go ahead and start writing, code, gets 6 months down the line have a 60000 line application. And at that point, discover that there's some kind of complex bug where we can get 17 steps into our
process and a corrupted, the state of the program somehow. And at that point, we have to go digging through the program to figure out why that happened. How it happened, when it happens, how to fix it. It's tough and we haven't necessarily figured it out. What we do is we make a bug in Trello orgy or our little tracker. We put a bunch of angry faces in the ticket. Then we come back to it. Every 6 months, make another half-hearted attempt to get it fixed. We never do. That's certainly not the ideal approach. I wouldn't even call it a better.
So now the question is, what can we learn as programming, language designers, and users from something like out or tli plus, it's used in a different domain. Let's solve a problem that we find ourselves that we find ourselves. Devoting a lot of resources to failing to solve on a regular basis. Another example, Metallica. Metallica and another similar language. Simulator X are largely used for modeling relatively complex physical processes. So this is for General Motors for modeling the pieces of cars to figure out how they're going to work together.
Now, we have relatively complex processes that we attempt to model and general programming languages as well. And once again, I find myself with a question. What? Could we learn from languages like Metallica and stimulates that make it their business to solve complex problems, in at West moving Parts, where the different pieces affect each other in a relatively streamline wet? There may be kernels of knowledge in there that would make the modeling of
complex. Logic less difficult in what we consider to be General programming language. Finally. Let's talk about Cypher has come up a number of times in the shock. And the reason for that is that I just love his. It is a database query language. And I think one of my favorite things about it is the way that the same texture as a little picture for you. Exactly what it is that you're trying to. Do. You got these nice round parentheses that create a sort of an elliptical structure around your objects that you're trying to get out of the database. And then you
have to square brackets. Which indicate the kinds of relationships that you're trying to find between those objects. I like sniper because in a way that I haven't found with Sequel and provides me with the diagram, what it is. I'm trying to do. Now, I know that I have not been a programmer as long as many of you have been, but in my time, at least so far I've seen. Three, maybe four attempts to provide a diagrammatic representation of a general programming language. And all of them have failed
in one way or another. So I find myself wondering. What can we as users and designers of programming languages? Learn? Show me domain specific language like Cipher that makes its business, a send text that diagrams the queries were trying to make. There are other domains in which folks are regularly using code to solve problems. They're different from the ones that we have to stall, but have similar threats. For that reason, I argue that paying attention to those other domains outside of our domain name. And make us
better at this programming thing. I find myself wondering what we can learn as engineer's from process modeling. I'm simulating physical systems the way that we do in Madera or stimulus. I'm fetching network data the way that we do with Cypher. Now we come back to a question. We talked about at the beginning. What separates converting CSV to Json format from parsing. A high-level programming language into an abstract syntax tree. Of course, there are differences, but I think it's very important to articulate those differences and
understand exactly what we're talking about, how the things that we do differ from the things that others do and where there might be parallels where we can learn from each other. I think there is more of that and learning to identify context and share information across context. Then, in formalizing, our understanding of the difference between domain specific languages in two separate domains. Because I think the subtext of defining what is or isn't a programming language? Often comes with a normative Judgment of what is technical and what is not. And when
we are describing a general programming language, we tend to think of that as the most technical thing. And we tend to make the mistake of thinking that the more technical thing has nothing to learn from the last technical thing. And in so doing. We did not ourselves the opportunity to reach across domains and learn more from others who are solving similar. But different problems to ours. Computer science is an extremely young field Topps 150 years old. We have a lot to learn and we can
benefit. In fact, I'd argue, it's imperative that we learn from the different domains in which programming languages are being used. Otherwise, we run the risk of replicating lessons and failures that other domains have already experienced and can warning spell. Here's the point. You and I swim in a sea of context. And unless we make an effort to specifically identify that context and understand that, the things we think of is true might not necessarily be true for everyone else. And why?
We got a lot of benefit from that position. And it's important for us to practice that skill. I think we can access a deeper and better connected understanding of programming languages and maybe anything. But I'll stick to what I know by learning to find the invisible context hidden in general statements. How do we do that? Have some thoughts on how we do that when I'm going to provide a process here that hopefully will help folks practice. First, I'd like folks to ask themselves what
principles ideas or best practices do you think of is always right? We're generally, right? Don't need money. Just two or three. I recommend pulling out a notebook and writing them down. What best practices do you think of is always right? We're generally, right. Second. Maybe there is a context in which that is the case. I recommend specifically looking for it looking for the water around you. So for example, if I had written down composition is preferable to inheritance. That would be one of my best practices. Now, I'm looking for the contact for that. Where is that? True? Who?
Tends to use inheritance rather than composition. Why? Next go looking for contacts that are different from yours to better, understand what your best practice is, why your best practices work in your contacts? So we talked about the example of this. I'm looking for folks who don't change, you use inheritance overconfident composition and I'm trying to understand what There's a side benefit to this, which is it nothing demonstrates? Why something works better than an example of where it doesn't
work because it gives you helpful information about why this approach solves your problem. So seamlessly. And where you might encounter seems, if you try to blanket apply this best practice everywhere. Finally. Go looking for contacts that are similar to yours. What can your tried-and-true approaches contribute to this similar contact? Perhaps in that context your best practice, my best practice of composition over inheritance or something might be valuable to others were solving a similar problem. And also, what can you learn from the similar context
about what to try in your own context? What lessons can I draw from another domain to be better at working in mine? I think that developing this cross. Contextual understanding of our craft opens a lot of doors for us to understanding the way other technologists think and in. So doing just fine the way that we pick Maybe I can learn to identify different shades of blue, just as quickly. And as confidently as I identify the difference between red and pink. And once I've done that, I have a much broader
and more specific spectral angle with which to view the world that I live in working. And that can only make me better at what I do. So what that I'd love to open the floor to questions that we doing questions. Absolutely. We had one in that people's questions, adapt, and we'll take it from there. So we have one question from. Okay, baby jumping up and down from the top with Donald Barlow. Hello, I'm good. Thank you very much. Excellent. Excellent presentation
x-rays talk. What was that? What was her name? I didn't catch that. Absolutely. Her name is bexy Betsy hable haizel. She also recently introduced me to a paper by Peter. Now we're called programming is Theory building, which if you're interested in the regex talk to might also really like that paper. I got a lot out of it. It's about the way a bit. Having a, an understanding of sort of the theoretical underpinnings of the problem. You're trying to model as a
software engineer, is really helpful to implementing the right solution, which sound when I, when I summarize it like that sounds very trite, but a lot of the details in that in that paper were really helpful for understanding that idea and thinking about how to do it. Exit, thank you. Yeah, absolutely. Are you standing? If you're there if you can get yourself? Hello. It was a very fun day. I already got a very different perspective. My question is, in the beginning of the documentation that markup language has a 10 to gently not be used for programming. I
have thought of a different approach to this because I'm using a camel to execute certain tasks in a framework that the University of building and we will wait at the program has to offer. Framework specifies. The tasks is truly camel. So I I don't know what your opinion on this is and I'll be we had quite a nice discussion in the chat where we conquered on thinking that it is generally ends up being a domain specific language which we sort of molded into our own use case
just for folks in the in the crowd who haven't used them. Oh, yeah mall is often used for configuration. So it is generally used in configuration files, but we might think of it as sort of Jada Jaden. Configuration storage is usually the way that it's used and it is white. Space specific much in the way that python uses white space to demarcate structure. Where is Ruby use a centech City Market structure of face. Did you mark a structure and watching the way, the
chase on music, early races in Colin's to tomorrow? And I think that this illustrates, we are sort of the lines blur. I think that your example case, there. It was Straits. The circumstance where perhaps the distinctions between these different things and what counts, as a programming language, vs. What doesn't count as a programming language. He's not as important as what strength each of them. Bring what problems each of them might be well positioned to stall and how we might end up using the appropriate tool for the job. I was talking to hell away in a little bit about this couple of
weeks back and about whether they're there. Maybe there isn't a problem with saying, what the programming language and what is in the programming language, the normative judgment around what's a programming language and what is in a programming language, and therefore, what's Technical and worst doing invaluable? Maybe that's not so great. But maybe distinguishing. What's a programming language from what isn't is valuable in the sense that it gives us an idea of what problems of what problems? Full might be used to stop and I thought about that a lot.
I think programming language, vs. Not programming language at. This point is too overloaded in normatively judge to use for that. So, I think, in a theoretical case, it might be useful for that. I think in the case of our actual world, we would have to come up with different stations. Maybe that would be naming our domains rather than thinking of things is General, vs. Domain specific. But I think that you're more use case provides a good example of where differentiating those different domains and and trying out different tools. Might might might sort of prove the point
of the value in thinking about these tools in terms of the problems. They solve and where there might be cross-cutting lessons. Okay, thank you for that. We've got one more questions. If you have any questions, please Persimmons in. Endocrine a section, they're coming in. So we've got a question from Mr. Robert burden himself with a rubber. Hello, Francesca. This was just a bit more philosophical. Think really, what exactly what I'll do for the main, how can you tell? The remains are actually different? I mean, they might be cool
things. Inside them might be different different, different names and stuff at the store. When you start looking at them. They're actually the same, but that's that's just Is it just one more philosophical point for outside and inside stanking? It's an interesting one and it identify him that you don't mind that were previously sort of considered as different May. In fact be the same, I think, is a potentially valuable source of cross-cutting in site where we have two
domains, the different folks have been working on and they've come to different solutions. There could be a lot of context, sharing their it would end up allowing both domains to advance. And I think there might be a question here. And how do you go about finding those domains? That might be considered different from yours, but are in fact, the same and the only answer that I have come up with and I don't think this is a good one or a complete one, is to take the opportunity to ask. Questions of people who sell very different problems and try to understand how
they're solving those different problems. And why those problems are different from the ones that we solve. And I think that might be the way to find the similarities. Okay. Okay. Yeah, I know. Bring me a picture that says Tracy on him. You had a question and Brandon may be able to add a comment following the question so crazy over to you. Hi Tracy, hi channel, so. Avenues to use to clean the languages that you put Grace and escalating Alexa. And Alexa has a way of languages.
So, I was wondering if it's the same for Cipher. If it's the same for Cipher, that is a good question. Does anybody know if Alexa has tooling for working with graph databases? Yeah, so at least neo4j specifically which uses Cipher it has like a language. Agnostic protocol Campo Post a link to the elixir of that where you can directly write Cipher. Diapers also highly recommend a look if you're interested in, but obviously, I'm biased. Okay, I think we got
two more past. Tense is Zaki. You had a question. Can you guys hear me,? My question is, is around first principles approach. Right? So I think about first principles about programming. My programming is all about for me manipulating data, right? How do I get that data? How do I get a picture upload at Wright State? A back-and-forth? But anyway, it coding is also kind of like writing, right? And you want to make what your writing is clear as possible. It's so I'm just trying to think about your approach about the Fishbowl, right,
which is I think taken from a very small book write my my sister got me. Got it for me and it was very interesting. So how does first principles of line with this process? You've given us on deciphering context? Yeah, this is an excellent question. I think that first principles we, we generally, you know, learn these first principles as we're starting to program, and I think that, that is an excellent place to start in deciphering contact. We can take a look at the first principles, and I think the question there is, if these first principles are useful in the
majority of cases we've seen in, what cases are they not useful in? What cases do I have to break them in? What case is a my force not to use this approach or what? I lean away from this approach. Where is he? Normally? I would leave him to it. And I think that those cases are worth a little bit of study and I think that is worthy of that study for two reasons. The first one is that understanding, those cases can broaden our understanding to Alternative approaches. And where those approaches might be appropriate. And the second thing that it does is it strengthens our understanding of the
first principles themselves. We can understand why this is useful. When we understand the specific shape. Of the problems that we did, it's designed to solve. I think, you know, as we start to understand the Contours of the coastline of what we previously thought of this is like expansive borderless, land of where the problem is useful then or where this solution is useful. Then we, when we are asked to justify that approach, we can have an easier time saying, this problem has these Contours, it has to be his borders. These Contours and borders makes
sense for using an approach like this one where as if it had these different Contours and borders. Maybe I would have done this other thing and so we have the opportunity to compare it to an alternative and demonstrated to be the better approach in a given case rather than the answer. He's the best practice, or it's the first principle which which helps other people to gain a better understanding as well of why? It is that we've done something in particular. I have found the junior engineer. I really appreciate being presented with the few Alternatives and having it
explain to them. This is the one we most often used because this is the shape of the problem is solved and that matches the shape of most problems. We find ourselves selling here. Okay, let's try to few more questions. I don't think we'll manage to get through them all but Jonathan Arnett. By the way, if you don't have time yet, but hopefully I'll see you then. Join the Token Lounge. If people can come in and find you and ask you questions there as well right after the break. So we
also should be in Twitter. Handle are great questions, but you're coming Jonathan over to you think this will have to be the last question of courtship. Those are questions from the barn if we can take them down after after the break you. So Jonathan over to you if you're there, if you can amuse yourself. No, okay. Do you want to go? Leave Barney? One of the most amazing experiences I have had as an engineer has been working for a company where we produced a solution that simulated semiconductor Factories at a deep level. And to do that.
I had to get out of my programming domain space. And I had to get into understanding the physicality of those, those factories, and be in the production engineering. Do manespace get into their heads? I see a lot of people new to the industry who are very much into the code part. But not so much into that other domain that they seem to get stuck in coding domain. Instead of customer demands. I'm wondering what we can do. to assist those who are coming into the into this practice to be more aligned
and open to these other domains. That's a good question. I think it is easy when folks are just getting started with the programming. The programming feels unfamiliar and feels like the problem to sink their teeth into and it can be tough. Particularly. If you feel like you're behind your peers and you need to catch up to do. What feels do you like slowing down and take a look at the Domain understand that domain, and how you my model it? And so I wonder whether there are opportunities
with folks who are learning to ask them, how they would go about modeling their domains in code. and then, Maybe to have a conversation with them about how how that domain might require that designed to change. Now and example, if this that I that I often find is that I have my students complete a final project in each of their classes that they take with me and they get to propose the final project. So it's something they're interested in, but they they then have to meet a
certain set of requirements with it. We come to an agreement on what it is that they need to do how complex it needs to be. And I find the in doing that they are more enthusiastic to understand the domain, then they are with the homework problems that I assign them, where I have come up with the Jumpman. And that makes me think that that the new a newer engineer feeling invested in the domain. They're being asked to model, might be an effective approach to teaching them. The skills that they need to model it because the conversations that I have with them, I start to
talk to them a little bit about, you know, do we want to keep this in an object? How do we want to store? This? Can these things change? As people start using your system? What's going to have to change? What's going to have to scale? What are you, what are you? How are you going to make it easy for the future version of you to add the things that you need to act? And once I've asked him a couple of these leading questions. I find them brainstorming on their own and will stop themselves and say, oh, we could do it like this. I know. Well, the way that the pool wager that I'm
modeling, don't work that way and so I would have to do it this other way and I find it that enthusiasm for understanding the domain model starts to generate in those conversations. So, I wonder whether that would be kind of the way to do that.
Buy this talk
Buy this video
Our other topics
With ConferenceCast.tv, you get access to our library of the world's best conference talks.