What I've Learned From 5 Years as a Developer

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
hi everyone welcome back to faraday academy in this video i really want to talk about some of the things that i have learned from being a developer for over five years now so back in 2015 i got my first job as a software developer and i got my first job as a software consultant the next year in 2016. if you are interested in some of those stories about how i got my first software developer job and related topics then you can check out these other videos on my channel about those to introduce myself really quickly in case you haven't been to this channel before my name is gwen i currently work as a senior software developer for consulting company and i also teach software development and have been mentoring developers over the past five years i hope that with this video i can provide you some insight with my reflections over how i've grown as a software developer and some of the things that i've really realized during this time i would say that the number one skill that i've learned over these years is how to break problems down into smaller pieces without losing sight of the big picture i think the temptation a lot when we begin as developers or we're learning to code is to just jump into the code right away and that's what i see from a lot of students that have taught over the years as well and what happens is that we get so bogged down in implementation details that we forget to look at the bigger picture of what's going on the big picture includes having a firm grasp and understanding about the requirements and goals of the project and then not losing sight of that when you start to develop the first and best thing that you can always do is really deeply try to understand the problem lots of people have their own methods to try to help with this for example some people like to rewrite the problem in their own words and other people including myself like to rubber duck the problem it's basically talking through the steps of the problem out loud and it helps you realize any inconsistencies or things that maybe you don't understand yet instead of just skimming over the problem with your eyes once you understand the problem then you can start breaking the problem down into smaller more manageable steps this is where it's really nice to write out your pseudo code if you don't know what pseudo code is it's typically a series of comments in your code that you kind of replace with code later on it's good to write out pseudo code just very quickly for all the logical steps of the problem once you have every single step written out that will lead you to your goal or to your solution then it's easy to solve that problem step by step whereas if you just read the problem over you think you understand it and you dive into coding right away without already breaking it down you can easily get bogged down in that single implementation detail and then you forget where you were going with the whole process now there are many other factors to consider here like requirements and timelines and i'm going to do a video on just this topic to break it down a little bit more in the future now the number two skill that i've learned and i'm still learning as a software developer is how to properly estimate how long a task will take basically getting good at time estimation skill is actually important at any company whether you are a consultant or working for a small or even a large company you are always going to get some kind of tasks if you're using agile or scrum or even waterfall you're going to have tasks that you have to complete and your project manager helps the project goes along and tries to help you estimate but you as a developer and as a development team you are the only people who can accurately estimate how long a development task is going to take because you know the code base and the environment that you are coding in and then what it's going to take to implement that new feature or fix that problem or upgrade or whatever it is you're doing now this is a very hard skill to learn and most people are not very good at estimating time at all actually the steps to properly estimating your tasks are the same as the last point that i made on being able to break down problems when you get a ticket and there are multiple parts it's almost impossible to actually estimate how many hours or how many days it's going to take you but once you have completely understood the problem and been able to break it down into individual tasks you can actually much more easily estimate each individual task especially as you get more experience as a software developer a lot of the tasks you'll see over the years are very similar so you have to make an endpoint that makes these queries returns this data or you have to implement this screen on the front end with these tables and you kind of you'll kind of get used to how long each individual piece of the task takes you now if you are just starting out i highly recommend that you get together with a senior developer and have them help you understand how tasks are broken down and how they go about breaking down each individual task and kind of what factors play into their time estimations and it's hard to know those things if you are an inexperienced developer or even if you haven't worked in that particular code base that much before one thing that i've personally been working on over the last several years is asking a lot more questions on these projects up front because i've noticed especially as a consultant sometimes i jump into a project and i'm caught completely off guard because i thought i understood the requirements and the schema or api or mockups or whatever it was with the application and then i didn't see it from the same angle that the client was seeing it from so don't be afraid to ask a lot of questions up front in the project it can save you so much time versus just trying to get started and jump into the coding right away and then it costs you a lot of time if you have to refactor or rebuild something later on if you didn't fully grasp what the client or the stakeholder was asking from you another factor in time estimations is taking into account all of the different people and factors that will be involved in completing your task so that could be working with another developer or you need to integrate with another application from the company or you're going to have to interview the client or whatever else it is you're going to have to take those external personnel into account when you make your time estimation as well also if you are estimating tickets for a developer of a different level of experience than you then you have to take that into consideration so maybe they are a brand new junior developer and that ticket is going to take longer so you add in some extra time to give them more time to get up to speed and finish the ticket and i could probably go on and on about time estimations as well i'll probably make that into its own video later on let me know in the comments below if you have any questions about that topic that's one thing that i really really struggled with getting into software development was properly estimating and handling tickets so that was a big goal of mine and still is something that i'm working to improve on and even now with every project that i do i try to do session with myself at the end and kind of write out oh these are the things that went well these are the things that didn't go so well or i could have estimated a little bit better and so that's a constantly evolving success of trying to improve how i work and how i function as a software developer the third thing that i really realized and learned over the years is that every problem can be solved in the beginning i used to get so overwhelmed and think how can i ever figure this out or solve this problem but i've really realized over the years working on so many different projects and companies and coding hours and hours every single day is that every single problem has a solution sometimes it's a little bit obscure so i'll have to do research try to talk to other developers maybe they have a different perspective or maybe it's just a feature or a functionality that's too complex for the current project and then i'll have to go to the client and say i don't think we should implement this right now maybe in the future or maybe we should dumb it down a little bit things out and we can get something basic done now and maybe add more features as we go along and i think i think that mentally realizing that every problem can be solved has reduced my stress level so much like now i can jump into any code base at any company and figure out what's going on and it's not so overwhelming like i never feel overwhelmed on a new project because of the code sometimes i feel overwhelmed if there's a really tight deadline and i know there's a lot to get done but as far as being stressed that i won't be able to figure something out or i can't do it or i have to jump into this really huge code base i really don't ever feel that kind of stress anymore and that's just something that's come with repeatedly just doing it over the last five years i'm also planning to make another video on how to jump into a new code base like when you get a job at a new company you're kind of thrown into this new code base you know what is the best way to introduce yourself to the new code base so that one's coming very soon another thing that i've realized is that there's no end to the learning so back in the end of 2014 and in 2015 i was working so hard and coding every single day and spending hours and hours and hours and not doing anything else basically and i had it in my mind that okay i need to land a job and get stabilized as a developer and then i'll be able to do all of these other things and i won't have to spend all this time outside of work learning now it's true that i spend less time outside of work learning now but actually in technology everything is moving so quickly and changing so fast and you know as software developers we have some responsibility to keep up with new technology in our fields and as it relates to our job and our company and that sort of thing so actually one thing i've really realized is that there's no end to learning new things and feeling new about certain topics and taking courses and all of that other stuff actually now i am always either taking some kind of course right now actually i'm in college i'm finishing my computer science degree and gonna go for my master's and then i'm also taking courses going to conferences trainings all of that stuff to just be able to keep up with what's going on in the industry get new ideas not only that so to not forget the basics and what i learned in the past it's a it's a constant process of learning and growing and also remembering so that i don't forget the foundational building blocks of coding now in other videos i talk about some techniques that i use for that i really like space repetition learning systems and i have another video on that and it's basically this constant process of always seeking out new information and new ideas and also really getting a firm grasp on the foundational concepts things like how to optimize how to document all of this other stuff that's really important as developers and in computer science and one thing i've realized as i take new courses and try to improve my skills is that some of the most valuable courses i've taken aren't necessarily directly coding related but they are about the tools that i use for software development for example my code editor so i use pycharm and vs code and you know i've taken lots of classes about how to use those better how to use hotkeys how to use the debugging tools how to use some of their automated features and functionality those things have been so helpful to me as a software developer also in the browser if you learn the browser developer tools really well if you learn different debugging systems and tools really well those are essential and really save so much time as a developer number five is communication now this is probably in every single video about how to get better as a software developer and from my experience it's no different i've really drastically improved my communication skills over these last five or six years and not just my verbal communication skills of course i try to push myself as an introverted person to reach out to teammates to check in with them to try to always make sure they know what's going on and keep them up to date and keep in sync with what they're doing as well but it's not only with that kind of communication but also with communication my code what do i mean by that basically through committing my code i am communicating what i am working on how i am solving a problem what i am doing every day even if i'm not ready to make a pr if i push my code live that means that any other person working in the code base or any other teammate they can see exactly what i am working on and if they are building a similar feature or something that overlaps in another part of the application they can have visibility into what i'm working on so we don't duplicate our efforts or even diverge and build two totally different solutions for the same or a similar problem and that's why a lot of people recommend committing early and often as they say so try to commit as often as possible even daily i think that's a really good idea to commit at least once or twice a day and push it live so that everyone else can see kind of what i'm working on and the progress that i've made and all of those other things communication is something that i'm always trying to improve just personally even so you all know i'm an avid reader and i've read lots of communication books so i'll leave my best recommendations for books on how to improve communication in the description below the last point that i want to make of a skill that i found essential since working as a developer is being able to focus and not just focus deeply focus now i realize that this is not an easy skill at all especially in our highly distracted world of social media and instant notifications and since coven being around so many other people at home maybe all day but it is an absolutely essential skill to work as a software developer personally this is something i have always struggled with having adhd being able to sit down and focus and actually at the beginning when i first started learning to code i struggled with this so much i would get in these continuously distracted loops and go down rabbit holes and all of this other stuff but over the years i've learned a lot of techniques and found some really helpful tools that really helped me to deeply focus on my work and actually get my work done some of it is through gamification trying to incentivize myself to get work done and to study and whatever else i want to do some of the other things that i've learned are techniques like closing out of every single browser tab every single application and then only opening what i need and as i mentioned in my alfred video i use alfred for opening up projects because i can close out of every single thing on my whole computer type in one alfred command and it opens up only the things that i need to be able to work on that project then i also use that in conjunction with freedom so the freedom application is basically an application that blocks me from opening distracting sites or apps or whatever i add to my list in freedom i can just click one button and it blocks it for a specific amount of time some other techniques that i use are time blocking turning off notifications i put my watch on do not stir mode keep my phone away from me there are a lot of simple things that i've gotten into the habit over the years that have drastically improved my ability to focus now instead of checking notifications right when they come in i have certain times of the day or of the week where i'll check emails or notifications and that sort of thing if you want to know more about this i actually have written several articles on the topic and maybe i'll do a deep dive video on it at some point and i also have several books that i highly recommend you read on the ability to focus and growing your ability to be able to deeply focus every day so my number one book is deep work after reading that book i really practiced a lot of the techniques to be able to deeply focus that he talks about in that book and it really helped me focus for a lot longer being able to use those techniques so i'll link that from the description below as well as some other books like indistractable that have also helped me and my ability to focus one more note that i want to make about focusing before we finish this video is that it's really really important to be able to clear your mind of stress and of all of these different thoughts and inputs constantly invading your mental space if you can capture those and manage and handle those properly then they aren't going to distract you while you are working so personally i use the getting things done method it's from the book getting things done by david allen there are some other good books about that topic but basically being able to capture all of these ideas have somewhere to put them helps you to clear your mind so you're not constantly remembering and forgetting all of the things that you need to do during the day part of clearing my mind has also been creating routines for myself where i work out or i take a walk or i have my watch remind me to take a minute to just breathe deeply and relieve my mental stress those are the things that i really wanted to share about everything that i've learned since getting my first developer job in 2015. let me know in the comments below if you have thoughts questions comments any additional ideas maybe things that you have learned in software development or some of the things that you are working on right now i would love to hear about them i hope you have a great week don't forget to take care of yourself and i will see you in the next video
Info
Channel: Faraday Academy
Views: 1,136
Rating: 5 out of 5
Keywords:
Id: Gsh_mFBKomk
Channel Id: undefined
Length: 22min 47sec (1367 seconds)
Published: Fri Jun 04 2021
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.