 Hi everyone, my name is Alejandro Marcun and I'm originally from Argentina. I started programming games when I was 8 years old So since then I've been programming As a job and for as a hobby So yeah, I've been programming for 30 years now the last seven years Well seven years ago. I was hired by Facebook. So I moved to San Francisco to work in the headquarters and I live now in San Francisco What I want to talk about today is Some give you some tips that hopefully can help you advance to the next level and become a better engineer Before going into the specific tips, I want to make a point and is that it's very important to take charge of your career Maybe you're in a company that really helps you grow That they teach you things and you learn a lot But in any case you always must like know where you want to go and keep improving keep learning Don't leave that to the company you are working for So tip number one small steps I Used to think that I was impatient because I will write just a little bit of code and then test it It was kind of a shame that if I was lacking some confidence to write a lot of code and then test it But then I had the awesome opportunity to work with a mentor at Facebook and the mentor was Ken Beck Who created extreme programming He now works at Facebook mentoring people and doing other engineering work And to my surprise can be encouraged me to test even more often He showed me his environment and he had it set it up such that every time he saved a file the test will run So with this I understood that it's not wrong to test often Actually, what happens is that if you write a lot of code and then you test it and something fails Then it's hard to figure out what the problem is you will spend a lot of time debugging and maybe a lot of time fixing it but if you just wrote a little bit of code and You test it and it fails, you know exactly what the problem is You may think that this doesn't always apply and one case is when you need to do a complex big refactor In that case sometimes it seems that the most straight forward way to do it is to just do all the Refactor right to go from here to here and probably you are not even able to run the code in the middle So you just go from the beginning to the end and when you finish you test it and you fix anything that needs to be fixed The problem with this approach is that Usually by the end You will have a lot of errors and it will take a lot of time to fix everything So in this case, I encourage you to use a way that seems to be more work because You will need to Create some adapters or maybe duplicate some code or think a little bit more in order to be able to reach intermediate steps In each one of those intermediate steps, you will be able to run your code and test it So this seems to be more work But actually what happens is that every time that you can test it Since you did a smaller change. It's easier to test it and to fix whatever needs to be fixed Another advantage of this is that instead of sending the huge code refactor for review You will be sending smaller pieces and This is much better Because when you send a lot of code for review, it's really hard for the reviewers to do a good job to understand it deeply And the iterations take longer and it is very slow, right? But instead if you just write Less code it's much easier for the reviewer to do a good job and you iterate more quickly So remember to work in small steps and you will work smarter Second tip is per programming The idea of per programming is that two people will get together to work on a problem with just one computer You may do it online, but I strongly suggest to do it in person if you can One will be with the computer and you can switch whenever it feels natural to you You can be solving a problem that is difficult something that you're stuck or whatever comes to mind But the important thing is that you need to communicate a lot You need to kind of think out loud so that you can build on each other's ideas And while per programming is great to work on a complicated problem when you are stuck It's also a great tool for improving because you get to see the thought process of the other person Not just the final result, right? If you if you read the code in a code review You are just seeing the final result. But if you do per programming, you actually get to see the thought process So I suggest you to try per programming with with a friend or co-worker Tip number three testing is a core part of developing So let's say that you're working on a project and you find some code that can be easily improved Are you going to improve it or will you think I rather not touch it because I may break something Of course, we want to be in the first situation, right? We want to be able to continuously improve our code to use the latest and greatest features And move with confidence What do we need to get there what we need is to have excellent test coverage We need to be confident that if the test pass the code is working well You will need to work on the code and test together Some people think that since they are under a tight deadline or then in a rush It will be better to just work on the code and once the deadline is over You will do the test, but actually that's not a good idea first because You will end up testing the code manually Which is very time-consuming and you may introduce bugs because you get tired of testing and you start skipping testing or not testing it thoroughly So work on the code and test together and one of the reasons sometimes we don't want to write tests Is that it seems so complicated that we need to write so much boilerplate and set up so many things and it's like Okay, I want to test just the thing and I have to write so much boilerplate for it If that's the case Think if you can write some testing infrastructure that will make it easier for your project to test It can be a little bit counter-intuitive Right like you are under a deadline and instead of working on what seems to be the most important thing You are investing time in developing testing infrastructure to write tests to write the code But it works Let me give you a personal example My worst project at Facebook was one where I had to work on an unfamiliar codebase So it was just a short modification So I did my change I tested as well as I could and sure after a few days someone tracked the production by to my code and It seemed completely unrelated. I would have never thought of testing that it was like completely different by contrast My favorite project was one where we started from scratch and we put a lot of emphasis in writing very good tests We've been running to that like at the beginning each test was it took a lot of effort to write So we started to think how could we improve our testing infrastructure? And we created a framework that was specific to our project that made it so much easier to do tests that We were very happy to just like with two or three lines. We will just test our new feature And it was really a pleasure to work with in that project Everything seemed to flow and I was happy working on that and I was moving fast Hmm So remember that testing is a core part of developing Tip number four don't is better than perfect Who thinks is up a little bit of a perfectionist here? Okay, many people So you can view perfectionism as a gift because you have high standards you get about quality you want to do the best But often perfectionist will get on the way of getting things done It may prevent you from even getting started with a project because you think that you need to study a lot learn a lot before even starting Or it may prevent you from finishing because there are always things that can be improved And you should be able to limit your effort when the additional time Spent is not providing enough value and you will be using your time for better things So one way to deal with this is using deadlines For example, you may say I'm going to take this week to study as much as I want and next week I will start working on my project Or you may say a deadline and say like I'm going to take three days to polish my project and then it's finished This doesn't always work. It seems that it should be very easy, but it doesn't So another powerful technique is to be aware of your thoughts and feelings and try to reframe your thoughts Because what happens is that sometimes there's fear hidden To give you an example when I was working for Facebook I had a project that I wanted to open source and I couldn't get to finish it. I tried to put a deadline, but I Just couldn't write it sounds weird, but I couldn't so I started working with these and trying to some Instructions to see what was going on inside of me And I noticed that I was afraid The project was going to be published on the Facebook engineering blog So it will quickly get many eyes and I was afraid that people will find bugs will criticize it We'll find it useless or whatever it was and I noticed that I was afraid that if that happened it will mean that I'm a failure that Nothing else that I did will matter and like I was completely useless if that was the case So I started reframing my thoughts and first I tried to be a little bit more realistic about the project and I knew that it was used internally that It was well tested that the code quality was the best that I could do so By my standards, it was not a disaster by any means the project But even if externally the project was a disaster That wouldn't mean that I was a failure, right? It was just like Successful people fails a lot, right? And it wouldn't destroy my career So once I started playing with this idea like even if everything goes wrong, they are not going to fire me I'm not going to be a publicly shamed. No one is going to die Once I started playing with this is like, okay I think it's going to go well, but even if it doesn't it's not a big deal and once I did that I was able to relax a lot and My fear vanished and I was able to quickly finish it and open source the project So remember that don't is better than perfect and this is so important to keep you moving that we have posters like that hanging everywhere at Facebook Tip number five practice So we spend a lot of time programming towards an objective, right? Usually we have a project At work or a hobby and we are programming for that project If we were tennis players, it will be kind of playing against opponents all the time But tennis players actually do a lot of other things you can imagine that the practice serving the practice playing on the net playing against the wall and so on and We as programmers we tend not to practice much. We tend to just do our work one way that I found for practicing that I really like and Encourage you to try is coding competitions in a coding competition. You have a fixed amount of time to solve one or more coding problems And there are a few reasons why I think that coding competitions are great First it trains you to work under time pressure and to be honest is not the most important things the most important thing but When you are in the situation where production is down and every minute is costing $1,000 to the company you work for that skill is very well appreciated You're able to compare solutions with some of the best people in the world and of course you can use this to learn and improve Many companies use this kind of exercises in the hiring process So if you practice coding competitions, you greatly increase your chances of getting hired And this is actually how I got hired to work for Facebook Coding competitions will train you to think of corner cases and this is really really valuable whatever software you're writing So there are many sites for coding competitions if you are looking for a place to start One that I like is hacker rank because it's very easy to understand very easy to sign up and to start participating it has some practice problems and the first one are really really easy like Adding two numbers adding the numbers in an array and it gets it gets increasingly more difficult So maybe you are thinking well, but I will need to study algorithms I will need to prepare a lot and to do a lot of practice and to check all the different sites and And which one is the best and which kind of competition? If that's coming up is a perfectionist, right? So use this opportunity to deal with your perfection and go ahead and just compete Because even if you come out last in the competition, no one really cares and no one needs to even know that it was you So remember to practice and if you are looking for a way to practice Coding competitions. I think it's a great way to start and deep night number six keep learning So I strongly suggest you to keep learning outside of your day job As I said at the beginning. I think that it's very important to take care of your learning So try to learn something different if you are all day priming in PHP Don't just learn a new PHP framework get out of your comfort zone You may choose to go very deep into a Subject or you may choose to just be a little bit of different technologies And what I really like about that is how quickly you get from not knowing anything at all to having at least some basic knowledge For example, I'm interested in in virtual reality Unrecently I did a tutorial on unity and in just two hours. I went from not not having ever used Unity to being able to do a very simple game And then in one more hour I used unity to do a very simple virtual reality kind of hello world example So see what spikes your interest. There are a lot of different things happening Some things that are interesting for me are machine learning, virtual reality, functional programming, Raspberry Pi, Amazon Web Services and so on See what spikes your interest and give it a shot. Don't think so much of whether this is going to Technology that is going to be used or if you can get a job or so on just follow your passion Remember why you choose this career because hopefully you choose this career because you're passionate about writing software and creating things So remember your passion and have fun. Thank you very much