Programming Throwdown

Programming is difficult as it is, but imagine how difficult it was without all the current tools, compilers, synthesizers, etc. that we have today. Eran Yahav, Chief Technology Officer at Tabnine shares how AI is currently helping with code writing and how it could change in the future.

Show Notes

Brief Summary:

Programming is difficult as it is, but imagine how difficult it was without all the current tools, compilers, synthesizers, etc. that we have today. Eran Yahav, Chief Technology Officer at Tabnine shares how AI is currently helping with code writing and how it could change in the future.

00:00:16 Introduction
00:00:51 Eran Yahav’s programming background
00:08:11 Balance between Human and the Machine
00:11:49 Static Analysis
00:29:42 Similarities in Programming Constructs
00:25:30 Average vs Tailored tooling
00:36:19 Machine Learning Quality Metrics 
00:38:27 Rollbar
00:40:19 Model Training vs Statistic Matching
00:50:19 Developers Interacting with their Code in the Future
01:00:18 Tabnine
01:08:17 Farewells


Resources mentioned in this episode:


Companies:


Social Media:


Sponsor:






If you’ve enjoyed this episode, you can listen to more on Programming Throwdown’s website: https://www.programmingthrowdown.com/

Reach out to us via email: programmingthrowdown@gmail.com

You can also follow Programming Throwdown on 
Facebook | Apple Podcasts | Spotify | Player.FM 

Join the discussion on our Discord
Help support Programming Throwdown through our Patreon



★ Support this podcast on Patreon ★

What is Programming Throwdown?

Programming Throwdown educates Computer Scientists and Software Engineers on a cavalcade of programming and tech topics. Every show will cover a new programming language, so listeners will be able to speak intelligently about any programming language.

00:33.40
digitalghost
Programming throwdown episode one Twenty seven ai for code with a on you have take it away Patrick.

00:38.23
Patrick
Yep.

00:46.12
Patrick
Welcome to ah another episode of exciting ah deep programming talk with programming throwdown Jason made me feel a little bit sad the other day he referenced something that we did like a decade ago related to programming throwdown then. Made me realize oh that's really good. We've been doing this podcast a long time and then I got really sad because I'm like oh means I'm old. Um, so now I'm just kidding I enjoy doing it Jason I know that shows is great. Okay, anyways, that was off topic. Ah, so we're here at Aaron today welcome to the show. Aon ah, tell us a little bit about yourself how you got started in ah programming.

01:22.32
Eran
Yeah, thanks for having me guys. Ah yeah I think you started by saying you feel old so I should really keep quiet on that front I mean I started programming many many years ago I think my first computer was ipm pc I think we.

01:30.38
Patrick
Um.

01:41.46
Eran
Five megabytes hard drive or something like that that was like the super duper yeah, exactly right? and dial-up internet and stuff like that. So that that has been a long time ago first programming language was basic if you guys even know what that is.

01:43.72
Patrick
Um, that's a lot man what you could never fill that up.

01:51.28
Patrick
Yeah. Ah, same.

02:00.21
Eran
Ah, and so it's been a long time since then I've been doing proming from a young age I don't even know since when did undergraduate at technion cs then did military service mandatory in Israel. For 6 years ah what else ph d computer science went over to the us to do some work on program analyses program synthesis at Ibm research at the time t j watson center in New York and then came back as faculty at Technion doing machine learning over code program analysis program synthesis. All these great things and during that time I really got really deep into. Program synthesis as something that can transform how we write code in reality and not just in academia and and that that has been like for for for many many years I've been fascinated by the idea of programs that work on programs.

03:02.35
Patrick
Man.

03:14.24
Eran
Ah, compilers synthesizers debuggers anything that any program that that operates on other programs I found that like fascinating from a very young age and this is what I've been doing for a long long time.

03:26.54
Patrick
Awesome! Well that was ah that was a very super man I got a lot of stuff a lot of questions already. Um, so yeah, so starting in basic I may can relate to that and then you know I started in in C and so now that makes me the guy who always has to write the a bit shift operations. Um.

03:35.72
Eran
These.

03:44.82
Patrick
So yeah I mean that's quite a sweeping thing so you even in our intro were saying that you can see yourself sort of academic or you're teaching now I spen a lot of time in university um, I know that's similar to to Jason maybe just a bit before we dig into the other stuff. Like what are your thoughts for people who are debating. Um, you know, sort of spending extra time in school versus sort of entering the workforce. What are your thoughts about that we get that question a lot.

04:07.23
Eran
Yeah I think I'm I'm quite biased. Probably I think that going to school is great. It really opens your mind and gives you a lot of taste and kind of. Experiencing things that you would never experience in in the workforce like in in a daily job just because the incentives and the objectives are very different so I spent 4 years in undergrad I think today many programs only require 3 years and I think that fourth year in which I did like courses in networks and Ai and whatever natural language processing and things that you know I would never like even know that these topics exist let alone like go into the depth that you can. Go in undergrad if I only met them while doing like no like working at town at a company. It's just impossible to get this kind of like wide perspective and and I highly recommend for anyone to just spend this extra year or extra couple of years getting exposed to things because this really changes the way you think about problems. It happens to me very frequently that I like bump into some problem say but wait that was something that I actually met in computational biology. There was an algorithm like that in computational biology and even if I don't remember the details. Kind of have the pointer in my head and I can go and look for it and kind of refresh my knowledge about it. So I think that has been like building this kind of reference in your head of all the topics early when you're young and things are.

05:44.43
Patrick
Yeah.

05:51.80
Eran
Really being. It's easy to get them like recorded it like the the infrastructure level of your brain I Think that's super helpful and it's an investment that know really pays its pays itself back very quickly.

06:06.40
Patrick
Nice. Yeah Thanks, thanks for that input I mean I think that's ah something that people debate I'm not sure. There's a right answer and I think a variouses person to person. But I mean I think that's that's really good. You know observations and you said something which I think a lot about and I know Jason does too which is this word incentives and I think ah. It's really interesting to view a lot of things must say in life that sounds too deep but like a lot of things at least in in you know, interacting with people at work and thinking about incentives. Ah for me that's been something that ah helps explain a lot and so as you point out when you're in ah in school I think your incentives are very different than when you're in the workplace and i. I think like you said the experiences you'll have ah even just thinking in that lens you you can sort of understand how they may be starkly different cool but everyone.

06:52.25
Eran
I think I think it's it's important to understand that every endeavor at the end is human endeavor right? So research research is and the workplace is and people you know are at the end. Motivated by even if the incentives or the kind of target functions are very implicit. They are there and in the workplace you're supposed to you know, get something done at the end.

07:22.94
Patrick
Um, yeah, yeah, a kind way of saying humans are greedy Yes, and yeah, that's true, greedy Ascribes some sort of moral aspect to it I Guess um, all right? So you know.

07:29.50
Eran
No, no, it's ah it's not G Gridy I think it's it's ungreedy. It's natural right.

07:36.11
Eran
Um, yeah, exactly.

07:42.00
Patrick
Um, we had talked about in the Jason Centtra said that this is episodes can be Ai for code. So I mean I think talking about how code development works and even in your sort of like introduction top to you talked about synthesis analysis programming so back when I was first writing q basic. And you know sort of inputting that and like line 10 go to you know 10? Whatever I wrote an infinitely. Okay anyways, um, you know it. It was just an editor the editor was very simple. Um you know I don't even remember recall it having syntax highlighting. Um, you know that was sort of the it may have had I can't remember now. It's been too long. But those early days and we're starting to drop some of those words. So um, you know everyone kind of I get I think understands you open ah v emacs notepad eexe just depending on your on your platform and you start putting like things that represent a program. As text into that that sheet and that that's sort of everywhere ever starts and then sort of take us on how you think about you know I think there's a lot more to than this than just editing the code but maybe starting there like for me at least well maybe it starts before and how you think about what you want to put on the paper as it were or we want to put down. Um, but maybe. Take us through a little bit like how you think about those those early days and how it was approached so that we can sort of set up how it's ah sort of undergoing some amount of transformation.

09:02.16
Eran
Um, yeah I think it's all a question of balance between the human and the machine in a sense in the early early days. You had to work really hard to satisfy the requirements of the machine.

09:13.85
Patrick
Man 5

09:21.82
Eran
And the machine was kind of brutally unforgiving right? like you could make 1 single mistake. Nothing told you that you made that mistake and the whole thing would go awry when you run it right? and so over the years people had this brilliant idea I think fort run was the first. Ah, that you can use the machine to help the human deal with the machine which is I think the idea behind the compiler. The the early compiler is is is exactly that like help the human write something that is slightly higher level. The the compiler will do some work to.

09:48.60
Patrick
Okay, yeah.

09:54.99
Patrick
So.

10:00.41
Eran
Check it and maybe give you some useful errors and then the machine would run it for you and so this is kind of like really the early idea of having a machine help the human program it and making it more forgiving in a sense. But yeah.

10:14.66
Patrick
Yeah, hang I was right? there. So maybe people people don't don't realize or or know I mean I wasn't exposed to it initially and then found out pun later. But so originally people would write literally the hex codes for assembly to like you know, basically script the exact. Flipping of the gates inside the microprocessor. Oh this is my background I'll get here all day I'm not going to talk about this but like you know, actually writing hex that is stored in an eprom or or whatever and the you know the cpu actually executes was like step 0 the very first people who had nothing else I guess that's what you kind of got to do then people realize.

10:45.25
Eran
Um, threat.

10:51.33
Patrick
Oh hey, hang on. We can use I believe the word is mneummonics right? like I can say hex code. This is actually the word mov moved right? and and why it wasn't longer. Yeah someone else but like mmov you know a branch shift equal b and e branch not equal right? like these all these stuff and moving the registers and still thinking about the physicality. Ah, the compiler then then the very early thing was like a 2 pass assembler right? So like I could use labels so I could use a label for a line number or an address and use something else in the compiler would scan through once pick up all your labels figure out where they go and then scan through again. That's super super low level. And so so what you're talking about for this idea that like you don't need to write like 1 to 1 ah assembly instructions was like yeah I think I agree like a very early breakthrough in in how to get the machine to do the work that you really didn't need to be doing.

11:39.12
Eran
Yeah, and I think since then I think there's been a lot more kind of development in how the machine can help you you mentioned syntax highlighting earlier but also all sorts of.

11:52.42
Patrick
Yeah, sweet.

11:57.21
Eran
More sophisticated compilers that can give you really deep error messages on what you did wrong and also linters and static analysis that can point out common errors and maybe even suggest corrections and. All these things that make our lives easier but at the end at the very end programming is still extremely unforgiving, right? If you compare it to having a conversation in natural language is still ah you can spend the whole day. You know like flipping.

12:22.56
Patrick
Sure yeah.

12:31.80
Eran
Because you flipped to parameters to a function or just forgot the semicolon somewhere right? and this is like extremely unforgiving even even today right? and it's been a while since fort run. Yeah.

12:32.67
Patrick
That.

12:39.97
Patrick
Yeah, so ah, that's true. Um, okay so I think people probably know like what syntax highlighting is and if they've had inix where they probably kind of get that So static analysis though maybe can you explain like what static analysis is.

12:55.40
Eran
Yeah, in Essence it's really kind of like an expansion of the compiler to check properties that are more than maybe just type checking or the standard things that the compiler checks to more sophisticated things maybe properties like. I know your program does not divide by 0 or you don't have a no reference or no overflow in properties of that nature and all the way to like full program verification which is checking that your program satisfies. Kind of functional logical Specification. You know that a given function that is supposed to sort an array actually returns an array that is sorted and and check that statically meaning without running the program right? So The static part here means that. I'm not going to run the program I'm going to staically check it at compile time and give it the result and some of the listeners may like scratch your head and say like but wait this sounds like something that is undecidable because. If they've heard about kind of the whole the whole big problem say like wait. Can you check that the program terminates probably you cannot and so indeed the problem is undecidable but you can solve approximations of this problem.

14:07.96
Patrick
The halting problem.

14:24.60
Eran
And typically the way that static analysis works is that it gives you conservative errors or conservative reports meaning that if it says that there is no error then it's guaranteed to be correct, but it may give you false alarm saying hey your program may divide by 0 which actually doesn't and so that has been um, quite useful at the end but it is also often quite frustrating for developers because they chase down all sorts of. Ah, reports that turn out to be false alarms and and that can be really frustrating but but yeah.

15:04.99
Patrick
So I think I think like yeah I mean so I've run static analysis before and I mean I think the compiler does you know some form of static analysis and even now like the better but like separate tools often you know, go in more depth and this frustration you're expressing ah was was sort of my experience that.

15:13.23
Eran
Um, yeah.

15:21.78
Eran
Are.

15:23.34
Patrick
You get a lot of stuff where it sort of just gets confused which already we're sort of talking about the computer doing more and talking about getting confused or not understanding and we're talking somewhat about like humans have some intent when they write their code but then how they express it may not match and then something else is trying to like understand it. So when we say like the computer tries to understand what you're trying to do or tries to check for a divide bier like what are we actually meaning there.

15:48.27
Eran
So Yeah without like getting no all academic here I think the kind of the the right view is that the the static analyzer or the the machine. Let's call it is. Constructing some abstraction of your program that it can reason about and thattruction does not always match your idea of what the program does and this is where the kind of the confusion or the mismatch comes from and is also the reason.

16:13.99
Patrick
And.

16:26.35
Eran
Sometimes or often these tools cannot explain why they got what they got right? or not in a way that you would understand it not not in a way that would be useful for the human so that the chain of reasoning that led them to the conclusion that you are kind of amazed By. Or or shocked by is not easily explainable to to human. But you're you're spot on in the in the point of kind of understanding the intent and communicating intent to the machine and all all these questions are really central. Both for program analysis and and program synthesis. How How do you know?? What is it that the the human was trying to do.

17:12.64
Patrick
I mean I think like when I tried to explain to people who aren't in programming like what debugging or what what these things are like I just get blank stairs but I mean for people who have programmed a lot I think a lot of people experience that where. You write some code. You have some intent you you run it and even it turns out that actually the computer got it right? and you got it wrong that you thought you know a number you you coded better than you like solved your own problem and I and I think for me the interesting thing about you know, static analysis or even just.

17:34.21
Eran
Are a.

17:45.86
Patrick
Compilers adding that to their repertoire over the years is like the number of things you can hold in your head at 1 time. So the interaction between functions and that you know oh hey you're calling this thing over here and it has this or that and did it really is well I come from a cc plus plus background so like. You know for me, it'd be like can this function ever return a null pointer. Well if it's simplea. Maybe it can never return a null pointer unless a null pointer was provided into it. You know you you can kind of start keeping track of all of those things and ah we we know a computer is really great at you know, doing sort of you know, repetitive things very quickly and so. Holding all of those simple functions in its head. It can do those you know, sort of bounds checking like what is the biggest number that this could get is it an overflow or underflow and even if it can't tell you you're right or wrong. What I've seen be useful is that sort of cooperation where it's sort of come back and tells you like hey based on what I see here right now like. This is the range of values. You can sort of expect out of this and that's when you sort of start to see oh wait. There's actually this like iterative thing where I'm doing something the computer's telling me what it thinks I meant to do I'm telling it vet you know and you sort of do this happens to me I guess more now. Like the error messages are getting better and whatever versus ah when I first started out what I would find myself doing is writing you know, enormous blocks of code and you know trying to run the program as a whole and just see if the right thing comes out at the end.

19:05.98
Eran
Yeah, absolutely so that's exactly the progress that we're seeing this tight loop between the human and the machine that the human is doing something the machine is like giving you feedback and now essentially know over the years we are. Getting closer and closer to working together with the machine when you write the program. What? what? you described effectively is kind of like the iterative discovery of the specification right? when you start programming you have kind of a loose idea. Of what it should do. But you don't have all kind of the edge cases and all the you know subtleties because you know you start with Highlevel thought of high-level spec and as you write the code you start to discover and unravel kind of the kind of the low-level details and the hidden complexity. That is in there and what you described is the machine kind of helping you unravel that as you make that progress and I think this is also where synthesis comes in which is the idea that if you express your intent clearly enough. The machine can actually predict. What is it that you are trying to do. From your intent and from context and complete the code or complete the thought for you in a way that also kind of prevents you from falling into the the standard or like the common pitfalls around that area.

20:35.74
Patrick
Um, yeah, ah go ahead. Jason yeah.

20:37.75
digitalghost
Yeah, yeah, that made that makes sense I think I think one of the things that that is really I think where program synthesis becomes important is is in figuring out all of the assumptions that matter and and the ones that like for example, you might have a function that just takes a number and increments it. And then some static analysis tools says oh but you know you could have passed in the biggest possible integer ever and now your program will will not work or you know will will overflow and it's like okay you know yes that could have happened but no, you know like like it's not useful right. And so and so it becomes as you said this symbiotic thing and so I think one of the big challenges is how to know what? what is ah you know what is what what sort of ah errors are useful for people that seems to be kind of where all the magic has to happen.

21:25.29
Eran
Um, right? I think it is exactly why I got excited by Program synthesis as opposed to conflict static analysis tools. So I've worked for I know several many years on static analysis tools and really that. As you said the symbiotic thing with starting analysis. Tools is quite tricky because you have this thing that is always complaining and complaining about things that are kind of like. Hey I don't care about that. That's not the problem here at all and so it actually ends up distracting you more than helping you. So. It's ah, a symbiotic thing but there's like this ah nitpicker that is like complaining about the.

22:09.33
Patrick
Um.

22:12.67
Eran
Immaterial stuff and distracting me from my actual thing and breaking my train of thought and and this is why I think that's the challenge with negative tools that complain all the time and this is why I find program synthesis so compelling because it says hey around I see what you're doing. This may be really helpful for you like this piece of information or this next line of code and I say you know what I don't care. Let me keep on typing I'm like I'm on a roll So I'll keep on typing I won't even notice. But if I'm like stuck for this extra fraction of a second. And I look at the suggestion of the tool says. Oh yeah, That's exactly what I wanted. Thank you Dear Program synthesis and I can consume this and keep on going so rather than complaining it is suggesting things and I think maybe the the simplest analogy is kind of like. Assume that instead of type ahead on your phone. You had just a spell checker that complains all the time when you make the typing mistakes right? and so type ahead is infinitely more useful right.

23:12.76
Patrick
Um, yeah what yeah I mean I think like to to take like a very specific example I guess so so you know Jason's thing like I just write a function called you know increment or plus 1 um, and you know the the thing is complaining squiggling lines everywhere being like potential overflow like no bounds checking. Whatever like you're right? That's really annoying and it may I guess there's like as programmers progress or even like their understanding of it what they want to do as jasonson pointed I'm going to be like yeah, that's not really prior to I don't really care.

23:40.17
Eran
Um.

23:48.64
Patrick
But on the flip side I know that is a risk and if we start talking about like how components get reused in ways that didn't you know, get expected if the tool that I'm using says you know hey actually let me add in the bounds check for you then unless it's performance critical again. My background like I Probably let it do it right. Like oh if equal to intmax you know, just do nothing like okay well at least it didn't increment but at least it doesn't you know, overflow and give me a number smaller than what I put in so I can at least say that you know now I know this function. Never you know shrinks and only grows but maybe is equal in some small case and so having this synthesis like you say it.

24:18.85
Eran
Are.

24:27.12
Patrick
Is actually in some ways applying it useful more complicated because you first need to Understand. There's a problem and understand like an acceptable solution that like hey an acceptable solution here is to bounce check and do nothing to bounce check and throw an exception. And what Framework I'm in what language I'm in I Guess like that could vary wildly. Yeah.

24:45.79
Eran
Yeah, in a sense it is kind of more complex but it's also more in your flow right? So abstractly or correct that I need to understand more but I need to act less in a sense I need to look at it and say yeah you know I don't care about this and like.

25:00.22
Patrick
Yeah.

25:05.50
Eran
Whereas with the static thing I'll have to work for the tool to satisfy it right because I'll have to like add ignore bounce check on the thing or I'll have to do something actively to make these things stop complaining and and I think that is the frustration that a lot of people have run that. Think Synthesis is kind of like the the cure for a lot of these things.

25:28.45
Patrick
Do you find like you know when when you talk about static analysis or or Synthesis. Do I mean like some languages aren't used so heavily anymore. So Maybe excluding those but of of languages that people would encounter every day. Do you find that like people's acceptance of. Those kinds of tools varies based on like the kind of language they're using or the kind of development they're doing are people generally like pretty open to like you know having the computer help them out more.

25:59.00
Eran
Yeah I think people are very open I think there's kind of like the the bottom 5% of Developers know the really really new ones who don't know what's going on. Are going to get really confused by by synthesis tools or potentially confused because they are getting these suggestions and they don't know what is it that they're getting and why so it's kind of like it's going to be tricky.

26:26.15
Patrick
Is.

26:29.47
Eran
And the top like 1 % of the developers who are doing like device driver development one off thing algorithmic this or that ah the suggestions are not going to be probably on target because their intent is so kind of 1 ne-off and complicated that this doesn't match any of. Kind of like the common distributions of how people write code right? So either. They would need some specialized model for device driver development which is kind of like almost its own language right? It's like its own set of idioms or they or they would rather not use any tools because also.

26:59.10
Patrick
Right? yes.

27:07.79
Eran
You know they work in vi and all the stereotypes around that right? so.

27:08.69
Patrick
Um, yeah. Um, yeah I mean I I think like we've had those editor debates before I think even on this show. We've we've talked about it and I think people change over time. Um, and I think you can get lots of tools to do lots of things depending on how how much you're willing to to sort of spend on it. But for me the realization that I've had of where I am now at least is ah this this computer cooperation which is again that the computer just as simple as hey, there's you know this function where is this function coming from and sometimes it actually turns out it wasn't the function I thought it was you know it's pulling it from.

27:49.93
Eran
Are.

27:50.75
Patrick
From somewhere else and having used various tools sometimes that is a guess based on you know, code match and sometimes it's based on. Actually you know, understanding how it's being built and this is leading me I am I am going somewhere and that is that you know. Across to different platforms different codebases different Frameworks There's a lot of difference. How how does a tooling sort of like we said builds an abstraction but is it like just like operationally how does that work if if we have programs in C Plus Plus Java Python like is that intermediate common enough. To be useful and reasoned about you know across all of them and it's you know front ends and back ends into and out of those things or do we need sort of like some understanding that differs you know like you were saying so for a device driver you might need something just entirely different how like common or unique are each of those.

28:38.13
Eran
Um, this.

28:43.95
Eran
So yeah, it it becomes you know it's hard to discuss this in the abstract. So I think we need to to contradictize it contradictize it a bit more so most of the citizens tools or.

28:44.42
Patrick
Scenarios.

28:51.46
Patrick
Um, okay sorry sir.

29:03.19
Eran
Um, let's say the ai for code tools do have some semantic aspects that are language specific. They have some let's call it extraction procedure that extracts some. Representation interpreted represent presentation from the language which includes information about maybe types. Maybe how data flows between variables. Maybe some other things which is quite language specific and they extract it to a common presentation much like a compiler does. Before we generate this code for the backend. So for people who don't know like you know Gcc or something like that standard compilers. They may have a lot of frontends and a lot of backends but they communicate by extracting no by first translating the the frontend language orbit. Source language into some interpret presentation and the backend works of that so similar to that model stabbing an ass tool or program synthesis tools also have typically front ends that extract some semantic information to an interpreter presentation. And then the the entire backend works of that. So yeah, there are some language specific. Let's call them features but most of the machinery is is language agnostic.

30:26.90
Patrick
I see so so I know I don't know too much about gcc other than it's gcc. So we'll talk again. Talk Aboutlang and then I maybe like to contrast it with like jvm or you know python so for for many languages that can be compiled by claim clang has this I r this intermediate representation.

30:34.40
Eran
Hey client. Yeah.

30:46.72
Patrick
And it's actually a very powerful thing because anything you can get into the intermediate representation. You can get machine code out for with any backend that clang support. So you know power pc x eight six arm you know whatever your specific and if you want to write a new you know.

31:02.86
Eran
Is.

31:06.30
Patrick
Post system is just as simple as you know writing another one of these backends and then optimizations can take place in this intermediate represent. Okay so Java has something I guess a bit similar right? You compiled to the sort of the the bytecode and other machines can target to that bytecode I don't know what it is is for python.

31:16.62
Eran
Um, show fight go death.

31:24.34
Patrick
But once they're in these representations and and we're sort of at that you know intermediate how similar are like the programming constructs in pyve never really thought about it like in python versus you know Java versus sort of like what would have come out of c plus plus.

31:38.76
Eran
Yeah I don't think they're necessarily very similar at that level but kind of the the concepts of dynamic binding or or all these kind of like fundamental program language concepts are there. Ah, the modeling can be quite involved. For example, if you've ever looked at how Scala is compiled to the jvm yeah, um, if you had the kind of I guess maybe misfortune of looking into these details this this is this is extremely extremely involved. Ah.

32:09.73
Patrick
Um, nope.

32:16.58
Eran
It's really beautiful conceptual and engineering and work by the scallaty. It's It's really amazing, but it's really complicated.

32:24.45
Patrick
Sure sure, um, okay, so yeah, so when we have the the static analysis tools and and synthesis tools and and we have them per you know, kind of of things someone is doing ah how I mean I guess we can. Can sort of like keep moving up the stack so you have your codebase right? So I have I have my codebase and how my codebase behaves maybe very different than jasonson's Codebase. We do entirely different kinds of programming. So how did these tools sort of balance the like like you sort of said the meat of the distribution this sort of like average case.

32:59.92
Eran
Um, yeah.

33:02.92
Patrick
Versus the tailored case of hey on this project. We've made these I don't want to say artistic these ah opinion based choices. You know like how to how does the how is the tooling sort of balance between those.

33:13.70
Eran
Right? So so typically the tools build some universal model and that universal model captures how code behaves in the let's call the common case in the wild. Let's say I look at all the c plus plus projects on github and I will get some abstraction of what these projects do how they're supposed to behave I'll get some distribution of you know the the expected code completions or code predictions that I need to do for these projects. Ah they would work. Quite well for the majority of New C plus plus projects. But if you have made your own opinionated kind of decisions that are veering off significantly from let's call it the general population.

33:57.48
Patrick
Yeah.

34:08.36
Eran
Ah, genpop then you would benefit greatly from training a custom model for your project or your organization to kind of capture these notions right? And so the the bigger codebases effectively. The more you would benefit from having your own private model because then it will to a better capture like how you do things right? How your team is doing stuff.

34:28.42
Patrick
Um, So yeah, um. There and so then I mean I guess you're starting to to veer Obviously where where we're going but the static analysis coconleach I mean doesn't have to always be done by a train system right? I Assume that.

34:49.37
Eran
Um, yeah.

34:52.30
Patrick
Prior These were things that were hand done So hand hand modeling hand feature feature extraction. You know hand suggestion and tuning and then you know.

34:59.11
Eran
Yeah, that that's exactly right? So maybe there's like kind of a pause that we need to make here and kind of distinguish I guess I know if this it's the second third or fourth wave. So I'll not put a number on on kind of like which wave is it of the static analysis tools. But let's call it the previous wave.

35:10.16
Patrick
Ah.

35:16.35
Patrick
Um, sure.

35:18.53
Eran
Static analysis tools uses like hand-coded rules that say oh you know if you call foo and then you call bar then this is really a bad idea like if you if you check whatever Java to say.

35:28.31
Patrick
And.

35:34.81
Eran
If x equals null and then the next line says x dot two then this is not a good thing right? because you're likely to get an na reference and so these are like hardcoded rules that capture the common case they are manually crafted rules and this is how like linters. Like e eslint work right? They have like ah I I wanted to use like the s word but they have a bunch of a bunch load of of rules that were written over the years ah that capture a lot of like common. Anti-patters and this may not be the antipatters for you and your project and this is why you get a ton of kind of complaints from these tools because they're capturing generic things that was like the previous generation of tools. The new generation of tools is using Ai. To learn kind of what is it that is being done in your code bases. What are the patterns. Whether are the antipatters. What are things that should be avoided and is actually using that information to give you much more targeted kind of alarms and reports on your code in in case of checking. And also much better predictions of what code should be written or how to complete your code when when you're doing the program synthesis right? So this is kind of like the difference between handcrafted things and learned things. And the the reason that we can do that we can learn all these ah rich information about your project or about code in in the universe is because of the progress that has been made in recent years in starting analysis technology. In machine learning algorithms and models and also in the computational power. So we're just you know we can throw huge gpu and memory and datasets at the problem and kind of train models.

37:36.70
Patrick
If I.

37:43.12
Eran
That are able to capture information or rules that would otherwise have to be handwritten by experts.

37:47.97
Patrick
So when you're writing these handwritten rules you're saying you know this set of operations can cause like we talked about before overflow or underflow or undetermined behavior or it's my opinion that. Ah, if you return a value. You should always use that value and so like I say that's a rule right? um.

38:05.48
Eran
I Mean yeah.

38:07.91
Patrick
So some set of experts deems you know, sort of what what is good or bad. What are the you know when you when you analyze codebases and you know sort of try to apply machine learning you know in my head I'm trying to think like how do you get those sort of quality metrics I mean that the code compiles is insufficient.

38:25.35
Eran
Um, yeah I Yeah I think that the crux of the matter is is specification at the end right? like that The isn't that I say ah.

38:27.42
Patrick
That the code runs is I mean maybe that's how yeah that seems a bit tricky. So how do you sort of yeah, go ahead.

38:42.42
Eran
Ah, value that is being returned should be assigned somewhere. This is a specification that's a property and that property is probably kind of like a hygiene condition right? It's like it's something that is good to have regardless of what your program is doing so that's kind of for like. Ah, generic universal specification that should hold anywhere. Allegedly right? and this is why we check it and I don't know how to check for your program that you know a student class should always have the id field assigned because. As a general guru I don't know what is a student I don't know what is an id and I don't know even how to express this as a general rule and I'm definitely not going to put it in the list of rules of eastlint to check across the universe because most of the universe does not have. Class student and a field called Id so this kind of like specialized specifications for your project for your setting are exactly what the machine learning Algorithms can pick up and check for consistency off right? and then. More importantly, with with program synthesis. They can generate the right assignments to make sure that as you're doing these things you always assign the id of the student right? They can make sure by construction. That you're using these classes or using these piece of code the way they were intended.

40:13.22
Patrick
Yeah, so maybe to like I'll use. Jasonson's term I like here double click on that for a second that. Ah yeah, we we go into this that. Okay, so I've seen this you know on on you know hacker news or Reddit or whatever someone trains a hidden markov model over a codebase. And I can generate something that on firstpass looks like code so and and to kind of like unpack that a bit. It's not my field but like what I understand about that is I can generate new code which matches the pattern or statistics of of your code base right? So whenever you call this function. You know. Insert new student into database everywhere in the codebase you do that on the left-hand side you always you know say bulleing successful equals. You know this much and I can tell you when I emmit this code I always put bulleing sick but I don't know why you do that or why in you know this other case and if it split fifty fifty then

41:00.95
Eran
Um.

41:06.66
Patrick
You know the generation will 50% of the time. Do it 50% not right like I can match this. Ah so so I think people probably have used tools where they've seen that pattern matching or hey other places in this file. You've always followed this word with that word I mean I've used those tools before I didn't find them that useful.

41:22.76
Eran
And.

41:23.54
Patrick
So what is the you know objective when you're doing this training of these models that differs from just sort of matching the statistics and actually sort of doing what you I think you were kind of alluding to like the right thing.

41:33.86
Eran
Yeah, so so I think it's ah, kind of the difference between ah, a bicycle and a spaceship. The essence. They're kind of like you know doing the same thing they're like they're vehicles. They're moving stuff but 1 is just like insanely more powerful than the other and really it becomes to a question of how powerful are these models in the ability to. Tailor the context in which you make the prediction and generalize over that and so we're kind of these days we're using models with hundreds of millions or billions of parameters neural networks with billions of parameters to solve kind of this. Exact predictive question of here's like the context that I have in my editor and what is it that I should be typing next and this model contextualized not only on you know the last 5 words that you wrote which is like hopelessly naive. Ah, they contextualize on the entire context that you have in the file including natural language including other peripheral information from the project including all sorts of other signals that you have in in your environment in order to make the prediction and. And this is kind of being able to contextualize and generalize over that is the magic that gives you really accurate predictions that people appreciate and can use as opposed to just you know I flip a coin and I suggest that the next word should be. Either you know, full or bar right? Like yeah you did like db and I I guess either the next word is ad or remove it's like and so it's much more the models are just like much more powerful than that and yeah.

43:38.35
Patrick
Yeah, so are the I guess like you know again, like for people who who may have be aware I mean is it that you have a sort of hybrid system where you're trying to actually sort of like imbue some human architecture to these models or are you sort of just setting up the problem. In allowing sort of an end to end solution to become trained.

44:01.67
Eran
Yeah, so you know like in reality. All these systems are not really end to end just because of kind of the engineering cost of doing the inference end to end is typically. Prohibitive and you need to do a combination of several models in order to get the response on time and then there are some bias using semantic information and again there are there are a ton of details that I'm not sure that this is useful to discuss here. But. Yeah, ideally you would like to have it completely end to end but it's in the world of practical engineering you need to do something more sophisticated than that. Yeah again again.

44:45.12
Patrick
Yeah, that makes sense.

44:49.20
Eran
Just in the we're talking and we're working in the realm of like near real-time synthesis right? You're typing stuff and you have to generate these predictions of what comes next in near real-time to be useful and this is where the engineering gets really clever.

45:05.24
Patrick
Ah, that's what I was going to say so I mean I guess it's 1 thing to be given an infinite amount of time to make a suggestion versus I'm going to be typing it and you have to beat me to it or it's not useful and so.

45:16.54
Eran
Um, yeah.

45:19.64
Patrick
Yeah I should mention I can imagine the amount of engineering that goes in from Oh hey I read an academic paper that says you know we can you know and you know suggest code completion at an you know X percent accuracy to actually being able to deliver that in an ide. So Maybe to talk about that a minute So I mean you guys have built. Built a system to do some of this this is you know why? you've thought about this so much and you know trying to integrate it at an architectural level. You know how does that end up working so you know I'm typing in my editor and you know.

45:40.13
Eran
Um, and.

45:50.97
Patrick
Words are appearing on screen. What's happening sort of in the background to to end up giving these suggestions.

45:54.73
Eran
Yeah, in the background. There's um, kind of I guess half a million lines of rust code that are running under the hood and doing. Very efficient neural network inference that involves between 2 and 4 different models that are being kind of combined together and have different tradeoffs in terms of response time and accuracy. And you know if you're typing slightly slower engineer may catch up and you may get slightly better predictions because the the stronger model kind of made it in time and if not, you may be getting results from a slightly inferior model and it's really yeah. The the challenge really for a lot of it is actually the balance between the human and the machine. How do you make predictions at the right places that do not interrupt the human all right. We're we're kind of obsessed.

47:01.72
Patrick
And.

47:06.99
Eran
On these exact kind of finding the balance of when to make predictions what kind of predictions to make where what should be the confidence from the model before we throw it in your face. What other kind of barriers are there before you interact a human. And how do you get into the flow of the human in a natural way such that really? Ah, the human is kind of easily can easily ignore it if it's not helpful but actually consume it if it is helpful all right? and and there's a lot around that. So um.

47:39.77
Patrick
Yeah to to pick like maybe just even an example there like how does that in practice. Do you guys approach our problem like 1 example I can think of is how much code to suggest so there's I could complete your line I could suggest your function I could suggest your whole and I can't probably program yet. Maybe we get there in a minute but like.

47:49.47
Eran
Um, right.

47:55.87
Eran
Yeah.

47:59.24
Patrick
You know how do you guys sort of balance off like trying to figure out how how much to end up sending up onto the screen.

48:03.93
Eran
Right? So luckily we've been doing this for a while and we've been serving millions of users. So we actually run some experiments in the wild to find out like what kind of prediction of horizon. Is most useful for people and it also depends on kind of the intended again depends on context but let me put that put that aside for a second. Um, it turns out that what humans like the most is. Pieces of code that they can make snap judgment about the correctness of so the the kind of the tight loop that works best is the the human writes something or there's sufficient context the human writes something and. The machine suggests something that is easily identifiable as useful so like kind of let's say complete to the end of the line but something that is very idiomatic. So if you say it you will know that. Yeah, that's what I meant right? So this is kind of what we call internally they remind me model.

49:09.34
Patrick
And.

49:16.97
Eran
It's kind of code that I've wrote now I've written it a thousand of times I know what I'm going to write. Ah if I ask a human next to me they know what I'm going to write like my my classical example for that is read the Python file line by line. That's like a code I wrote.

49:26.10
Patrick
Sure.

49:31.74
Patrick
Man.

49:34.88
Eran
I don't know how many times in my life probably thousands of times in my life right? And if I see it I know that it's correct I don't need to kind of ruminate about it. It's like yeah, that's it and so that's kind of the classic case in which I can complete more than 1 line because it's really ideomatic when you see it. You know it's that it's what you need. It's kind of code that otherwise you would copy from stack overflow that's kind of the that's kind of the the idiomatic thing to to think about it right.

50:03.37
Patrick
And so all of this is happening sort of local on the developer's machine and then like how does how does that split happen like obviously some stuff probably needs to happen in ah in a sort of server somewhere.

50:15.00
Eran
Yeah, so so what we do technically what what we do in in tab nine is we allow you to configure the architecture or the the kind of. Um, configuration that you'd like to run in you can run everything completely locally even air-gapped so you can run it without network at all or you can run some of the inference on the cloud which obviously gives you better completions because you run with stronger Gps than what you would otherwise have. Ah, cpu only inference on your machine or you can run completely on tab 9 cloud and you you control or you can create your own server in your organization and run it so you basically you can control which kind of models are being deployed and where do you want to deploy them I think that's.

50:53.57
Patrick
Sure.

51:07.78
Eran
Ah, really useful for for developers to be able to control where inference happens, especially ah because inference does require some context from your ide right? So you may be quite sensitive to where this stuff is being sent. Depending on mostly on policy of your workplace. Yeah.

51:27.25
Patrick
Yeah, that can vary wildly so before we we dive into like you know talking about tab Nine Nine specifically sort of 1 last comment here. Is you you mentioned trying to maybe come up with how many waves and and you refuse to give a number which is fine. Um, but then like going forward I mean what do you sort of see the future I mean since. Was in school everyone we said oh maybe one day we'll just you know, tell the computer what we want and it'll just you know, write the program for us and people scoff at that and you know maybe that's not exactly the future that that shaped up but I mean and and it's fine that this probably gets highly into opinion. But you know if we sort of look. Maybe.

51:59.13
Eran
Um, yeah.

52:03.47
Patrick
Enough out sort of 10 years you know 20 years what do you think will be. You know the direction. We sort of head in for how developers interact with with their code.

52:11.36
Eran
so so so I think first of all, it is pretty safe to say that you know two or three years down the line. All code will be touched by Ai in y 1 way or another either. It will be generated by Ai in parts or it will be reviewed by ai. Or tests will be generated by I something will be done by Ai to automate the mundane parts of the job right? There are so many repetitive work being done and a lot of it really can be and should be automated by by existing. Ai machinery and I I believe that this is already happening and is going to accelerate as these tools become you know more mainstream. Um, so I think that's like an easy prediction to make and I hold it very strongly looking 10 years down the line doing this is really like speculation opinion I think in specific domains it is going to be the case that you're going to see a lot of automation like if what you're doing is writing I know components for. You eyes of a particular area right? I know youi for medical devices right? It has to be very specific and there isn't and there isn't that it has to be then a lot can be automated from intent. The isn't that it has to be specific or domain specific is because again.

53:34.60
Patrick
Sure Yeah, and.

53:47.92
Eran
It's all a question of intent. How do I express as a human the intent to the machine and this intent is always going to be very partial otherwise I'm going to have to write a lot of English prose to express What is that I want and this English prose is going to be ambiguous.

53:57.97
Patrick
If. Now.

54:04.50
Eran
And this English prose is going to be harder to debug than than actual Code. So I don't believe that in general purpose programming is ever going to be replaced by English that that sounds preposterous to me. Maybe I'm wrong. But in domain-specific things I think we're going to see like a lot more automation. But it's not going to be I conjectured that's going to be more along the kind of low code. No code idioms that you know like if it's similar to weeks in a sense of doing website right? If you're doing website Design. You can yeah can get along a lot done.

54:29.36
Patrick
Um, yeah, yeah.

54:36.76
Patrick
Um, sure. Yeah yeah.

54:41.54
Eran
Without writing a single line of code but this is kind of domain-specific system that can assume sensible defaults when you don't provide them right? and so you can provide 0 information almost two weeks and it will do something sensible because the the defaults have been baked into the system. And and this is going to pop up more and more for more domains are going to be automated I think in that flavor and for general purpose programming which is always going to be around right? I don't think anyone should be worried about their job. Ah, the the job is so much about specification discovery. And not about specification implementation. It's not like no developer gets like 5 pages of english descriptions of the function and then goes to implement it. They get the higher level specification and what they actually do is like carve out the real specification with all the details from it. And programming is about specification discovery really it's not about translating english to code right? then and then.

55:47.80
Patrick
Um, yeah I oh sorry just a riff on like what you're saying um I mean I think we have to get there and the reason why is because something I've noticed happening and and it makes sense is when we say programmer I mean we tend to think about you know someone at a. But they call that I always forget what the latest acronym is but like a Silicon Valley company or startup or whatever but in in practice there are way more people writing code outside of those areas than and then inside and I think that's going to continue to grow as software permeates just everything I was talking to a gentleman just like a few days ago. And he was saying oh I have this idea but like you know I don't know how to find programmers and but and I'm just thinking like yeah like I mean what you're saying sounds cool but like you're going to have to convince somebody who can be paid a lot more to do something a lot more worthwhile and that's not to say your idea isn't it's just like I know was very I didn't say that to him right? but like it's not that your idea is bad. It's just like.

56:43.26
Eran
Are.

56:46.58
Patrick
You're not you so niche that like you the return there is just never going to be big enough to pay. You know someone? what you know they can do you know at 1 of these other you know you know larger addressable market companies and so I think as you look across just every company needing. You know. Some amount of programs to be written in software to be developed. We have to figure out collectively or I guess someone figuring out collectively. How does the like empower people to do program writing at the level that can be trained more easily rather than requiring this you know, sort of. Academic background you call it sort of general purposepose program and it's a a fair term for it. You know, being able to fully debug something write completely custom greenfield code. You know this kind of stuff but instead just turn out another version of something and makes wall tweaks and. You know people in mom and pop shops are going to have to be able to do that and something like you're saying is a way that happens I don't know it's the way it happens but it's a way we sort of get this st stratification where programming becomes a much more diffuseed term all the way from this sort of low-code nocode. Down to the people you know, optimizing assembly inter loops for you know Microsecond improvements on you know, frame rates of aaa video game titles.

57:59.53
Eran
I Think there's another trend that will for sure become stronger which is making programming more forgiving in general. Ah like I write a program. It should run and do something. And we've made huge progress moving from Cc to fast to like Python javascript right? The barrier to the barrier to get hello world right? The time to Hello world has shrun considerably moving to these languages.

58:21.31
Patrick
The 1

58:33.99
Eran
And I think we're going to see more of that by the environment making also some sensible assumptions if what you're doing is writing like you know some website using Vue React whatever is the cool latest. Who think write website frontends then there are sensible ti defaults that could be made simtifying a lot of the grut work that has to be done right now. I think this is another trend that will continue to. Grow with the assistance of of Ai because you do need some sort of intelligence to figure out how to deal with the complexities there.

59:15.14
digitalghost
So yeah, one thing I've seen that's been really cool is ah I mean I saw this first with wolf or alpha and now there are some startups doing it but basically ways to query knowledge stores like query databases and and you know you're seeing things like. Give me the average revenue for all the people in Switzerland all the customers in Switzerland and just from that english sentence as you said, that's something very domain specificific. Um, you know if you just have an arbitrary database called foo and all the columns are called bar and Bas like they can't do anything but. But it it can pull out unique things like oh this column is called country and and I just know when people make a column called country I can assume what they're going to do and and so yeah, you're starting to see this with databases and and those queries and I think it's it's just a matter of time for it gets it gets to to code as well. So.

01:00:03.33
Eran
Um, yeah, you're starting to see it. But it's always super subtle and from what I've seen at least you write this in english and they say but wait when I said Switzerland what exactly did I mean did I be like also the part of. Italy that is you know working in Switzerland or only swiss citizens or what exactly you know it's like you become in all these subtleties that is exactly a job of the developer to kind of like go back and say but wait. There's actually a question here. Is it the citizens of the country or no.

01:00:24.28
digitalghost
Oh interesting. Yeah.

01:00:39.16
Eran
People who work in the country or what exactly is the definition of these terms that you're using and and this is exactly where the programming language doesn't let you be ambiguous and.

01:00:50.33
digitalghost
Yeah, that makes sense this gets back to your code synthesis like well you know I've seen 10000 people ask the same question and and and you know Nine Thousand Nine hundred of them had these assumptions so we can use you know statistics to just ah you know give people a prototype and then. They'll still have to look at it but we'll get it right? So often that it's it's super useful. It's so it's like Alexa you know Alexa you know my parents have like a thick italian accent and so alexa gets maybe 90% of what we what they say right now which is which is amazing. It used to be know zero percent

01:01:26.29
Patrick
Um.

01:01:28.60
digitalghost
But but at some point it climbed up and it got even before it hit 90% it got to the point where it became useful like there was a crossover point to where they could just tell alexa you know set a timer or you sit to the timer or whatever did terrible mom accent sorry mom but but they do like you know.

01:01:40.33
Patrick
The fun.

01:01:45.46
Eran

01:01:46.52
digitalghost
Set a time or so like that and and then it's a correct enough that they you know when it's wrong, they just to try again or use their phone or something and it's still a net positive productivity. So.

01:01:55.63
Eran
Um, yeah.

01:01:58.49
Patrick
Cool. Well let's talk about about tab tab 9 for a minute so tell us a bit about what it's like to to work at tab 9 Are you guys currently like wholly remote I mean the world's a crazy place these days. How are you guys sort of handling that and yeah.

01:02:14.26
Eran
Yeah, so we were mostly working remotely due to kind of Covid Restrictions. We do have a physical office which is mostly empty I guess but people do come in. Ah, yeah, we have some people we have some remote people in the Us as well and we're always hiring interesting Talent tab 9 Yeah.

01:02:36.54
Patrick
Um, yeah, so but I'm sorry yeah on hiring I mean are you do you guys? do internships What kind of background are you looking for from people.

01:02:44.59
Eran
I think internships are again really hard to do remote I think you're missing a lot of the experience and the immersion and like meeting a lot of people and so I'm not a huge fan at the current climate. Let's call it.

01:02:49.58
Patrick
In fair point.

01:03:01.42
Patrick
Ah, so watch this space. Okay.

01:03:03.69
Eran
Yeah, yeah, yeah, exactly. But but definitely interesting and we're always hiring people who have like ml pl background like machine learning programming languages background. Tabn 9 works on the intersection of problem languages and and machine learning on representations of code and learning models of code and doing efficient inference four models of code and stuff like that. Where. Kind of probably the biggest trust shop in Israel and we take a lot of pride in being rust and trust enthusiasts and and dealing also with all sorts of flow level inference code. Using rust and also assembly actually to be honest, ah, and.

01:03:56.47
Patrick
Yeah I mean that's fascinating of itself I have many questions about rust and about you know this sort of like ah low latency response time. Things are very interesting I think that's ah, an area of growth Anyways, ah we can't get into that we're running longer already. Ah so um, yeah, how can people try out.

01:04:08.77
Eran
Um, yeah.

01:04:15.86
Patrick
Um, tab 9 like what is is are people able to use it is it cost on arm and a leg what it how does it kind of work.

01:04:19.43
Eran
Yeah, so tapline is completely free If You're like a developer you can download it now install it and use it completely free Forever. The the free product is very powerful and and useful. And we have millions of developers using it in their ide as we speak. Ah I think it's ah, really, really powerful that the free is almost too powerful. The free version. But yeah I'm serious actually.

01:04:45.93
Patrick
Um, ah that might be biased. But yeah.

01:04:52.83
Eran
Um, but if you are working in a team you get exactly to ah to what you said earlier Patrick that you would benefit greatly from training a model for your team and these private models are how tabb 9 makes money at the end we train private models for teams.

01:05:07.50
Patrick
That makes sense.

01:05:12.37
Eran
And you just connect your repo and you get a private model delivered completely automatically for your team that knows the kind of the idioms of your team and the vocabulary you know the entities and what's going on in your codebase and gives you much better tailored completion. Completions for how you do stuff and you can also customize it to say things like oh you know don't train on that legacy Code. We're actually trying to escape that and if you keep training on it. You get like this effect of the yeah you get the jupyter level kind of.

01:05:39.20
Patrick
Um, me yeah sure sure get bad habits.

01:05:50.48
Eran
Gravity of of the of the legacy code that you can ever escape right.

01:05:54.95
Patrick
Yeah I mean that's like anytime we point our like code count at we use protocol buffers and it generates tons of code and your line of code count is swamped by all this auto generated code and I think there that you know it used to be I always thought you know a man. Stuff's expensive. These developer tools are expensive but then now like starting to think a bit more with ah a manager hat I realize actually like programmer time is very expensive and anything that helps people sort of go faster and not break things and make mistakes oh wait I think I'm misquoting anyways, um, you know anytime you can sort of help people. And that domain like it's enormously valuable and I think people are catching up that like programmer efficiency is a huge bottleneck.

01:06:37.93
Eran
It's a huge battleneck and we see you know a lot of improvement when using tab nine like users report between 15 to 30% improvement in in their productivity depending again, it depends on how.

01:06:46.81
Patrick
Oh wow.

01:06:53.94
Eran
Let's call it mundane ah part of your code coding is or if you're using very ah languages that are like contain a lot of boilerplate and Java comes to mind for example, yes.

01:07:11.65
Patrick
Burns.

01:07:13.11
Eran
Ah, then then it's really really useful if you're writing like frontend code. It's extremely useful I think in terms of languages. Our distribution is kind of javascript python. And Java I think maybe are the top 3 languages of of tab 9 users. Ah yeah I think it's it's extremely useful in in all languages. But these 3 easy c like huge adoption also ph p and.

01:07:44.40
Patrick
Um, ah.

01:07:45.82
Eran
Think Ph P and no rust we use it ourselves obviously for for rust. So I highly? yeah.

01:07:49.14
Patrick
Ah I mean this thing this thing that you kind of alluded to also like intrigues me because is again like thinking with manager hat like it's It's sort of not talked about and it's It's pretty expensive which is when you bring new people onto the project Even if they know what they're doing. Like getting them adapted to the the sort of idioms and styles and all of that through code review you know takes you know, Ah, probably even more than 1 to one number of hours for those new people to write the code of people to review and correct the code. But it's also frustrating. It's ah you battle sort of like. This isn't a personal thing like Egos come in like it's a very expensive number of hours drain on the team thing to bring new people up so having a tool that sits alongside of you and sort of like in a in a low ego risk way sort of encourages you to write conformant code. I Mean to me this actually super exciting.

01:08:43.31
Eran
Yeah, it's ah it's slow ego and also it's um, it's there for you in the sense that you you don't reach the code review and get slammed right? because you already get something that is the the worst case is that you've done the common thing right? So if I you're here. It lets you really punch above your weight in a sense right? because like you know I'm at least as as bad as as as the average I will not follow below that and I think actually much better and an interesting thing that happens.

01:09:03.85
Patrick
Yeah, no.

01:09:18.14
Eran
Um, with Tab Nine is that when you see the suggestion. It also makes you think sometimes like when when I use stopline like I get some suggestion like but wait. That's not the way I intended to do this So what am I missing and actually it turned out several times that there was just a new api that that they didn't know about right? and.

01:09:35.37
Patrick
Um, ah discovery. Yeah.

01:09:37.64
Eran
And people started using but I'm like yeah I haven't touched that for a long time So discover it there Even if you don't and if if you end up not using it just being aware that this thing has changed is really interesting and this is also kind of. Gives you like a picture of what's going on right? As as you're programming things that you would not be aware of otherwise so that's another aspect of that.

01:10:00.23
Patrick
Nice. So in the show notes we'll have a link to tab 9 to their Twitter handle to Aaron's Twitter handle if you if you have any questions or reach out to him or you want to check out the the product I mean it's super exciting I'm going to go try it even though you didn't name my favorite languages. Um, we're we're going to go go see how this goes and give it ah give it a role but I had in a very enjoyable time. Thank you for coming on with us.

01:10:22.30
Eran
Um, thank you so much for having me I had all fun.