Fighting Challenges As Junior Developers

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
today I'd like to explore what it's like when you're just starting out as a junior software developer what does it take to make the next step in your chosen career what really is the difference between a junior and a mid-level developer and what sorts of things should you be focusing on now to help you to take that next step [Music] hi I'm Dave Farley of continuous delivery welcome to my channel if you haven't been here before please do hit subscribe and if you enjoy the content today hit like as well once you've taken the first few steps in your career as a software developer I think that your perspective changes or at least it should new things that you paid less attention to become more important and some of the things that you once thought of as the essence of what you're doing seem to reduce at least in part in significance and importance before we explore what these things are and where your new focus should be let me first thank our sponsors we're fortunate to be sponsored by equal experts trisentis transfig launch Darkly and Roost all of these companies offer products and services that are well aligned with the topics that we discuss on this channel every week so if you're looking for excellence in continuous delivery and software engineering click on the links in the description below to check them out in the early part of your career you're dealing with the basics learning about the syntax of your preferred programming language learning how to collaborate with other people on your team through Version Control or by working alongside them if you're straight out of full-time education let's be honest you're also learning the ropes about what it's like to hold down a full-time job if you're anything like me at that stage in your career that comes as a bit of a shock and it takes a little while to adapt to it all this is fine normal and most likely what your employers will expect of you few employers are dumb enough to expect new developers to jump straight in and be firing on all cylinders from day one but now you've been doing this for a while you do know how to commit code and you know the people that give you good feedback and the ones that always seem too busy to help you know your your programming environment well enough to edit and debug code and your programming language well enough that you don't really need to be looking stuff up at least for the common things that you do you'll still be looking up some things we all do that so don't agonize over it not knowing the answer yet is part of the job it's a constant that we all deal with as I do get comfortable with it by now you can probably write new classes modules functions you can translate suggestions from more senior colleagues into code for most of the common problems that you face on a regular basis but what comes next well I think that the real difference between a junior developer and The Next Step Beyond that is that Juniors can code a solution once it is explained to them and mid-level developers are ready to find their own Solutions at least for the sorts of problems that they are used to dealing with this is a more significant step than perhaps it sounds and I don't think that everyone always spots that this is the step that they need to take but in my view however detailed your knowledge of your technical stack this is an essential next step if you aim to make real progress in your career the problem here is that if you see your job as relying on someone else telling you what to build and assume that your job is just to write the code you're stuck in a rather counterproductive cycle you'll end up focusing on the technical esoterica of your chosen tools but won't know why they work that way or how to apply them sensibly to problems that are new to you and problems that you may face and you won't be able to decide when some tool or technique is a good fit or a poor one worse than that you probably won't pay much attention to the problems that are ultimately your job to address if you have ever complained that you can't start work on a new feature until you're given a more detailed description of the solution a better description of the exactly how the UI would work or how the DB should be structured then you may be stuck in this trap if you've ever blamed a bug in production on someone else because no one told me to fix that or no one told me to implement password recovery for a login or no one told me to validate the inputs then you're certainly trapped in this road sure there are dysfunctional organizations that will attempt to micromanage your work in this way but I believe that the job of a professional software developer is to solve problems that other people care about with code it's not to translate detailed specifications of a solution into code to do that more complete job we must understand the problems that we're working on and we must take responsibility for our choices in solving them being spoon-fed solutions to translate into code is a very poor way to organize things and never results in great software so we need to take more ownership for the solutions that we as professionals create and to do that our job is to understand the problem that we're working on well enough to come up with our own ideas about how to deal with those problems these are the skills that you need to work on to develop next there is a lot to learn when you take your first steps as a professional programmer and this understanding and responsibility is probably going to make your learning curve a lot steeper particularly if you're doing all of this at the same time as learning to deal with your tools and getting used to your co-workers and figuring out how you fit in with your team to my mind though this is what the role of Junior really means you are yet ready to take on all of this responsibility so at this stage in your career you will be spoon fed a little more as employers we accept that you aren't likely to be ready to be a fully productive team member yet but it should be our job to invest in you and help you to learn and become a more productive team members so we're going to take it easy on you and first get the basics in place and provide you with lots of guidance so we'll organize your work in ways that allow you to focus on some of the things and ignore others this though doesn't mean that the other things are unimportant just that you're not ready for them yet in fact some of them are really what your job is all about in this world view the job of an employer then is to try and help you to transition from being a junior to becoming a mid-level developer as quickly as possible and the degree to which you are junior is really related to how much supervision you need okay this isn't about the detail of the technology but in my view much more about the kinds of problems that you are able to solve this is a bit like learning maths I can remember learning maths as a series of topics at school one week we'd have lessons on Geometry another trigonometry or algebra or calculus and so on I wasn't bad at that kind of mass but my thinking was a bit pigeonhole at that point I could solve problems that were stated as problems in trigonometry or in calculus or whatever else but I didn't really have access to those things as real tools that allowed me to solve real world problems I had to be primed to understand this is a problem in this problem you'll need trigonometry but that isn't how maths or software is used in the real world how do you calculate the height of a Lamppost or the heat loss from a building sure knowing how to use the tools is important but to put your skills and your tools to real use you either need someone to say this is a trigonometry problem or you need to be able to work out how to solve the problem for yourself the second ability is much more useful and much more valuable if our job is really about solving problems for people and code is just our tool then we are the people that need to decide on the solution and then pick appropriate useful tools to apply to it by tools here I mean more than just your programming language framework or text editor I mean the tools of design the tools of managing complexity and the tools of solving problems well the design choices that we make have a bigger impact on our work than the technology that we express them in so to make that step from being told the answer and translating that already solved problem into code to figuring out what kind of question this is really and picking the right tools for the job is a big one and it takes a very different set of skills to those that have been your main focus as a junior I think that this focus on the real problem solving is the key to this next step in your career so how do you go about developing that problem-solving experience well first look for people who can help you ideally your employers understand all of this and will have provided some structure to help you to learn these skills you will have more experienced teammates around you maybe even someone assigned to you as a guide or a mentor but if you don't know where to go for advice and to have your questions answered find out find out now when I led a team at lmax building a financial exchange we'd start any new people but particularly Juniors by limiting them initially to only working with more experienced people in the very early days we do this for all of their work after a short time usually a few weeks they'd know enough now to start making some progress alone as long as they'd been shown how to go about solving the problems that they were working on so we'd make sure that they always had that help at the start of any new piece of work the more experienced person would set the direction by working with them through the early stages of any new piece of work once the junior person had got it the more experienced person could then leave them to it checking in periodically to confirm that the junior wasn't lost we did pair programming at lmax so all of this was very natural for us in our case what leaving them to it really meant was that they were free to pair with anyone else on the team even other relatively Junior people during this period the more experienced members of the dev team were monitoring the Juniors and their progress so that they were ready to offer help or just to check that they weren't getting too far out of their depth this Independence is important too you don't learn by just being told things you learn by doing things for yourself and often by making your own mistakes so this brief description has some important ideas tucked away even if your organization doesn't support you through your learning in the same way to make good progress first you need a guide of some kind you need people who you can turn to for help and advice once you have the basics though you now need some space to make your own mistakes to get a bit lost in a problem and to know how to shout for help when you need it if you are serious about getting good at this game though I think that you have to aim for some kind of sweet spot where you can struggle with a problem alone for a while but not for so long that you become lost frustrated or demoralized so don't shout for help too soon try to understand the problem and see if you can solve it yourself first if you feel out of your depth think first about what you'd like to know that would help you to just take the next step in solving the problem and ask for help on how to get that information or take that step rather than asking for someone else to solve the problem for you solving problems is hard and often frustrating try to adopt some of the strategies that work best for you I like trying to visualize things and we'll often draw little pictures that represent the problem in some way make sure that you have a clear idea of what success will look like usually on a very small scale maybe think of examples that demonstrate a successful outcome for the in the context of the piece of code that you're working on this is one of the ways that test driven development can help you to explore a problem this learning is going to take a lot of different forms but here are a few things that I think that you need to get better at if you're going to take this step in your career first is understanding requirements and key to that understanding the fundamental aspect of requirements which is that all the answers won't be there no one knows all of the answers and software development is a process of exploring a problem to learn what we don't know yet requirements are supposed to say what a user thinks they want not something that tells you how to build it if you don't know what to do as a result of the requirements have a chat with the person who knows what your system is meant to do don't ask how to do it how to solve the problem instead ask what the user wants of the system at the point where you're stuck if you don't already know how people use your system start to learn that find out now when you feel ready and you're feeling a bit more comfortable with your programming language and tools start thinking about how to grow your design skills I recommend that you adopt this idea as a guiding principle the quality of our code is foundationally grounded on one thing our ability to change it code that's easy to change safely is simply better than code that isn't of course other things matter too but unless we can change our code easily and safely we won't be able to add or enhance or correct those other things so our ability to change our code is the foundation on which we build everything else that we care about start thinking of ways to write code that's easy to change value ideas like automated testing and in particular test driven development if you'd like to learn a bit more about test driven development check out my free introductory tdd tutorial there's a link in the in the description to this video you should also place a high value on code that's easy to understand avoid The Beginner's trap of using Advanced features of your language or framework to show off great code is simple and easy to read work to achieve that instead easy to read May mean different things to different people but prefer code that comes in small pieces and choose meaningful names that help you to understand at a glance what those pieces do I think that there are five things that matter in making your code easy to change modularity cohesion separation of concerns abstraction and coupling if you always strive to increase these properties in your code it will be easier to change if and when you need to return to it keeping your code simple takes work but it's worthwhile work you can write good code with a small subset of the features in your preferred programming language and environment the basics will take you a very long way once you have them down the ability to look stuff up is then probably more of a core skill than remembering how to find some esoteric feature that you never use unfortunately our industry isn't always good at recognizing this as truth and often things like certification courses and interviews are structured around this kind of largely irrelevant knowledge so you may need to play that game sometimes but I'd advise that you focus instead on some of the deeper more important stuff the reason that maintaining our ability to change things matters quite so much is because it's an illusion to assume that we're ever going to get our code right first time software is a process of continual learning and continual refinement and much of the change that we learn from is completely outside of our control so you will be doing yourself of all your teammates and the companies that employ you a big favor if your code is easy to change in the future you will sometimes be pressured to cut Corners to get features out more quickly if this comes at the cost of ease of change in your code this is a big mistake and this pressure can only come really from people that don't understand software the problem here is that if you write crap software today to hit a deadline for a release then all that means is that next week as well as being under pressure for the next set of features for the next release you'll also have more work to do now because you've got to fix the bugs and mistakes that you created in the first week cutting Corners is never a way of going faster it just slows us down over a longer period of time working with high quality is how we get to go faster and we as a profession have data that shows that so believe that that's the case and work to make your software easy to change you aren't going to build good design skills by being micromanaged towards someone else's Solutions so when you feel ready to start taking on a little bit more in this respect explain to some of your more experienced team members that you'd like to try to build your design skills and ask them to let you have a go at deciding where to start on a new feature think about how you would like to implement that new feature and then maybe talk it through with them or even better start to work with them on it to see how your ideas play out you'll be surprised at how much you'll learn from this experience even if your initial thoughts don't work out a lot of this advice is going to be very dependent on your employers and your teammates if you can't get what you need from them think about maybe joining an interesting user group or a meet-up group of some kind or maybe make some contributions to some open source software that you find interesting not all organizations are good at thinking about actively developing their junior programmers and not all senior developers think that it's part of their responsibility to do that either I think that both of these ideas are wrong but if you find yourself in that position you're going to need to take your career growth into your own hands and do your own learning so looking for outside sources and outside sources of inspiration as well as help is a useful technique I'm going to talk more about that in a future episode but for today that's all and I'd like to thank you for watching and if you enjoy my stuff please consider supporting the work on this channel by joining our patreon community thank you foreign [Music]
Info
Channel: Continuous Delivery
Views: 18,298
Rating: undefined out of 5
Keywords: junior software developer, junior developer, software engineer career, programming careers, developer career advice, software career progression, software team lead, how to get promoted at work, how to get promoted, computer science, software engineering, software development, Dave Farley, continuous delivery, senior developer, junior dev, software engineer, mid level developer, junior software developer course
Id: lDQIYYakJGw
Channel Id: undefined
Length: 20min 37sec (1237 seconds)
Published: Wed Feb 15 2023
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.