PyCon 2014

Conceptos básicos de ingeniería del software para programadores autodidactas

Justin Abrahms  · 

Presentación

Vídeo

Transcripción

Extracto de la transcripción automática del vídeo realizada por YouTube.

and welcome Justin Abraham's self-taught computer programmer he's going to share with his computer science for the self-taught programmer thank you very much hello everyone as he said I'm Justin Abrams and I'm going to talk about computer science

for self-taught programmers a little bit about me I am a director of product engineering at a company called quick left we do consulting and also in a product that I work on called sprint Lee which is a project management app we're hiring so if you want

to talk about that let me know I'm also the author of Imhotep which is a tool that will take static analysis stuff like pilant or J's hint and pipe that into github code review comments and you can find me online under the name Justin Abrams so an

overview of this talk we're gonna talk about Big O notation how I learned about it what it is how do you do it and then some wisdom and resources around them so to start off I worked for a design agency in New York City several years ago and this was my

first career job that where I was really working on things that were important and they were important to think to people and it was a product that mattered before that I worked for a newspaper and the the things that we did were very quick to start they had

a limited shelf life and then they kind of trailed off and no one really it didn't really matter anymore so examples of that might be like someone's writing an article about AIDS and in various counties and they want a visualization so you build it

and then the article publishes and then three weeks later no one has ever no-one's gonna visit that site anymore so I did some work for a ticket seller they sold Broadway tickets and my responsibilities were to kind of build the entire thing from kind

of an architectural standpoint and I did the schema design and the to give an example of what a sane data model looks like you can see here you have a module and this module has dependencies on other modules and there are very clearly defined relationships

and then here was our data model there was an erroneous requirement laid out which is that everything had to be related to everything which is unfortunate because we didn't just have three objects in our data model we had a lot of objects in our data model

and and the unfortunate thing about this is that it was really slow when it came time to launch and this kind of represented one of the biggest failings I've had in my career and it and it boiled down to not questioning the requirements given and not really

understanding the implications of what I was doing a co-worker of mine Igor came to the project after it was deemed very slow and he said he was like oh of course this is slow you're doing in plus one selects and I was like oh that sounds bad what is n

plus one selects and so this is what n plus one selects are we're going to get a list of posts for this website then we're going to loop through those and then fetch them for that from the database so we make a sequel query to get some post IDs and

then for each one of those we make another sequel query to get the rest of the information and this kind of this happened due to have abusing Django foreign generic foreign keys but this was kind of my first introduction into this like n plus one kind of syntax

that I had never really heard before so I had a few questions which is how did I not know this how did I miss this thing how did he go or know about in plus one selects and I had never heard of n plus one selects and then how can I make sure this never happens

again like I had it was very interesting because it identified a gap in high knowledge and so I guess that that begs the question of what is Big O notation well Big O notation describes limiting behavior as a function tends toward infinity using simpler functions

which means absolutely knowing nothing to anyone unless you already know everything about Big O notation so Big O notation is how programmers talk about how the two pieces of code relate in terms of performance and this this was really important when I went

to my interview at Google so in prepping for this interview there was a study list I had needed to know data structures and algorithms and system design and Java stuff and concurrency stuff and you'll know this that Big O is not on this list these are

the Big O items no one no one sits you down in your interview and says here's a function what is the Big O notation of this function it's kind of assumed knowledge for these topics and this is kind of how you express your knowledge in those topics

and so it's it's probably worth talking about a brief overview of data structures and algorithms a data structure is how you structure your data it is kind of how you organize things and and kind of an oversimplification would be if Python didn't

[ ... ]

Nota: se han omitido las otras 2.365 palabras de la transcripción completa para cumplir con las normas de «uso razonable» de YouTube.