 All right so Andrew thank you both thank you so much for your time as well as your willingness to come and share with us your thoughts and then with the group which we have we are so privileged to have you to be with us and we are so excited ever since you told us that this is the talk which you are going to share with us a number of people around the world has been in the group saying that they are excited and they want to be part of this so we have right now 35 people and then 36 I'm seeing this increasing I'm hoping that it will go up to 50 or 100 out of 300 people in both the groups which we have so once again thank you and without much delay I hand it over you to Andrew. Hi okay so thanks very much it's I'm honored to be hosted like this I'll start off by saying that we've got a really global audience here so hello world I excuse the cheesy reference there what I want to talk about a little bit today is programming fundamentals so I'm going to start by a question to the group and we'll take three different responses on this one what is programming let me start with that question what is programming who wants to give it a bash? Hi Krishnan here programming to me is problem-solving okay any other answers? It's a set of instructions to resolve the get the output okay one more solving problems okay so what if I tell you this right I am asked you a question there and I did that phrased in a language that you can hopefully understand in order to elicit a response that's what programming is that's it at its most simple form I want you to think in terms of programming in the following way when we call programming programming and we refer to languages we are referring to a method of communication the difference is is that we're not communicating with people we're communicating with a computer now when you communicate with a person you say something to them in order to elicit an action or a response when you program a computer you program a computer in order to elicit an action or a response and this is fundamental to how you look at what you're doing with a computer because people love to get really complicated about programming and they're like I need to know about classes and I need to know about objects etc they forget one simple rule a language is simply a means of communication and when you start looking at the differences of languages you can take this analogy even further if you look at an interpreted language something like python or ruby or any of the others versus a compiled language when you communicate with a computer a computer doesn't actually speak python or ruby or c or anything it talks machine code so your language is a language that you are giving and you hand that either to a compiler or to an interpreter they then take that and translate it to what the computer can understand and the computer gives a response to that and you get the output with an interpreted language imagine you're standing in a room and you're standing in front of something that you need to communicate with but well they don't understand you the net result of that is is that you speak through an interpreter now in an interpreted language imagine that that interpreter is sitting right there and you're talking and you say something there's a slight delay and he translates you to the computer and then you get the response and that's translated back to you that takes a little bit of time in a compiled language you write out everything beforehand it gets translated to machine language and it's handed to the computer the computer gets all of that in its machine code you don't have that delay slightly faster on the compiled language that's why you find that things like golang like c etc are typically faster than languages like python or ruby or one of the others so that's how i want you to first will think about programming now before i go any further about the aspects that we need to think about when we're choosing languages and starting to program has anyone got any questions about that analogy or any comments or thoughts anyone come on guys well i might just learn all your minds yeah hi andrew so so going by this analogy uh can we assume that okay uh so python or ruby these are the scripting languages that these are not the hardcore programming language because uh there is no compiler okay so i'm going to avoid not saying that they are hardcore languages i i've got thoughts on this but for the sake of not offending any python programmers um i'm going to say yes they are scripting languages right there's no question about that um you can write some very complicated very difficult very kind of sweet and exciting scripts but they are still scripting languages um the difference between as i said an interpreted language which i would argue that any interpreted language is effectively a scripting language um versus something that is compiled which is a native language i would call it that so yes i wouldn't say that the the scripting languages are any less hardcore you can do some pretty intense things with them but it moves to the next question when you think about it in those terms why are you learning to program what is your objective and so i want three responses on that what are people trying to accomplish when they're learning to program and feel free as well if you want to further comment on the analogy that i gave earlier hey um so i'm a fellow network engineer so i think it's quite evident from the last seven years now also where uh we're moving towards uh the net devops sort of analogy so for me the why is just that it's it's basically to get into the rhythm of handling the network boxes as well okay i see a question in the chat that i want to respond to isn't any language a scripting language yes and no um i think that the major difference that i see between scripted languages and compiled languages is that scripting languages typically when you run them they run fairly sequentially so if you write code and that code is running for three hours before it reaches a point in your script and you've got a nasty error in that script three hours later you're going to find out in a compiled language the compiler is going to go through everything to produce the machine code upfront and you're going to know about it far faster obviously that doesn't talk about bugs where the language can be understood but you've done something stupid in the code but it does allow you in a compiled language to see certain things a lot faster and i think that would be one of the other major big difference so i see a lot of people talking about automation any other responses as to why people want to learn to code yeah this is seju i think one of my reasons i wanted to know more about programming or learning is more in context of iac kind of deployment so more and more cloud-based deployment so less you know click and deploy and more coding programming based deployments our infrastructure can be managed with code things like that okay so this goes to another point right a lot of people talking about automation now automation when you look at it can be done sequentially or it can be done in parallel that's one major consideration that impacts the choice of language because certain languages are far easier to make things run in parallel than others right um threading in certain languages is definitely easier and faster in certain languages than others when we talk about automation if you're going out there to write a couple of scripts which you're going to write and that's going to be the end of the programming journey then that also impacts your choice of language because if that's your goal you can go and download a bunch of libraries you can read something online throw together a script never worry about it again and you're never actually becoming a programmer see this is such a key point because a lot of people out there start off writing these simple scripts and then choose to call themselves programmers they're not right because they don't understand the lower level of the programming and the machine that's not to say that their skills aren't useful it's not to say that they aren't important but people need to realize in learning to program that this is a journey and it will last a long long time in fact lost a lifetime i wrote my first code when i was 12 years old right that was 29 almost 30 years ago every day i learn a little bit more i learned something new i've learned that languages come and go you know if i look over the years when i first started i learned pascal i learned assembler i can still do some assembler but i think i've forgotten most of it then i learned c i wrote in php i wrote in python i've done some javascript i do golang languages come and go and the trick here is that when you learn to program if you learn the fundamentals which i'm going to talk a lot more about in a few minutes you should be able to relatively easily move between languages dependent on your needs and different languages serve different purposes but the trick to that is is knowing the languages at a fairly low level it's similar to networking right if i go um um by the way no i avoided paul um there's a reason that paul is practically dead sorry i'm just responding to the comment in the chat um but yes paul did contribute some interesting things to the programming world um regexes should be now um the the thing is if you look at imagine networking so my primary um my my primary um career is very heavily networking based and so it's a good example today i see a lot of network engineers out there and they've got ccnp or ccis and they've got whatever certifications etc and then i take them away from the Cisco and i say there's a juniper there's a knock here there's a whatever use it they don't have a clue why because they haven't learned how to be network engineers they've learned how to be vendor engineers and what i want to say to you in your programming journey is do not become a python programmer do not become a goluing programmer do not become a java programmer become a programmer understand the fundamentals of coding and and that is absolutely critical and to do that you need to view your languages just like learning any other language if i'm going out to learn chinese or french or spanish or whatever it takes time it takes practice it takes research you cannot become a programmer in three days right i don't care what anyone asks me to teach them it's not possible you can learn enough to say hello bonjour um you know huya dach whatever in whatever languages but you can't become a programmer so this is a journey that you will have to undertake and i really want that understood right now moving on to programming itself what are the fundamental aspects that you will see in almost every language let's get three answers to that what are kind of three parts that you will see data structures low statements and variables object-oriented programming algorithms and data structure syntax and semantics interesting the answers are quite different there i put it like this i would say that you have functions you have variables you have constants and you have conditionals those are the four that i would put there i i leave out objects because there is a lot out there that is not object-oriented um and objects are an interesting an interesting topic because you get languages which are heavily object-based you get languages which have no objects in them and then you get things that are kind of sitting in the middle um pro-lang would be one of those things that kind of sits in the middle there because you have methods and tied to structures but you don't have normal objects with fancy instantiation and all the rest of it now i see somebody mentioned looping statements i would argue that a looping statement is probably along the lines of a function or a repetitive conditional um because at the end of the day what is a function a function is a list of instructions that is executed if that function then repeats itself over and over and over again it's a looping function it's a set of instructions right but i want to start on this list at some of the really really kind of basics if we look at variables for example in fact let me put this in an analogy right so if you look at a computer as if it were a library right and you walk into a library you've got 20 000 books in there and you want a piece of information you have a couple of choices to go and get that information you can wander around the library for the next six weeks and hope you get lucky and find the right book by checking the title of everything not going to work so well you can go to a librarian and say hi where's this book and the librarian will probably go to a catalog system find the catalog system and go and find the library uh i mean go and find the book or you can go to the catalog system yourself and go and find the book right um and i hope none of you are really young and um have forgotten what libraries were because i don't know that i don't know how common libraries are these days you know with everything online but but the analogy holds true so with a programming language when you walk into the library you execute a function that's an instruction and in that instruction you are telling either the librarian which is the interpreter or you're going to the catalog system as in you're talking directly to the machine in terms of reference memory to tell it to go and find you some information if it has to jump through hoops to get that information and do fancy calculations it's still getting you information right now that's what a function is it's a set of instructions go and find me this when you execute that function however you need to supply some extra information that information is i want a book on this this this and this that's your variable right sometimes that information can change as you're going along or alternatively you handle it constant here is a fixed piece of information that you're going to use to go and figure out where my information is difference between a variable and a constant is really simple same information it's just that one is subject to change right but here's the big trick about all of this all of the information at the end of the day what you put in what you get out is stored in the computer's memory computers think in terms of zeros and ones because we haven't gotten to the days of quantum computing yet where things get more complicated but in a normal machine it thinks in terms of zeros and one so there's this translation and there's this block of memory and if you keep putting things into that memory eventually it'll get full the library will get full and things aren't going to work too well because well it's won't be in space if you keep taking things out you've gone take out something that's been taken out twice etc so one of the things about learning to program is to understand how things are addressed within that memory space it's the equivalent of having a nice catalogue in a library and saying here's how I here's where everything is in the memory and understanding the layout of the library because if you understand how a computer addresses data it becomes a lot easier to figure out why when you execute this function it's going hold on I'm trying to access something that doesn't exist and well I'm now going to crash because well you've just confused the hell out of me so I would say to anybody that in programming one of the first fundamentals when you're looking to understand how to program is to understand that a computer does not think in terms of strings it doesn't think in terms of integers it doesn't think in terms of floats it thinks in terms of zeros and ones and they're all memory right and you can access that memory either via your variables and your constants and let your interpreters figure out what's going on in the back end or you can also access it directly slightly more dangerous because if you access the wrong things it can crash but what I would say to any programmer out there is go and understand what is a heap what is a stack what is a pointer what is memory and how does my code interact with that memory that is it sounds a lot more complex than it is but the reality is that when you are looking at code and looking at programming if you ever want to optimize things you've got to understand that you have to understand how the computer is interpreting what you're putting in what you're putting out you have to understand how a computer is dealing with the instructions that you're giving it as well because keep in mind if I say to someone go and do task x and I give them a list of 500 instructions to complete it or I go and give them a list of 10 instructions to complete it the guy has got the 10 instructions maybe able to take some shortcuts and do it faster if I don't understand how my instructions though are being interpreted I cannot understand how to write efficient code so what is the computer doing with my code at the back end and I can talk for many many hours on on that topic but for tonight's purpose I'm saying these are the things that you need to start investigating on the back end rather than going into the details we will give you know we can have further sessions on a whole bunch of this stuff but that is fundamental to learning how to program understanding the machine at the back end before I continue any any thoughts comments etc anyone who want to say something so far what did I confuse you all and you're all going what the hell is he talking about give me some feedback come on interact I'm doing kind of programming whatever you mentioned about what things you should take into consideration so I think yes absolutely like rather than learning syntax and you know writing functions and variables but whatever single variable you declare how it is going to create in your system and how much memory it is going to consume and where it is going to create address for that right so yeah definitely these things are matters a lot when it comes to performance thank you so much for you know brilliant explanation here I think we have a guest already in the computer language 4b 06 b4 cd I would I would need to I need to pull up my hex calculator to to go and to go and decode that I'm sure I for yarn I would I would definitely need my hex calculator I gave up doing that in my head a long time ago Andrew I got a question you touched upon the zeros and ones the computer today understand and and you you briefly said that the quantum computing is is long away would you like to say some of your thoughts that the current way of computing in the zeros and ones versus if at all it's going to be real or the reality would come in quantum computing what exactly is going to change any any of your thoughts so at this point I'm going to put somebody on the spot who knows a lot more about this than than I do um Danny you've hung around in IETF quantum groups etc would you like to comment on quantum computing for us so firstly I know a lot more about quantum networking than I do about quantum computing but I think one of the first things we'll start to see as it becomes reality is in terms of the quantum cryptography space and quantum key exchange that's where the biggest threats will come in in that you can see a lot of new standards saying you know certain hashing mechanisms and cryptography mechanisms are no longer safe or not resilient to quantum computing one of the problems will be that quantum cryptography for example relies on very large prime numbers and modular arithmetic right so if you think of something like I don't know two mod two equals zero well try reverse engineer that in opposite directions so if we say x mod a very large number equals something determining what each of those numbers are so because of the way some of the the quantum computing would work it makes solving those kind of problems far far easier and quicker so I think in the cryptography space we will immediately start to see the the changes coming in as for general computing I'm really not sure I I'll add something to that you see normally as I said binary zero and one my understanding and I am no expert in in quantum computing is that in a quantum environment you will have multiple states that will go far far far beyond zero and one they I've seen everything from what I view as almost science fiction in my mind you know I that I do not understand where they talk about being able to paralyze things by effectively flipping them into the multiverse and flipping them back again so that things are all happening simultaneously the implications of being able to do simultaneous paralyzation with absolutely zero time lag because it's being flipped out and flipped back at the same point in time that's just too mind-boggling to even contemplate but I think we are a long way from seeing normal quantum computers becoming reality there are a couple of companies that have them and they're still not the fastest machines out there I mean Google's got IBM's got but we have a long way from seeing that being you know general purpose reality I'd love to see it in my lifetime because I love learning about new things but at this point I think it's a quite a way away hope that answers that question yeah thanks thanks Daniel and thank you Andrew the the second question I have is you know all these people are talking about speed if I if I may show that right everybody's talking about speed and somewhere they try to associate the underlying a piece of programming languages right from assembly to see to see plus plus and as you mentioned a couple of other programming languages came and you rightly said that languages would come and go that's the life cycle of the language and so my question is whenever all this thing is coming up how is the the computer processor is one of the influential factor or one of the key component to decide a typically what would be a typical life cycle of a computer programming language so for an example if you see there are tons of tons of programming languages are there and anybody can write a compiler and say that yeah this is my programming languages so in that sense what would be your thoughts to decide the fate of a programming language to stay okay so I'm going to answer this in a kind of roundabout way because it leads on to my next topic I'll also respond to the question that just appeared in chat but I'm going to do that a little bit later because it talks to a number of a number of points I'm going to make so it's talking about languages for a second and about optimization right and what is optimization because it goes to speed it goes to memory it goes to a number of things firstly let me say this that when you optimize code you are not just optimizing for CPU usage you're not just optimizing for memory you can be optimizing for cost you can be optimizing for readability you can be optimizing for maintainability and that I think also plays into a lot of how long language is lost and for what purpose they can be used let me give you an example so Danium and I write a lot of very low level network code at the moment and you'll have seen I've posted some examples of some of it in the chat and I've posted some of those examples even in programming groups a lot of people struggle to understand that that code is optimized for speed and very often for memory utilization it is not optimized for readability or maintainability or even maintenance cost because everything that you do when you program is a trade-off you are trading CPU for memory for readability for maintainability and those choices are things that you have to make when you look at any programming project that you're going into what am I writing for what am I optimizing for if I'm writing a script to simply log on to a router and automate a task and it's going to be doing one very simple function I don't need to optimize that what I do need to make sure is that here is a script that a lot of operational guys are going to be running if I leave the company there are going to be a lot of people who are going to be relying on that script and if something changes on the back end that requires a minor change to the script the script must be readable it must be maintainable and no big deal if well I get hit by a bus because somebody else can fix the code right on the other hand if you're writing something like a network daemon like a bgp daemon or an ospf daemon or an isis daemon or something typically speaking the guys who are using that are never going to look at the code I promise you now they're never going to look at the code but the code is going to have to be able to perform on the machines that they're running so as not to slow down the interaction with the network so the optimizations become very different a good example of this I was talking to a friend of mine who's fairly senior in amazon and I showed him some of the code that we'd been writing and he says it's interesting they have a department in amazon that deals in low-level performance code for embedded devices network devices etc I cannot find out exactly what that department does because it's so wrapped in non-disclosure agreements it's not even funny but they're the only department that's actually allowed to optimize code for speed and memory because the philosophy that amazon adopts to their code is we have 20 million servers we have endless cpu's we have endless memory it costs us nothing effectively to throw a terabyte of ram at something and to throw a thousand cpu's at that what does cost us is if that code isn't very very readable and very maintainable so that has a completely different philosophy in how you approach things that can impact the life of a language I would argue that one of the reasons that you don't see much pull out there today is because as anybody ever tried to actually read pull code as a novice it's complicated it's not easy to maintain pull code I'm sorry it just isn't right I know there are people who will find me on that but that comes down to a lot of about how you write code the languages you choose for the projects that you're doing languages that survive long term do so because they fit a particular need and those needs are different from person to person from project to project etc at the end of the day at the moment I would say that there are three languages which really have stood kind of the test of time actually four and one of them will shock you that being assembler which is you know as low level as you go see still the basis of everything and not c++ c at the end of the day if you look at python if you look at golang if you look at any of them they've all got interactions to see cgo, cython etc so you've got assembler you've got see you've got javascript not java javascript because javascript managed to make itself the language of the front end of the internet it remains to be seen if javascript remains the language of the front end of the internet in the long term because you've got stuff like web assembly etc but that's pretty much stood the test of time the fourth language shockingly is still cobalt cobalt is probably dying out but those who can do cobalt man they get rich every time they're called on because they're all about 80 years in the shade they get called on to solve something that no one remembers how to operate anymore get paid a fortune and go home again but those languages serve a purpose python is another language that serves a purpose because python is a very abstracted fairly easy to learn language that if you look at one of the major uses for a language like python is in the artificial intelligence field etc so why is python so popular in that field because it ain't the programmers who are writing most of the AI stuff it's mathematicians it's people who are doing algorithms etc and they're not typical programmers so you give them a language that's really really really easy to read and understand etc and they can go and do that stuff doesn't make it the most cpu efficient to do it hell no right it's fitted a need and you know there are people who are on this call now who've heard me openly trash certain languages and impose my biases but the reality is is that every language serves a purpose now for me when I choose which language I'm coding in I look at firstly maybe it's because of my background in assembler and see I want a language that is going to allow me to go high level where I need to so that I can avoid writing loads of low level code but at the same time has the facility and the ability to bend the rules and go way low level when I need to to performance optimize I also needed a language that was simple enough and easy enough that if I ever hire somebody I can take them from a python programmer to that or etc go lang fitted that need um I also was looking at how much effort do I have to take to keep my memory in my machine in order major problem was c is that you've got to do all your own memory management if you allocate memory for something and you don't forget to release it it's never going to get released and you're going to end up with memory leaks etc c is c is a little bit like a nuclear weapon um it's an immensely powerful thing but if you use it wrong it's going to blow up and it's going to take a lot with it um go lang gave me the power of c the speed of c with some of the safety checks not all of the safety checks python on the other hand has far more safety checks in it it also though has its limitations because you cannot go as low level you do not have that flexibility it does not thread as well etc because threading is complicated and it's difficult to really abstract things like that um in a way that is still safe if you don't know you know from a user that simply doesn't know what he's doing it it's quite difficult to do that level of abstraction and create a language like that so what I would say to you is when you're looking at programming if you know that all you're ever going to do is write simple scripts that are going to interact with something and you're not going to ever want to expand that to a far lower level then yes python good language great language if however you're looking at your programming career and going okay I'm going to start out and I'm going to automate a couple of things I'm going to have some api calls etc but I want to take it beyond that and I want to actually start writing actual network demons I want to go lower level etc then pythons probably the wrong language for you because going that low level is not as easy the other thing to keep in mind is that when you're looking at languages if you start with a low level language or an intermediary level language because I'd actually call Golang an intermediary level language the understanding that that language will give you will translate very well to an upper level language like a python etc because you will know the fundamentals of coding because you're working at that low level it'll teach you more if however you're start with python php etc because you are so abstracted away from that lower level stuff you're not going to know it by default you're going to have to go out and do a whole other learning curve to get down to that level and my biggest worry with the number of high level abstracted languages that are appearing out there is that I worry that it's giving an impression to a lot of people that they're programmers that understand programming and they don't and it is creating a real problem on kind of the low level programmers the average age of a linux kernel developer today is my age or older and there's very little new blood so what happens when I 20 years from now retire who's going to take over we need guys that understand the programming at that lower level otherwise the future is in serious trouble and the other problem is for those of us who are also looking to employ low level coders at the moment if I want low level coders that understand networks I'm probably going to have to go and poach them from a multi hundred billion dollar vendor and I'm going to have to pay them a ridiculous amount of money because they are so rare so all of those things they impact your choice of language your choice of learning what you are doing for your company one other point that I'll make about coding and choice of language and how you write your code like any situation in the workplace there are people who will argue that when all the knowledge is in your head you are irreplaceable and you have job security I'm going to give you a completely different perspective on this when all the language is in your head and nobody can maintain your code because it's written without comments when it's written in a way that is not easy to understand for somebody else to take over yes you have job security but you know what you're also never getting promoted because they can't afford to promote you you will tie yourself into their job so when you're writing code one of the things that and daniel will tell you that he reads a lot of my code and there are routines in my code he still refers to as the black box routines kind of it's there don't even ask but a lot of my more recent code I've read a real effort to try and make it as clean and readable as possible while going low level and I think that's really really important as to the question that I've just seen in the channel about the no code zero code movement so here's my issue yeah you're going to have a lot of people who can drag and drop and click things on to an interface and etc but that's a little bit like a network engineer that knows how to go and turn up a bgp feed or a guy who knows how to go and run a script on a box to install the piece of software what happens when it breaks if you do not have anybody that understands what's going on at the back end they're not going to be able to fix it the has anybody here ever seen an old movie called idiocracy anybody nobody's seen idiocracy okay go watch that movie but effectively what I'd say is the world cannot afford to be dumbed down to that to that to that level and it really really worries me that we are attempting to take shortcuts and particularly in the academics sector the academic sector goes we need to produce graduates that can hit the ground running and produce lots of pretty things the problem is they're not producing programmers anymore and you end up with a dumbing down and I really worry that there is knowledge that is being lost in the process that could make our future very difficult I hope that answers that question any thoughts or questions that's an interesting conversation everybody is listening with deep insights as I am I'm seeing that actually so Andrew one question keep on coming is you know whenever we see a new programming languages like like taking an example of this cloud DevOps site right we all are writing terraform okay but there is one thing which keeps on coming into my mind and whether it is python or julia or all these languages which has been there now when somebody create a language like like python or for an example this goal line or terraform right um what exactly they do how do they create a language means what is the starting point and then how do they create a language like that so that we we write code into that respective language but ultimately it goes back to that zero and one right through through some way yes so okay so it's a really interesting question because the answer to it also differs from language to language and I'm going to really kind of blow your mind when I tell you that the majority of golang is written nowadays in golang right um effectively what a lot of guys do is they will come up with a spec on a language and you go and find the language specs for a bunch of languages and the language spec will define the syntax of the language it'll define you know how it communicates with functions whether or not it's got a garbage collector blah blah blah blah blah then either the stuff is written in most of those things nowadays are probably written in C with a lot of assembler at the back end which communicates directly to the hardware but it starts with the language spec right that spec will be tailored to what do they want out of this language what are the design goals of the language if you look at something like golang which is the one that I probably have read more of the spec on than anything else golang was an interesting case because they looked at it and they went there were three different language trains which all have positives and negatives and we're going to take the best of all of them and we're going to throw them together so golang is effectively a combination of C then it takes from the pascal kind of train where pascal being pascal modular to delphi etc and it takes elements out of that then it takes from a third branch of languages and the names escape me that come out of a kind of proprietary language train which was developed I believe in bell labs and they had objectives in there when they started creating this language they said we want to be able to paralyze code well we want to avoid the problems of memory management we want to be able to go fairly low level and they designed the language to meet those objectives if you look at something like python we want something easy to code in that's quick and easy you know that so how they write those specs all depends on what are the objectives if you look at java they set out to create something that could run on five billion devices I'm not convinced that they thought about how fast it would run on five billion devices or how much system resource it would take because javas are pretty heavy language but they wanted something very very easy and portable and so when these guys create languages it all depends on what they're aiming to accomplish at the end of the day I hope that answers the question yes Andrew thank you very much I think you have helped me to remove that that confusion or you know the curiosity to which I had is what exactly they do so for the very first time you keep in mind you keep in mind Joe that a lot of the time they will come out with a syntax right that says here's a syntax here's how I'm going to interpret the the code that's coming in and it'll be fairly high level once you've got that high level portion and you've got a compiler that does that you can then start effectively writing the rest of your language in the language that you created and languages start to come to a point where you are writing the language in the language that it is so golang for example is largely written in golang because they started with a very very basic this is the types of instructions we're going to be interpreting I'm not sure whether the base was written in pure assembler or see originally or whatever but now most of golang's written in golang which is which is quite interesting absolutely one of the one of the thing which we are trying to do which personally I'm trying to explore Andrew is you know as part of this learning terraform my objective and goal which I have started thinking is I look into the terraform code but understand behind the scene how that particular as a cop language code is really getting converted to golang and how they're going to try to get into a zero and one section yeah so so golang then there was a there was a huge amount of fairly interesting back end code in golang and I've looked at quite a bit of it some of it is you know you've got your compiler which is compiling it into assembly language etc and into binaries they make a lot of syscalls which are direct calls into the Linux kernel etc for certain things there were a whole number of kind of techniques there I must admit I haven't looked at a terraform myself it's something I must actually one day get around to daniam have you ever looked at terraform yeah I have thoughts comments on this you know more about terraform than I will ever know I'm sure so I think we we need to draw a bit of a distinction in some cases between mock-up languages very high level languages and very low level languages so in in the networking world you know we have yang which some of you may have heard of on the server side we have something like yaml which is you know just a mock-up language and then we can have slightly lower and lower variants of that in general the overall process is to then define reserved words tokenize that so you're right a parser that'll go over the actual text from that text it will build a a tree based on the logic that needs to be implemented and then you get to the the assembler so it's it's it's very interesting it's possible to do if you you really want to have posted some links in in chat but it's it's fairly technical in terms of writing your own language and having it's adopted yeah it's interesting that you posted that link about writing your own language in go it's something that a higher careful daniam I might decide to do that I've read them and you know that writing your interpreter will literally take you through writing your own little language it'll have very few you know functionalities but it's pretty cool yeah I mean but but as I said you know languages they are about meeting a need and I would say that you know for me because I have a kind of philosophy in life that I want to be able to understand what I'm doing there is very very little use in my life for libraries that I haven't first read and made sure I understand how it works at the back end particularly in a lot of the work that I do now I'll give you a classic example I posted the other day a piece of open source code which allows you to ping 20 000 hosts now originally when we wrote that I used a library called go ping because while it was easy it was quick it allowed me to throw to code together but the problem was it didn't scale and so I went and rewrote the library and the code that I posted the other day doesn't have any external libraries now for a lot of people using the go ping library where they're pinging 5 10 15 hosts would work just fine but when something needs to scale are they going to have the knowledge to be able to abandon the library and go and write their own version and this is where the difference between a really good programmer that can go to the lower levels and a guy that's going to sit and produce scripts that are not going to you know necessarily need to mutate and change is I would say that as the matter of personal pride I believe in understanding what's going on at the back end and I will go lower and lower and lower until I hit you know the lowest level possible purely because I want that understanding this this industry is not an eight to five industry it's an industry that changes that moves that mutates and I've been in this game now you know I started working part-time when I was 12 and a half at a computer store I was working full-time by the time I was 16 and it's unrecognizable the thing that keeps me ahead and keeps me at the top of the game is the fact that while the top end of the industry and the languages and the network devices and the protocols have changed it's the fundamentals the basic understandings which back in those days when I started you kind of had to know because there wasn't a level of abstraction there is today that have been allowed me to move with the industry because the basics how a computer addresses things the memory the fact that a you know a network packet on a network is forwarded in a kind of almost linear manner those fundamentals will hold you through your career as the industry mutates around you if you've only got the upper level when a language dies you're going to be in trouble you're going to start all over again and so I would say that yes for somebody who needs to do something quickly sure go learn go learn go learn whatever you long for your scripting but take the time to start going to the lower level because it'll stand you so well in the future and I think that is so so important any other questions or thoughts I think I'm going to leave that here for tonight um and we'll certainly do follow-up sessions and obviously there are a lot of people who want to start learning go lang so I'll start learning I'll start teaching that as well but I wanted to give you these thoughts before we start going into actual languages so that you're thinking about what does your career as a programmer as a developer look like as for a suggestion for security engineers just to answer that question quickly so interestingly enough I started way back when in the security industry in the late 90s I was the guy that wrote the first exploit for Cisco pigs firewalls and I founded the first IT security company on the continent which I sold half of two weeks later and the other half a year later here's my advice for security people you cannot understand security if your definition of testing security is downloading a bunch of scripts of the internet security is so much more than that you need to understand the principles behind policy you need to understand the principles behind data segregation you need to understand standards like British standard 27001 I think I think it is and you need to look at security holistically security is different from environment to environment you also need to understand and what is an exploit how does it work you don't necessarily need to have to be able to write to them though if you are writing security exploits you're going to be able to test a far wider range of systems but when you're designing a security system and a firewall etc if you want to create security you have to think like a hacker and you're not a hacker unless you know how to craft an exploit um a hacker is not a guy who guesses passwords a hacker is not a guy who goes on to some website and downloads some scripts because here's the thing security exploits by the time they become public have already been used to compromise all your systems and screw up your life right hackers don't release their code immediately they first use it so you need to understand it from that perspective as well but you need to be able to look and go how is somebody going to attack me and most of the time most of the time they're not even going to be coming for your firewalls they're not going to be coming through the internet they're going to be coming in the front door or they're already going to be working for you and be in your building so your security goes beyond just the bits and the bytes it goes to holistic policy it goes to data segregation it goes to risk management in some ways it goes to when it comes to qualitative versus quantitative security it goes to almost a level um there's a lot there I think that if you want to do a whole other session on philosophies around security we can do that but do not look at security lightly it's a it's a complex game and there's a lot a lot involved um then on some of the other questions that I'm just seeing um computer programming and mathematics go hand in hand um that is a very very interesting question and there were many people who will tell you that you need to be a mathematical genius to do coding I didn't finish high school right I've been in this industry for too long to have finished high school and my math in many areas quite frankly sucks however if I look at my level of what I can do in terms of binary math I probably am better than most people that I speak to so it depends on the area of math I've had to learn a reasonable amount about graph theory for some of the stuff that we do um nowhere close to the level of my colleague Danium is on this call who's decided to go and do a degree in math which and I when I get stuck I go and ask him you know how does this work mathematically you know because I don't have a clue so it depends on the area of math it depends on the type of coding if you're going into low level coding you need to understand binary and you need to understand it well you need to understand what a shift right is a shift left you need to understand what an exclusive or is what an or is what a you know etc etc etc the binary code and binary math is important if you're going into some of the other coding languages um and coding areas I would say Danium would you agree with me when I say that graph theory is fundamental to a lot of things that that we do yes definitely in terms of what we do yes yes so the the graph theory stuff is is is quite important if you're going into the networks into the network sphere so general math I would say it entirely depends on what you're doing I wouldn't say that it's a prerequisite for all coding I would say that where you do need math it's specific areas of math I hope that that answers that question um with regards to the low level support on multiple platforms um again depends on the language golang I've written you'll notice on the on the pin code on the github url I posted there is a linux binary and there's a windows binary and I can quite happily produce a mac binary for that golang supports compiling across all of those platforms um interpreted languages like python it just depends entirely on who compiled the interpreter on what platform um I would say that any language can be cross-platform if somebody's either created a compiler for that platform or alternatively created an interpreter for that platform um languages and whether or not they are multi-platform simply the the question is is there a compiler or an interpreter for the platforms that you're using that's the only question because a language is just a series of instructions that have to either be compiled or interpreted and that can happen on any platform if somebody created the compiler or interpreter so with regards to low level language support for multi-platform see golang um both of those support multiple platforms um on a java is an interesting case because I don't consider java a low level language um but that's got you know runtime environments on well anything that you can name so yes there is plenty of low level multi-platform support same with c I mean you can find the c compiler on most anything so yeah um daniam there was a question in there for you about network coding um something about ah the network coding slides if we can just share those oh yeah I'll um joe have you you still got those slides you can reshare them in the group yep yep I will do that the the the earlier slides which I downloaded so Khan I will share that in the group um with regards to programming books so yes you can become an expert reading expert I know I I'm okay so I have a general rule with programming books if the programming book is going to be 2000 pages long it's probably filled with a lot of bullshit that you don't need to know excuse the language right um at its essence if you look at some of the best programming books out there um particular one in particular there's a book out there that was written by Koenigun and Richie called the c programming book um the c programming language um and Koenigun actually helped create c back in the 70s that book is 150 200 pages or something it doesn't teach you all sorts of specific library commands etc it teaches you the theory behind c that book can make you very close to an expert in c because if you understand all of the theory and you really understand it you can do almost anything if you're reading a book that's going to tell you every library command etc but never understand the theory no you'll never be an expert so the answer to that is yes and no the answer is what are you getting out of the book what is the book teaching if the book is teaching you how the language works and you are taking that and able to apply it it can help you a lot if the book is teaching you how to run a bunch of commands and where what libraries do what no that's not going to make you an expert does that make sense i hope it does um so with regards to languages continually evolving like c um what evolves are the instruction sets that they use in their backend compilers so if i look at something like some of the code that we've written where i've dropped back to c i've got code that actually requires for example an intel specific compiler to compile that c code because it starts to use what are called intrinsics which are really really really low level instruction sets that are specific to certain cpu types you will see that with a compiler like gcc or cc or clang etc there are optimization flags you can turn on and off that relate to which assembly language instructions they are calling on the backend so those backend compilers do evolve unless you're writing at an intrinsic layer or at an assembly layer that's probably going to be fairly abstracted away from you um but it's always useful to know as well because if you ever need extreme performance and you aren't too worried about tying yourself to specific cpu's then yeah you can get certain optimizations by implementing certain code which is machine language specific where you start doing things like executing avx 512 instructions if i look at code that we write some of the code we write is in a language called p4 and when you write in p4 it converts that to microc which is then converted to machine language and if you look at that microc it is full of really low level intrinsic instructions that are extremely tailored to the hardware on which we run that code it will not it will not run on a normal cpu because it's designed for a network data plane and an asyc well in this case a network flow processor so yes those languages evolve at the backend and but not really in a way that you will ever see unless you're going all the way down to assembly language with regards to differences between platform independent language and platform dependent languages from a low level perspective the only difference there is what instruction sets it can compile to really if you look at so look at something like a intel zion processor there's an instruction set in a zion processor called ssse3 i think it is that will not compile on an i7 processor if you're using that instruction set because the instruction set doesn't exist in the processor so that can make a difference as to whether or not the platform independent language has a compiler that can use those instruction sets or alternatives where they're not available right the other thing that and i don't know i'm going to go into too much detail about this on the call because it's a subject for a probably a more in-depth discussion is that you also have systems that work in different byte orders and there are different ways of handling that big indian systems versus little indian systems and sometimes i've seen languages which actually lean themselves towards one or the other for the record most processes you'll encounter today are little indian networks work in big indian you have to do byte swapping etc but the bottom line is at the end of the day the only difference on an independent versus a platform dependent language is about the instruction sets that they can compile or interpret too um facade with regards to understanding algorithms that's entirely dependent on what you're doing if you are doing things like so i've been writing a lot of really really fast lookup code to effectively index and lookup packets as they flow through networks without my binary trees on that i'd be kind of screwed because i can't find anything really fast enough um that doesn't work with either binary trees or patricia trees or radix trees in that case it's rather important when you start looking at path mapping on a network an understanding of the difference between a breadth first algorithm versus a depth first algorithm is useful i'm not sure that i fully understand that though i've written both if code and it was my marriage because of the lack of knowledge the question comes down to simply what are you doing if you're writing a simple script to log into something and execute something no you're not going to need an algorithm if you're going to go and write low-level network code that's going to be needing to do complex lookups etc you're going to need some algorithms it just depends um that answer that question then i saw another question in the chat that was sent to me privately about what should be the approach or strategy to becoming a good optimized programmer irrespective of the programming language so the answer to that is you need to understand what you're optimizing for for right that's that's the first step the difference between a good programmer and a bad programmer often comes down to his understanding of the problem he is dealing with and the approach of the problem there are way too many programmers out there that will kind of use a hammer for everything and take the shortcut without trying to understand the problem they're trying to solve because the optimization that you apply will come down to what is the problem are you optimizing for cpu are you optimizing for ram are you optimizing for readability or maintainability are you trying to make it run on a raspberry pi versus a 254 core amd roam epic 2 you know the questions there come down to is the programmer analyzing the project that he is taking on to understand what optimizations he needs to apply that is one of the key strategies to knowing that you are writing code applicable to the job that you are doing i hope that answers the question any other questions before we call it a night i hope you guys have all enjoyed this and i hope i've given you good information you know i'm always available on whatsapp if i do take a while to answer it's either i'm asleep which i don't do much of or i'm buried in code but i really hope that i've given you guys some kind of insights and thoughts that you can take away and like i said you know it's a it's a long journey when you start going into the coding world it's a journey that i think you can it can be very very rewarding it can be frustrating at times because you know when you're sitting at three o'clock in the morning and you've got a bug and you can't figure out where the problem is it can drive you nuts but the rewards of when you create something that works i equate it to being an artist you know you've created something that you can be proud of the trick to creating things that you are proud of is to make them your own and and not just simply pull together everybody else's work and then go oh look i stuck it together this way where's the pride in that the pride here is in the picture that you that you paint in the creation that you come out with have pride in your work comment your work write it cleanly so that you can show it to people and be proud of what you do and yeah i hope that really answers everybody's questions and rio this is uh padita i have one question see what happens i've i've seen for any programmer like whenever you tell them to okay you have this requirement to start doing and many of the programmers they start jumping into you know doing the coding and so on and so forth what would be your view on the preparation of why you are doing what you are doing before you get into there because i've seen people just jump in and start like doing running like without even thinking like why are you doing what you're doing right you know okay so that's an incredible difficult incredibly difficult question for me to answer but i'm going to give it a bash and i'll explain why it's difficult right so daniam and myself work in an r&d department and as a result we jump in and code a hell of a lot of stuff to see what it does you know very difficult to plan that when you don't really know what the outcomes are being you're writing something to see you know i would say though that in a normal application setting you need to have a defined set of requirements so the requirements a lot of this comes down to as well the person that's asking the programmer to produce something also has a responsibility to tell that programmer what he wants and that doesn't mean two sentences right we've had that where we had a particular department ask us to produce something and we got a half a page list of what it needs to do this this and this but it didn't really give us any details there has to be a spec right and a lot of the time the spec for that is not necessarily produced by the programmer once that spec is there that says this is what we want to accomplish with this code this is what the outputs of this code can be then the programmer needs to go and say okay what are the requirements beyond that do i need this to be ram optimized do i need this to be cpu optimized what are the requirements from the business side of it with regards to can they spend a million dollars on hardware so i don't have to worry about optimizing anything or are they going to be asking me to write this on a 286 right you need to get a solid picture of that in your mind the other thing is is that when you go into really heavily multi-threaded code in particular it's a really good idea and i've done this in a couple places in whiteboards where i've actually drawn out how my kind of inter thread communication is going to work beforehand because daniel will tell you that when you start running like 50 60 70 threads and they're all communicating with each other that can turn into a nightmare fairly quickly so mapping that out beforehand where practical is also a good idea but a lot of it comes down to ensuring that if you're being asked to do something that the person is asking you to do it gives you a proper spec and you push back until you get a proper spec yeah yeah i agree with you totally totally but in the in the real life i'm sure many of the programmers here will agree when you push back saying that okay you give us a clear specs i've seen with my my team if you if you can't okay so if you can't get the proper spec then here's what you do you go write a spec and you hand them the spec can go before i write any code sign off on this exactly yeah yeah make them put their signature on it but somebody has to create the spec that's right that's where the missing thread went where people just jump into the coding without making that specs as you mentioned right i will say that in an r&d department environment that's a very different answer you know yeah absolutely i agree i agree but because in an r&d department well you don't really know what you're doing when you start because you're well doing r&d so you don't really have a spec and there you kind of follow your gut and see what happens um i love r&d because well get to follow your gut you know um r&d research and development is the question that i was asked in the channel r&d is basically where you spend your day with your head in the cloud streaming up fun things to do and they're trying to do them and failing nine times out of 10 getting very frustrated and celebrating on the days where you get it right and leaving that to carry you over until the next six months where you finally get something right so yeah um but thanks very much guys i've really enjoyed this i hope that you guys have benefited from it um i hope that i've taught something if you've got questions or anything just feel free to ask you know i'm available on whatsapp if i ever take a while to answer you know i spend a vast amount of time coding and in meetings etc but i will try my best to respond as soon as i can do anything just please do not come and send me a message asking me to teach you programming in three days because you've got a job interview on monday um and i've never written any code in your life because i will tell you to get lost at that point because that is not practical you know so keep the question practical that person is not there not here actually three days and out of three days right one hour that person lost it actually i was actually thinking that whether this person will be there in this our group or not now how can a person can learn programming if in three days that's declares yeah andrew um thank you so much for your time and and giving so much of insights and thank you denny m also for sharing the inputs the links uh personally i'm going to buy those two books i always had that you know the curiosity and interest how does it works and then andrew we are now as a next step looking forward for the goal and series i'm i'm sure it's going to be unique it's going to be so much of interesting and you may have seen in the group that we are the babies group is very unique in the entire world i would say that oh yeah but uh like i said thanks guys and let's continue to chat on whatsapp absolutely thank you great and thanks denny m and thank you all who i hope you got a bunch of information with all of you waking up at two o'clock or one o'clock or midnight or afternoon or morning or whatever it is around the world if you could just let us know where i can download this recording because there are a number of people who um who i know couldn't be with us tonight from my side that that are looking for this recording so as soon as you've got it if you can just send me a link to where i can grab it yep absolutely um i will i will send you that i have started i've recorded it's going to store then tomorrow morning once it will finish i will send you that i just got asked for my app number um when you refer to an app number oh the the whatsapp number um mohammed are you in the um in the babies group yes yes okay so yeah the easiest way is grab me in there and well you'll see my number in there so just look out for me and you'll you'll see me in there i think some of them have some of them the the the region andrew why i'm sticking to what's up and not into slack or anything else because the the i what i have seen is what's up is like a breathing in our daily life and yes i i prefer whatsapp as well because i you know i'm i'm a member of about seven or eight different slack groups and i almost never check them absolutely and then this i'm trying to i'm trying hard to check if facebook is going to allow us to increase the limit currently the main group where you are is completely full 257 the other group which is there about 80 people are there but i'm trying hard to see how do we bring together everybody although the internet they said that i can route my phone but i'm slightly not comfortable to route my phone and do all those alternatives and yeah but we'll find a way how how can we increase the what's up members from 257 to larger so i can bring everybody into one single group yeah understood okay guys i will chat to you online but thanks so much it's been a blast thank you and by the way by the way yeah yeah usements i thought you'd find this shirt amusing so nice to end it anyway i'll chat to you guys later bye thank you