Merken

Sometimes a Controller is Just a Controller

Zitierlink des Filmsegments
Embed Code

Automatisierte Medienanalyse

Beta
Erkannte Entitäten
Sprachtranskript
do some things in the room is new and so I talked settle sometimes the controllers just a controller it's a deep dive into action packed according to everyone who stopped me in the hallway this week it's actually not but it's about fancy code
verses boring code the epic battle are here so boring code taken from 1 of
my jobs just randomly it's boring go reader
but let's make it fancy so this is a
fancy and I that looks much more aggressive but about you know
boring go so much easier to read and I I realize income over the much of examples like this that would have been really boring talk to relayed what it was obvious codons veterans of the code so I refactored the abstract that so I hope you don't feel that went but the so that aggression retirement slides of us so mining is just and I I do a lot
of talks and I always and that's a lot of time into my slides and technical artful and illustrate my point well I but I'm not an
artist by any stretch I don't know if to use I don't know if there's an accent over there which way it goes the but are artists like to say at the end of my talk at all I loved your slides and I'm overwhelmed with joy to hear this but then they follow you just really put so much time and your slides so loudly crying phase those are the actual text by the way of apples emoji of recurrent talked so fundamentally those slides are about time for anyone watching a recording of this after today this is what a wristwatch used to look like a user clock there are in fact actually a room that joke because they updated the energy don't match the products of the speaking of the Apple Watch I if I had a package
notification during this talk about a year and a half no offense so I don't horological
study and I I calculated that if you take all of my free time and subtract away the time I've been doing slides it equals 0 and so I said that I thought why do I spend time on this is because I wanna win people over to a certain way of thinking I was invoked as an interesting conversations on topics I think are important and I realized I don't spend any time in that when many people over but as they spend more time I'll win more and more people over but even then I can understand never gonna win over 100 per cent of people it's just not possible I die before I got to that point but luckily I they help manage a business now I know lot project management tricks like the 80 20 rule I cannot really the 80 20 rule says do a job until it's 80 per cent done and then quit so I I I I I figured I would start around 80 % comments were about 60 80 hours per slide that which is a huge investment of time and so I
didn't have quite that much time at and thing can have for the last time I did to prepare for the start of so I hope you will forgive me if I Our isn't
quite up to the up to spec here with 18 fonts for slide and
sometimes the slide is just a slide so rules that they could as this the reason I care about all this is I wanna do a good job I wanna write good talks that that that means something to people but the thing is I can't know what it's a good talk until I can begin to see and 10 test whether or not you know I got my point across and you agree or disagree and and and whether the word it's contextual depends on you and there's really no such thing as a universally good talks but anyway this is a dialog encode and I'm going talk about good code will laid down right now a 1st loves you really hard to read I'll read for you good code tiny units like hilariously tiny like as and 1 public method like I tend to extract the private and that that some complex scope for the name not for the abstraction university the holding describe the value or perform some useful behavior but never both those behavior units they can contain logically can depend on other units but never both I try to eliminate local variables to an absurd degree I usually start with functional changes but then my favorite refactoring tool is compositionally factory a kind of functional composition I use tap and each a lot as if to screen side effect in this chain so that I know to come back with back to that later but minimize third-party dependencies right wrappers around them and I try to pull side-effects near the entry point Lagarias imperative show of functional core and then I also disagree with whatever America does every 10 minutes and finally I try to overwhelm people with information so that I get my way so anyway that's
my doctor my just I'd love if you follow me on Twitter as as my last name sterols review very long form the your me hello testable . com don't worry the not that's not really
the end of my talk that's is my favorite way to write
code and I'm sure that you have your favorite way to write code and when we get together as teams we are collectively we normalizing we develop consensus of our collective favor way to write you know we all have our framework's favor way like it's conventions that set forth how how it wants us to write code were negotiating all these things all the time the only 1 in the room is actually consistent and this is our bosses right because they know that they want on target on time and on budget so computers to them the but what I said in iteration planning meeting and we talk about like the power approach that feature so it's often just an arguing about us all getting our favorite way of Louisa K talked about
this phenomenon of uh in 1 of standard proteins fold shape what happens is as long as the into their favorite thing people want that all from the the real thing that we do this in the last years
since of mutually the intersection and there was a little less but they're in the right always right wing because we messed up so that OK here's the user going in the right way
all cards 6th Avenue with 1 occurrence is 1 thing that that would you his the wings to schools in the USA has shown his score through everybody's life
without it and be honking and how to raise the OEC I have I I
have I I I and
the in a
world of 1 or more and more of the cost of the
U of
moving you like
so have you been in that Pennington before but I feel like I haven't that guy so maybe inches the
case that we combine everybody's favorite Wainwright code then maybe that's what components but I suspect your intuition suggests that that's not true in fact my thesis today is that there's no such thing as good code I've got some just like some some inputs in my life that made me think that 1st of all snake oil still sells out as fast as happen use can stop it we're all have clearly going this void in our souls chewing up new frameworks and JavaScript's exhibit the projects rarely succeed or fail because of their code quality and as a consultant lots of project encode colony is rarely the reason they winter fail and exhibit CB industry sure doesn't seem to produce better code over time it also like if it's a like evolution of natural selection applies a softer whatever is optimizing for is not code quality I feel like were just this
oscillating fan going back and forth between 1 mean maybe it's a capability suitability on 1 and the other
so so if I had defined good code below here's what I've come up with say 1 good code performs the function into it communicates intent note about performing a function is really straightforward right we can look at it see what it does we can measure and you benchmarks and optimise it and then we can always changes like what it does today is going you wanted us tomorrow and we can always all to go back to so functionality is very objective be we evaluated objectively and and as engineers all really comfortable with that but what about communicates intent we look at it like writing like literary criticism are egos get all wrapped up in our favor way to do stuff and it's like a crystal ball we just have to it I guess you know the person reading and what are they going to be thinking what are they gonna understand what's the what are they going be trying to accomplish we won't ever really know to communication that's totally subjectively evaluated and you know that makes a lot of us as engineers really uncomfortable so on 1 hand we tend to conflate those objective and subjective goals of code and which makes evaluation really hard this is really hear people like code desire our right like it's is impossible someone the spectrum we have no
idea how to evaluate but otherwise we tend to
emphasize function because the measurement is easy here like burn-up charts and so on the other hand I would have the wrong idea we
only really evaluate half of what's going on
I think that this is the fundamental rights and this is this cause a little pit in all of our stomachs and has a snowball effect 1st and how we practice those individuals are made rules down into teams and community and industry ever and talk about all the side effects of that fundamental error that we make so 1st of all as individuals I really wish that we could just have an app they could tell us whether our code was the right on involving this existed while I wrote it for you it's called is my code did not come launches right now it's a real thing really made the I on the why here is a demo of a working open a
website loaded you type in you get a username it I does is some calculations and it gives you a report card of your of your code quality and you can go back and you can type in you know your boss your friends you if you're better than them end of should
check done I finally we have some way value we are code just don't use source on In fact in the last 30 seconds
is launched its Japanese gone so viral that I'm ready enough version to headline feature it's at 10 x developer conversional tell you what X developer you are participate upgrade because it enabled argue for such higher salaries when you say you're a . 6 x developer but really we've got a lot of sites like
this where white scoring and ranking achievement sites so much they always go viral is because any quantified measurement can really soon their self doubt as as developers there's there's this our secret fear that had that that I think most programmers sharing that's 1 of my code sucks I don't really know what is you know is a walk around everyone else seems to have everything figured out maybe they know something I don't you know maybe if I use a big words of fool them into thinking I belong here and we all cope with this in our own way some of us for the big finds some of us hide behind other people but you know he if you recognize this you'll know what you do to tried a compensate but that that amount of fear insecurity in doubt it varies from person to person there's what we might arrive at is a healthy amount of some people suffer a lot of anxiety about how they fit in and some people seem to have no care in the world about what other people think about and so on 1 hand people might be very introspective empathetic persuadable and on the other hand in the spectrum very self-assured indifferent to what other people think an unflinching in their convictions and so you will how would you rate yourself on the scales of so let's start by practicing on the celestial guy came back
from france and who's ever felt that where these farm entering the country like a customs declaration form I I hate this from the 1st that I was freaked out those convince of being arrested 1101 and doing and I have every time I do I find a new light ambiguous wording in this form in 1 of my favorites is this 1 I am we are bringing fruits vegetables plant seed mood or insects and l like I know they're asking for like the the intent is that they'll want bio contaminants from forms and stuff coming into the country but I'll a total technocrat and I somebody's with Aaron Patterson Aaron really likes on God junk food as I
found this in a France is like a dairy milk bar with Oreo in the middle and I bought a form so that was my backpack sampling of this form I start by writing no I
don't like around I feel guilty you know it's a technically yes but but but but it's not really guys is candy chocolate and I underline the candy as like another thing I crossed out through the best the thing that is so where do
I read on the spectrum is pretty obvious and a really high anxiety individual I clearly so if you think of those laughter expectancy with we hold people's subjective especially flawed evaluation standards people really introspective they tend to feel paralyzed into inaction by the self doubt people on the other end of the spectrum tend to rate themselves favorably no matter what the popular way to evaluate themselves as a really important I'll point out that you know in fact so we a passing from the reference have never mind that has so another interesting aspect of that I think the people elect to be more effective communicators because they can empathize with the listener where the other side of the spectrum people tend we were communicators which means that the effective communicators but only the like-minded people people who are already like them so it starts off with us evaluating code poorly like the the cycle of the industry and they found that conscientious coders they tend to doubt themselves right uh I've because the self doubt which allows those more callous and different coders to can outperform everybody else around them because they don't have the same innovations so that eventually conscientious coders they feel marginalized make when they washout which shows results thus reinforcing the value could even more poorly so we start with these people in the room you know eventually those more I feel touch and people will leave and water we left with I
guess which group does better at word interviews hearing goes nope not me I would still fail all of your white board interviews because I'm so nervous all the time so you ground
we realize that this was a soft talk this stocks for you you're you're going talking to the stock was after
fields of by whoever talks so it or were in this together the so it's about like don't code along
with the good talks really what's the right way to do this through a rate code the right way and obviously the consumer communication but we can only really know the communication is ever correct in a given set of contexts so I 1 right there it's like can back here's X excuse concept of system that of course this is little work you a really complicated business domain in a simple by being like well this is actually like about all of our like variables are you know nautical theme or something to like as analogy for something that's very abstract is a useful tool but sometimes it can go awry because it cannot be requires that we understand the metaphor so 1 time 1 of our testable agents I having variable about was on a project and he came to a codebase where everything was based on mystery man and he talked to the team and they all were very very productive in this could this we had no idea was going on so they hand
VHS tapes of this movie that's really bad and we've all forgotten about and the entire code base was based on means and and references to this movie but yeah so
they were really productive and that's great but there is like they were getting paid to write code that literally had a pop culture expiry date on and that's a huge business risk incoming not to mention who were pushing away don't like mystery and people not like so know your audience is important we use metaphors and then you consider the correctness of your code and understand that I it is a crystal ball but like if your teams on board that's great but if you're ready for the public you have to consider whether what are you saying by the metaphors that we use in a code and how we communicate in about a separately like just believing that there is a right way that to just solving the problem code get really cause problems I feel like the reals developer is a little bit like playing Madeleine's also again as a programmer I wanna converted to PDF and then send it via fax using rail so that I can remain employed and the 1st step to anything like this and rails putting things together is best PDF
generals else and the 2nd step is best facts rails and forbid it's no results found because research with this stuff like knowing the right way that we're looking over our shoulders but what if I just missed it might do this the wrong way they can have a lot of stress so when I talk to various friends a lot of them will often say like why would anyone before writing JavaScript so grows to nasty language tooling is terrible the right here's why because I ask in JavaScript like what's the right way to build a snowman summaries that state does your code work is if so then that's the right way it
so wild west you know can be really liberating and serious abuse of that being an ecosystem where there's not a right way to do things is really chemical like really liberating like David
Cross writing a pizza in our space liberating and so on area this quote that I
really like respond to complain about bad code but I have to remember the perfect is the enemy of ship so sometimes is getting some other means we have to overcome that in addition and so I
yell at sort of how that is that the error goes from being just by individuals to being about our teams and how that snowballs little bit
so asking if you another team have you ever tried out some new approach to your code you really set about your team member shot you down can ever had another team member like shoehorn some weird code thing that you are not a screencast whatever into your projects yeah because those 2 sides the exact same point C exact same situation all the changes our perspective the difference is fundamental attribution error which is just simple things say which like be more than willing to justify their own actions is good but we tend not to give other people the same amount of slack
the way we overcome that typically is empathy if I can empathize with the other personality and why they might be doing things the way that they're doing that I'll probably be able to let you know get along in justify instead of assuming that bad but the problem is that of were all spending a
lot of emotional energy to mask over our personal security about whether codes good enough then we
don't have nearly as much willpower remaining to be empathetic to our teammates but 1 of the core tensions on team that I think is a really interesting 1 discuss is people who were like more comfortable with familiar approaches to solving problems versus people who seek out more novel approaches to solving problem now here on the familiar end of the spectrum I you know you might see your end the spectrum is being the proven approach on the other side as being like Hacker News during development but if you in the other sense but see things that way what you see is what you would like to do practicing modern development all this job architecture stubborn and outmoded right end we can bridge divides but that like having personal insecurity and being unwilling to speak up and and make ourselves a little bit longer is that we typically don't bridge those divides I'm speaking of Dubai's white-hot what culture fit but I because I know how this new that's square scare quotes to culture fit a video on there's like a lot of got good criticism
about what has been called that I want the screen from Marco most dominant these are like along as secret handshake to make sure you belong in the club it's ritual as much as it is evaluation on so that's really like we were
talking about Milo culture and culture and I think they're separate things and so let's talk a little bit about monocultures 1st but seems jury supernova 1 is that monocultures actually work faster you know like you might not want to admit it but it's totally true that if you stack the deck with developers you all agree about the right way to do everything they don't have to waste any time deliberating the finding consensus they just crank out of Banja code but if truth but here is that a lot he will call themselves like meritocracy is art incidentally reinforcing monocultures like they are uh because there is no universally ubiquitous waiting to evaluated code what it really means is that they can really just what this person does our favorite way during code really really well it reinforces for finding people who were just like you and is 1 reason why I think meritocracies about bad name in last 2 years and of course the problem of meritocracy is if you have everyone over and this 1 side any environmental thing changes about the market at the end of the users are using the system are the that is tremendously huge blind spots of there's a fire over here could burn down everything and then they're all shocked and it all goes to hell immediately so dirty secret number 2 is that faster the fact that monocultures go faster in this instance doesn't necessarily mean better the world teaches us that slowly equal stupid in fact English-language telling someone slow is it tantamount to calling them stupid but but I you know in general themes that that have to overcome different perspectives and deliberating argue that yeah sure they're slower but really they build more robust systems as they cover those blind spots so he had a few people from each side of this slide spectrum you know they'd probably have to get a lot of arguments to arrive at a solution but the you can see like much you blind spots so the tangent tangent please please everyone stopped completely stop claiming that like trust us you know some practice like TDD your agile or Turbo links it's going to make us faster in the long run that subsumes this whole bias right when we say like would eventually this is going to be faster said now it might be might not be faster dirty secret
number 3 of courses most dichotomies are false so what I just showed you here is like 2 as the spectrum but there's a whole cacophony of like like people along in the middle there also really valuable satisfy the extremes so
when I think about culture that when I think about is like these are the pieces of the puzzle we have collected so far what are we missing we don't need the identical piece again but like where are we now and what we need next and and is this person you know a good fit for augmenting an expanding what we were covering 1 a blind spots so little
digression about code of
was was to say about code functionality in online and communication and the others and like and making up this false dichotomy right well
wrong because fundamentally i if if all that counted as a false and like you have to emphasize everything in the spectrum someone and I wanna talk about communication like as communication to humans and the functionally size really communication to computers so if you've ever seen a highly optimized function like with might be very dense and might have a lot of compiler interpreter awareness in there it's probably very very good at communicating to the computer but very bad at communicating other humans and use a lot of documentation understand and on spectrum from the reason we mean uh popular was very good at communicating to humans because the code is very readable he's used but the problem is that all those DSLs that we invented to rather really slow and other metaprogramming makes it very difficult for the computer to understand how make it go faster and introspective so clearly this is just yet another spectrum and there's something in the middle it's probably on the market is a healthy balance between those 2 extremes so we talk about this a servlet 1 blended topic and not just communication humans but also communication to computers is worth asking how is our code communicating so I feel like we don't have a good vocabulary for this yet I I I i've tried wanted a different ideas this is the 1 we share with you today but this right with opportunity for coming up with your own and the color interaction analysis so so in your system every library a file a method or a name represents a kind of an interaction you know new thing the open look at a understand every macro a reflection about a program is like a super in direction because it can affect everything that came before and I'll I'll be curious to see somebody invested time to like find a way to automatically score in direction in your system so for a given code that how many names ieee concepts are encounters how many source files contribute code how many tests were redundantly cover that what percentage the code is handled by third-party dependencies all this stuff it's it's useful to both humans and computers to understand how a codes communicating in the spectrum is really like uh I could be conveyed in terms of dry like dries don't repeat yourself in the opposite of course is what force horizonal things everything but I was the spectrum drives really saying duplicate nothing and and what is saying duplicate everything at saying couple nothing so we take those as a spectrum and we look at both the extremes both of them are really costly on 1 and if you couple nothing that is really cheap to change 1 thing because you know that it's only reference in 1 place but changing many things we you have to change it in all these different places that's why dry got popular so you duplicate nothing then changing many things all at once it is all 1 place is really easy but only 1 of those usages diverges from the rest of the pack and that's when we get into the dreaded bad abstraction because then you have to like have an if else branch your code similarly it's really easy to learn 1 key to be don't couple anything but learning entire system is really hard but he duplicate nothing learning 1 piece yet but basically wearing the entire system but then once you do you just flying because you know how everything in the in the program works so yea neurons drives not address not that this is yet another spectrum and another aspect of interaction things interesting answer is explicit versus implicit in direction so explicit interaction uh I like to think of like intestine development domain-driven design reduces your system you a lot of custom domain objects so your your system is a special snowflake everyone has to come to it has to and understand everything in the system whereas with implicit interaction maybe something like rail Zaremba yet to study up on what the community does with the framework does uh so that you can just have all the sort of magical negative space in your systems that that does stuff for free under both in direction and they're both wildly different we can talk about 1 versus the other a lot but we don't really understand like the net effect of both there's lots and lots of interaction systems that we so I would just like as all the the habit of practicing how we communicate about codes communication like having more of these meta discussions and so yes this is a great opportunity if you wanna be the next thought leader I think I and as I like to see more people discussing this kind of stuff because I think it's really interesting I was speaking of thought leaders roll down to our community so as a community so we
had this can fantastic group of of people who are prolifically speak at conferences and they published in they're really like our team's 6 man a woman like people like Gary or sandy or air and who contribute to us as thought
leaders new ideas that shake-up how we do things the gives opinions on like this is a good approach is about a person or a short circuit help us navigate gigantic waters of what's going on and then they can also provides a little bit of the Summary Poster My codes allow like that I can always be like was very does it and now it's only cool but 1 code for jobs who is code really talking to you who's gonna read that comes find your
programming 1 day and I'm thinking about that question in the room that understands it I'm usually coding as a jury's watching I which means I'm
writing all this high-fluence documents released when the
details and and it's really really stressful and and not just for me before the person reading linear reality where programming it's
probably just that somebody who is more likely than different from these standard 1 reading if anything that only a little bit more novels and so you know I'm disappointed that a
famous person is not really my code but we somehow here that I don't have not on stage if so
for an hour most so so really if you write code to other people who are just like us we're going to favor more obvious and clear solutions which makes me happy years certainly makes them happy that I have to read all this fancy clever doubled another aspect and part of the
reason for this is I think that we all suffer from a little bit of hero worship in this I that the times that
we live in i Gary actually treated this I really liked it he said that a speakers words so mysterious but now he's getting his 1st keynote last year and now and were mostly just regular ding-dongs and you know I gave my 1st here last year too so I was able to to check in total ding-dong an errand and confirmed he's also danger so really there's nothing fancy there were just like we just got lucky in area we are I so now that I'm a certified
keynote speaker and an attorney in my speaker cardinals makes me really uncomfortable but just to make this 1 claim which is that you're clever code does not interest you're clever code makes me feel stupid it really does in fact the more I think about this I realize that clever code is simply a symptom of poor understanding I mean much more
pastoral into the someone explain like I'm firemen tried like practicing all the business domains of they're doing there because that's that's fundamentally like that's a lot harder to do in fact obvious is
much more impressive than clever I'd to read more obvious code in my life the speaking with the way that thought leaders share that they we have all these design approaches and a really means like in the CBD DSLs you presenters of like we have a whole bunch of our society right aspects hexagonal rails DCI that mouse game controllers user just means and invited this definition in like the formal 1 means are ideas that compete for attention they feed our attention and they reproduce the transmission the your communication as if by natural selection and so how was later means lifecycle look like our continual will 1st search so we have an idea and experiment with that idea mentioned the search sharing it with early adopters of that idea and it spreads because popular eventually like if the successfully become ubiquitous and then finally that ideas finding with which was like how does it get from the beginning to the end Will the reason the endgame is what
it is is because in the most valuable ones are audience knows them if they don't know them might cost more from us to use that particular design approach then don't just on things the obvious why so why
is it that designed ever become ubiquitous I think that the reason is that there is a symbol symbiotic relationship between those early adopters who tend oversell the intrinsic benefits who all looking for a panacea were all looking for a magical things go text all those fundamental problems in our code and so were eager to pull in new
ideas so if you look at this chart and you know the people who share the idea initially with others as early adopters that you column evangelist or means sales people they they will try to convince others that like this is really the graphics audio problems that convinces the next run out run up and you know yes the aspirational adopters who think it affects things and as it gets bigger like they realize that will be more useful if it's ubiquitous so they can like resent this this or of other just a little bit like it's actually being more use than it really is in order to get towards ubiquity so keep that in mind whenever you hear about a new design in a really interesting blog was that everyone seemed to be successful and that means they might even pressure you to adopt they might not even realize that they are but you know your audience if you're just writing code for yourself and you wanna try DCI great if you're human you're all on board with a given mean then that's fantastic just remember that mining people outside Eugene wall understand it might push them away the subtle thereby industry
so this is what the industry looks like except some of us work from home now so if you think that our inability to evaluate
code developers makes us uncomfortable try talking to a business person during a lot of business sales stuff now in my capacity a testable and I saw a talk about business living the life popular can
non-technical business person be sure that they're hiring good developers right without knowing how 100 choose really it's apples and oranges if if our company goes to I don't mind and also testable and they're trying to evaluate how were different from each other I'm an expert because I only 1 of the 2 companies and I don't know how I would convey that his were very similar to how only expect something like total us to understand the difference in the new ones difference between us as developers us agencies
and the answer is that a lot of businesses will put out was called the request for proposals RFP is I don't know how many people in the room have ever been part of responding to a lot of people would break it down remember back that initial spectrum of like different types of people are more like you know a a conscientious spokespersons the people who are a little bit more self assured I wanna when you get a request for proposals to give an estimate an approach for a given system what catches of people tend to identify a lot of risks assumptions whereas the other ones will rationalize away risk ideas get folks analog to emphasize collaboration are worth more self assured my emphasize their own competence on the left the estimate pessimistically tend to work on the right the estimate optimistically it's all Balkans the great on the left the tent as a result come in with higher bids and so they really win the work but on the right they come at lower bids they often when the work and whether and relying on the better the product itself on a lot they tend to blame failures on themselves at least partially reserve right they blamed failures others so the left self flexed to like get out of there and the right k keeps winning growing in it and we must work yeah so businesses like if I'm giving a pitch to a businessman that vary in the composition of what we think we're put this up to bed they don't realize that just simply asking for proposals drastically biases the decision towards bad software agencies and that's terrible but that's just exactly how it is a lot except but I do think that the fact that we as developers really enjoy these come free myths that a code is tangible and quantifiable and fungible and easy to evaluate it just perpetuates this bias and that's the reason we've educated businesspeople that code is this concrete thing and so so it's totally fair them to have this you know flawed metaphor in their minds so said I really love the devices developers were much more vulnerable willing to admit and educate others that software is full of uncertainties defined as you know some net total amount of uncertainty and when talk about metaphor is that the predominant metaphor for soccer development business is construction were building stuff for makers were crafts people and I said that can be useful to a point but it only goes so far as I know the metaphor that i i like a lot is surgery in that like ASR operates here to solve a problem and we can either rush in and without your appendix in you're in you know like the hospital for 3 months because of how I invasive that was or we can claim very carefully and make an outpatient to to to take care of you uh uh so that it's not so painful or not too risky as I I I get the metaphor from Jan North look out for a book or something but worries use that and I I like that metaphor simply continue to talk about my very favorite thing but estimates on the left the construction at bar really brings us to say like well how much time will it take to build this thing with good code words the surgery metaphor leads us to ask a different question which is how much uncertainty and or risk does this project pose does this feature pose how Internet uncertainty is they're here to deal with that new questions are wrong in and of themselves but the problem is with the follow the natural follow-up to the construction of Fourier trying to figure out how long something's going take is you really want it we we wanna ask we are willing to ask is how bad of my good code are you willing to accept but on the right the pressure at a and left right the the business people they're not code experts to how this was no they don't wanna buy something shoddy right like vinyl will win here every time lower than the right the surgery metaphor will ask forces task so how much uncertainty in risk are you willing to tolerate why did these people the NDA school it's all about risk tolerance this is a question there really good at answering so we should try to pull more of the conversation to the right so and under this model like other way to work on your back what would be a start by picking the most uncertain future identify all the risks and unknowns executing agile spikes to reduce the uncertainty till everyone's comfortable and finally if there's no uncertainty lot is really easy to implement with boring code we don't need clever code anymore because there's nothing interesting there and finally can take the next most uncertain future and continued work against back 1 paying down all the uncertainty I give a name for this I call this the boring code discovery model there's a certification program coming soon this e-mail as adjustable double if you're interested in paying for certification but when we talk about why good how we know when we see how we evaluated the progeny project I want even is boring code and I think that fundamentally it's about having enough shared context that we don't have to read the the wheels minimizing the number of novel technical concepts there could be and applications does when used to do cleared clearly named domain concepts but not necessarily the point of being really artsy and then finally lots and lots of empathy for each other on a team of for whoever's going adopt code later to be taken as for things and you just can't like view the light audio sliders arguments ears and I it would be interesting as as an experiment to go back in your own project experience and rate all of those different categories and see how the project with for you like an average all across the else project has a good amount of shared concept that I shared context and it really refreshing to them by that's really thinking about domain concepts in a way that we had before how we model stuff a prime rails project reusing stuff like more DSLs like maybe our back and cucumber and Draper himself a shared context is higher we to learn more up front but the empathy may also be higher because more focused on communicating with others and business no yes projects tend to like the and framework into the shared countesses lower but it's more social like the module interface and stuff is pretty consistent across node projects projects typically have this you know cacophony of of of of custom domain objects but maybe have burials little in common I you know I never dance project what is of the following ever closer really love member is is tremendously high barrier of entry by that that solves negative sorry is it's a very steep learning curve but once you reach the top of that model you can do almost anything you want really really fast and that public API was you learn that with the dual lower and all the stuff the building all these really really advanced stop at the implementation level and you learn at once but what you do with a very high empathy community they're all really great friendly so that is 1 idea your mileage may vary but that's like 1 way that I'm trying to think about the Melbourne code so what can you start doing tomorrow better about to rhodopsin true groundwater way out of the 1st of all we obviously tional relax our conception that there is such a thing as universally good code on that how we evaluate code is subjective and lot and therefore fearing that your code such as both totally natural and totally pointless to acknowledge it and let it go on claiming the right way like exists that might pull some people for you might be a good short but it might just as well but other people who aren't like you away and people who are like you were very useful so we should be seeking opportunities to deliberated kindly respectively with people who think differently here team never disagrees or you never have to find consensus in your project the team by the new types of people new blood kinda can check your corners also upon exercise where we see the word clever just replace it with the word self-indulgent figure from Don Norman's book metaphor a ninja powerful but again they limit your audience to whoever already understands them and finally when someone doesn't understand your code assume some other responsibility know so it's their fault for not understanding it code had kept thorny the famous physicist you was that I came up with the idea for the movie interstellar this this quote from his book about the signs in the book the will some segment of this book may be rough going that's the nature of real science their prior stock sometimes Deep Thought but thinking can be rewarded spoiler alert you can just skip the rough parts or you can struggle to understand a concludes if you're struggle is fruitless and that's my fault not yours and I apologize if this is the guy who discovered wormholes and he is apologizing to me for not understanding the physics in his book and you need me that means that I'll be cited like you know apologize to the next person when they don't understand my JavaScript maybe so my message is really just simply
being courageous and white more boring and that's the hand again my name is
just in love if you got in touch the followed me ideas and feedback Ackerman testable worse operators the we build code with companies in your team needs extra engineers are extra help please let us know if you like to join us to think that we may be good people to work with were always hiring always interviewing I joined a testable and I have stickers they're not of our uh Aaron's cats they're a little bit more uh abstract but if you like a sticker of our logo I'd be happy to give you 1 i and and chat with you today at lunch so everyone thank you so much for your time I really appreciate few and wound aluminum and
Faserbündel
Funktion <Mathematik>
Installation <Informatik>
Prozess <Informatik>
Gamecontroller
Gruppenoperation
Gamecontroller
Vorlesung/Konferenz
Ausgleichsrechnung
Code
Computeranimation
Rechenschieber
Punkt
Framework <Informatik>
Office-Paket
Skalarprodukt
Schwebung
Code
Computeranimation
Data Mining
Rechenschieber
Energiedichte
Datensatz
Matching <Graphentheorie>
Sprachsynthese
Ordnung <Mathematik>
Biprodukt
Phasenumwandlung
Computeranimation
Beobachtungsstudie
Rechenschieber
Umsetzung <Informatik>
Punkt
Prozess <Informatik>
Digital Rights Management
Schlussregel
Projektive Ebene
Cloud Computing
Computeranimation
Stellenring
Mathematische Logik
Punkt
Mathematisierung
Abstraktionsebene
Code
Computeranimation
Variable
Lesezeichen <Internet>
Einheit <Mathematik>
Font
Prozess <Informatik>
Code
Wrapper <Programmierung>
Speicherabzug
Vorlesung/Konferenz
Grundraum
Kette <Mathematik>
Algorithmische Programmierung
Touchscreen
Soundverarbeitung
Lineares Funktional
Extremwert
Abstraktionsebene
Güte der Anpassung
Lineares Funktional
Nabel <Mathematik>
Rechenschieber
Minimalgrad
Komplex <Algebra>
Einheit <Mathematik>
Rechter Winkel
Speicherabzug
Wort <Informatik>
Faktor <Algebra>
Decodierung
Information
Refactoring
Lesen <Datenverarbeitung>
Lesezeichen <Internet>
Verbandstheorie
Benutzerschnittstellenverwaltungssystem
Datenverarbeitungssystem
Automatische Handlungsplanung
Iteration
Framework <Informatik>
Code
Computeranimation
Leistung <Physik>
Shape <Informatik>
Computerspiel
Lesezeichen <Internet>
Anwendungsspezifischer Prozessor
Vorlesung/Konferenz
Chipkarte
Besprechung/Interview
Vorlesung/Konferenz
Oval
Snake <Bildverarbeitung>
Güte der Anpassung
Snake <Bildverarbeitung>
EDV-Beratung
Statistische Hypothese
Ein-Ausgabe
Code
Framework <Informatik>
Statistische Hypothese
Lesezeichen <Internet>
Computerspiel
Evolute
Projektive Ebene
Zusammenhängender Graph
Decodierung
Telekommunikation
Lineares Funktional
Leistungsbewertung
Güte der Anpassung
Mathematisierung
Vorzeichen <Mathematik>
Punktspektrum
Code
Computeranimation
Fächer <Mathematik>
Rechter Winkel
Vorlesung/Konferenz
Flächeninhalt
Leistungsbewertung
Lesen <Datenverarbeitung>
Soundverarbeitung
Lineares Funktional
App <Programm>
Demo <Programm>
Physikalischer Effekt
Soundverarbeitung
Schlussregel
Code
Computeranimation
Rechter Winkel
RFID
Total <Mathematik>
Vorlesung/Konferenz
Messprozess
HMS <Fertigung>
Einflussgröße
Leistungsbewertung
Fehlermeldung
Softwareentwickler
Web Site
Zwei
Versionsverwaltung
Quellcode
Umsetzung <Informatik>
Rechnen
Sichtenkonzept
Code
Computeranimation
Chipkarte
Open Source
Benutzerschnittstellenverwaltungssystem
Erwartungswert
Datentyp
Digital Rights Management
Softwareentwickler
Verkehrsinformation
Zentrische Streckung
Äquivalenzklasse
Web Site
Programmiergerät
Ranking
Punktspektrum
Ranking
Code
Computeranimation
Abstand
Bildschirmmaske
Lesezeichen <Internet>
Grundsätze ordnungsmäßiger Datenverarbeitung
Deklarative Programmiersprache
Programmiergerät
Wort <Informatik>
Messprozess
Softwareentwickler
Einflussgröße
Resultante
Telekommunikation
Maschinenschreiben
Äquivalenzklasse
Punkt
Wasserdampftafel
Telekommunikation
Bitrate
Punktspektrum
Code
Computeranimation
Abstand
Bildschirmmaske
Erwartungswert
Standardabweichung
Code
Dreiecksfreier Graph
Stichprobenumfang
Vorlesung/Konferenz
Standardabweichung
Leistungsbewertung
Telekommunikation
Gruppenkeim
Telekommunikation
Physikalisches System
Kontextbezogenes System
Bitrate
Whiteboard
Code
Computeranimation
Physikalisches System
Domain-Name
Variable
Gruppenkeim
Whiteboard
Menge
Rechter Winkel
Wort <Informatik>
Projektive Ebene
Bitrate
Analogieschluss
Metropolitan area network
Arithmetisches Mittel
Bit
Programmiergerät
Gewicht <Mathematik>
Reelle Zahl
Magnetbandlaufwerk
Programmiergerät
Dichte <Stochastik>
Softwareentwickler
Ganze Funktion
Code
Resultante
Formale Sprache
Normalspannung
Code
Computeranimation
Fundamentalsatz der Algebra
Fehlermeldung
Subtraktion
Bit
Punkt
Open Source
Mathematisierung
Gruppenoperation
Code
Quick-Sort
Computeranimation
Arithmetisches Mittel
Fundamentalsatz der Algebra
Flächeninhalt
Perspektive
Code
Endogene Variable
Projektive Ebene
Attributierte Grammatik
Fehlermeldung
Bit
Teilbarkeit
Computersicherheit
Bridge <Kommunikationstechnik>
Sprachsynthese
Maschinensprache
Punktspektrum
Computeranimation
Verdeckungsrechnung
Videokonferenz
Energiedichte
Feuchteleitung
Quadratzahl
Rechter Winkel
Prozess <Informatik>
Modem
Computersicherheit
Speicherabzug
Computerarchitektur
Softwareentwickler
Hacker
Fitnessfunktion
Parametersystem
Bit
Leistungsbewertung
Mathematisierung
Toter Winkel
Zahlenbereich
Turbo-Code
Benutzerfreundlichkeit
Physikalisches System
Binder <Informatik>
Punktspektrum
Code
Computeranimation
Rechenschieber
Lesezeichen <Internet>
Rechter Winkel
Perspektive
Modem
Softwareentwickler
Tangente <Mathematik>
Programmierumgebung
Hacker
Touchscreen
Leistungsbewertung
Instantiierung
Code
Dichotomie
Dichotomie
Toter Winkel
Zahlenbereich
Extreme programming
Punktspektrum
Code
Computeranimation
Fitnessfunktion
Spiegelung <Mathematik>
Freeware
Compiler
Maschinensprache
Raum-Zeit
Computeranimation
Richtung
Negative Zahl
Softwaretest
Datenverarbeitungssystem
Code
Maschinensprache
Softwaretest
Interpretierer
Business Object
Lineares Funktional
Abstraktionsebene
Dichotomie
Quellcode
Kontextbezogenes System
Extreme programming
Forcing
Funktion <Mathematik>
Datenverarbeitungssystem
Rechter Winkel
Extreme programming
Makrobefehl
Telekommunikation
Subtraktion
Interaktives Fernsehen
Punktspektrum
Term
Code
Framework <Informatik>
Open Source
Programmbibliothek
Softwareentwickler
Optimierung
Analysis
Soundverarbeitung
Verzweigendes Programm
Telekommunikation
Physikalisches System
Elektronische Publikation
Lineares Funktional
Quick-Sort
Summengleichung
Ganze Funktion
Makrobefehl
Horizontale
Kantenfärbung
Bit
Navigieren
Prozess <Informatik>
Code
Wasserdampftafel
Gruppenkeim
Maschinensprache
Code
Computeranimation
Metropolitan area network
Programm
Bit
Elektronischer Programmführer
Mereologie
Optimierung
Optimierung
Code
Computeranimation
Lesen <Datenverarbeitung>
Bit
Flächeninhalt
Code
Total <Mathematik>
Wort <Informatik>
Code
Computeranimation
Telekommunikation
Binäres Entscheidungsdiagramm
Datentransfer
Spieltheorie
Sprachsynthese
Sichtenkonzept
Code
Computeranimation
Sechseck
Arithmetisches Mittel
Domain-Name
Computerspiel
Komponente <Software>
Rechter Winkel
Maschinensprache
Gamecontroller
Vorlesung/Konferenz
Arithmetisches Mittel
Bit
Web log
Symboltabelle
Gasdruck
Hill-Differentialgleichung
Ordnung <Mathematik>
Whiteboard
Code
Computeranimation
Data Mining
Eins
Expertensystem
Softwareentwickler
Subtraktion
Computerspiel
Code
Kanalkapazität
Softwareentwickler
Code
Computeranimation
Eins
Resultante
Domain <Netzwerk>
Bit
Umsetzung <Informatik>
Mereologie
Punkt
Physiker
Natürliche Zahl
Substitution
Kartesische Koordinaten
Eins
Internetworking
Übergang
Rechter Winkel
Vorzeichen <Mathematik>
Maschinensprache
Code
Total <Mathematik>
Kurvenanpassung
Figurierte Zahl
Analogieschluss
Schnittstelle
Feuchteleitung
Schreiben <Datenverarbeitung>
Parametersystem
Konstruktor <Informatik>
Business Object
Sichtenkonzept
Güte der Anpassung
Gebäude <Mathematik>
Applet
Ausnahmebehandlung
Biprodukt
Bitrate
Kontextbezogenes System
Entscheidungstheorie
Software
Kollaboration <Informatik>
Druckverlauf
Forcing
Rechter Winkel
Projektive Ebene
Message-Passing
Subtraktion
Total <Mathematik>
Gewicht <Mathematik>
Existenzaussage
Physikalismus
Zahlenbereich
Implementierung
Punktspektrum
Kontextbezogenes System
Code
Framework <Informatik>
Task
Knotenmenge
Informationsmodellierung
Domain-Name
Lesezeichen <Internet>
Software
Mittelwert
Reelle Zahl
Datentyp
Endogene Variable
Softwareentwickler
Optimierung
Leistung <Physik>
Schätzwert
Expertensystem
Kollaboration <Informatik>
Digitales Zertifikat
Gemeinsamer Speicher
Physikalisches System
Primideal
Modul
Inverser Limes
Chirurgie <Mathematik>
Zustandsdichte
Mereologie
Wort <Informatik>
Maschinenschreiben
Nichtlinearer Operator
Rückkopplung
Bit
Benutzerfreundlichkeit
Surjektivität
Computerunterstützte Übersetzung
Code
Computeranimation

Metadaten

Formale Metadaten

Titel Sometimes a Controller is Just a Controller
Serientitel RailsConf 2015
Teil 75
Anzahl der Teile 94
Autor Searls, Justin
Lizenz CC-Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported:
Sie dürfen das Werk bzw. den Inhalt zu jedem legalen und nicht-kommerziellen Zweck nutzen, verändern und in unveränderter oder veränderter Form vervielfältigen, verbreiten und öffentlich zugänglich machen, sofern Sie den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen und das Werk bzw. diesen Inhalt auch in veränderter Form nur unter den Bedingungen dieser Lizenz weitergeben.
DOI 10.5446/30705
Herausgeber Confreaks, LLC
Erscheinungsjahr 2015
Sprache Englisch

Inhaltliche Metadaten

Fachgebiet Informatik
Abstract You grok SOLID. You practice TDD. You've read Sandi's book…twice. You rewatch Destroy All Software monthly. You can pronounce GOOS. You know your stuff! But some of your coworkers say your code is too complex or confusing for them. You might rush to conclude that must be a them problem. But doubt lingers: what if they're right? After all, the more thought we put into a bit of code, the more information that code carries. Others must extract that embedded meaning, either by careful reading or shared experience. Sometimes boring code is better. Let's figure out when to be dull.

Ähnliche Filme

Loading...